3.TCP的三次握手和四次挥手

 一、前置知识

  TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在传输数据前通信双方必须建立连接(所谓连接,是指客户端和服务端各自保存一份关于对方的信息,比如ip地址,端口号等)。TCP通过三次握手建立一个连接,通过四次挥手释放一个连接。

  在了解TCP连接前,先了解TCP报文的头部结构:

  TCP报文段的头部结构主要包含以下几个部分:
1.源端口和目的端口(Source port,Destination port):这两个字段用来标识发送端和接收端的端口号,占16位。
2.序列号(Sequence number):占32位,用来标识从TCP源端向目的端发送的字节流。当发起方发送数据时,会对这些数据进行标记,确保数据的有序性和完整性。(seq)
3.确认序号(Acknowledgement number):占32位,只有在ACK标志位为1时,这个字段才有效。它表示接收方已经成功接收到的数据的序列号(ack=seq+1)
4.标志位:占6位,包含URG、ACK、PSH、RST、SYN、FIN等标志。其中ACK表示确认序号有效,FIN表示释放一个连接,SYN表示发起一个新连接。


二、TCP的三次握手

  三次握手就是通过三次数据包的交换,来确认通信双方收发数据的能力。

  1. 一开始,客户端和服务端都处于CLOSE状态,服务端监听客户端的请求,进入LISTEN状态。
  2. 第一次握手(客户端发送连接请求):客户端会向服务端发送一个SYN包,里面包含了客户端的初始序列号。然后客户端进入SYN_SENT状态。
  3. 第二次握手(服务端确认收到了客户端的连接请求):回复客户端一个SYN+ACK包,里面包含确认信息(表示收到了客户端的SYN包)和服务端的初始序列号。然后服务端进入SYN_RCVD(received的缩写)状态。
  4. 第三次握手(客户端收到服务端的确认后,再次向服务端确认):再回复一个ACK包给服务端。然后客户端进入ESTABLISHED状态,当服务端接收到这个ACK包后,也进入ESTABLISHED状态。
  5. 这样客户端和服务端之间就建立了一个可靠的连接,可以开始传输数据。

三、TCP的四次挥手

  1. 数据传输结束后,通信双方都可以主动发起释放连接请求,假设由客户端发起。
  2. 第一次挥手(客户端发送释放连接请求):客户端向服务端发送一个FIN包,并附带一个序列号。然后,客户端进入FIN_WAIT1状态。
  3. 第二次挥手(服务端确认收到了客户端释放连接的请求):回复一个ACK包,同时包含一个确认号。然后,服务端进入CLOSE_WAIT状态(此时服务端还没准备好释放连接,可能还有数据要处理),当客户端收到服务端的这个ACK包后,进入FIN_WAIT2状态。
  4. 第三次挥手(服务端也已经准备好释放连接):向客户端发送一个FIN包,并附带一个序列号。然后,服务端进入LAST_ACK状态,表示等待来自客户端的最后一个ACK包。
  5. 第四次挥手(客户端确认服务端也已经准备好释放连接):就回复一个ACK包,但是此时客户端不会马上关闭连接,而是进入TIME_WAIT状态,等待某个固定时间(2MSL,2 Maximum Segment LifeTime,两倍的最长报文段生命周期),目的是防止这个ACK包丢失,导致服务端没有收到客户端关闭连接的确认,没有关闭连接,就会超时重传FIN包。那么等待这个固定时间后(即是确保服务端已经正常关闭连接后),客户端才关闭连接,进入CLOSED状态。当服务端收到这个ACK包后,就关闭连接,进入CLOSED状态。
  6. 这样就成功释放连接了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始:C++ String类的模拟实现

文章目录 引言1.类的基本结构2.构造函数和析构函数3.基本成员函数总结 引言 在C编程中,字符串操作是非常常见且重要的任务。标准库中的std::string类提供了丰富且强大的功能,使得字符串处理变得相对简单。然而,对于学习C的开发者来说&#x…

C语言----斐波那契数列(附源代码)

各位看官们好,当我写了上一篇博客杨辉三角后,有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)f(n-2)f(n-1)。就是当前是前两项之和,然后下标1和0都是1.从第三项开始计算的。那么我们知道规律&#xff0…

位图(c++)

文章目录 1.位图概念2.位图的实现3.应用(解决整形存在或次数问题)3.1存在问题3.2次数问题 5.搜索的方法对比: 1.位图概念 和哈希一样,都是一个表来记录某个元素的个数或者存在与否;不同的是哈希使用的计算机定义的完整…

旅游卡创业的机会在哪里?

在当今社会,旅游已经成为了人们休闲娱乐的重要方式之一。 随着经济的发展和人们生活水平的提高,越来越多的人开始追求更高品质的旅游体验。因此,旅游卡创业应运而生,为游客提供了更加便捷、实惠的旅游服务。那么,旅游…

群辉部署小雅alist实现视听盛会

最近群辉搭建起来了,开始整蛊影视库,之前搞过nastool。这次折腾下小雅alist。 1.下载并安装 直接在群辉的docker里面下载映像 主要映射下端口和文件夹 #token mytoken.txt 获取地址:https://alist.nn.ci/zh/guide/drivers/aliyundriv…

Git使用(2):远程仓库

一、创建远程仓库 登录码云Gitee - 基于 Git 的代码托管和研发协作平台。 点击右上角,新建仓库。 创建完成,复制仓库地址接下来要使用。 二、将idea项目推送到码云 首先创建本地仓库VCS -> Create Git Repository。然后选择Manage Remotes&#xff0…

服务器是网络中的重要设备

众所周知,服务器是网络中的重要设备,要接受少至几十人、多至成千上万人的访问,因此对服务器具有大数据量的快速吞吐、超强的稳定性、长时间运行等严格要求。但是,今天我们了解的是GPU服务器,很明显,从字面上…

机器学习的目的

机器学习的目的是让计算机能够从数据中学习并改善性能,以执行特定的任务而无需明确的编程指令。具体来说,机器学习旨在实现以下几个主要目标: 1. 预测与泛化: 机器学习的一个主要目标是通过学习数据的模式和特征,从而对…

旧衣回收,整个项目环节详细拆解

日常旧衣服很多人果断丢垃圾箱,殊不知这背后隐藏着商机。大把人都在掘金的项目。 旧衣回收,眼下市场覆盖率才占10%。绝对的蓝海,干这种项目成本很低。小到自家的旧衣回收能换小钱,大到开公司做分拣捞利润。 说到这里&#xff0c…

用友hr软件统一认证与致远OA单点登录身份周期管理怎么做

一、引言 随着企业信息化建设的深入,各类管理软件如用友HR、致远OA等已经成为事业单位日常运营不可或缺的工具。用友HR软件以其强大的人力资源管理功能,帮助企事业单位实现员工信息的集中管理;而致远OA则以其便捷的办公流程管理,…

机器学习概念:一些基本概念

目录 数据集 (Dataset):用于训练和评估模型的数据集合。 特征 (Feature):描述数据的属性或变量,用于训练模型。 标签 (Label):在监督学习中,与输入数据相关联的输出结果。 模型 (Model):对数据的某种假…

springcloud简单了解及上手

springcloud微服务框架简单上手 文章目录 springcloud微服务框架简单上手一、SpringCloud简单介绍1.1 单体架构1.2 分布式架构1.3 微服务 二、SpringCloud与SpringBoot的版本对应关系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注册中心3.1 认识和安装Nacos3.2 配置Nacos3.3 n…

C++ 并发编程指南(11)原子操作 | 11.6、计算机内存结构

文章目录 一、计算机内存结构1、内存的基本组成2、内存的类型3、内存的结构层次4、CPU架构5、局部性原理6、总结 前言 在探讨计算机的运行效率和数据处理能力时,内存结构无疑是一个至关重要的部分。内存,作为计算机系统中的关键组件,承担着存…

vue从入门到精通(一):Vue模板语法

一,模板语法 Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的Vue模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。 Vue模板语法有2大类: 插值语法: 功能:用于解…

请介绍下H264的多参考帧技术及其应用场景,并请说明下为什么要有多参考帧?

H.264(也称为H.264/AVC)的多参考帧机制是其编码效率和质量提升的关键部分。这个机制允许编码器在编码当前帧时,参考多个之前已编码的帧。这种多参考帧的方法为编码器提供了更多的选择,使其能够更准确地预测当前帧的内容&#xff0…

【保姆级介绍自动化的讲解】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

SCP‘s Story

越过“第二夜”的星星,越过“迈克尔连续线”和“禁运线”,在“煤炭之路”最远的一站,有一颗眼泪。这不是织物或纸上的撕裂,而是现实中的撕裂,是物理定律和常识失效的地方。 有些人称之为黑洞,银河系中最大…

【C语言】4.C语言数组(2)

文章目录 6. 二维数组的创建6.1 ⼆维数组的概念6.2 ⼆维数组的创建 7. 二维数组的初始化7.1 不完全初始化7.2 完全初始化7.3 按照⾏初始化7.4 初始化时省略⾏,但是不能省略列 8. 二维数组的使用8.1 ⼆维数组的下标8.2 ⼆维数组的输⼊和输出 9. 二维数组在内存中的存…

利用一段代码轻松绕过PHP授权系统

利用一段代码轻松绕过PHP授权系统 第一步:首先你需要改名全局文件 比如说全局文件 common.php,那么 你将他改为core.php 第二步:创建文件 创建一个文件,和改名前的全局文件名称一样,然后把以下代码复制进去就OK了 …

行列视在做报表之前需要准备哪些前期工作

行列视是一款功能强大的生产数据分析和报表生成工具,使用它进行报表制作之前,确实需要一些前期准备工作,以确保报表的准确性和有效性。以下是进行行列视报表制作前需要准备的一些关键步骤: 1.明确报表需求: - 确定报表…