一、TCP简介
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP基本术语:
- 接收缓冲区:服务端建立连接后,接受的数据会存入内核的接收缓冲区中,然后调用recv系统调用,把接收缓冲区中的数据拷贝到应用程序的内存中,进行处理。
- 发送缓冲区:客户端调用send,把数据拷贝到内核的发送缓冲区,再通过网络把数据发送到服务端。
- 滑动窗口:一 个socket有两个滑动窗口(一个sendbuf、一个recvbuf),两个窗口的大小是通过setsockopt函数设置的。服务端ack请求时会返回接受缓冲区的窗口大小。当窗口大小为0时,表示服务端不能够再接受数据。TCP的滑动窗口大小实际上就是socket的接收缓冲区大小的字节数。
- 重传队列:每一次发送一个片段,片段的一份复制就放在名为重传队列的数据结构中,此时启动重传计时器。如果在片段接收到确认之前计时器超时,就重传片段。
- 累积确认机制:假设片段1长度80,片段2长度120,客户端发送片段1,片段2,服务端收到片段1和片段2,这时服务端会发回一条ack确认消息确认号为201。由于累计确认机制,客户端会认为201之前的消息都被确认过了。
扩展:通过setsockopt函数设置窗口大小。当发送缓冲区满的时候,阻塞式I/O会一直等待,直到服务端返回的窗口大小大于0。
总结:滑动窗口在TCP传输过程起到了
流控的作用,重传队列保障了TCP连接的
可靠性。
二、TCP传输
TCP数据流的概念划分类别
假设A和B之间新建立了一条TCP连接。设备A需要传送一长串数据流,但设备B无法一次全部接收,所以它限制设备A每次发送分段指定数量的字节数,直到分段中已发送的字节数得到确认。之后,设备A可以继续发送更多字节。每一个设备都对发送,接收及确认数据进行追踪。
如果我们在任一时间点对于这一过程做一个“快照”,那么我们可以将TCP buffer中的数据分为以下四类,并把它们看作一个时间轴:
- 已发送已确认: 数据流中最早的字节已经发送并得到确认。这些数据是站在发送设备的角度来看的。如下图所示,31个字节已经发送并确认。
- 已发送但尚未确认: 已发送但尚未得到确认的字节。发送方在确认之前,不认为这些数据已经被处理。下图所示14字节为第2类。
- 未发送而接收方已Ready: 设备尚未将数据发出,但接收方根据最近一次关于发送方一次要发送多少字节确认自己有足够空间。发送方会立即尝试发送。如图,第3类有6字节。
- 未发送而接收方Not Ready: 由于接收方not ready,还不允许将这部分数据发出。
TCP传输
连接中的服务器发出了四个连续片段(号码从1开始)
- 片段1 序列号字段是1片段长度80。所以片段1中最后一个序列号是80。
- 片段2 序列号是81片段长度是120。片段2中最后一个序列号是200。
- 片段3 序列号是201片段长度是160。片段3中最后一个序列号是360。
- 片段4 序列号是361片段长度是140。片段3中最后一个序列号是500。
过程:
1. 客户端和服务器建立连接,确定接收buffer和发送buffer的大小为555。
2. 服务器发送片段1,片段2,片段3,片段4,片段的一份复制就放在名为重传队列的数据结构中,此时启动重传计时器。
3. 客户端接收片段1,片段2,它会发回一条ack确认消息确认号为201。服务器端收到片段1,片段2的确认消息,然后把它们从重传队列中移除(并且服务器发送窗口右移200字节)。
4. 片段3丢失,客户端接收片段4,客户端将片段4保存在接收buffer中,但是不需要确认,因为TCP是累积确认机制——确认片段4表示片段3也接收到了,但实际上并没有。因此,客户端需要等待片段3。
5. 服务器端片段3的重传计时器会超时,服务器之后重传片段3。之后客户端收到,然后发送片段3和4的ack确认消息确认号为501给服务器。服务器端收到片段3,片段4的确认消息,然后把它们从重传队列中移除(并且服务器发送窗口右移300字节)。
参考资料:
- 大小: 26.6 KB
- 大小: 94.8 KB
分享到:
相关推荐
TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层...
在本项目"简单的TCP网络传输"中,开发者利用QT4以上的框架构建了一个网络传输助手,使得用户能够通过输入主机IP地址实现数据的双向通信。 首先,我们来了解一下TCP的基本特性。TCP是一种面向连接的协议,这意味着在...
"TCP网络传输"是网络编程中的一个重要概念,它涉及如何使用TCP协议在两个网络节点之间交换数据。 "TCP客户端时钟"是指一种利用TCP协议进行时间同步的方法。在分布式系统中,保持所有节点的时间一致是非常重要的,这...
在IT行业中,TCP(Transmission Control Protocol)是一种广泛使用的网络传输协议,它构成了互联网协议栈(TCP/IP协议族)的核心部分。TCP确保了数据在互联网上的可靠传输,通过提供连接、顺序化、错误检测和恢复等...
可进行tcp安全文件传输适用于公职人员,学生等文职
基于opencv的arm向pc网络传输,传输后自动显示图像
总的来说,这份源码是学习和理解TCP网络传输机制的良好实践,它可以帮助开发者深入理解TCP协议的工作流程,以及如何在实际编程中实现这一过程。对于初学者而言,通过阅读和运行这些源码,可以提升对网络编程的理解,...
详情介绍:https://www.yuque.com/sxbn/ks/100010459 实验内容:TCP 拥塞控制机制、TCP 拥塞控制状态迁移、TCP 拥塞控制机制、数据包发送、拥塞窗口调整、重传数据包、TCP 拥塞控制机制实现。
总的来说,这个DEMO涵盖了从Linux摄像头数据采集,到RGB转换,再到TCP网络传输,最后在Windows C# WPF应用中显示的一整套流程。对于初学者来说,这是一个很好的实践项目,有助于理解跨平台的实时图像处理和网络通信...
这个“tcp.rar_网络传输”压缩包可能包含了一些核心的TCP网络传输代码示例,适用于开发者直接应用到自己的项目中。 TCP协议的主要特点包括: 1. 连接导向:TCP在数据传输前,必须先建立连接。这个过程通常被称为三...
本主题将深入探讨如何使用MFC在Visual Studio 2010中实现TCP(Transmission Control Protocol)数据传输,特别是针对文件的传输。TCP是一种面向连接、可靠的网络协议,确保数据在互联网上按顺序、无丢失地传递。 ...
TCP文件传输服务器是一种基于传输控制协议(TCP)的网络应用,用于在客户端和服务器之间高效、可靠地传输文件。在本项目中,开发者使用了Visual Studio 2015作为集成开发环境(IDE)来编写代码,实现了这样一个功能...
我做的一个TCP文件传输的工具,可以在网络上传输任意大小的文件,最近在学习QT,希望有兴趣的朋友一起交流一下。如果对这个工具的代码有什么建设的发个邮件给我heqiangpc@sohu.com谢谢了。
TCP(Transmission Control Protocol)传输控制协议是互联网上最常用的一种通信协议之一,它提供了一种可靠的、面向连接的字节流服务。在TCP协议中,数据被分成多个数据段进行传输,并通过序列号、确认应答、重传...
在IT行业中,网络通信是至关重要的一个领域,TCP(Transmission Control Protocol)作为传输层协议,为应用程序提供了可靠的、面向连接的数据传输服务。本项目“TCP传输double数据.zip”聚焦于利用TCP协议在客户端和...
C#作为一种强大的编程语言,提供了丰富的库和API用于实现网络通信,其中包括通过TCP(Transmission Control Protocol)进行文件传输。本篇文章将深入探讨如何使用C#通过TCP协议实现在服务端与客户端之间的文件传输。...
在IT领域,TCP(Transmission Control Protocol)是一种广泛使用的网络协议,它是互联网协议栈中的核心组件,主要用于确保数据的可靠传输。TCP提供了一种面向连接、可靠的、基于字节流的服务,确保了数据在不可靠的...