TCP客户端与服务端的爱恨情仇——三次握手四次挥手
图片搬运自——TCP三次握手和四次挥手全过程及为什么要三次握手解答
对比
通过对“三次握手”和“四次挥手”的中间过程进行对比,可以发现“三次握手”和“四次挥手”的过程其实是差不多的,只不过“挥手”时把中间的过程拆分成两个过程。
背景
这一切都要从那时候说起......
那一天阳光正好,Client 小姐与 Server 先生在公园邂逅了,Client 小姐望着 Server 先生清秀的脸庞,心中小鹿在乱踹,她想认识这位风度翩翩的秀儿,只是羞于表达,不知从何说起......
进展
最终,Client 小姐其中一个人格战胜了其它六百六十六个人格,她终于行动了。
Client 小姐悄悄地走到 Server 先生身旁,用暗号试探道“SYN seq=5354?”;Server 先生心中窃喜,也想试探一番,并同时回复 Client 小姐,于是 Server 先生开口了,说道“SYN seq=28251? ACK=5355”。
Client 小姐微微一笑,回“ACK=28252”。
就此,俩人有一搭没一搭的聊着天。
离别
在聊天过程中,Client 小姐发现 Server 先生是个海王,Server 先生也发现 Client 小姐是渣女;
Client 小姐对 Server 先生说:“FIN=147258 (我不跟你聊了,再见)”;
Server 先生说“ACK=147259 (哦)”;
Server 先生继续补充“我觉得我配不上你”;
Server 先生说“FIN=258369 (我不跟你聊了,再见)”;
Client 小姐:“ACK=258370 (哦)”;
思考
四次挥手的二、三过程分开是因为要立刻给 “FIN的发送方” 回复(ACK),而 “FIN接收方” 自己的FIN 是要在自己数据传输完了才发送,如果此时还有很多数据需要传输,等到数据传输完,才一并发送 FIN 和 ACK,这个时间段就会过长,这期间 “主动断开方” 未收到回复,会多次发送 FIN 造成信道的浪费。
拓展
报文说明
SYN = Synchronize(“同步”)
ACK = Acknowledge(“承认”)
报文格式
特殊情况
在接收到“FIN”信号时,如果接收方没有数据要传输了,会把“ACK”和“FIN”合在一起发送,此时“四次挥手”也就变成了“三次挥手”——TCP协议三次握手和四次挥手抓包分析
总结
握手
A: 我想跟你聊天;
B: 好啊,我想跟你聊天;
A: 好啊。
挥手
A: 我不跟你聊了;
B: 好;
B: 等我再说完这几句话,blah blah blah;
B: 我不跟你聊了;
A: 好;