TCP可靠传输实现

版权声明:所有文章版权归属博主个人 https://blog.csdn.net/weixin_41143631/article/details/88785834

参考谢希仁版《计算机网络》,图片有些是pdf版的,有些不清晰我就使用自己的手机拍照了。

面向链接的可靠传输协议,有链接,而可以可靠传输。

分为以下几点,特别注意TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。如果应用程序一次只发送一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。

滑动窗口

(滑动窗口协议比较复杂,书中列举了连续ARP协议)

TCP是面向字节流的滑动窗口(读取TCP数据就像从串行端口读取数据一样–无法预先得知在一次指定的读调用中会返回多少字节,也就是说能知道总共要读多少,但是不知道具体某一次读多少),

其中原因之一就是底层实现可靠传输的滑动窗口

缓存空间和序号空间是有限的,应该循环使用,《计算机网络》为画图方便,将其画出长条型 

发送方和接收方各自维持着发送窗口和接受窗口,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般采用累计确认方式,即接收方不必对收到的分组逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认,这样就表示:到这个分组位置的所有分组都已经正确收到了。

超时重传和确认应答(选择确认)

停止等待协议:全双工通信的双方都是发送方和接收方,为讨论方便,A为发送,B为接收。

A发送M1,等待B收到M1发送ACK,然后再发送。

如果出现差错,分情况,1,消失在网络传输中,超时重传,A重新发送。2,B收到了信息,发送ACK但A没收到(或者较晚收到),A也是重新发送。彼此对重复的M1信息和ACK选择丢弃。

这样在不可靠的网络传输上实现可靠的通信。 

流量控制

接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送,
就会造成丢包, 继而引起丢包重传等等一系列连锁反应. 
因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制(Flow Control)。

如图,接收端可以接受的缓存区大小就是窗口,窗口大小在TCP报文的首部中给出,是2^16-1(65535) ,窗口值动态变化,但是2^16-1字节大小完全不够现代传输大小,于是在可选性中添加了窗口扩大选项,其中一个字节表示移位,最大为14,那么窗口最大可以达到2^30-1

而流量控制就使用可变滑动窗口来实现。

拥塞控制

cwnd拥塞窗口

拥塞控制分为4块,慢开始(双倍增加cwnd),拥塞避免(cwnd+1),快重传(收到3个重复ack),快恢复(cwnd/2)

设置慢开始门限(ssthresh),当慢开始门限达到设定值的时候就开始拥塞避免算法。

A发送M1,M2,M3,M4

M1,M2,被收到,M3丢失,B重复发3次M2确认重复,A知道是M3丢失而不是网络拥塞(资源供需不足),直接快快恢复。

猜你喜欢

转载自blog.csdn.net/weixin_41143631/article/details/88785834