TCP连接管理和拥塞控制


一、TCP基本概念

TCP提供了一种面向连接的、可靠的字节流服务。

每个TCP头部包含了源和目的端口号,这两个值与IP头部中的源和目的IP一起,唯一地标识了每个连接。在TCP术语中,一个IP地址和一个端口的组合通常被称为端点(endpoint)或套接字(socket)。

TCP头部长度以32位字为单位,它被限制为只能带60字节的头部,如果不带选项字段,大小是20字节。其中,TCP头部8位字段的含义如下所示。

字段含义
CWR拥塞窗口减(发送方降低它的发送速率)
ECEECN回显(发送方接收到了一个更早的拥塞通告)
URG紧急(紧急指针字段有效——很少被使用)
ACK确认(确认号字段有效——连接建立以后一般都是启动状态)
PSH推送(接收方应尽快给应用程序传送这个数据——没被可靠地实现或用到)
RST重置连接(连接取消,经常是因为错误)
SYN用于初始化一个连接的同步序列号
FIN该报文段的发送方已经结束向对方发送数据

二、TCP连接管理

TCP是面向连接的单播协议。一个TCP连接由一对端点或套接字组成,它通常分为3个阶段:启动、数据传输和退出。

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会通过快速恢复算法降至一个合理值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值