• TCP四次挥手


     关于TCP三次握手以及为什么要握三次的原因可以看我的另外一篇博客《TCP三次握手》

    第一次挥手:

    在完成数据传输后客户端和服务端都可以发起关闭连接请求,假设是客户端发起到的。客户端给服务端发送了一个FIN包表示要关闭连接,客户端自己进入终止等待1状态。因为客户端就好比谈恋爱要分手总得要告知下对方,看下对方什么反应吧。

    第二次挥手

    服务端接收到后,给客户端发送一个ACK包,表示我知道了,我这还要进行一些收尾工作,发一些还没发完的数据,你给我等着。于是服务端进入了关闭等待状态,此时它还可以发表临终遗言,还可以发数据,客户端还可以接收数据,听听看服务端还有啥说的没有,就进入终止等待2状态。

    第三次挥手,

    服务端数据处理完后,就可以给客户端发送一个FIN包,告知客户端我这没啥说的了。

    第四次挥手

    客户端收到FIN包后,给服务端发送一个ACK包,确认一下我知道这边关好了,服务端收到ACK包后立刻关闭连接,客户端则进入超时等待状态,过了超时时间后客户端就关闭连接。

    图来源于《“三次握手,四次挥手”这么讲,保证你忘不了”》

    问题少年:为什么要客户端最后要进行超时等待?

    答:因为如果客户端一发送ACK后立马关闭连接,那如果就这么不巧,服务端就是没收到这个ACK包,那么服务端将一直苦苦地等待,一直狂call客服端,你那边关了没有啊?咋不理我啊?而此时客户端早已跑路。如果客户端有等一下,在这超时时间内,服务端如果没收到ACK包,就可以回到第三步重发FIN包,客户端则会响应这个FIN包。

    问题少年:简单点说TCP四次挥手

    答:

    房东:今天退租是吗?

    租客:是的,我收拾一下东西。

    租客:我收拾好了。

    房东:好,那咱们就退租了。

  • 相关阅读:
    vue 动态生成 el-checkbox-group,动态绑定v-model的解决方法
    vue 弹窗内scrollTop取值为0的问题
    软件工程课程学习心得
    《软件工程》学习总结及获奖感言
    软件工程课程心得及小黄衫获奖感想
    Prometheus + Alertmanager 实现企业微信告警
    二进制安装Prometheus
    zabbix机器人告警配置流程
    c++不同平台崩溃解析总结
    c++跨平台开发技术总结
  • 原文地址:https://www.cnblogs.com/caoshufang/p/16110175.html
Copyright © 2020-2023  润新知