原文:谈谈你对 TCP 三次握手和四次挥手的理解 - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/javascript/TCP-three-handshakes-and-four-waves/

题目描述:

谈谈你对 TCP 三次握手和四次挥手的理解

解题:

  • 思路一:

https://static.javascriptc.com/imgs/day-questions/frontend/3.png

  • 当A告诉B,要关闭的时候,B可能还有一个包正在传输中,所以是等正在传输中的这个包传输完毕之后再回复A一下,图中表述的有点问题

  • 假设4次挥手中,如果没有(稍等,还有最后一个包),那是不是就是三次挥手???

  • 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭,所以即使没有最后一个包,也需要先回复断开连接的请求,然后再发送关闭请求

  • 思路二:

趣味答题

  • 男:我要挂了哦
  • 女:等哈,我还要敷面膜
  • 女:我敷完了,现在可以挂了
  • 男:我舍不得挂,你挂吧
  • 女:好吧,我挂了
  • 男:等了2MSL听见嘟嘟嘟的声音后挂断

  • 思路三:

  • 三次握手之所以是三次是保证client和server均让对方知道自己的接收和发送能力没问题而保证的最小次数。

  • 第一次client => server 只能server判断出client具备发送能力
  • 第二次 server => client client就可以判断出server具备发送和接受能力。此时client还需让server知道自己接收能力没问题于是就有了第三次
  • 第三次 client => server 双方均保证了自己的接收和发送能力没有问题

  • 其中,为了保证后续的握手是为了应答上一个握手,每次握手都会带一个标识 seq,后续的ACK都会对这个seq进行加一来进行确认。

扩展阅读: