三次握手和四次挥手_TCP的三次握手和四次挥手

d7a94a19580d8fe86fcc4be3cefd8d5f.png

原文永久链接:https://github.com/AttemptWeb/Record/issues/10

上面有一篇专门介绍过TCP和UCP协议,其中只是粗略的提到TCP协议的三次握手,而四次挥手完全没有说到,所以这次专门总结了这篇文章,专门讲讲三次握手和四次挥手

备注:(下文中提到的专业术语)

ack —— 确认号码
seq —— 顺序号码
ISN —— 初始序列号
ACK —— 确认,使得确认号有效(握手使用)
SYN —— 用于初始化一个连接的序列号,建立联机
FIN —— 该报文的发送方已经结束向对方发送数据

#TCP的三次握手

三次握手 实际就是Client端和Server端建立稳定TCP连接的发送三个包的过程

2ce4d527a44b641266f20919f9606b7e.png
  • 第一次握手:(SYN=1, ACK=0, seq=x):
    Client发送SYN标志位1的包到Server,以及初始序号x(保存在包头的序列号seq字段,简称ISN),和ACK标志位为0,并进入SYN_SEND状态,等待Server确认。
  • 第二次握手:(SYN=1, ACK=1, seq=y, ack=x+1):
    Server发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。Server确认ISN序列号,放到seq域里,同时将确认序号(ack)设置为Client的ISN加1,即x+1。 发送完毕后,Server进入 SYN_RCVD 状态。
  • 第三次握手:(ACK=1,seq=x+1,ack=y+1)
    Client再次发送确认包(ACK),ACK标志位为1,并且把Server发来ISN的序号字段+1,放在确定字段中发送给对方。

发送完毕后,Client和Server建立连接,TCP 握手结束。

#TCP四次挥手

四次挥手 实际就是Client端和Server端关闭TCP连接的发送四个包的过程

38fd362f0dccd5fad2ae47e118415c1d.png
  • 第一次挥手(FIN=1,seq=u)
Client 想要关闭连接,Client 会发送一个FIN标志位置为1,当前序列号为u的包,表示需要关闭连接了。Client进入 FIN_WAIT_1 状态。
  • 第二次挥手(ACK=1,seq=v,ack=u+1)
Server收到Client的FIN包之后,会发送一个确认序号为收到的序列号u+1的包,表明自己接受到了Client关闭连接的请求,但还未准备好关闭连接。Server进入 CLOSE_WAIT 状态,Client进入 FIN_WAIT_2 状态。
  • 第三次挥手(FIN=1,ACK=1,seq=w,ack=u+1)
当Server将剩余数据发送完之后,会发送一个自己的FIN包,序列号为u+1。Server进入 LAST_ACK 状态,等待来自Client的最后一个ACK。
  • 第四次挥手(ACK=1,seq=u+1,ack=w+1)
Client接收到来自Server端的关闭请求之后,发送最后一个ACK确认包,确认序号设置为收到序号加1。Client进入 TIME_WAIT状态,等待可能出现的要求重传的 ACK 包。Server接收到这个确认包之后,关闭连接,进入CLOSED状态。(Client会等待2MSL之后,没有收到Server的ACK ,就确认Server进入CLOSED状态,自己也关闭进入CLOSED状态。)

发送完毕后,Client和Server断开连接,TCP 挥手结束。

以上就是这次挥手和握手的全部内容了,如果有疑问欢迎留言哦。

#参考资料

知乎:“三次握手,四次挥手”你真的懂吗?

bilibili: 计算机网络TCP传输层连接管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值