文章目录
- 一、TCP基本概念
- 二、TCP连接管理
-
- 1.三次握手
- 2.四次挥手
- 三、TCP拥塞控制
-
- 1.慢启动
- 2.拥塞避免
- 3.快速重传
- 4.快速避免
一、TCP基本概念
TCP提供连接可靠的字节流服务。
每个TCP头部包含源和目的端口号,这两个值和IP头部的来源和目的IP每一个连接都是唯一标记在一起的。TCP一个术语IP地址和端口的组合通常被称为端点(endpoint)或套接字(socket)。
TCP头部长度以32位字为单位,仅限于60字节的头部,如果没有选项字段,大小为20字节。TCP头部8位字段的含义如下所示。
字段 | 含义 |
---|---|
CWR | 拥塞窗口减少(发送方降低其发送速率) |
ECE | ECN回显(发送方收到了较早的拥塞通知) |
URG | 紧急(紧急指针字段有效-很少使用) |
ACK | 确认(确认号字段有效-连接建立后一般为启动状态) |
PSH | 推送(接收方应尽快将这些数据传输给应用程序-未可靠实现或使用) |
RST | 重置连接(取消连接往往是因为错误) |
SYN | 同步序列号用于初始化连接 |
FIN | 报文段的发送人已经结束向对方发送数据 |
二、TCP连接管理
TCP是面向连接的单播协议。TCP连接由一对端点或套接字组成,通常分为启动、数据传输和退出三个阶段。
1.三次握手
TCP建立连接需要三次握手。
SYN_SENT->SYN_RCVD->ESTABLISHED->ESTABLISHED
- 客户端发送SYN报文段指出了要连接的端口号及其客户端的初始序列号(ISN(s))。
- 发送自己的服务端SYN报文段作为回应,包含其初始序列号,包含ISN(C)数值加1作为返回ACK数值。
- 确认服务器SYN,客户端将ISN(s)加1后的数值作为返回ACK数值。
三次握手的目的是防止客户端发送连接请求延迟。此时,如果客户端已关闭,服务器端在收到连接请求后建立连接,并始终监控客户端的请求。因此,客户端需要发送另一个确认段。
2.四次挥手
TCP断开连接需要四次挥手。
FIN_WAIT_1->CLOSE_WAIT->FIN_WAIT_2 LAST_ACK->TIME_WAIT(2MSL)->CLOSED
- 连接的主动关闭者(通常是客户端)发送一个FIN接收者希望看到他们当前的序列号(K),FIN还包括一段ACK该段用于确认对方最近发送的数据。
- 连接的被动关闭者(通常是服务器)将K值加1作为响应ACK值表明已成功收到主动关闭者的发送FIN。此时,被动关闭者将身份转换为主动关闭者并发送自己FIN。报文段序列号为L。
- 为了完成连接的关闭,最终发送的报文段还包含一个ACK确认上一个FIN。如果出现FIN如果丢失,发送者将重新传输,直到收到一个ACK确认为止。
四次挥手的目的是,TCP是全双工连接,即客户端和服务端的连接是双向的,所以断开连接时需要断开两次。
三、TCP拥塞控制
拥塞控制是为了防止网络因大规模通信负载而瘫痪。其基本方法是减缓网络即将进入拥塞状态(或路由器因拥塞而丢失)TCP传输。
拥塞窗口(cwnd,Congestion Window)反映网络传输能力的实际(可用)窗口W是接收端通知窗口(awnd,Advised Window)和拥塞窗口cwnd的较小者。
W = min(cwnd, awnd)
1.慢启动
在传输的初始阶段,由于网络传输能力不明,需要慢慢探测可用的传输资源,防止短时间内大量数据注入造成拥塞。
当数据传输开始或重传计时器检测到丢包时,需要慢慢启动。
慢启动的基本算法是cwnd = 1 SMSS例如,当接收到数据段时ACK后,通常cwnd将其添加到2,然后发送两个数据段。若再成功接收ACK,cwnd从2到4,从4到8,依次类推。拥挤的窗户会随之而来RTT(Round Trip Time)呈指数增长,直到增加到慢启动阈值ssthresh(Slow Start Threshold)。
注意:其中SMSS表示接收方MSS(Maximum Segment Size)和路径MTU(最大传输单元)两者中较小的。
2.拥塞避免
当拥塞窗口增加到缓慢启动阈值时,它将进入拥塞避免阶段,以获得更多的传输资源,而不影响其他连接传输。
避进入拥塞避免阶段时,拥塞窗口的基本算法是cwnd呈线性增长,即每次往返时间后,发送方的拥塞窗口cwnd数据段倍的情况下,近似增加了成功传输的数据段的大小,从而避免了拥
cwnd_t 1 = cwnd_t SMSS * SMSS / cwnd_t
3.快速重传
快速重传主要用于丢包检测,以便更快地重传数据包,更早地调整拥塞状态机的状态,从而达到持续升窗的目的。
快速重传的基本算法是,TCP 至少观察发送端的重复阈值(dupthresh,Duplicate Threshhold)个重复 ACK 后(一般为3),即重传可能丢失的数据分组,而无需等待重传计时器超时。
4.快速避免
快速避免的基本算法是检测到丢包后,TCP会触发快速重传,进入降窗状态。在这种状态下,窗户被堵塞。cwnd通过快速恢复算法将其降低到合理值。