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

上面有一篇专门介绍过TCP和UCP协议 <https://github.com/AttemptWeb/Record/issues/6>
,其中只是粗略的提到TCP协议的三次握手,而四次挥手完全没有说到,所以这次专门总结了这篇文章,专门讲讲三次握手和四次挥手。

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

ack —— 确认号码

seq —— 顺序号码

ISN —— 初始序列号

ACK —— 确认,使得确认号有效(握手使用)

SYN —— 用于初始化一个连接的序列号,建立联机

FIN —— 该报文的发送方已经结束向对方发送数据

#
<https://herrylo.github.io/front/2019-08-17.html#tcp%E7%9A%84%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B>
TCP的三次握手

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



*
第一次握手:(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 握手结束。

#
<https://herrylo.github.io/front/2019-08-17.html#tcp%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B>
TCP四次挥手

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



* 第一次挥手(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 挥手结束。

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

#
<https://herrylo.github.io/front/2019-08-17.html#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99>
参考资料

知乎:“三次握手,四次挥手”你真的懂吗? <https://zhuanlan.zhihu.com/p/53374516>

bilibili: 计算机网络TCP传输层连接管理
<https://www.bilibili.com/video/av9876107/?p=70&t=656>

ps: 顺便推一下自己的个人公众号:Yopai,有兴趣的可以关注,每周不定期更新,分享可以增加世界的快乐


友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信