当前位置: 首页 > >

【网络通信 -

发布时间:

【网络通信 -- 直播】网络通信协议简介 -- TCP 数据传输实例

【1】TCP 传输数据的基本过程实例图示



【2】TCP 慢启动与拥塞控制



1. TCP 连接初始化时,cwnd = 1, ssthresh = 162. 在慢启动算法开始时,cwnd 的初始值是 1,每次发送方收到一个 ACK 拥塞窗口就指数增长,当 ssthresh = cwnd 时,启动拥塞控制算法,拥塞窗口线性增长3. 若当 cwnd = 24 时网络出现超时,发送方收不到确认 ACK,此时设置 ssthresh = 12 ( cwnd / 2),设置 cwnd = 1,然后开始慢启动算法,当 cwnd = ssthresh = 12,慢启动算法变为拥塞控制算法,cwnd 按照线性的速度进行增长;

【3】TCP 数据包有序性保证


滑动窗口




#1 已发送并收到 ack 确认的数据;
#2 已发送但没收到 ack 确认的数据;
#3 在窗口中还没有发送的数据(接收方还有空间);
#4 窗口以外的数据(接收方没空间);


快重传


快重传算法要求接收方收到一个失序的报文段后就立刻发出重复确认;




接收方成功的接受了发送方发送来的 M1、M2 并且分别给发送了 ACK,现在接收方没有收到 M3,而接收到了 M4,显然接收方不能确认 M4,因为 M4 是失序的报文段;按照快速重传算法,在收到 M4、M5 等报文段的时候,不断重复的向发送方发送 M2 的 ACK,如果接收方一连收到三个重复的 ACK,那么发送方不必等待重传计时器到期,发送方尽早重传未被确认的报文段;



1. 当发送发连续接收到三个确认时,把慢启动开始门限(ssthresh)减半,但是接下来并不执行慢开始算法;2. 把 cwnd 设置为 ssthresh 的一半,然后执行拥塞避免算法,使拥塞窗口缓慢增大;

【4】TCP 超时重传机制



1. Server 发送 80 个字节 Part1,seq = 12. Server 发送 120 个字节 Part2,Seq = 813. Server 发送 160 个字节 Part3,Seq = 201,此包由于其他原因丢失4. Client 收到前 2 个报文段并发送 ACK = 2015. Server 发送 140 个字节 Part4,Seq = 3617. Server 收到 Client 对于前两个报文段的 ACK,将 2 个报文从窗口中移出,窗口有 200 个字节的余量8. 报文 3 的重传定时器到期,没有收到 ACK,进行重传9. 此时 Client 已经收到报文 4,存放在缓冲区中,也不会发送 ACK,等待报文 3,报文 3 收到之后,一块对 3,4 进行确认10. Server 收到确认之后,将报文 3,4 移出窗口,所有数据发送完成

附录


相关概念


MTU : 最大传输单元,即每次发送的最大数据RTO : Retransmission TimeOut,重传超时时间滑动窗口 (receiver window,rwnd) : 接收数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此控制发送端发送数据的大小,从而达到流量控制的目的;拥塞窗口 (congestion window,cwnd)?: 发送数据端使用的窗口大小,拥塞窗口不代表缓存,而是指某一源端数据流在一个 RTT 内可以最多发送的数据包数;

参考致谢
本博客为博主的学*实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。


【1】TCP拥塞控制-慢启动、拥塞避免、快重传、快启动


【2】TCP-IP详解:超时重传机制


【3】TCP的滑动窗口与拥塞窗口



友情链接: