当前位置: 首页 > news >正文

TCP三次握手连接及四次挥手断开过程

三次握手过程

TCP三次握手连接及四次挥手断开过程
TCP三次握手连接及四次挥手断开过程

简单说,三次握手就是让双方都证实对方能发收。
知道对方能收是因为收到对方的因为收到而发的回应。
具体:

1:A发,B收, B知道A能发
2:B发,A收, A知道B能发收
3:A发,B收, B知道A能收

四次挥手过程

TCP三次握手连接及四次挥手断开过程
TCP三次握手连接及四次挥手断开过程

TCP连接的释放断开一共需要四步,因此称为“四次挥手”。
因为TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。
第一次挥手

若A认为数据发送完成,则它需要向B发送连接释放请求。
该请求只有报文头,头中携带的主要参数为: FIN=1,seq=u。
此时,A将进入FIN-WAIT-1状态。
PS1:FIN=1表示该报文段是一个连接释放请求。
PS2:seq=u,u-1是A向B发送的最后一个字节的序号。

第二次挥手

B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放。
此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含: ACK=1,seq=v,ack=u+1。
PS1:ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
PS2:seq=v,v-1是B向A发送的最后一个字节的序号。
PS3:ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。
A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求。
第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。
但B到A方向的连接仍然存在,B可以继续向A发送数据。

第三次挥手

当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。
B便进入LAST-ACK状态。

第四次挥手

A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。
该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCP。
当B收到确认应答后,也便进入CLOSED状态,撤销TCP。
为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?
为了保证B能收到A的确认应答。
若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,
但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。

2MSL的作用

引用《The TCP/IP Guide》:
The second is to provide a“buffering period” between the end of this connection and any subsequent ones. If not for this period, it is possible that packets from different connections could be mixed, creating confusion.

扩展(11种状态)

TCP三次握手连接及四次挥手断开过程

转载于:https://blog.51cto.com/ilctc/2090777

相关文章:

  • HDFS 文件操作
  • spring boot 发布成包所需插件
  • java学习笔记1017---多线程
  • [Phoenix] 七、如何使用自增ID
  • STM32L071CBTX操作ECC508
  • java中三种主流数据库数据库(sqlserver,db2,oracle)的jdbc连接总结
  • Java NIO(四)Buffer
  • 手机的网络模式
  • Java NIO(十) ServerSocketChannel
  • Cisco路由器进行ip限速
  • Android Runtime Stats
  • pair work结束
  • springboot定制启动标志
  • Windows2000/XP启动过程详解
  • slf4j-logback 日志以json格式导入ELK
  • co模块的前端实现
  • java 多线程基础, 我觉得还是有必要看看的
  • Java 内存分配及垃圾回收机制初探
  • JWT究竟是什么呢?
  • mysql 5.6 原生Online DDL解析
  • October CMS - 快速入门 9 Images And Galleries
  • SOFAMosn配置模型
  • Spring声明式事务管理之一:五大属性分析
  • 爱情 北京女病人
  • 安装python包到指定虚拟环境
  • 从0到1:PostCSS 插件开发最佳实践
  • 基于游标的分页接口实现
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端js -- this指向总结。
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 收藏好这篇,别再只说“数据劫持”了
  • 怎样选择前端框架
  • 交换综合实验一
  • 如何在招聘中考核.NET架构师
  • ​linux启动进程的方式
  • ​低代码平台的核心价值与优势
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (1)SpringCloud 整合Python
  • (ros//EnvironmentVariables)ros环境变量
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (vue)页面文件上传获取:action地址
  • (附源码)ssm考生评分系统 毕业设计 071114
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net Core 中间件验签
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net Memory Profiler的使用举例
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • ;号自动换行
  • ??eclipse的安装配置问题!??
  • @JoinTable会自动删除关联表的数据
  • @PreAuthorize注解
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Android]How to use FFmpeg to decode Android f...
  • [ANT] 项目中应用ANT