TCP协议的三次握手与四次挥手的过程

news/2024/10/9 5:07:33/

目录

三次握手(建立连接)

第一次握手(SYN)

第二次握手(SYN-ACK)

第三次握手(ACK)

四次挥手(终止连接)

第一次挥手(FIN)

第二次挥手(ACK)

第三次挥手(FIN)

第四次挥手(ACK)


TCP(传输控制协议)的三次握手和四次挥手是建立和终止TCP连接的两个重要过程。

三次握手(建立连接)

  1. 第一次握手(SYN)
    • 客户端发送一个SYN(同步序列编号)报文到服务器,并进入SYN_SENT状态,等待服务器确认。
    • 报文中包含客户端的初始序列号(ISN),用于后续的可靠性管理。
  2. 第二次握手(SYN-ACK)
    • 服务器收到客户端的SYN报文后,会发送一个SYN-ACK(同步确认应答)报文作为应答。
    • 服务器同样在报文中包含自己的初始序列号,并将确认序号设置为客户端的ISN加1,表示服务器已经收到了客户端的SYN。
    • 服务器此时进入SYN_RCVD状态。
  3. 第三次握手(ACK)
    • 客户端收到服务器的SYN-ACK报文后,会向服务器发送一个ACK(确认)报文。
    • 报文中将确认序号设置为服务器的ISN加1。
    • 客户端发送完这个报文后进入ESTABLISHED状态,表示客户端到服务器的连接已经建立。
    • 服务器在收到这个ACK报文后也进入ESTABLISHED状态,此时,双方都准备好了数据传输。

四次挥手(终止连接)

  1. 第一次挥手(FIN)
    • 当客户端完成数据传输后,它需要发送一个FIN(结束)报文到服务器,并进入FIN_WAIT_1状态。
    • 客户端告诉服务器它已经没有数据发送了。
  2. 第二次挥手(ACK)
    • 服务器收到这个FIN报文后,会发送一个ACK报文作为应答,并将确认序号设置为收到序号加1。
    • 服务器进入CLOSE_WAIT状态,客户端收到这个ACK报文后进入FIN_WAIT_2状态。
    • 此时,客户端到服务器的连接已经释放,但服务器可能还有数据要发送。
  3. 第三次挥手(FIN)
    • 当服务器发送完剩余的数据后,它会发送一个FIN报文到客户端,并进入LAST_ACK状态。
    • 服务器告诉客户端它已经没有数据发送了。
  4. 第四次挥手(ACK)
    • 客户端收到这个FIN报文后,会发送一个ACK报文作为应答,并将确认序号设置为收到序号加1。
    • 客户端发送完这个报文后进入TIME_WAIT状态,等待足够的时间以确保服务器收到了这个ACK报文。
    • 服务器在收到这个ACK报文后进入CLOSED状态,完成连接的终止。
    • 客户端在等待一定时间后(通常是2MSL,即最大报文生存时间的两倍),也会进入CLOSED状态。

通过三次握手和四次挥手的过程,TCP确保了连接的可靠建立和终止。


http://www.ppmy.cn/news/1536477.html

相关文章

栈与队列面试题(Java数据结构)

前言: 这里举两个典型的例子,实际上该类型的面试题是不确定的! 用栈实现队列: 232. 用栈实现队列 - 力扣(LeetCode) 方法一:双栈 思路 将一个栈当作输入栈,用于压入 push 传入的数…

微软官网列出了 Windows 11 LTSC 2024 中的全部新功能

今天早些时候,微软发布了有关受托管PC的Windows 11 24H2 升级和兼容性的详细信息。 该帖子针对的是负责在各自办公室和组织中处理系统的 IT 系统管理员。与此同时,微软也发布了有关 Windows 11 LTSC 或长期服务渠道的信息。 该公司已于四月早些时候证实…

YOLO11训练自己的数据集(吸烟、跌倒行为检测)

YOLO11训练自己的数据集(吸烟、跌倒行为检测) 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用YOLO11训练自己的数据集进行吸烟、跌倒行为检测准备数据进行训练进行预测进行验证 参考文献 前言 由于本人水平有限,难免出现错漏…

Linux驱动学习——内核编译

1、从官网下载适合板子的Linux内核版本 选择什么版本的内核需要根据所使用的硬件平台而定,最好使用硬件厂商推荐使用的版本 https://www.kernel.org/pub/linux/kernel/ 2、将压缩包复制到Ubuntu内进行解压 sudo tar -xvf linux-2.6.32.2-mini2440-20150709.tgz 然…

LabVIEW中的非阻塞定时器

在LabVIEW编程中,通常需要在某些任务执行过程中进行非阻塞的延时操作。例如,显示某条信息一段时间,同时继续执行其他任务,并在延时时间结束后停止显示该信息。这类需求通常用于处理优先级不同的信息显示,如错误信息需要…

地理定位营销与开源AI智能名片O2O商城小程序的融合与发展

摘要:本文阐述地理定位营销的概念、手段及其在商业中的应用,探讨开源AI智能名片O2O商城小程序如何与地理定位营销相结合,为企业营销带来新的机遇与挑战。 一、引言 在当今数字化营销的时代,地理定位营销已成为一种重要的营销手段…

Perl 子程序(函数)

Perl 子程序(函数) Perl 是一种高级、解释型、动态编程语言,广泛用于CGI脚本、系统管理、网络编程、 finance, bioinformatics, 以及其他领域。在Perl中,子程序(也称为函数)是组织代码和重用代码块的重要方…

idea使用技巧与插件推荐

您好!使用 IntelliJ IDEA 的技巧和插件推荐可以显著提高您的编程效率和体验。以下是一些实用的技巧和推荐的插件: 技巧 快捷键使用 - 熟悉 IDEA 的快捷键可以大大提高您的工作效率。例如,Ctrl E 可以快速访问最近的文件,Ctrl …