参考文章 这里

四次挥手过程

四次挥手的过程是全双工的,因此每个方向都必须要进行单独的关闭,这样原则是当一方完成数据发送后发送一个FIN信号给对方,对方收到FIN后就知道这个方向不会再有数据发送过来了,但是仍旧可以发送数据。首先关闭的一方执行主动关闭,另一方执行被动关闭。

  1. 第一次挥手: Client发送一个FIN,用来关闭比Cient->Server方向数据传输。Client进入FIN_WAIT_1状态。
  2. 第二次挥手: Server收到FIN后,发送一个ACK给client,确认序号+1 ,随后进入close_wait 状态。
  3. 第三次挥手: Server 发送一个FIN,用来关闭Client到Server的数据传送, Client进入LAST_ACK状态。
  4. 第四次挥手: Client收到FIN后,Client进入TIME_WAIT 状态,接着发送一个ACK给Server, 确认收到序号+1,Server进图CLOSED状态完成四次挥手

同时挥手

参考同时关闭的情况

为什么是四次挥手。

客户端再LISTEN状态下,收到简历连接的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,收到对方的FIN后仅仅表示对方不再发送数据但是还能接受数据,所以在这之后还可以发送数据给对方,因此在关闭时候ACK和FIN一般都分开发送。

TIME_WAIT状态

a) 主动关闭的一方在发送完对对方的FIN报文确认后会进入TIME_WAIT状态。 TIME_WAIT,页脚2MSL状态。

b)什么是2MSL,MSL是最大报文生存时间。MSL是任何报文被丢弃前报文段在网络中最长的生存时间。2MSL也就是这个时间的两倍。

c) 为什么要使用2MSL时间。主要有两个原因:2MSL

其一,保证发送的ACK会成功发送到对方,如何保证?最后的ACK一旦丢失还会有重传的机会。

其二,防止老旧的报文出现在新的连接当中。如果原来连接的报文在网络内游荡时后在相同的两个端口之间建立起新的连接,这时候报文容易被误解,这时候等待这个时间是让旧的报文赶快小时,防止捣乱。

推荐阅读:

【1】 http://blog.csdn.net/hacker00011000/article/details/52319111

【2】 http://www.jianshu.com/p/a1ebc61ce141

最新文章

  1. MySQL索引简述
  2. OpenLayers 3 中Layers的相关知识
  3. asp.net MVC中使用entity framework出现从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值”的处理
  4. C++11之thread线程
  5. Web 使用PostMan提交特殊格式数据
  6. JavaScript ES6 的 let 和 var 的比较
  7. jquery 现实多状态控件 (status & power(2,0)) = power(2,0)
  8. 在excel批量更改单元格类型后的批量刷新显示
  9. Apache 日志分析(二)
  10. thinkphp URL相关
  11. 【转】IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
  12. js获取get方式提交的参数返回json格式数据
  13. Qt 学习之路:QML 基本元素
  14. 集合ArrayList案例
  15. WIZnet推出串口转以太网模块WIZ550S2E
  16. Warensoft Stock Service Api客户端接口说明
  17. Spark 1.6升级2.x防踩坑指南
  18. Java多线程:ThreadLocal
  19. react-native-android之初次相识
  20. php判断是否为命令行模式

热门文章

  1. 一文详解 Linux Crontab 调度任务
  2. 可持久化栈学习笔记 | 题解 P6182 [USACO10OPEN]Time Travel S
  3. (9)go-micro微服务Redis配置
  4. 【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
  5. 学习ASP.NET Core Blazor编程系列二十二——登录(1)
  6. SpringBoot项目动态定时任务之 ScheduledTaskRegistrar(解决方案一)
  7. java入门与进阶P-2.3
  8. vue3 | slots
  9. Vditor文件上传跨域
  10. JAVA虚拟机23---JAVA与线程