当前位置: 首页 > news >正文

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专栏》&#xff1…...

力扣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 询问 构造方法(魔术方法) 构造方法是一种特殊的函数&#xff0…...

优思学院|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&#xff0…...

软件测试面试准备工作

1、 什么是数据库? 答:数据库是按照某种数据模型组织起来的并存放二级存储器中的数据集合。 2、 什么是关系型数据库? 答:关系型数据库是建立在关系数据库模型基础上的数据库, 借助集合代数等概念和方法处理数据库中的数据。目前主流的关…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...