TCP是面向连接,可靠,面向字节流的传输协议,那它是怎么来保证可靠性的呢?
1.确认应答机制:
发送报文Segment中包括:
- SN:发送数据的第一个字节的序列
- ASN:是希望对方发送的下一个字节的序列。
这样就能知道对方哪些数据收到了,哪些没收到。
2.超时重传机制:
- 如果超时没有收到对方的ACK,则会触发重传。
- 如果接收方重复接受,根据SN辨识出后,直接丢弃。
3.校验和:
保证不会收到错误数据
4.TCP内部连接对象需要维护:
五元组标识唯一一条连接
1.记录SN和ASN
2.维护发送缓冲区和接收缓冲区
3.需要事前沟通ISN(随机初始序列号)
5.有序性:
接收方可以按照SN进行数据的重新排列,再把结果给到应用层
6.数据去重:
可以辨识出以已经接收过的数据,重复的数据直接丢弃。
7.流量控制
窗口:TCP Header中的一个窗口字段,就是用来携带接收能力的。
滑动窗口:在发送端,由左右两个下标在发送缓冲区标注出的一块区域。
发送端根据接收端发来的窗口信息标识接收能力进行发送量控制。
发送量的控制是通过发送缓冲区中的滑动窗口调整,滑动窗口内部是:接收方有能力接收的,可发送数据。
左侧:已确认的部分(随着新的ASN,会不断往右)
右侧:随着收到接收方窗口大小,结合左侧,不变或往右
8.拥塞控制
根据网络拥堵的情况,进行发送量控制。
根据应答情况,如果不发生超时重传,就认为网络很好,如果发生多次重传,就认为网络拥塞。
总结: