【网络原理】TCP连接管理机制(三次握手四次挥手)

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。

🤼专栏收录于计算机网络原理


在使用TCP协议进行网络交互时,TCP会进行三次握手即建立连接,TCP四次挥手即断开连接。三次握手与四次挥手后就完成了网络交互,这样的操作也叫TCP的连接管理机制,本篇博文将详细介绍TCP通信过程和三次握手、四次挥手过程。

目录

1、TCP通信过程

1.1 TCP首部报头

1.2 TCP通信过程

2、三次握手

2.1 三次握手流程

2.2 为什么要三次握手

3、四次挥手

3.2 为什么要四次挥手


1、TCP通信过程


1.1 TCP首部报头

TCP首部(TCP Header)是TCP协议中的报头部分,它跟随在IP报头后面。TCP报头通常由20个字节组成,其中包括了一些标志位、序列号、确认号、端口号等信息,用于在TCP通信中控制和传递数据。

源端口号/目的端口号:表示数据的发送方与数据的接受方端口号

32位序号/32位确认序号:TCP将每个字节的数据都进行了编号即为序列号。

6位标志位:TCP的6位标志位默认为0,当返回相应的报文时,会把该报文位设置位1。

URG(Urgent):表示是否包含紧急数据。

ACK(Acknowledgment):表示确认号是否有效。

PSH(Push):表示是否立即推送。

RST(Reset):表示连接是否复位。携带RST标识的称为复位报文段。

SYN(Synchronize):表示同步请求/应答。携带SYN标识的称为同步报文段

FIN(Finish):表示传输结束。携带FIN标识的为结束报文段。

当TCP客户端和服务器建立连接时,它们会共同存储一些连接状态信息,以便在数据传输和连接释放的过程中使用。这些状态信息包括:

  1. 序列号(Sequence Number):用于对TCP数据段进行排序和重组。

  2. 确认号(Acknowledgment Number):用于确认在连接过程中收到的数据段的数量。

  3. 窗口大小(Window Size):用于指定接收端能够接收的数据量大小。

  4. 状态标志(Flags):用于指定TCP连接的状态、数据段类型和连接状态的变化等信息。

  5. 超时时间(Timeout):用于指定数据段传输时间的最大限制,超过该限制则认为连接出现了问题。


1.2 TCP通信过程

TCP通信过程模拟

我们观察到 主机A  向 主机B 传输数据时,提供了以 1000 为单位的编号。这些编号称为 序列号

我们可认为 主机A 向 主机B 发送数据为一个请求 即 SYN。TCP给这个请求随机分配一个序列号即SEQ

并且 主机B 在收到 主机A 的数据后会作出回应,这个回应称之为 即 ACK。只有接收方返回 ACK 后,这样的通信才算完成。

确认序列号 的是序列号的下一个字节数。当 SYN 请求序列号为 1000,则 ACK 确认序列号为 1001,对照上图、下图进行理解。

注意,以上的 SYN 和 ACK 是怎样进行传输的呢,我们知道6位标志位默认为0,第1位到第6位分别为:URG、ACK、PSH、RST、SYN、FIN 。当要进行 SYN 请求时,则传输000010。当要进行 ACK 确认序列号时则传输 010000。


2、三次握手

握手(handshake)指通信双方进行网络交互,TCP 建立连接时客户端与服务器之间需要进行三次交互来完成连接。

建立连接一定是客户端向服务器发起的,在 TCP 协议下客户端首先向服务器发送建立连接请求即 SYN 报文段,服务器在接受到请求后会返回 ACK 确认序号。

服务器为了确保与客户端建立连接会向客户端也发送 SYN 报文段,客户端再返回 ACK 确认序号。这样客户端与服务器就完成了连接。

举例说明

张三想与如花确定男女朋友关系,首先张三向如花发送求爱请求:“你可以做我的唯一吗?”(SYN)。

如花答应张三并返回确认信息:“我愿意”(ACK),但如花想张三也是她的唯一也向扎张三发送信息:“你也愿意做我的唯一吗?”(SYN)。

张三回复:“我愿意”(ACK)。

以上过程看似是四次交互,但实际中间两次交互可合并为一条交互,因此上述过程为三次握手。

只有双方都确定了彼此之间的信息这样才能完成建立连接。TCP中可通过序列号、确认号来保存彼此之间信息,在本文上方TCP通信过程中有详细讲解。


2.1 三次握手流程

1)当客户端向服务器发送请求时,会发送 SYN 报文段给服务器。

2)服务器在收到客户端的请求后,会回复 ACK 确认序列号。

3)服务器为了保证连接也会向客户端发送给 SYN 报文段。

4)客户端收到服务器的请求回复 ACK 确认序列号。

在上方 TCP 通信过程中,我们知道了 TCP 的报头有6位标志位,标志位默认为0。当需要相关操作时就会把某位标志位置为1,为了避免浪费资源,可把这两个操作合并在一起。

服务器向客服端发送 ACK 和 SYN 操作时就可以合并在一起,也就是 ACK 位和 SYN 位都置为1。看似是四次握手实际上只用了三次交互,因此我们称为三次握手,对照下图进行理解。


2.2 为什么要三次握手

  1. 防止已失效的连接请求报文段突然又传送到了服务端,从而导致服务端开启多个连接。

  2. 连接请求报文段正好在网络中滞留比较久,以至于延误到相应的确认没有足够的时候到达服务端,使得服务端误判连接id。

  3. 网络中出现了延迟的重传,因此服务端在已经建立了连接的情况下又收到了连接建立请求,如果没有三次握手情况下,会认为这是一个新的连接请求,从而重复建立新的连接。


3、四次挥手

四次挥手是TCP协议关闭连接时的一种基本过程,它的主要目的是确保双方的数据传输和处理都已经完成。具体来说,四次挥手主要包括以下步骤:

  1. 发起关闭请求的一方(假设是客户端)发送一个FIN (finish)请求,表示“我已经没有数据要发给你了”。
  2. 接收到FIN请求的另一方(假设是服务器)发送一个ACK确认报文,表示“我已经收到了你发来的关闭请求”。
  3. 接收到ACK确认报文的发起关闭请求的一方(即客户端)等待自己发送数据的过程完成并准备好关闭连接后,再次发送一个FIN请求,表示“我的数据发完了,我准备关闭连接”。
  4. 接收到最后一个FIN请求的另一方(即服务器)再次发送一个ACK报文,表示“我已经收到了你的关闭请求,确认关闭连接”。

这样,四次挥手就完成了。需要注意的是,关闭连接的两端都需要发送FIN请求和ACK确认请求,因为TCP协议是一种双向通信协议。在四次挥手过程中,客户端和服务器都需要确认对方的关闭请求,并相互发送ACK报文确认,以确保连接正常关闭。通过四次挥手,双方都能够顺利地关闭连接并释放资源。

四次挥手过程

此处的四次握手的 ACK 和 FIN 为啥不能合并为一次,根据上述四次挥手过程进行解析:

连接的第一次关闭是客户端发送FIN请求,服务器返回ACK确认请求。这个请求的作用是告诉服务器,客户端已经没有数据要发送了,希望关闭连接。在这个阶段中,服务器只是确认收到了客户端发来的FIN请求,还可以继续发送数据给客户端。

连接的第二次关闭是服务器发送FIN请求,客户端回复ACK确认请求。这个请求的意义是告诉客户端,服务器也没有数据要发送了,希望关闭连接。在这个阶段中,客户端收到了服务器的FIN请求,可能还会发送一些最后的数据到服务器,然后再发送ACK确认请求。如果将第一次和第二次的请求合并在一起,服务器就无法获知客户端是否真正结束了数据的发送,可能会误认为客户端还在发送数据。


3.2 为什么要四次挥手

TCP是一种双向通信协议,双方都需要发送和接收数据。在四次挥手过程中,需要确保双方没有尚未处理完的数据或者请求。因此,四次挥手能够在正确关闭连接之前,保证数据双向传输和处理的完成。

不同于三次握手,在关闭连接时,可能存在未及时发送的数据。如果 TCP 四次挥手过程中全部包含在一个 TCP 报文中,则使用 TCP 的延迟 ACK,未及时发送其中的 ACK 报文,导致连接终止存在延迟。采用四次挥手可避免这种情况。

网络编程中避免出现类似TCP Head of Line Blocking(HOLB)的问题。如果在两端都尚未关闭连接之前,数据流还在传输中,一端出现故障,就会引起等待连接关闭的一方进入死等状态,造成连接阻塞。

因此,通过四次挥手过程,双方都能够正确地处理数据、确认请求,并最终彻底地关闭连接,从而保证 TCP 传输的安全、稳定并且可靠。


三次握手四次挥手是为了保证数据的可靠性传输,在TCP传输中还有其他保证数据的可靠性传输的机制如确认应答机制、超时重传机制,大家可在文章开头专栏中搜索。

本期博文到这里就结束了,感谢点赞、评论、收藏、关注~

  • 23
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 45
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只爱打拳的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值