TCP的三次握手
过程
1.首先Client端发送链接请求报文
2.Server端接收后恢复ACK(Client发送来的报文的Seq+1,用来确定Server端正确接收到了Client端的Seq)报文,并为这次链接分配资源
3.Client端接收到了ACK(Server发送来的报文的Seq+1,用来确定Client端正确接收到了Client端的Seq)报文后也向Server端发送ACK报文,并分配资源,这样TCP链接就建立了
Q:为什么要进行三次握手
A:第一次握手
Client端:什么都不能确认
Server端:确认了对方发送正常
第二次握手
Client端:确认了自己发送正常(通过对比ACK是不是等于自己发送的Seq+1),接受正常,对方发送,接受正常
Server端:确认了自己发送正常,接受正常,对方发送正常
第三次握手
Client端:确认了自己发送正常,接收正常,对方发送正常,对方接受正常
Server端:确认了自己发送正常,接收正常,对方发送正常,接收正常(通过比较对方发送的ACK是不是等于自己上一次发送的Seq+1)
Q:为什么要发送特定的数据包
三次握手的另外一个目的就是确定双方都支持TCP,告知对方用TCP传输
TCP的四次挥手
过程
1.Client端发送FIN报文,表示自己数据传输完毕,可以断开链接
2.Server端接收到FIN报文,发送ACK报文表示自己知道Client可以断开,并发送自己要发送的数据
3.当Server端发送完自己要发送的所有数据,发送FIN报文,告诉Client端自己所有数据都已经发送完,可以断开链接
4.Client接收到Server的FIN报文,知道Server也可以断开链接,向Server端发送ACK报文,表示自己收到了Server的关闭请求,然后双方关闭链接
Q:为什么要四次挥手
根本原因是,一方发送FIN只能代表自己发送完了数据,但是对方不一定发送完了数据,还允许对方把没有发完的数据发送过来
举个例子,就相当于Client和Server端打电话,Client说完自己要说的话,告诉Server端说我没什么要说的了,Server端回答我知道了,但是Server端还有没有说完的话,这时候Client不能要求Server按照自己的节奏结束通过,应该等待Server说完自己要说的话,最后Server说,我的话也说完了,A说好的,这样通话才算结束
参考文章
我终于搞懂了TCP的三次握手和四次挥手(图片案例超详解)_辰兮要努力-优快云博客_三次握手和四次挥手 简明理解三次握手和四次挥手_紫晓暮雾的博客-优快云博客_三次挥手