为什么TCP这么复杂?因为既要保证可靠性, 同时又要尽可能提高性能。
保证可靠性的机制,如:序列号(按序到达)、确认应答、校验和、超时重传、连接管理、流量控制、拥塞控制等,以及提高性能的机制,如:滑动窗口、快速重传、延迟应答、捎带应答等,接下来将从这些机制慢慢讲起。
一、序列号
1、什么是序列号?
TCP会对每个字节的数据都进行编号,数据的编号就是数据的序列号,每个字节都有自己独一无二的编号,故序列号具有唯一性
2、序列号的作用?
接收端为了区别重复的报文段(报文段也叫帧),接收端有时会收到很多重复的数据,那么TCP协议就需要能够识别出那些是重复的包,并且把重复的丢弃掉,此时就需要使用序列号,来实现去重
PS:TCP的序列号即表示该报文段从第N个字节开始发送
二、确认应答机制(ACK机制)
TCP将每个字节的数据都进行了编号, 即为序列号。
每一个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据; 下一次你要从哪里开始发。
比如, 客户端向服务器发送了1005字节的数据, 服务器返回给客户端的确认序号是1003, 那么说明服务器只收到了1-1002的数据,而1003, 1004, 1005都没收到,此时客户端就会从1003开始重发。