谈谈你对 TCP 三次握手和四次挥手的理解

发布于 2024-11-30 14:06:40 字数 1842 浏览 6 评论 0

字段含义
URG紧急指针是否有效。为 1,表示某一位需要被优先处理
ACK确认号是否有效,一般置为 1
RSH提示接收端应用程序立即从 TCP 缓冲区把数据读走
RST对方要求重新建立连接,复位
SYN请求建立连接,并将其序列号的字段进行序列号的初始值设定。建立连接,设置为 1
FIN希望断开连接

三次握手

  1. 第一次握手 :建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SENT 状态,等待服务器确认;SYN:同步序列编号
  2. 第二次握手 :服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;
  3. 第三次握手 :客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED(TCP 连接成功)状态,完成三次握手。

四次挥手

  1. A :B,不好意思,我这边需要关闭连接了,你准备一下?(发了一个 fin 信号给 B,等待回应)
  2. B :好的 A,我收到你的关闭信号了,我还有数据没发好,你等我下(回应 A,带回去 ACK 的最后一个信息,失败可以重发)
  3. B :A 老弟,我好了,我可以关闭了,给你最后说一下,等下你回应我的话,我就直接关了;
  4. A :好的老哥,我回应你一下,你收到就关闭吧,不用理我(发完这条信息后,进入 time_wait 状态)。

    B 收到 ack 信息,直接就关闭了,此过程不产生数据的交互

    A 等待 2MSL(最大报文段生存时间) 后,B 没东西给过来,我也关了

为什么握手需要三次,而挥手却需要四次?

握手的时候,A 和 B 打个招呼,B 可以直接把自己的 SYN 信息和对 A 的回应 ACK 信息一起带上,但是挥手的时候,A 说我要断开了,B 还没发完最后的数据,因此需要先回应一下 A,我收到你的断开的请求了,但是你要等我把最后的内容给你,所以这里分开了 2 步: (1)回应 A; (2)发送自己的最后一个数据

为什么 A 进入 TIME_WAIT 需要等待最大报文段生存的时间后,才能关闭?

原因是,担心网络不可靠而导致的丢包,最后一个回应 B 的 ACK 万一丢了怎么办,在这个时间内,A 是可以重新发包的,但是超过了最大等待时间的话,就算收不到也没用了,所以就可以关闭了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

葬心

暂无简介

文章
评论
25 人气
更多

推荐作者

梦途

文章 0 评论 0

唐睦州

文章 0 评论 0

且行且努力

文章 0 评论 0

Yiu Peng

文章 0 评论 0

albertliao

文章 0 评论 0

逆夏时光

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文