Linux TCP协议——三次握手,四次挥手

news2024/10/2 4:42:18

一、TCP协议介绍

TCP协议是可靠的、面向连接的、基于字节流的传输层通信协议。

TCP的头部结构:

在这里插入图片描述

源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;(tcp是传输层的协议,端与端之间的数据传输,在TCP和UDP协议当中不会体现出IP)

32位序号:一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。

32位确认号:对另一方发送来的TCP报文段的响应,即告知发送端期待发送的下一条序号。其值是收到的TCP报文段的序号值加1。

4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60

16位窗口大小:告诉发送方字节的接收能力

6位标志位:

在这里插入图片描述

16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分,简单来说就是检验TCP数据是否在传输过程中失真。

16位紧急指针: 标识哪部分数据是紧急数据。

二、三次握手

面向连接指TCP连接的本质是在建立三次握手时期,通信双方会协商很多连接当中的数据。对于TCP而言,如果通信双方不建立连接则不能进行通信。

在listen()方法中第二个参数就是指定已完成三次握手队列的长度。

TCP在建立连接的时候,客户端就会先给服务器端发送一个TCP报文段,然后服务器端再给客户端恢复一个TCP报文段,最后客户端再给服务器端回复,一共三次。

三次握手的具体过程是:

第一次握手:当客户端执行connet()这行代码的时候开始进行三次握手,此时客户端就会在传输层给服务端发送一个SYN报文,SYN报文中有一个序号,这个序号就是自己的序号(32位序号),假设这个序号为i。

第二次握手:服务器收到之后会给客户端一个回复,回复的是SYN报文,此报文中也有一个自己的序号,假设这个序号为j,还有ACK报文,是一个确认号,这个确认号就是对刚刚客户端发来的序号进行确认,由于客户端发来的序号值为i,则这个确认号就为i+1,服务器向客户端回复的时候序号和确认号可以写到一个报文中。

第三次握手:客户端收到服务器端的回复之后,再给客户端发送一个报文ACK进行确认,对刚刚服务器返回回来的序号进行确认,由于服务器回复到客户端的序号为j,所以确认的序号应该为j+1。

具体过程如下图所示:

在这里插入图片描述

注意:三次握手发生在建立连接的时候,connect开始执行发起连接三次握手开始,connect返回成功三次握手结束。但是连接发送的syn,syn+ack,ack用户都没有直接参与,换句话说,在发送这些数据包的时候,用户并没有给传输层的TCP协议提交任何数据。这里的syn,syn+ack,ack全部都是TCP协议报头的内容。

三、四次挥手

在客户端与服务器通信完毕过后,谁先调用close,开始进行四次挥手。一般来说,主动断开方都是客户端。

以断供开方为客户端为例:

第一次挥手:当客户端执行到close这行代码的时候就意味着要断开和客户端的连接了,此时开始进行四次挥手,客户端给服务器端发送一个FIN报文,假如它的序号值为n。

第二次挥手:服务器端接收到了客户端的FIN报文,马上给客户端发送一个确认信息,即ACK报文,确认号为n+1,确认已经收到客户端要断开的信息。

第三次挥手:服务器端给客户端发送了确认信息之后,也执行close,表示服务器端也要断开了,此时服务器端给客户端发送一个FIN报文,假如它的序号值为m。

第四次挥手:客户端接收到了服务器端的FIN报文,马上给服务器端发送一个确认信息,即ACK报文,确认号为m+1,确认已经收到服务器端要断开的信息。

具体过程如下图所示:

在这里插入图片描述

注意:四次挥手断开连接时发送的FIN,ACK用户都没有直接参与,是底层协议自己完成的,在代码层面只需要close。

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

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

相关文章

基于paddleocr的文档识别

1、版面分析 使用轻量模型PP-PicoDet检测模型实现版面各种类别的检测。 数据集: 英文:publaynet数据集的训练集合中包含35万张图像,验证集合中包含1.1万张图像。总共包含5个类别。 中文:CDLA据集的训练集合中包含5000张图像&a…

Vue3:通过路由写多个页面,通过不同的路径可以进入不同的页面

前言 Vue3:想通过路由写2个页面,不同的路径可以进入不同的页面 实现步骤 1、创建Vue3项目 通过脚手架创建一个Vue3的项目,然后在此基础上对文件进行增删改,修改成自己需要的项目框架 2、views文件夹 对应 页面文件 如果需要…

网络编程——网络基础知识

目录 一、网络历史两个重要名词1.1 阿帕网1.2 TCP/IP协议 二、局域网和广域网三、IP地址3.1 基本概念3.2 划分(IPV4)3.3 特殊IP地址3.4 子网掩码3.5 重新组网 四、网络模型4.1 网络的体系结构:4.2 OSI与TCP/IP模型4.2.1 OSI模型4.2.2 TCP/IP模型4.2.3 OSI和TCP/IP模…

C++,类的特殊函数练习

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream> using namespace std;cla…

OpenAI的Superalignment策略:计算为王

卷友们好&#xff0c;我是rumor。 对于怎么实现AGI这个玄学的目标&#xff0c;感觉大家都是差不多的状态&#xff1a;咱也不知道怎么做&#xff0c;但就是觉得现在的LLM技术还远远不够。 所以之前看到OpenAI说要用模型去做对齐研究[1]&#xff0c;以及最近发话要4年内做出Super…

创建R包-2.1:在RStudio中使用Rcpp制作R-Package(更新于2023.8.23)

目录 0-前言 1-在RStudio中创建R包项目 2-创建R包 2.1通过R函数创建新包 2.2在RStudio通过菜单来创建一个新包 2.3关于R包创建的说明 3-添加R自定义函数 4-添加C函数 0-前言 目标&#xff1a;在RStudio中创建一个R包&#xff0c;这个R包中包含C函数&#xff0c;接口是Rc…

牛客复盘] 2023河南萌新联赛第(七)场:信息工程大学 B\I 20230823

牛客复盘] 2023河南萌新联赛第&#xff08;七&#xff09;场&#xff1a;信息工程大学 B\I 20230823 总结B 七夕1. 题目描述2. 思路分析3. 代码实现 I 细胞分裂1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 场外OB做了B和I题&#xff0c;只能说这场有点离谱。B 并查…

律师事务所微信小程序开发方案:实现智能化服务与用户体验的完美结合

随着移动互联网的快速发展&#xff0c;微信成为了人们日常生活中不可或缺的社交工具。为了满足用户对便捷、高效法律服务的需求&#xff0c;律师事务所微信小程序应运而生。本文将探讨律师事务所微信小程序的开发方案&#xff0c;旨在为读者提供一个专业、思考深度和逻辑性的指…

黑客自学笔记

谈起黑客&#xff0c;可能各位都会想到&#xff1a;盗号&#xff0c;其实不尽然&#xff1b;黑客是一群喜爱研究技术的群体&#xff0c;在黑客圈中&#xff0c;一般分为三大圈&#xff1a;娱乐圈 技术圈 职业圈。 娱乐圈&#xff1a;主要是初中生和高中生较多&#xff0c;玩网恋…

【RHEL】硬盘分区与格式化

fdisk命令 在linux中&#xff0c;fdisk是基于菜单的命令。对硬盘分区时&#xff0c;可以在fdisk命令后面直接加上要分区的硬盘作为参数(分区工具) 利用如下所示命令&#xff0c;打开fdisk操作菜单。 输入p,查看当前分区表。从命令执行结果可以到&#xff0c;/dev/mapper/rhel…

网络拓扑结构

目录 1.网络拓扑结构 1.星型拓扑结构 2.网型拓扑结构 3. 数制介绍 3.1 数制的基本概念 1.网络拓扑结构 网络拓扑结构是指用传输媒体互连各种设备的物理布局&#xff0c;也就是用什么方式连接网络中的计算机、网络设备&#xff0c;它的结构有星型拓扑&#xff0c;总线型拓扑…

JVM 之 垃圾收集算法详解

文章目录 一、标记清楚算法二、标记复制算法三、标记整理算法四、不同垃圾收集算法优缺点总结1. 标记-清除算法&#xff1a;2. 标记-复制算法&#xff1a;3. 标记-整理算法&#xff1a; 一、标记清楚算法 标记清除是一种简单而直接的垃圾回收算法。它的执行流程如下&#xff1…

【Rust】Rust学习 第十九章高级特征

现在我们已经学习了 Rust 编程语言中最常用的部分。在第二十章开始另一个新项目之前&#xff0c;让我们聊聊一些总有一天你会遇上的部分内容。你可以将本章作为不经意间遇到未知的内容时的参考。本章将要学习的功能在一些非常特定的场景下很有用处。虽然很少会碰到它们&#xf…

SpringBoot案例-文件上传

目录 简介 文件上传前端页面三要素 服务端接收文件 小结 本地储存 实现 代码优化 小结 阿里云OSS 阿里云 阿里云OSS 使用第三方服务--通用思路 准备工作 参照官方SDK代码&#xff0c;编写入门程序 集成使用 阿里云OSS-使用步骤 阿里云OSS使用步骤 参照SDK编写入…

【QT5-自我学习-线程qThread练习-两种使用方式-2:通过继承Qobject类-自己实现功能函数方式-基础样例】

【QT5-自我学习-线程qThread练习-两种使用方式-2&#xff1a;通过继承Qobject类-自己实现功能函数方式-基础样例】 1、前言2、实验环境3-1、学习链接-参考文章3-2、先前了解-自我总结&#xff08;1&#xff09;线程处理逻辑事件&#xff0c;不能带有主窗口的事件&#xff08;2&…

攻防世界-base÷4

原题 解题思路 base644&#xff0c;莫不是base16&#xff0c;base16解码网站&#xff1a; 千千秀字

k8s 安装istio (一)

前置条件 已经完成 K8S安装过程十&#xff1a;Kubernetes CNI插件与CoreDNS服务部署 部署 istio 服务网格与 Ingress 服务用到了 helm 与 kubectl 这两个命令行工具&#xff0c;这个命令行工具依赖 ~/.kube/config 这个配置文件&#xff0c;目前只在 kubernetes master 节点中…

postgres数据常用SQL语句

-- 系统信息函数 select version(),user,current_user; -- 创建表 CREATE TABLE biao(id INT primary key,name VARCHAR(25) not null,sex VARCHAR(25) unique,salary FLOAT default 9000 ); -- 更换表名 ALTER TABLE biaoRename to biao1; -- 更换字段类型 ALTER TABLE biao1 …

Tushare入门小册

Tushare入门小册 一、Tushare平台介绍 Pro版数据更稳定质量更好了&#xff0c;我们提供的不再是直接从互联网抓取&#xff0c;而是通过社区的采集和整理存入数据库经过质量控制后再提供给用户。但Pro依然是个开放的&#xff0c;免费的平台&#xff0c;不带任何商业性质和目的…

红黑树的调整图解

讲的很好 的红黑树原理 上面的视频讲解的红黑树很好。尤其是关于红黑树的调整。画图做了下总结&#xff0c;谢谢。