【Linux】【网络】传输层协议:UDP

文章目录

  • UDP 协议
    • 1. 面向数据报
    • 2. UDP 协议端格式
    • 3. UDP 的封装和解包
    • 4. UDP 的缓冲区

UDP 协议

UDP传输的过程类似于寄信。

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

1. 面向数据报

数据报是独立的一整个,应用层交给 UDP 多长的报文,UDP原样发送,既不会拆分,也不会合并。

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

2. UDP 协议端格式

在这里插入图片描述

UPD 的协议报头长度是 固定的 8字节

16位 UDP 长度,表示整个数据报(UDP 首部 + UDP 数据)的 最大长度,即 216 = 64kb

如果校验和出错, 就会直接丢弃。

报头(协议)的本质其实就是:结构化数据(结构体、位段)

// 结构体实现
struct udp_header
{uint16_t src_port;uint16_t dst_port;uint16_t udp_len;uint16_t check;
};
// 位段实现
struct udp_header
{uint32_t src_port:16;uint32_t dst_port:16;//...
};

3. UDP 的封装和解包

🎯封装

  • 应用层将信息拷贝给传输层,用 char* p 指针指向一个缓冲区,前面放 UDP 结构报头(固定 8 字节),后面放有效载荷,对报头内容的填充就可以写作:
((struct udp_header*)p)->src_port = xx;
((struct udp_header*)p)->dst_port = xx;
((struct udp_header*)p)->udp_len = xx;
((struct udp_header*)p)->check = xx;

🎯封装

  • 应用层将信息拷贝给传输层,用 char* p 指针指向一个缓冲区,前面放 UDP 结构报头(固定 8 字节),后面放有效载荷,对报头内容的填充就可以写作:
((struct udp_header*)p)->src_port = xx;
((struct udp_header*)p)->dst_port = xx;
((struct udp_header*)p)->udp_len = xx;
((struct udp_header*)p)->check = xx;

4. UDP 的缓冲区

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

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

UDP 的 socket 既能读,也能写, 这个概念叫做 全双工

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

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

相关文章

接口测试总结

一、了解一下HTTP与RPC 1. HTTP(HyperText Transfer Protocol) 说明:超文本传输协议,是互联网上应用最为广泛的一种网络协议。 优点:就是简单、直接、开发方便,利用现成的http协议进行传输。 流程图: 2. R…

第二证券:栽了!这几人操纵市场吃罚单

证监会日前发布一则“罚单”,再次剑指操作商场。 证监会对时任国银新投实践控制人苏剑锋,时任国银新投投研部总监曾帅,时任道尔智控董事长、实践控制人王志刚操作“道尔智控”的行为进行了立案查询、审理,发现上述当事人一同操作…

聚势共赢!爱创科技喜获“腾讯健康年度优秀合作伙伴”!

2023年9月7日—8日,2023腾讯全球数字生态大会在深圳国际会展中心成功举办。来自行业的重磅院士学者、企业代表、生态伙伴等共赴大会,围绕“智变加速,产业焕新”这一活动主题进行了深层次、全方位的交流和探讨,共话大模型时代下数智…

如何制作gif动图gif (多图合成gif、GIF录制软件、视频制作成GIF动图)

文章目录 1 在线制作多图合成gif动画2 GIF录制软件3 将现有的视频 制作成GIF动图 1 在线制作多图合成gif动画 在线制作gif动画链接:https://www.matools.com/gif ①选择需要制作gif动画的图片将其添加 ②调整时间间隔,图片宽高等设置 ③一键生成gif ④下载到本…

阿里云服务器新手教程_省钱购买_配置_搭建网站全教程

阿里云服务器使用教程包括云服务器购买、云服务器配置选择、云服务器开通端口号、搭建网站所需Web环境、安装网站程序、域名解析到云服务器公网IP地址,最后网站上线全流程,阿里云百科分享阿里云服务器详细使用教程: 目录 阿里云服务器使用教…

为什么 0.1 + 0.1 !== 0.2

总结了几个很有意思的基础题目,分享一下。 为什么 0.1 0.1 ! 0.2 看到这个问题,不得不想到计算机中的数据类型,其中浮点数表示有限的精度。那么它就无法精确的表示所有的十进制小数,所以在在某些情况下,浮点数的运算…

基座向量施密特正交化

最近再次细细的阅读了向量施密特正交化,重新系统梳理一下 一、正交基地与向量的正交分解 二、基化成标准正交基,是什么意思 将一个向量空间中的基向量通过某种方式转化为一组标准正交基,是指将原有的基向量进行调整,使得它们满足…

安卓:解决AndroidStudio导出Unity的Apk(APP)出现2个显示图标

用AndroidStudio打开该项目 实现只保留1个app图标 AndroidManifest.xml的改法如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"com.fru…

IO流(字节流与字符流) 和 File对象 详解与使用

IO流 和 File对象 理论概念 为什么需要io流呢&#xff1f; 如上图这些基本数据类型和对象以及列表都是内存中的数据&#xff0c;只要断电或者程序停止&#xff0c;这些数据将会永久消失。 那么如果我需要长久保存一些数据怎么办&#xff1f;(持久化) 那么就需要使用File对象…

C++ - unordered系列关联式容器介绍 - 和 set map 的比较

前言 C - map 和 set 使用介绍_chihiro1122的博客-CSDN博客 C - map 和 set的 例题_chihiro1122的博客-CSDN博客 C - map 和 set 的模拟实现上篇 - 红黑树当中的仿函数 - 红黑树的迭代器实现-CSDN博客、 C - set 和 map 的实现&#xff08;下篇&#xff09;- set 和 map 的迭…

自定义热加载:如何不停机实现核心代码更新

文章目录 1. 常见的几种实现代码热更新的几种方式对于开发环境我们可以使用部署环境1. 使用 Arthas 的 redefine 命令来加载新的 class 文件2. 利用 URLClassLoader 动态加载3. 通过Java的Instrumentation API 也是可以实现的 2. 实现1. ClassScanner扫描目录和加载类2. 定时任…

Grafana 开源了一款 eBPF 采集器 Beyla

eBPF 的发展如火如荼&#xff0c;在可观测性领域大放异彩&#xff0c;Grafana 近期也发布了一款 eBPF 采集器&#xff0c;可以采集服务的 RED 指标&#xff0c;本文做一个尝鲜介绍&#xff0c;让读者有个大概了解。 eBPF 基础介绍可以参考我之前的文章《eBPF Hello world》。理…

【Git】轻松学会 Git(一):掌握 Git 的基本操作

文章目录 前言一、创建 Git 本地仓库1.1 什么是仓库1.2 创建本地仓库1.3 .git 目录结构 二、配置 Git三、认识 Git 的工作区、暂存区和版本库3.1 什么是 Git 的工作区、暂存区和版本库3.2 工作区、暂存区和版本库之间的关系 四、添加文件4.1 添加文件到暂存区和版本库中的命令4…

深度学习-优化器

1.梯度下降 最开始的梯度下降算法&#xff0c;更新权重的方法是theta theta - learning_rate * gradient(loss),loss是损失函数。但是这种方法只关心当前的梯度&#xff0c;如果坡度较缓&#xff0c;则它依然会以一种缓慢的速度下降&#xff0c;我们先举个例子&#xff0c;使…

光耦的原理和作用

光耦又叫光电耦合器。 这个是四脚光耦的电路符号&#xff0c;12之间是一个发光二极管&#xff0c;34之间是一个光电三极管&#xff0c;光藕就相当于把发光二极管和光电三极管封装在一个密闭的壳体中的器件。 当光耦发光二极管两端没有电压或电压不足使他导通时&#xff0c;发光…

2023-9-27 JZ55 二叉树的深度

题目链接&#xff1a;二叉树的深度 import java.util.*; /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;}} */ public class Solution {public int TreeDepth(TreeNode root) {if(root null) ret…

什么是HTTP/2?它与HTTP/1.1相比有什么改进?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTTP/2 简介⭐ 主要的改进和特点⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端…

二叉树MFC实现

设有一颗二叉树如下&#xff1b; 这似乎是一颗经常用作示例的二叉树&#xff1b; 对树进行遍历的结果是&#xff0c; 先序为&#xff1a;3、2、2、3、8、6、5、4&#xff0c; 中序为&#xff1a;2、2、3、3、4、5、6、8&#xff0c; 后序为2、3、2、4、5、6、8、3&#xff1b…

Java编译运行结果乱码

一、问题 编译运行结果乱码 二、处理方法 方法1&#xff1a;将.java文件另存为编码设置为ANSI 方法2&#xff1a;使用命令参数 encoding javac -encoding utf-8 csdn.java 当你文件编码格式是utf-8需要指定java编译器的编码格式&#xff0c;如果没有用到encoding参数指定ja…

渗透测试中的前端调试(一)

前言 前端调试是安全测试的重要组成部分。它能够帮助我们掌握网页的运行原理&#xff0c;包括js脚本的逻辑、加解密的方法、网络请求的参数等。利用这些信息&#xff0c;我们就可以更准确地发现网站的漏洞&#xff0c;制定出有效的攻击策略。前端知识对于安全来说&#xff0c;…