【网络】UDP协议详解

目录

UDP的感性理解

UDP协议格式

UDP协议格式感性理解

 UDP特点

UDP的缓冲区


UDP的感性理解

UDP的传输过程类似于寄信,假设你要写一封家书寄回家里:首先你要在信封上填写好寄件人和收件人的地址,其次在贴好邮票,最后将信件投放到邮筒中。寄信的特点就是信件是否送到,在寄送的过程中有没有丢失,对于寄件人来说是不知道的。所以寄信是一种不可靠的传递,同样的UDP也是一种不可靠的协议。

UDP协议格式

源端口号和目的端口号在计算机网络中用于标识数据包发送和接收的进程或应用程序。

a. 源端口号(16位):发送方计算机上的端口号。

b. 目的端口号(16位):接收方计算机上的端口号。

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

d. UDP校验和(16位):检测 UDP 用户数据报在传输过程中是否出错。如果校验和出错直接丢弃。

UDP的报头是固定的8字节。

UDP协议格式感性理解

linux内核是用C语言写的,所以报头实际上就是一种结构化的数据对象,用伪代码可表示为如下结构:

 解包分用的过程同样可以用上述的思路去分析:

我们知道UDP报头是固定大小的8字节,所以可以将要发送的数据拷贝到8字节后的位置,在填充udp_har的各个字段,用伪代码表示如下:

 UDP特点

a. 无连接,知道接收方的IP和端口号就可以直接进行传输,不需要建立连接。

b. 不可靠,没有确认机制,没有重传机制。如果因为网络或者其它原因没有传输成功,UDP协议层也不会给应用层返回任何错误信息,也不会重传。

c.面向数据报,应用层交给UDP多长的报文,UDP既不会拆分也不会合并,原样发送。也就是说发送端发送多少个报文,接收方就收取多少个报文,整读整取。

以一个例子理解面向数据报:如果发送端调用一次sendto, 发送200个字节, 那么接收端也必须调用对应的一次recvfrom, 接收200个字节; 而不能循环调用10次recvfrom, 每次接收20个字节。
 

UDP的缓冲区

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


UDP具有接收缓冲区, 但是这个接收缓冲区不能保证收到的UDP报文的顺序和发送UDP报文的顺序一致:

 如果接收缓冲区满了, 再到达的UDP数据就会被丢弃:

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

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

相关文章

36.RocketMQ之Broker如何实现磁盘文件高性能读写

highlight: arduino-light Broker读写磁盘文件的核心技术:mmap Broker中大量的使用mmap技术去实现CommitLog这种大磁盘文件的高性能读写优化的。 通过之前的学习,我们知道了一点,就是Broker对磁盘文件的写入主要是借助直接写入os cache来实现性能优化的&…

论文笔记--SentEval: An Evaluation Toolkit for Universal Sentence Representations

论文笔记--SentEval: An Evaluation Toolkit for Universal Sentence Representations 1. 文章简介2. 文章概括3 文章重点技术3.1 evaluation pipeline3.2 使用 4. 代码4.1 数据下载4.2 句子嵌入4.3 句子嵌入评估 5. 文章亮点6. 原文传送门7. References 1. 文章简介 标题&…

钉钉聊天对话框和截图经常发生白屏

环境: 7.0.30-rel6019102 Win10专业版 L盾加密环境 问题描述: 钉钉聊天对话框和截图经常发生白屏 解决方案: 1.【电脑端钉钉】- 左上角【头像】-【设置】-【高级】- 下拉【网络检测】- 点击【开始检测】 如果变红说明网络有问题&#x…

Moka AI产品后观察:HR SaaS迈进AGI时代

在AI这条路上,Moka已经走了很远。如今的Moka Eva是在此前AI模型基础上的更进一步。未来AGI时代,HR SaaS会有更多可能性。 出品|产业家 在AI潮水里,Moka正在加速快跑。 在6月28日的2023夏季新品发布会上,国内首个AI原生HR Saa…

将一个3x3的OpenCV旋转矩阵转换为Eigen的Euler角

代码将一个3x3的OpenCV旋转矩阵转换为Eigen的Euler角。 #include <iostream> #include <Eigen/Core> #include <Eigen/Geometry> #include <opencv2/core.hpp>using

蓝桥杯刷题-1

文章目录 1.蓝桥杯官网2.蓝桥杯题目进入界面 及 题目详情3.题目解答过程及思路4.运行结果图5.解答代码展示6.ASCII表图例 大家好&#xff0c;我是晓星航。今天为大家带来的是 蓝桥杯刷题 - 1 -单词分析 相关的讲解&#xff01;&#x1f600; 1.蓝桥杯官网 题库 - 蓝桥云课 (l…

【数学建模】 灰色预测模型

数学建模——预测模型简介 https://www.cnblogs.com/somedayLi/p/9542835.html 灰色预测模型 https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc&request_id&biz_id102&utm_term%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%…

SpringBoot的@ConfigurationProperties、@Autowired、@Conditional注解

目录 1. ConfigurationProperties EnableConfigurationProperties Autowired注解1.1 configuration自定义配置参数自动补全功能 2. Conditional注解 1. ConfigurationProperties EnableConfigurationProperties Autowired注解 在resources/application.properties文件中&a…

日撸java三百行day74

文章目录 说明通用BP神经网络之激活函数1. 激活函数2. 激活函数分类1.1 反正切函数&#xff08;ArcTan&#xff09;1.2 指数线性函数&#xff08;ELU&#xff09;1.3 恒等函数1.4 泄漏线性整流函数(LEAKY_RELU)1.5 softsign1.6 softplus1.7 Relu函数1.8 sigmoid函数1.9 双曲正切…

学生信息管理系统——C语言版

C语言版学生信息管理系统 一&#xff0c;开发环境 操作系统&#xff1a;windows10, windows11, linux, mac等。开发工具&#xff1a;Qt, vscode, visual studio等开发语言&#xff1a;c语言 二&#xff0c;功能需求 1. 用户界面: 提供一个简洁的文本界面&#xff0c;用户可…

vs code insiders 配置c语言

vs code insiders 配置c语言 1.下载插件 2.再配置代码 &#xff08;1&#xff09;launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/…

Android Studio实现内容丰富的安卓校园新闻浏览平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号070 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看新闻列表…