TCP超时重传 基本概念 TCP流量控制(滑动窗口)TCP拥塞控制 慢开始和拥塞避免快重传和快恢复
TCP超时重传
查看某一机器上的某一端口是否可访问
telnet ip port
抓取网卡某端口上的包
tcpdump -ieth1 'port 21'
其中,eth1是网卡名称,可通过ifconfig查询到本机的网卡名称。
基本概念
RTO 重传超时时间(retransmission timeout)
指,从发一个包t1,到未收到该包ack重传包t2,之间的时间差t2-t1.
- 设长了,重传慢,效率低,影响传输性能
- 设短了,重发太快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。
所以,TCP最后采用的是自适应算法调节RTO。其关键是:对于当前RTT的准确估计,并适时调整RTO。
RTT(Round Trip Time)传输往返时间
指,发送端从发送TCP包开始到接收它的立即响应所耗费的时间。
TCP流量控制(滑动窗口)
作用:一、提供TCP的可靠性;二、提供TCP的流控特性
位置:在TCP的头部:16bit窗口大小和TCP选项。其中,选项可使得窗口扩大一倍。
滑动窗口包含:发送窗口和接收窗口。
发送端的窗口控制即为发送窗口,对应为接收窗口。
发送缓存内的数据包含4类:
- (1) 已经发送并得到对端ACK
- (2)已经发送未得到对端ACK
- (3)未发送但对端允许发送
- (4)未发送且对端也不让发送
其中,发端窗口控制的就是:(2) (3)
发送窗口的移动也是建立在确认重传机制的,从而保证TCP的可靠性。移动原则:
收到对端对本段发送窗口内字节的ACK
可把TCP滑动窗口的过程,想象为水池的入口和出口控制,窗口就是一个水池。
TCP拥塞控制
TCP拥塞控制包括四个核心算法:
- 慢开始(slow start)
- 拥塞避免(congestion voidance)
- 快重传(Fast Retransmit)
- 快恢复(Fast Recovery)
总原则:拥塞窗口的变化为加法增大、乘法减小
。
慢开始和拥塞避免
慢开始的主要思想:一开始不发送大量的数据,而是从小到大的逐渐增加拥塞窗口的大小,从而试探网络的拥塞程度。
拥塞避免的主要思想:即每经过一个往返时间RTT就把发送方的拥塞窗口cwind加 1。
具体步骤:
(1) TCP连接初始化,cwind置1.
(2)cwind < ssthresh, 使用慢开始算法,cwind 指数规律增长。(y = 2x)
(3) cwind = ssthresh,使用拥塞避免算法此时,cwnd按线性增长。
(4) 当网络发送拥塞是,ssthresh更行为以前的一半,且cwnd重新设置为1。开始执行(2)
其中,cwind是拥塞窗口,ssthresh是慢开始门限。
快重传和快恢复
快重传的思想:接收方
收到一个失序的报文段就立即发出重复确认
,发送方
连续收到3个重复确认
就立即重传对方尚未收到的报文段,而不用等重传计时器的时间。
快恢复和快重传搭配使用。
快恢复的思想:发送方
收到3
个重传确认时,立即执行“乘法减小”算法,即ssthresh门限减半(1/2)。接下来,并不执行慢开始算法(cwind置1),而是将cwind置为ssthresh,然后执行拥塞避免算法。
参考:徐晓鑫 后台开发:核心技术与应用实践