一、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,都已经过期了。