📌本篇摘要:

  • 本篇将承接上次的UDP系列网络编程,来深入认识下UDP协议结构,特性,底层原理,注意事项及应用场景

在这里插入图片描述
在这里插入图片描述

🏠欢迎拜访🏠:点击进入博主主页
📌本篇主题📌:再续UDP协议
📅制作日期📅: 2025.09.01
🧭隶属专栏🧭:点击进入所属Linux专栏

一. 🔍再识UDP协议

  • 传输层:负责数据能够从发送端传输到接收端。

  • 可以先理解成用于数据在传输层封装的协议。

💡再认识传输层上面那常见的几个层结构:

会话层: 用于连接与断开的(如tcp)。

表示层:可以理解成之前我们用于序列化与反序列化。

应用层:用户设计一些通信完成的功能。

这里UDP就是在这层工作的:
在这里插入图片描述

二. 🔥重新认识下端口号

  • TCP/IP协议(包含UDP)中常见五元组:“源 IP”, “源端口号”, “目的 IP”, “目的端口号”, “协议号”(可以用netstat -n 查看)。

端口号范围划分

  • 0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的。

  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。</font>

认识知名端口号(Well-Know Port Number)

有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号:

  • ssh 服务器,使用 22 端口。

  • ftp 服务器,使用 21 端口。

  • telnet 服务器,使用 23 端口。

  • http 服务器,使用 80 端口。

  • https 服务器,使用 443端口。

使用下面指令查看知名端口号(也就是我们网络通信的时候绑定要避开的端口号):

cat /etc/services

如下:

在这里插入图片描述

💡重新认识下之前的两个问题:

  • 一个进程是否可以 bind 多个端口号?
  • 一个端口号是否可以被多个进程 bind?

原因:端口号的目的是通过它找到指定进程!

三.⚠️ UDP 协议端格式

首先看张图了解下:
在这里插入图片描述

上面有了五大元组的目的端口号与源端口号(剩下的会在ip层完成封装)

  • 16 位 UDP 长度表示整个数据报(UDP 首部+UDP 数据)的最大长度。

  • 16位UDP校验和:如果校验和出错,就会直接丢弃。

⚠️ 那么数据如果要是有的话,可以是2^16-1-8个字节数据, 如果比它多了就需要应用层手动的分包,多次发送,并在接收端手动拼装

其实传输的就是上面样式的结构体:

struct udphdr {
uint16_t uh_sport;/* 源端口 */
uint16_t uh_dport;/*目的端口 */
uint16_t uh_ulen;/* UDP 长度 */
uint16 _t uh_sum;/*校验和 */
};

因为内核规定的端口号就是16位,因此我们要传递的就是这个格式。

四. ⏳UDP特点

  • 无连接: 知道对端的 IP 和端口号就直接进行传输,不需要建立连接。

  • 不可靠: 没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP 协议层也不会给应用层返回任何错误信息。

  • 面向数据报:不能够灵活的控制读写数据的次数和数量。

下面再深入了解下不可靠性以及面向数据报

1. 🎆对于它的不可靠性:

- udp无发送缓冲区,故不能像tcp那样可以先把数据储存在发送缓冲区,如果它的接收缓冲区满了导致没收到数据,就可以再次把保存在发送缓冲区的数据再发一次! udp如果发送的时候接收缓冲区满了,或者其他原因就会丢包现象!

2. 🎆对于面向数据报:

  • 应用层交给 UDP 多长的报文,UDP 原样发送,既不会拆分,也不会合并:

比如UDP传输100字节数据,如果发送端调用一次 sendto,发送 100 个字节,那么接收端也必须调用对应的100次 recvfrom,接收 100 个字节; 而不能循环调用 10 次recvfrom,每次接收 10 个字节

  • 可以简单理解成udp对数据发的信息原样转发出去,不能像tcp那样灵活读取,这里就认为是一团数据,一口气发送或者接收!

五. UDP缓冲区

  • UDP 没有真正意义上的 发送缓冲区.调用 sendto 会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。

  • UDP 具有接收缓冲区.但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致; 如果缓冲区满了,再到达的 UDP 数据就会丢弃。

这里有个疑问,为啥它没发送缓冲区?

  • 面向用户数据报:它只要遇到用户准备的数据就直接进行转发!

  • 无连接特性:不用像tcp那样先连接好才能通信,需要等待这个时间,所以把它放到对应的发送缓冲区!

  • 3.尽力而为服务:它是不可靠的,udp只管完成认为把用户准备发的信息发送出去,不管可靠交付、顺序到达以及无重复等!

  • 4.实时性要求:一般适用于如音频、视频流的传输等需要实时更新的任务,如果设置了发送缓冲区,就会导致数据等待而产生延迟,这点就不能保证了!

六. 底层基于 UDP 的应用层协议

  • NFS: 网络文件系统。

  • TFTP:简单文件传输协议。

  • DHCP:动态主机配置协议 比如路由器给电脑分配的ip地址。

  • BOOTP:启动协议(用于无盘设备启动)。

  • DNS:域名解析协议 http时候的解析域名成ip。

  • 当然,也包括自己写 UDP 程序时自定义的应用层协议。

常用于 可靠性低 允许丢包 语音 比赛等实时性高的通信任务!

七. 🎃OS如何管理封装的报文

首先我们说到了UDP有接收缓冲区,当收到数据包的时候,OS也是需要管理的。

首先我们先理解一下sk _buff这里就是os用来管理在那几层传递的报文:

下面看张图(这里把TCP换成UDP是一样的):
在这里插入图片描述

  • 假设操作系统收到对应的报文,在链路层进行“先描述后组织“(可以认为就是对sk_buff进行链表式的组织然后就能通过里面对应的指针找到内存里的数据!),再一层一层往上交互进行解包等操作。

这里只需要认识四个指针:

  • head,end就是对应的内存空间划分。

  • data,tail就会是对应数据,当进行发送就要添加不同层的报头,那么此时data就–,如果是进行接收也就是解包,此时data再++,tail标识的就是这段报文的结尾.

也就是根据 报文 =报头+ 有效载荷 这一原则进行的。

sk_buff结构代码如下:

struct sk_buff {/* List management pointers */struct sk_buff_head *list;struct sk_buff *next;/* Control buffer for private use */char cb[48] __aligned(8);/* Pointers to the data in the buffer */unsigned char *head, *data;unsigned char *tail, *end;/* Length of the buffer */unsigned int truesize;/* Reference count */atomic_t users;/* State flags */unsigned int state;/* Destructor function */void *destructor;/* Protocol type */__be16 protocol;/* Length of the packet */unsigned int len;/* Length of the data in the buffer */unsigned int data_len;/* MAC header length */__u16 mac_len;/* Network header length */__u16 network_header_len;/* Transport header length */__u16 transport_header_len;/* Timestamp */struct timespec64 tstamp;/* Socket pointer */struct sock *sk;/* Network device pointer */struct net_device *dev;/* Space in front of data (headroom) */unsigned int headroom;/* Space at the end of data (tailroom) */unsigned int tailroom;
};

这里只需大致了解一下即可!

❗此时还有个小问题:

如果应用层正在进行报文的解析,处理,会不会影响OS继续从网络中读取报文?

  • 答:不会,因此我们就可以知道,当udp在进行数据接收后在进行解析的时候(应用层),但是底层还是会不断接收信息(以sk_buff形式管理),也就是利用了os的中断机制了,因此是可以同时进行的!

八. 📌UDP协议总结

🔍特性分析

  • 核心特性:无连接、不可靠传输,以数据报为单位,首部仅8字节,传输效率高。

  • 优势:无需建立连接,传输速度快、延迟低,支持广播/多播 ,资源消耗少。

  • 劣势:不保障数据完整性、有序性,易丢包,网络差时问题更突出。

🔍应用场景及注意事项:

  • 实时音视频(直播、视频会议、语音通话)

应用原因:低延迟保证画面、声音连贯性。

注意事项:需在应用层补充丢包恢复机制(如FEC前向纠错)、抗抖动缓冲处理。

  • 在线游戏

应用原因:快速传输玩家操作信息,确保游戏流畅。

注意事项:增加状态同步机制,解决少量数据丢失或乱序问题。

  • 网络管理(SNMP)

应用原因:频繁发送管理信息,UDP开销小更合适。

注意事项:关键管理指令需设计应用层确认重传机制。

  • 广播与多播(网络电视、在线广播)

应用原因:支持同时向多目标发送相同数据。

注意事项:对带宽依赖高,需控制数据报大小,避免网络拥塞 。

九. 📌本篇小结

  • 本篇介绍了在之前经历了UDP编程后,有了一定基础认识,再深入的了解了UDP大致结构及相关信息后,更加丰富了对UDP的理解,后续将进行TCP相关的讲解,欢迎订阅!

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

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

相关文章

《A Study of Probabilistic Password Models》(IEEE SP 2014)——论文阅读

提出更高效的密码评估工具&#xff0c;将统计语言建模技术引入密码建模&#xff0c;系统评估各类概率密码模型性能&#xff0c;打破PCFGw的 “最优模型” 认知。一、研究背景当前研究存在两大关键问题&#xff1a;一是主流的 “猜测数图” 计算成本极高&#xff0c;且难以覆盖强…

校园外卖点餐系统(代码+数据库+LW)

摘要 随着校园生活节奏的加快&#xff0c;学生对外卖的需求日益增长。然而&#xff0c;传统的外卖服务存在诸多不便&#xff0c;如配送时间长、菜品选择有限、信息更新不及时等。为解决这些问题&#xff0c;本研究开发了一款校园外卖点餐系统&#xff0c;采用前端 Vue、后端 S…

友思特案例 | 食品行业视觉检测案例集锦(三)

食品制造质量检测对保障消费者安全和产品质量稳定至关重要&#xff0c;覆盖原材料至成品全阶段&#xff0c;含过程中检测与成品包装检测。近年人工智能深度学习及自动化系统正日益融入食品生产。本篇文章将介绍案例三&#xff1a;友思特Neuro-T深度学习平台进行面饼质量检测。在…

SQLynx 3.7 发布:数据库管理工具的性能与交互双重进化

目录 &#x1f511; 核心功能更新 1. 单页百万级数据展示 2. 更安全的数据更新与删除机制 3. 更智能的 SQL 代码提示 4. 新增物化视图与外表支持 5. 数据库搜索与过滤功能重构 ⚡ 总结与思考 在大数据与云原生应用快速发展的今天&#xff0c;数据库管理工具不仅要“能用…

10G网速不是梦!5G-A如何“榨干”毫米波,跑出比5G快10倍的速度?

5G-A&#xff08;5G-Advanced&#xff09;网络技术已经在中国福建省厦门市软件园成功实现万兆&#xff08;10Gbps&#xff09;速率验证&#xff0c;标志着我国正式进入5G增强版商用阶段。这一突破性成果不仅验证了5G-A技术的可行性&#xff0c;也为6G网络的发展奠定了坚实基础。…

Linux笔记---UDP套接字实战:简易聊天室

1. 项目需求分析 我们要设计的是一个简单的匿名聊天室&#xff0c;用户的客户端要求用户输入自己的昵称之后即可在一个公共的群聊当中聊天。 为了简单起见&#xff0c;我们设计用户在终端当中与客户端交互&#xff0c;而在一个文件当中显式群聊信息&#xff1a; 当用户输入的…

RTP打包与解包全解析:从RFC规范到跨平台轻量级RTSP服务和低延迟RTSP播放器实现

引言 在实时音视频系统中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;负责会话与控制&#xff0c;而 RTP&#xff08;Real-time Transport Protocol&#xff09;负责媒体数据承载。开发者在实现跨平台、低延迟的 RTSP 播放器或轻量级 RTSP 服务时&a…

Ubuntu 用户和用户组

一、 Linux 用户linux 是一个多用户操作系统&#xff0c;不同的用户拥有不同的权限&#xff0c;可以查看和操作不同的文件。 Ubuntu 有三种用户1、初次创建的用户2、root 用户---上帝3、普通用户初次创建的用户权限比普通用户要多&#xff0c;但是没有 root 用户多。Linux 用户…

FastGPT社区版大语言模型知识库、Agent开源项目推荐

​ FastGPT 项目说明 项目概述 FastGPT 是一个基于大语言模型&#xff08;LLM&#xff09;的知识库问答系统&#xff0c;提供开箱即用的数据处理和模型调用能力&#xff0c;支持通过可视化工作流编排实现复杂问答场景。 技术架构 前端: Next.js TypeScript Chakra UI 后…

jsencrypt公钥分段加密,支持后端解密

前端使用jsencryp实现分段加密。 解决长文本RSA加密报错问题。 支持文本包含中文。 支持后端解密。前端加密代码&#xff1a; // import { JSEncrypt } from jsencrypt const JSEncrypt require(jsencrypt) /*** 使用 JSEncrypt 实现分段 RSA 加密&#xff08;正确处理中文字符…

生成一份关于电脑电池使用情况、健康状况和寿命估算的详细 HTML 报告

核心作用 powercfg /batteryreport 是一个在 Windows 命令提示符或 PowerShell 中运行的命令。它的核心作用是&#xff1a;生成一份关于电脑电池使用情况、健康状况和寿命估算的详细 HTML 报告。 这份报告非常有用&#xff0c;特别是对于笔记本电脑用户&#xff0c;它可以帮你&…

从 0 到 1 实现 PyTorch 食物图像分类:核心知识点与完整实

食物图像分类是计算机视觉的经典任务之一&#xff0c;其核心是让机器 “看懂” 图像中的食物类别。随着深度学习的发展&#xff0c;卷积神经网络&#xff08;CNN&#xff09;凭借强大的特征提取能力&#xff0c;成为图像分类的主流方案。本文将基于 PyTorch 框架&#xff0c;从…

Python 值传递 (Pass by Value) 和引用传递 (Pass by Reference)

Python 值传递 {Pass by Value} 和引用传递 {Pass by Reference}1. Mutable Objects and Immutable Objects in Python (Python 可变对象和不可变对象)2. Pass by Value and Pass by Reference2.1. What is Pass by Value in Python?2.2. What is Pass by Reference in Python…

aippt自动生成工具有哪些?一文看懂,总有一款适合你!

在当今快节奏的工作与学习环境中&#xff0c;传统耗时的PPT制作方式已难以满足高效表达的需求。随着人工智能技术的发展&#xff0c;AI自动生成PPT工具应运而生&#xff0c;成为提升演示文稿制作效率的利器。这类工具通过自然语言处理和深度学习技术&#xff0c;能够根据用户输…

Langflow 框架中 Prompt 技术底层实现分析

Langflow 框架中 Prompt 技术底层实现分析 1. Prompt 技术概述 Langflow 是一个基于 LangChain 的可视化 AI 工作流构建框架&#xff0c;其 Prompt 技术是整个系统的核心组件之一。Prompt 技术主要负责&#xff1a; 模板化处理&#xff1a;支持动态变量替换的提示词模板变量验证…

前端、node跨域问题

前端页面访问node后端接口跨域报错 Access to XMLHttpRequest at http://192.18.31.75/api/get?namess&age19 from origin http://127.0.0.1:5500 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 这个报…

超越马力欧:如何为经典2D平台游戏注入全新灵魂

在游戏开发的世界里&#xff0c;2D平台游戏仿佛是一位熟悉的老朋友。从《超级马力欧兄弟》开启的黄金时代到现在&#xff0c;这个类型已经经历了数十年的演变与打磨。当每个基础设计似乎都已被探索殆尽时&#xff0c;我们如何才能打造出一款令人耳目一新的平台游戏&#xff1f;…

基于Springboot + vue3实现的时尚美妆电商网站

项目描述本系统包含管理员和用户两个角色。管理员角色&#xff1a;商品分类管理&#xff1a;新增、查看、修改、删除商品分类。商品信息管理&#xff1a;新增、查看、修改、删除、查看评论商品信息。用户管理&#xff1a;新增、查看、修改、删除用户。管理员管理&#xff1a;查…

网络协议之https?

写在前面 https协议还是挺复杂的&#xff0c;本人也是经过了很多次的学习&#xff0c;依然感觉一知半解&#xff0c;无法将所有的知识点串起来&#xff0c;本次学习呢&#xff0c;也是有很多的疑惑点&#xff0c;但是还是尽量的输出内容&#xff0c;来帮助自己和在看文章的你来…

word运行时错误‘53’,文件未找到:MathPage.WLL,更改加载项路径完美解决

最简单的方法解决&#xff01;&#xff01;&#xff01;安装Mathtype之后粘贴显示&#xff1a;运行时错误‘53’&#xff0c;文件未找到&#xff1a;MathPage.WLLwin11安装mathtype后会有这个错误&#xff0c;这是由于word中加载项加载mathtype路径出错导致的&#xff0c;这时候…