传输层协议UDP

        本篇将主要介绍 UDP 协议,介绍了有关 UDP 协议的报头、协议特点、UDP 协议在操作系统中的缓冲区、UDP 协议使用的注意事项,以及有关 UDP 的 Socket 编程程序,同时重点介绍了操作系统对于 UDP 协议报文的管理。

        接着介绍了有关端口号的映射。

目录

UDP协议

1. UDP协议报头

2. UDP协议特点

3. UDP的缓冲区

4. OS对UDP报文的管理

4. UDP 使用的注意事项

5. 基于UDP的应用层协议

6. 基于UDP协议的程序 

端口号的映射

1. 端口号范围划分

2. 端口号与进程的映射

UDP协议

        对于 UDP 报文的格式如下:

1. UDP协议报头

        对于如上 UDP 报文,分别由 16 位的源端口,目的端口,UDP 长度以及 UDP 校验和组成,这样的一个组成在 Linux 源码其实也已经将其抽象为了一个结构体,如下:

        对于 16 位 UDP 长度,表示整个数据报(首部 + 数据)的最大长度;若校验和出错,就会直接将该 UDP 数据包给丢弃。

        通过如上的 UDP 报文结构我们也可以得出,若我们想要将报头和有效载荷进行分离,只需要将前 8 个字节截断即可,因为这是固定长度的报头。当需要将数据向应用层进行分用的时候只需要通过 16 位目的端口和进程的映射就可以直接将数据传输上去。

        那么我们在接收对应的 UDP 报文数据之后,如何轻易的拿到首部中的四个数据呢?我们只需要使用一个 struct udphdr * 一样的指针接收对应的报文,然后就可以拿出对应的四个首部数据了,通过该方法拿出数据,我们只需要注意网络序列的转化,不用担心在不同的操作系统下不兼容的情况,因为所有的操作需求都是由 C 语言写的。

2. UDP协议特点

        UDP 传输协议一共有以下 3 个特点:

无连接:只要知道对方的 IP 和 PORT 就可以直接进行传输,不需要双向进行连接不可靠:没有数据确认机制,没有数据丢失后的重传机制,如果因为网络故障该段无法发送到对方,UDP 协议层也不会给应用层返回任何的错误信息面向数据报:不能够灵活的控制读写数据的次数和数量

         对于以上的不可靠并不能代表这是 UDP 协议的一个缺点,最好将其认识为 UDP 数据报的一个特点,因为不可靠的同时,带来的是传输速率的提高。

        对于面向数据报而言,每一个数据报都是独立的个体,也就是应用层向下发送多大的数据,UDP 就包装多大的数据,并不会将传下来的数据拆分或者合并后在封装(同时,如果在发送端调用 sendto 发送了 100 个字节,那么接收端也必须使用 recvfrom 一次接收 100 个字节的数据,不能分多次来接收)。

3. UDP的缓冲区

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

        UDP 具有接收缓冲区,但是这个接收缓冲区并不能保证收到的 UDP 报文的顺序和发送 UDP 报的顺序一致,同时,若接收缓冲区满了,再达到的 UDP 的数据就会被丢弃。

4. OS对UDP报文的管理

        我们的传输层是属于操作系统内核中的,同时说明对于 UDP 协议的接收缓冲区也是在 OS 中的,在操作系统中可能有着很多的 UDP 数据报在其中,有的数据报存储在缓冲区中准备向上交付,有的数据报正从上层向下传输,这个时候 OS 中充满了 UDP 数据报,这个时候 OS 就会对其进行管理,使用 struct sk_buff 结构体对 UDP 数据报进行管理,管理方法如下:

        在操作系统内会存在一个管理 UDP 数据报的一个结构体 struct sk_buff,同时这个结构体还有一个缓冲区,结构体中的 head 和 data 指针起初都是指向缓冲区的中间,当有数据从应用层向下交付的时候,先将数据拷贝到缓冲区,然后 head 指针向前移动 8 个字节,接着将 UDP 首部的四个数据给填充即可,同时这样的 sk_buff 结构体不止一个,每个结构体之间使用指针相连接,如下:

4. UDP 使用的注意事项

        我们在 UDP 报头中有一个 16 位的报文长度,也就是说对于一个 UDP 能传输的数据最大长度为 64K(包含首部)。但是在当今的互联网环境下,64K 的数据是一个很小的数据量,所以当我们需要传输的数据超过 64K 的时候,就需要在应用层将数据手动分包,分多次发送,并在接收端手动拼装。

5. 基于UDP的应用层协议

        常见的基于 UDP 协议的应用层协议如下:

NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP: 启动协议(用于无盘设备启动)
DNS: 域名解析协议

        同时还包括自己写的基于 UDP 协议的程序。

6. 基于UDP协议的程序 

        如下是一个基于 UDP 协议写的三个程序:UDP/TCP --- Socket编程-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_74830524/article/details/141218715?spm=1001.2014.3001.5501        以上链接便是写的三个程序。

端口号的映射

        对于端口号而言,它标识了一个主机上进行通信的不同的应用程序。特别是在 TCP/IP 协议中,用:源 IP + 源端口号 + 目的 IP + 目的端口号 + 协议号 这五元组来标识一个通信,如下:

1. 端口号范围划分

        对于端口号而言都是 16 位的一个数据,所以一个端口号的范围为:0 ~ 65535,但是其中也分为知名端口号和普通端口号。如下:

0 - 1023:知名端口号,HTTP、FTP、SSH 等这些广为使用的应用层协议,他们的端口都是固定的
1024 - 65535:操作系统动态分配的端口号,客户端程序的端口号,就是操作系统从这个范围分配的

        对于知名端口号而言,我们平时写的程序并不能绑定这些端口号,如下:        

        当想要绑定知名端口号的时候,就会显示权限不够,只有当使用 root 权限才能绑定知名端口。

        其中常见的知名端口号有以下这些:

ssh 服务器:使用22号端口
ftp 服务器:使用21号端口
telnet 服务器:使用23号端口
http 服务器:使用80号端口
https 服务器:使用443号端口

        使用命令 cat /etc/services 就可以看见知名端口号:

2. 端口号与进程的映射

        一个端口号只可以绑定一个进程,但是一个进程可以绑定多个端口,如下:

        如上所示,对于端口号而言其实就像一个已经安排的 hash 表,在表中存储着对应的进程,当传输信息向上传递的时候,找到对应的端口之后就可以直接找到与端口绑定的进程。

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

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

相关文章

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议,也叫TCP/IP协议族(TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信,引…

【数据结构-二维前缀和】力扣1504. 统计全 1 子矩形

给你一个 m x n 的二进制矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1: 输入:mat [[1,0,1],[1,1,0],[1,1,0]] 输出:13 解释: 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩形。 有…

ICLR2024: 大视觉语言模型中对象幻觉的分析和缓解

https://arxiv.org/pdf/2310.00754 https://github.com/YiyangZhou/LURE 背景 对象幻觉:生成包含图像中实际不存在的对象的描述 早期的工作试图通过跨不同模式执行细粒度对齐(Biten et al.,2022)或通过数据增强减少对象共现模…

2024 天池云原生编程挑战赛决赛名单公布,9 月 20 日开启终极答辩

历时 4 个月,2024 天池云原生编程挑战赛决赛名单公布! 本届大赛规模创新高,参赛战队达 20000 支, 广覆盖国内外优秀高校和杰出企业!吸引了来自北京大学、清华大学等 176 所国内外优秀高校,以及美团、米哈游…

2025年25届必看:如何用Java SpringBoot+Vue搭建大学生成绩量化管理系统?

✍✍计算机毕业编程指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java…

青岛实训 8月21号 day33

1.设置主从从mysql57服务器 1)配置主数据库 [rootmsater_5 ~]# systemctl stop filewalld [rootmsater_5 ~]# setenforce 0 [rootmsater_5 ~]# systemctl disable filewalld [rootmsater_5 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.g…

rancher搭建k8s及jenkins自动化部署

1、准备环境 角色IP用途k8s-rancher-master192.168.3.63master节点k8s-rancher-node01192.168.3.64node节点k8s-rancher-node02192.168.3.66node节点k8s-rancher-server192.168.2.33rancher-server节点注: 服务器名需要配置不同,相同服务器名不能加入node节点 在所有节点进行…

jQuery入门(七)jQuery实现按钮分页

一、分页案例分析 功能分析:使用分页插件,实现分页,效果如下图: 二、实现思路和代码 2.1)页面实现分析 1.引入分页插件的样式文件和 js 文件。 2. 定义当前页码和每页显示的条数。(分页必备信息) 3. 调用查询数据…

挂轨巡检机器人在发电厂与煤矿皮带机场景的应用

一、引言 在发电厂和煤矿等重工业领域,皮带机作为关键设备,其运行状态直接关系到生产效率和安全。然而,传统的人工巡检方式不仅效率低下,还存在安全隐患。随着智能巡检技术的不断发展,杭州旗晟智能科技有限公司推出的…

使用mobaxterm连接linux出现连接中断问题

1.问题描述 使用mobaxterm在连接到远程服务器时,如果隔一段时间不进行操作的话,会出现中断连接的现象。 2.解决 为了增强Linux系统的安全性,我们需要在用户输入空闲一段时间后自动断开,这个操作可以由设置TMOUT值来实现。将以下…

HTB-Pennyworth(cve查询 和 exp使用)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Pennyworth靶场 渗透过程 信息搜集 服务器端口开放了8080http端口 访问网站 服务器使用jenkins cms系统,版本是2.289.1 通过弱口令爆破,账户是root,密码是password 通过命令执行nday 连…

【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题

WPS表格 2019版本 升级到 WPS最新版 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 使用最新版就能够解决这个问题,如果仍旧无法解决可以勾选如下配置 重启Excel解决。 请勾选:文件 - 选项 - 编辑 - 不提示且不压缩文件中的图像

vue 踩坑记录

本地开发没有cookie 解决方案 设置代理,并把changeOrigin设为true proxy的changeOrigin如果设置为false:请求头中host仍然是浏览器发送过来的host; 如果设置成true:发送请求头中host会设置成target。 允许axios请求携带cookie等凭…

自制深度学习推理框架之卷积和池化算子的设计与实现

文章目录 一、池化算子1.1 池化定义1.2 maxpooling实现1.2 1 Forward前向计算1.2.2 GetInstance实例化Layer1.2.3 LayerRegistererWrapper注册算子 二、卷积算子2.1 卷积定义2.2 Im2col优化卷积计算2.3 分组卷积2.4 Im2Col实现2.5 卷积算子实现2.5.1 GEMM实现2.5.2 卷积算子的实…

finalshell 4.5.x在m1mac闪退

使用过程中会出现突然闪退,尤其在定位生产打开一堆窗口的情况下,绝绝子 闪退崩溃日志: Thread 116 Crashed:: Java: pool-4-thread-28 0 libsystem_kernel.dylib 0x18e926600 __pthread_kill 8 1 libsystem_pthread.dyl…

2025届最新:Java SpringBoot搭建大学生竞赛管理系统,一步步实现报名到评审,全程助力校园活动

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

2024 年高教社杯全国大学生数学建模竞赛B题—生产过程中的决策问题(讲解+代码+成品论文助攻)

2024数学建模国赛选题建议团队助攻资料-CSDN博客https://blog.csdn.net/qq_41489047/article/details/141925859本次国赛white学长团队选择的是比较擅长的BC题,选题建议和助攻资料可参见上面这篇博文,本篇博文主要介绍B题—生产过程中的决策问题&#xf…

给大模型加上“记忆”,深入探索 Mem0 项目

背景介绍 在之前的软件应用中,我们总会在应用中保留大量的用户历史操作记录,方便用户下次使用时可以快速查看和复用,甚至基于这些用户记录可以为用户提供个性化的服务。而这些记录往往都保存在传统的结构化或非结构化数据库中。 在大模型的…

electron 客户端 windows linux(麒麟V10)多系统离线打包 最新版 <一>

electron客户端下载、构建、打包在国内网络情况下,绝对不是什么易事。更不要说离线干活,更是难上加难。 这一篇主要讲下windows离线环境下,如何完成electron的下载打包。咱废话不多说,直接上干货。注意,我的大前提是完…

软考真题之软件设计师的程序语言设计题型(上午题)

目录 编程程序和解释程序 相关习题 函数 编译,解释和翻译阶段 符号表 ​编辑 相关习题 ​编辑 词法分析 语法分析 语义分析 目标代码生成 相关习题 中间代码生成 正规式 相关习题 有限自动机 相关习题 上下文无关文法 相关习题 比较偏的真题 编程程序和解…