TCP协议的可靠传输

一、TCP协议的可靠传输

TCP的可靠传输基于ARQ协议;

TCP的滑动窗口以字节为单位;

考虑一种情况:窗口中的数据全部都发送出去了,但是全都没有收到确认号,可用窗口为0,窗口是不能向前推进的。

一种特殊情况:窗口中所有数据都已经发送出去了,但确认号不是按顺序收到的

so:可靠传输的效率不是很高。

选择重传:选择重传需要指定需要重传的字节;每一个字节都有一个唯一的32位序号,选择重传需要指定的就是这个序号;这个指定的字节序号是存储在TCP选项里面的。

选择重传更多时候是对一段字节进行重传的。重传的数据是一个边界,重传的序号不是指字节,而是指一个范围

二、TCP协议的流量控制---TCP特有的功能

接收方希望发送方可以将数据发送的慢一些。

流量控制是指让发送方发送速率不要太快;流量控制是使用滑动窗口来实现的。

接收方通过窗口的大小调整来告诉发送方继续进行数据的发送。

考虑一种情况:接收方在告诉发送方可以接收数据的时候发生了报文丢失:发送方会一直等待,接收方认为发送方应该给自己发送报文,也会一直等待,两者都在等待,进入了死锁状态。

TCP的可靠传输是对数据的确认,对特殊消息(如窗口大小)是没有超时重传的机制的,所以会导致发送方接收方进入死锁状态。-----解决方法为 坚持定时器

坚持定时器:

(1)当发送方接收到窗口为0的消息,就会启动坚持定时器

(2)坚持定时器每隔一段时间发送一个窗口探测报文(询问到窗口是否变大)

三、TCP的拥塞控制

一条数据链路结果非常多的设备;数据联路中各个部分都有可能成为网路传输的瓶颈;

流量控制与拥塞控制:

(1)流量控制考虑点对点的通信量的控制,流量控制通过窗口进行通信量的限制

(2)拥塞控制考虑整个网络,是全局性的考虑。报文超时则认为是拥塞

拥塞控制的算法:

(1)慢启动算法:

  由小到大逐渐增加发送数据量;

  每收到一个报文确认,就加一;   1  2  4  8  16   -----   指数增长   --- 慢启动阈值  --  到达阈值之后就会进行下一个算法

(2)拥塞避免算法:

  维护一个拥塞窗口的变量

  只要网络部不拥塞,就试探着将拥塞窗口调大,每一次加一;1 2 4 8 16  17  18  19

四、TCP连接的建立

TCP标记位:重要的有3个

(1)ACK:acnowledgement----确认位,ACK=1,确认位才生效

(2)SYN:synchronization---同步位,SYN=1,表示连接请求报文

(3)FIN:finish---终止位,FIN=1,表示连接释放

为什么发送方要发出第三个确认报文呢?为什么TCP连接的建立要三次握手呢?

两次握手就可以建立起连接了,但是还是需要第三次。

(1)三次握手可以避免:已经失效的连接请求报文传送到对方,引起错误

 

 

 有了第三次握手,就不会对一开始延迟了的报文再进行第三次的处理。

四、TCP连接的释放----四次挥手

发送方:断开连接的第一个等待状态;断开连接的第二个等待状态;

 主动释放连接的这一方有一个等待计时的状态,只有在等待计时之后才会进入关闭状态。

 等待计时器:等待时间为2MSL,

  MSL(Max Segment Lifetime):最长报文段寿命,MSL建议设置为2分钟

 为什么需要等待2MSL?

  最后一个报文没有确认 ;

  计时器---确保发送方的ACK可以到达接收方;如果第四个报文没有被接收方接收到,2MSL时间内没有收到,则接收方会重发

  计时器---确保当前所有连接的所有报文都已经过期,如果最后一个报文都已经超过2MSL了,那么其他的报文也肯定超过了2MSL,都已经过期了。

原文地址:https://www.cnblogs.com/1220x/p/11762108.html