博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP的3次握手和4次挥手过程
阅读量:6303 次
发布时间:2019-06-22

本文共 1019 字,大约阅读时间需要 3 分钟。

建立连接(3次握手)

  • SYN是标志位,设置SYN=1,表示请求建立连接
  • 服务端会同时和多个客户端建立连接,所以在报文交互时,需要带上序号seq,在响应是seq+1,以此来检测报文合法性

连接过程

  • 客户端:我想建立一个连接。状态:CLOSED -> SYN SENT
  • 服务端:可以,我同意建立连接。状态:LISTEN -> SYN RCVD
  • 客户端:好的,我收到你的确认,我准备好接收数据了。状态:SYN SENT -> ESTABLISHED
  • 服务端听到客户端准备好了,也进入准备状态。状态:SYN RCVD -> ESTABLISHED

至此,TCP连接就建立完毕,开始互相发送数据了。

断开连接(4次挥手)

  • FIN是标志位,设置FIN=1,表示请求断开连接

断开连接过程

  • 客户端:我数据发完了,我要断开连接了。状态:ESTABLISHED -> FIN WAIT 1
  • 服务端:好,我知道你要断开连接了。状态:ESTABLISHED -> CLOSE WAIT

此时,客户端确认服务端已经知道要断开了。但是,服务端可能还有数据没发送完,所以客户端还能接收数据但不会发送数据。状态:FIN WAIT 1 -> FIN WAIT 2

过了一会,服务端数据发完了。

  • 服务端:我准备好了,断开连接吧。状态:CLOSE WAIT -> LAST ACK
  • 客户端:好,那我断开连接了,再见。状态:FIN WAIT 2 -> TIME WAIT
  • 服务端:客户端已经断开了,我也断开吧。状态:LAST ACK -> CLOSED
  • 客户端等待2个MSL时间以后断开连接,状态:TIME WAIT -> CLOSED

TCP握手挥手的状态

状态 描述
CLOSED 关闭状态,没有连接活动或正在进行
LISTEN 监听状态,服务器正在等待连接进入
SYN SENT 已经发出连接请求,等待确认
SYN RCVD 收到一个连接请求,尚未确认
ESTABLISHED 连接建立,正常数据传输状态
FIN WAIT 1 (主动关闭)已经发送关闭请求,等待确认
FIN WAIT 2 (主动关闭)收到对方关闭确认,等待对方关闭请求
TIME WAIT 完成双向关闭,等待所有分组死掉
CLOSE WAIT (被动关闭)收到对方关闭请求,已经确认
LAST ACK (被动关闭)等待最后一个关闭确认,并等待所有分组死掉
CLOSING 双方同时尝试关闭,等待对方确认

转载地址:http://rlfxa.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
linux下安装red5
查看>>
我的友情链接
查看>>
一位牵手腾讯应届毕业生的求职杂谈
查看>>
在github上写博客
查看>>
Friendly Filmic Tonemapping
查看>>
我的友情链接
查看>>
cisco路由器的DNS配置
查看>>
产品经理在没有人带的情况下如何自我学习?
查看>>
LNMP源码编译安装之PHP-5.5.32
查看>>
软考网络工程师5天修炼读书笔记
查看>>
我的友情链接
查看>>
Nginx之动静分离
查看>>
Path 路径类 | Directory 文件夹类 | File 文件类 | FileStream 文件流类
查看>>
CentOS6.5安装jdk1.8
查看>>
阿里钉钉软件送100元啦,可支付宝提现
查看>>
Perl 连接Oracle 数据库_libydwei2007-ChinaUnix博客
查看>>
我的友情链接
查看>>
Debian升级
查看>>
Linux 下DHCP高级应用
查看>>