TCP的数据发送和接收
TCP通信的消息由一个报文构成。每个TCP报文由头部分和数据部分组成。其中头部分至少占用20个字节的空间。为了进行有效的数据传输,在使用TCP协议时必须先建立会话(即执行三次握手过程)。当完成所有数据传输后,在释放会话时必须执行四次握手流程。
TCP发送缓存和接收缓存,TCP发送窗口和接收窗口,以及拥塞窗口。
TCP实现了可靠的数据传输机制,并采用滑动窗口技术来确保这一过程。TCP所使用的滑动窗口大小为每个字节(byte)。
可靠传输
在传输控制协议(TCP)中,在传输窗体内包含着可立即传输的数据以及尚未被传输但未被acks确认的数据。传输窗体末端标记着已成功传输并获得acks确认的状态;而数据窗体前端标识着待上传输的信息块。数据传输效率与接收方接收窗体及拥塞窗体的综合影响密切相关;同时数据窗体尺寸主要取决于接收方接收窗体与网络拥塞程度的影响因素。
TCP发送缓冲区有两个作用:
A)用于存储已经发送的,但没收到确认的数据。
B)用于保存应用程序传送给TCP发送缓存的准备发送的数据
接收窗口象征着当前可接收的数据。接收到的边缘代表程序能获取的数据
TCP接收缓冲区有两个作用:
A)用于存储按序到达,还没有被应用程序取走的数据。
B)用于表示未按序到达的数据。

几个注意:
1)发送窗口的大小根据对方接收窗口和拥塞窗口大小来决定。
2)TCP能够累计确认。
TCP并未明确规定未按顺序到达的数据的处理机制(是否丢弃或者存储于缓存区)
发送端对每个被发送的数据包配置一个计时器,在指定时间未收到确认响应时会自动重发该数据包。
5)发送窗口的大小不能超过接收窗口的大小。
流量控制
利用流量控制机制替代传统的高带宽设置。避免发送窗口内的数据流过于迅速。具体而言,在实现过程中采用了滑动窗口技术。其中在TCP报文中设置了专门用于指示接收端接收能力的一个字段。该字段主要用于标识接收端对于接收数据包数量的能力从而决定了发送方能够释放的数据量。

解决发送时机的三个机制:
初始化一个变量,并使其值等于最大报文段的长度。当缓存区达到MSS(Maximum Segment Size)字节容量时,触发发送操作。
2) 由发送方的应用程序指明要求发送报文段,通过报文的PUH字段来实现。
3) 给发送方设计一个计时器,达到该事件,就将数据发送出去(不能超过MSS)。
Nagel 算法指出:每当应用程序按字节向 TCP 发送缓存区域传输数据时,在接收端 TCP 会先生成并传送第一个字节的分组给客户端。只有在收到客户端的确认分组后(即首次确认),才会继续收集缓存区域的所有内容并生成下一个分组进行传送。此外,在应用层协议(通常指)中设置了一个阈值机制:当缓存区域中的数据量达到或超过单个分组的最大容量时(即一般大小),系统会立即生成并传送一个新的分组字段给上层协议栈
为了缓解糊涂窗口综合症的影响,在接收端实施相应的策略可能会有效果。具体而言可以通过以下几种方式实现:第一种方法是适当延长接收时间间隔;第二种方法是在缓存系统中预留最大报文长度的空间;第三种方法则是当数据缓冲区剩余存储容量达到一半以上时及时触发确认机制这些措施任选其中一个条件即可达到预期效果
拥塞控制
发送方将拥有一个用于调节发送窗口大小的拥塞窗口。该拥塞窗口与接收窗口共同决定发送窗口的规模。发送窗口的大小由拥塞窗口与接收窗口中较小的一方决定。
门阀值 。
慢开始算法 :拥塞窗口的大小从1开始逐渐增加增加到一倍。
拥塞避免算法:在启动慢启动机制时,在当前的拥塞窗口大小超过门限值的情况下(即当当前的拥塞窗口大小超过门限值),将其大小增加一个单位。
不论是慢起始算法还是 Congestion Avoidance 算法,在发生拥塞情况(未及时收到acks信号)时,都会将门限按比例减少,并设置为1后启动慢重传机制。
该算法规定:每当接收端接收到一个顺序缺失的段落时就应立即返回一个重复确认(其确认字段设置为上一有序段落末尾的有效数据字段值加1)。一旦发送端持续收到3个这样的重复确认就应立即返回尚未被认可的段落而不必等待超时。
快速重传机制:该机制规定,在接收到上一次重复确认后,在接到下一数据报前立即减少其发送速率至当前发送速率的一半,并采用拥塞控制算法以减少网络拥塞程度。当发现丢包事件发生时,默认起始发送速率设为当前发送速率(即当前门阀值)或当前发送速率加上传输 Media Segment(MSS)的数量三倍。

