三次握手
1、客户端向服务器发送SYN报文,SYN携带随机生成的seq序列号,假如这里生成的序列号为a。
2、服务器要给客户机回复ACK确认号和自身产生的序列号,假设这里为b;回复客户端ACK=a+1;
3、客户端收到客户端的ACK,确认无误后发送 确认消息ACK=b+1,序列号seq=a+1
数据交互过程
TCP三次握手之后就开始交互数据,服务器向客户端发送数据包。这里假设数据包大小为100:
①、服务器向客户端连续发送两个数据包,第一个数据包的序列号seq=1 ,第二个数据包的序列号为seq=1+100
②、客户端向接收后,确认序列号是否正确。向服务器回复确认消息(回复最后一个数据包)ack=1+100+1
③、服务器收到后客户端发送的确认号和自己发送的序列号对应,继续向客户端发送连续的数据包,数据包的序列号seq=1+100+1
情况一
1、服务器在向客户端发送数据包的过程中,将最后一个数据包丢失。当客户端收到后,向服务器发送的收到的最后一个报文的序列号+1。
2、服务器收到后发现客户端的发送序列号与自己发送数据包的序列号对应不对,认为是中间传输的过程中丢包。将从新发送丢失的数据包。
情况二:
服务器给客户端发送三个数据包,传输过程中中间的数据包丢失。这时候客户端呢?
1、服务器发送的三个数据包,中间的数据包丢失。对客户机来说接受后将检测序列号是否正确。
2、客户机在检测服务器发送的序列号时,发现收到的两个序列号连接不起来,客户机只会向服务器发送第一个接受的数据包。
3、服务器接收后,对比客户端发送过来的序列号,然后重新发送数据包。
这个UP主讲的挺好的,可以看看嘞【TCP协议三次握手与四次挥手-哔哩哔哩】 https://b23.tv/yl6XoZr