UDP/TCP协议解析

- 我最近开了几个专栏,诚信互三!
====> |||《算法专栏》::刷题教程来自网站《代码随想录》。|||
====> |||《C++专栏》::记录我学习C++的经历,看完你一定会有收获。|||
====> |||《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。|||
====> |||《C#专栏》::记录我复习C#的经历,深度理解,查漏补缺,不定期更新。|||
====> |||《计算机网络专栏》::记录我学习计算机网络,看完你一定会有收获。|||
UDP/TCP协议解析
- UDP报文格式
- UDP面向数据报解析
- TCP报文格式及字段解析
- TCP面向字节流解析
- TCP三次握手/四次挥手解析
- TCP为什么需要三次握手
- TCP为什么要四次挥手
- 三次握手和四次挥手特点
UDP报文格式
UDP报文格式如下。

UDP首部字段有八个字节。
{ src port : dest port : len : 校验和}
1).其中len字段代表整个报文长度,16个比特位代的范围[0 — 65,535]字节,大约为64K。
报头的长度就是保证UDP是面向数据报的原理,从缓冲区中读取数据,都可以通过头部字段的len进行一些计算,让每次从缓冲区中读出的都是UDP的整个数据报。
UDP面向数据报解析
面向数据报,及通过缓冲区读入的内容是以整个数据报为单位进行读取的。
报头的长度就是保证UDP是面向数据报的原理,从缓冲区中读取数据,都可以通过头部字段的len进行一些计算,让每次从缓冲区中读出的都是UDP的整个数据报。
TCP报文格式及字段解析
TCP报文格式如下。

1).对于源端口和目的端口,没有可讲解的。
2).序号:在TCP连接刚建立的时候,OS会随机生成一个序号,序号 = 确认序号 + len(数据长度) - 1,(序号只有在存在数据时,或者在三次握手以及四次挥手的SYN段,RST段,FIN段时才有意义)。
3).确认号:确认号代表在该号之前的所以数据都以及收到,确认号 = 收到的序号 + 1。
4).数据偏移:该字段只有4位,范围为[0,15],其代表了整个报头的大小,但是该大小只是一个数字,确定的大小需要在该大小上 * 4。
5).6个标志位:URG=紧急指针,ACK=确认位,PSH=快速交付位,RST=重新设置,SYN=同步位,FIN=终止位,这六种比特位,会在以下介绍。
6).窗口:该字段是用来进行流量控制的主要字段,其表示的是接收窗口剩余字节数量。
7).校验和:用于校验整个TCP数据报是否有错误。
8).紧急指针:紧急指针用于指向TCP数据字段中的某个位置,该紧急指针的长度为一个字节,让该位置的字节会被上层优先获得,从而判断接下来该怎么办。
TCP面向字节流解析
面向字节流,及在传输过程中,报文和报文之间没有明显的分割,对于发送端来说,发送的数据是一个一个字节,对于接收方来说,接收的也是一个一个字节,所以接收方通过接口接收到的数据可能并非是一个完整的报文。
TCP三次握手/四次挥手解析
TCP建立链接是通过三次握手来实现的,TCP三次握手示意图如下。

1).首先,服务端调用Listen接口,服务器阻塞在Listen接口处,进入LISTEN状态,等待客户端建立链接。
2).其次,先生成随机确认号,同时客户端调用connect接口发送SYN报文,此时客户端进入SYN_SENT状态。
3).在服务端接收到SYN报文,同时服务端发送SYN | ACK报文,此时服务端处于SYN_RECV状态。
4).随后客户端发送ACK报文,此时客户端的链接以及建立成功。
5).最后,在服务端收到ACK报文后,此时服务端的链接建立成功。
TCP四次挥手示意图如下。

1).首先,由主动关闭通信的一端发送FIN报文,同时进入FIN_WAIT-1状态。
2).其次,在被动关闭端收到FIN报文后,进入CLOSE_WAIT状态,在CLOSE_WAIT状态中,被动关闭端会将缓冲区的所有数据都发送到网络中。
3).再次,缓冲区的数据发送到网络中后,被动关闭端会发送FIN | ACK报文,同时被动关闭端进入LAST_ACK端。
4).主动关闭端收到FIN | ACK报文后,主动关闭端发送ACK报文,主动关闭端进入TIME_WAIT状态,该状态需要两个MSL时间。
2MSL时间中,是为了让主动关闭端等待CLOSE_WAIT状态中发送的报文到达主动关闭端。
同时关闭socket。
5).被动关闭端在接收到ACK报文后,被动关闭端关闭socket。
TCP为什么需要三次握手
TCP是面向链接的传输,同时TCP是全双工通信,所谓的面向链接,并不是真正的建立链接,该链接只是抽象的链接,同时需要帮助TCP的全双工通信,这就要求服务端能收到客户端的报文,同时客户端能收到服务端的报文,而当客户端收到SYN | ACK报文后,客户端的链接就已经建立完毕,当服务端收到ACK后,服务端的链接就已经建立完毕,就已经保证了面向链接以及全双工这两种特点。
TCP为什么要四次挥手
由于TCP是面向链接且全双工的,四次挥手的目的是为了关闭双方的通信链接(抽象链接),所以,主动关闭方发送FIN报文,被动关闭方发送ACK报文,关闭一条链接,随后被动关闭方发送FIN | ACK报文,同时主动关闭方发送ACK报文,关闭一条链接,自此两条链接被关闭。
三次握手和四次挥手特点
如图。


在TCP中,存在一种叫做捎带应答的机制,及需要发送ACK报文只需要将报头的ACK位制为1即可,但是TCP的数据部分却没有被设置,所以我们将多种状态信息或数据信息都装载在同一个TCP报文中发送出去就是捎带应答。
所谓的三次握手,实际上就是将ACK报文和SYN报文这两种状态信息都放在一个TCP报文中,捎带应答了。

实际上可以将SYN和ACK分开,分开后,所谓的三次握手本质就是四次握手了。

相关文章:
UDP/TCP协议解析
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
力扣94题(java语言)
题目 思路 使用一个栈来模拟递归的过程,以非递归的方式完成中序遍历(使用栈可以避免递归调用的空间消耗)。 遍历顺序步骤: 遍历左子树访问根节点遍历右子树 package algorithm_leetcode;import java.util.ArrayList; import java.util.List; import…...
JavaScript基础入门:构建动态Web世界的基石
简要介绍JavaScript作为互联网上最流行的编程语言之一,它在构建交互式网页、动态Web应用及服务器后端(通过Node.js)中的重要性。强调学习JS对于任何想要进入Web开发领域的人来说是不可或缺的。 1. JavaScript是什么? 定义JavaSc…...
01-client-go
想学习K8S源码,可以加 :mkjnnm 1、介绍 client-go 是用来和 k8s 集群交互的go语言客户端库,地址为:https://github.com/kubernetes/client-go client-go 的版本有两种标识方式: v0.x.y (For each v1.x.y Kubernetes…...
WebRTC QoS方法十三.2(Jitter延时的计算)
一、背景介绍 一些报文在网络传输中,会存在丢包重传和延时的情况。渲染时需要进行适当缓存,等待丢失被重传的报文或者正在路上传输的报文。 jitter延时计算是确认需要缓存的时间 另外,在检测到帧有重传情况时,也可适当在渲染时…...
PHP进阶:前后端交互、cookie验证、sql与php
单词:construct 构造 destruct 摧毁 empty 空的 trim 修剪 strip 清除 slash 斜线 special 特殊 char 字符 query 询问 构造方法(魔术方法) 构造方法是一种特殊的函数࿰…...
优思学院|ANOVA方差分析是什么?如何用EXCEL进行计算?
在数据分析、六西格玛管理领域中,ANOVA(方差分析)是一种基本的统计工具,广泛用于确定三组或三组以上的独立群体之间的平均值是否存在统计学上的显着差异。ANOVA的主要目的在于评估一个或多个因素的影响,通过比较不同样…...
Mindspore框架循环神经网络RNN模型实现情感分类|(三)RNN模型构建
Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|(二)预训练词向量 Mindspore框架循环神经网络RNN模型实现…...
深度解读大语言模型中的Transformer架构
一、Transformer的诞生背景 传统的循环神经网络(RNN)和长短期记忆网络(LSTM)在处理自然语言时存在诸多局限性。RNN 由于其递归的结构,在处理长序列时容易出现梯度消失和梯度爆炸的问题。这导致模型难以捕捉长距离的依…...
安装好anaconda,打开jupyter notebook,新建 报500错
解决办法: 打开anaconda prompt 输入 jupyter --version 重新进入jupyter notebook: 可以成功进入进行代码编辑...
C++20之设计模式:状态模式
状态模式 状态模式状态驱动的状态机手工状态机Boost.MSM 中的状态机总结 状态模式 我必须承认:我的行为是由我的状态支配的。如果我没有足够的睡眠,我会有点累。如果我喝了酒,我就不会开车了。所有这些都是状态(states),它们支配着我的行为:…...
数据库安全综合治理方案(可编辑54页PPT)
引言:数据库安全综合治理方案是一个系统性的工作,需要从多个方面入手,综合运用各种技术和管理手段,确保数据库系统的安全稳定运行。 方案介绍: 数据库安全综合治理方案是一个综合性的策略,旨在确保数据库系…...
人工智能:大语言模型提示注入攻击安全风险分析报告下载
大语言模型提示注入攻击安全风险分析报告下载 今天分享的是人工智能AI研究报告:《大语言模型提示注入攻击安全风险分析报告》。(报告出品方:大数据协同安全技术国家工程研究中心安全大脑国家新一代人工智能开放创新平台) 研究报告…...
【购买源码时有许多需要注意的坑】
购买源码时有许多需要注意的“坑”,这些坑可能会对项目的后续开发和使用造成严重影响。以下是一些需要特别注意的方面: 源码的完整性 编译测试:确保到手的源码能够从头至尾编译、打包、部署和功能测试无误。这一步非常关键,因为只…...
CAS的三大问题和解决方案
一、ABA问题的解决方案 变量第一次读取的值是1,后来其他线程改成了3,然后又被其他线程修改成了1,原来期望的值是第一个1才会设置新值,第二个1跟期望不符合,但是,可以设置新值。 解决方案: &a…...
EDA和统计分析有什么区别
EDA(Electronic Design Automation)和统计分析在多个方面存在显著的区别,这些区别主要体现在它们的应用领域、目的、方法以及所使用的工具上。 EDA(电子设计自动化) 定义与目的: EDA是电子设计自动化&…...
CentOS 7 修改DNS
1、nmcli connection show 命令找到设备名称 # nmcli connection show NAME UUID TYPE DEVICE enp4s0 99559edf-4e0a-4bae-a528-6d75065261e9 ethernet enp4s0 2、nmcli connection modify 命令修改dns nmcli connection modif…...
PHP基础语法-Part2
if-else语句、switch语句 与其他语言相同 循环结构 for循环while循环do-while循环foreach循环,搭配数组使用 foreach ($age as $avlue) //只输出值 {xxx; } foreach ($age as $key > $avlue) //键和值都输出 {xxx; }foreach ($age as $key >…...
数据结构门槛-顺序表
顺序表 1. 线性表2. 顺序表2.1 静态顺序表2.2 动态顺序表2.2.1 动态数据表初始化和销毁2.2.2 动态数据表的尾插尾删2.2.3 动态数据表的头插头删2.2.4 动态数据表的中间部分插入删除2.2.5 动态数据表的查询数据位置 3. 总结 1. 线性表 线性表(linear list࿰…...
软件测试面试准备工作
1、 什么是数据库? 答:数据库是按照某种数据模型组织起来的并存放二级存储器中的数据集合。 2、 什么是关系型数据库? 答:关系型数据库是建立在关系数据库模型基础上的数据库, 借助集合代数等概念和方法处理数据库中的数据。目前主流的关…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
