TCP 协议四次挥手&状态变迁

简介: TCP 协议四次挥手&状态变迁

之前介绍了 TCP 三次握手建立连接流程,而 TCP 协议是一个面向 字节流 的协议,它不限制应用层传输消息的长度,但是 网络层、数据链路层 在发送报文时使用的内存是有限的,所有就需要限制报文的长度,TCP 协议就需要把从 应用层 接收到的任意长度的 字节流 切分成许多个报文段,这里边涉及到很多底层复杂的网络编程的知识,如 TCP 是如何切分应用层的消息、慢启动、避免拥塞、超时重试等等,最后会经历一个关闭连接的过程,这篇简单介绍一下TCP 四次挥手 以及 状态变迁

1.TCP 关闭连接目的

       TCP 是一个全双工协议,必须单独拆除每一条信道,而四次挥手的目的则是终止数据传输,且回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,因此必须单独分别在一个方向上终止该方向的数据传输。如果也像三次握手那样只有三次挥手的话,在被动关闭端在收到 FIN 消息之后,需要同时回复 ACK 和服务端的 FIN 消息,如果服务端还需要等待一段时间才可以关闭另外一个方向的连接,那么这样的三次挥手就会出问题,而 TCP 关闭连接主要有以下两个目的:

  • 防止数据丢失
  • 与应用层交互

2.三次握手和关闭连接    

2.1 三次握手流程

2.2 四次挥手流程

Tips:如果被动关闭端调用 close/shutdown 函数非常及时,内核在很大概率上也会将 ACKFIN 放在一个报文中发送,这就变成三次挥手了。

3.wireshark 抓包分析

       在虚拟机 CentOs8 中使用 curl singwa666.com 命令请求网站时发起了 HTTP/1.1 请求,过程中需要建立 TCP 连接握手,获取数据,最后还会有 四次挥手,抓取到的 TCP报文如下:

  • 第一次:FIN

  • 第二次:ACK

  • 第三次:FIN

  • 第四次:ACK

4.四次挥手中的状态变迁示意图

TIME_WAIT 状态存在的两个理由:

  • 可靠地实现 TCP 全双工连接的终止:
  • 允许老的重复分节在网路中消逝
目录
打赏
0
0
0
0
1
分享
相关文章
TCP/IP协议三次握手与四次挥手流程解析
一、TCP报文格式   TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式   上图中有几个字段需要重点介绍下:   (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
1487 0
TCP连接的四次挥手过程及其必要性
在网络通信中,TCP(传输控制协议)以其可靠性和有序性著称。TCP连接的建立和终止都需要特定的握手过程。本文将详细描述TCP连接的四次挥手(四次挥手)过程,并探讨为什么需要四次挥手来终止一个TCP连接。
166 8
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
141 5
|
10月前
|
TCP协议中用于建立和终止连接的过程(三次握手,四次挥手)
TCP协议中用于建立和终止连接的过程(三次握手,四次挥手)
69 0
如何理解 TCP 四次挥手
【4月更文挑战第11天】TCP关闭连接需四次挥手:一方发送FIN包进入FIN_WAIT_1,对方收到后进入CLOSE_WAIT,读取EOF并发送FIN,进入LAST_ACK;另一方收到FIN并ACK,进入TIME_WAIT,等待2MSL后关闭。每个方向的FIN和ACK各一次,故称四次挥手。UDP不需建立连接,断开时删除目的地址和端口映射。
深入理解Linux网络——TCP协议三次握手和四次挥手详细流程
• 找到套接字:创建内核对象的时候,fd会跟file对象做通过fd_install关联起来,通过进程的fd_table就可以找到对应的file,而file的private指针就指向了socket对象,所以根据fd即可找到套接字 • 判断当前套接字的状态:只有SS_UNCONNECTED状态(刚创建的套接字就是该状态)才会继续,其他状态都会报错 1. 注意此处是socket的状态,而不是sock的状态 2. 会将socket状态更改为SS_CONNECTING • 更改sock状态为TCP_SYN_SENT
07 tcp三次握手、四次挥手、十种状态
07 tcp三次握手、四次挥手、十种状态
283 0
TCP的连接管理机制(三次握手与四次挥手)
TCP的连接管理机制(三次握手与四次挥手)
119 0