TCP客户端与服务端的爱恨情仇——三次握手四次挥手

图片搬运自——TCP三次握手和四次挥手全过程及为什么要三次握手解答

对比


  通过对“三次握手”和“四次挥手”的中间过程进行对比,可以发现“三次握手”和“四次挥手”的过程其实是差不多的,只不过“挥手”时把中间的过程拆分成两个过程。

背景

  这一切都要从那时候说起......
  那一天阳光正好,Client 小姐与 Server 先生在公园邂逅了,Client 小姐望着 Server 先生清秀的脸庞,心中小鹿在乱踹,她想认识这位风度翩翩的秀儿,只是羞于表达,不知从何说起......

进展

  最终,Client 小姐其中一个人格战胜了其它六百六十六个人格,她终于行动了。
  Client 小姐悄悄地走到 Server 先生身旁,用暗号试探道“SYN seq=5354?”;Server 先生心中窃喜,也想试探一番,并同时回复 Client 小姐,于是 Server 先生开口了,说道“SYN seq=28251ACK=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(“承认”)

报文格式

TCP报文格式

特殊情况

在接收到“FIN”信号时,如果接收方没有数据要传输了,会把“ACK”和“FIN”合在一起发送,此时“四次挥手”也就变成了“三次挥手”——TCP协议三次握手和四次挥手抓包分析

总结

握手

A: 我想跟你聊天;
B: 好啊,我想跟你聊天;
A: 好啊。

挥手

A: 我不跟你聊了;
B: 好;
B: 等我再说完这几句话,blah blah blah;
B: 我不跟你聊了;
A: 好;

资料

TCP-三次握手和四次挥手简单理解
为什么是四次挥手不是三次挥手

posted @ 2020-06-22 17:20  LifeOfCoding  阅读(175)  评论(0编辑  收藏  举报