Linux学习笔记——UDP协议

news2024/11/24 7:03:05

文章目录

  • UDP协议端格式
  • UDP的特点
  • 面向数据报
  • UDP的缓冲区
  • 基于UDP的应用层协议
  • UDP使用注意事项
  • 16位的UDP校验和的校验原理

UDP协议端格式

在这里插入图片描述

  • 16位源端口号:数据从哪一个端口发出来的,也就是数据从哪一个进程发送出来的。在编写应用层代码的时候,用uint16_t是因为协议的端口号是16位。
  • 16位目的端口号:数据想要到哪一个端口去,也就是数据想要去往哪一个进程。
  • 16位UDP长度:表示整个数据报(UDP头部+UDP数据)的最大长度。通过16位的UDP固定长度的报头,UDP可以正确的提取完整的报文信息。
  • 16位的UDP校验和:校验数据在传输过程中是否失真,数据在传输的过程中需要经过很多链路设备,如果在转发过程中有某个字节损坏,就相当于整个这个数据失真了,如果UDP接收方校验和出错,就会直接将数据丢弃掉,且不会通知发送方。
  • 16位能够表示的数据最大位长度位2^16=65536—>指的是UDP数据的最大长度。

UDP的特点

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

面向数据报

    应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。例如:用UDP协议传输100个字节的数据,如果发送端调用一次sendto,发送100个字节;那么接收端也必须调用对应的一次recvfrom,接收100个字节,而不能循环调用10次recvfrom,每次接收10个字节。


UDP的缓冲区

    UDP没有真正意义上的发送缓冲区,调用sendto函数会直接将数据交给内核,由内核将数据传给网络层协议进行后续的传输动作,在网络中进行数据的收发,本质上就是拷贝函数,将数据拷贝给OS内核。即UDP协议会将应用层的数据打上UDP报头后直接递交给网络层。

    UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。即UDP协议会将去掉UDP报头后的数据递交给应用层,但是UDP协议不能保证数据的有效到达。

    UDP的socket接口既能读也能写,属于全双工通信。


基于UDP的应用层协议

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

UDP使用注意事项

   UDP数据长度是用16位表示,即16位能够表示的数据最大位长度位2^16=65536约等于64K(包含UDP首部),然而64K在当今的互联网环境下, 是一个非常小的数字。如果我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

   当数据在应用层会被打上应用层的报头,在报头中会有数据的长度和两个标识,一个标识用来标识是否属于同一条数据,另一个标识用来标识当前数据在整个完整的数据的什么位置,相当于偏移量。
在这里插入图片描述


16位的UDP校验和的校验原理

   16位的UDP校验和用来检验数据在传输的过程中是否失真,发送方进行填充,接收方进行校验。

   发送填充是将除了校验和的16位比特位,其余的按照16个比特位相加,在相加的过程中如果出现比特位超过16位的情况需要进行回卷,回卷的策略:最高位+低16位计算出来的新值。加完的结果进行反码运算,将反码运算的结果放到16位的校验和当中。接收方是如果校验成功,会将数据交给应用层;如果校验失败,即使数据已经到达了接收方传输层的UDP协议,也会被丢弃,有可能在传输的过程中失真。
在这里插入图片描述

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

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

相关文章

Git安装使用教程

Git - Downloadshttps://git-scm.com/downloads 安装 Git。可以在 Git 官网上下载安装包并按照提示进行安装。 GitHub或Gitee官网上注册一个账号,注册好后,桌面右键选择Git Bash,进行账号配置,命令如下: # 配置用户名…

spark第八章:Pyspark

系列文章目录 spark第一章:环境安装 spark第二章:sparkcore实例 spark第三章:工程化代码 spark第四章:SparkSQL基本操作 spark第五章:SparkSQL实例 spark第六章:SparkStreaming基本操作 spark第七章&#…

带隙基准基本原理

目录 负温度系数电压 正温度系数电压 带隙基准 小结 如何产生一个不受温度变化,保持恒定的电压基准呢? 我们假设,如果将两个具有相反温度系数(TC)的量以适当的权重相加,那么结果就会成为零温度系数&am…

MIT6.824 lab2C2D实验总结

2C 就是持久化一些变量,日志,任期,投票给谁,2D(lastincludeterm, lastincludeindex, snapshot)。同时最难受的是Figure8Unreliable这个测试点,总是几百次出现一两个错误。最后发现是对论文一句话的歧义。这里讲解一下…

Linux(DHCP原理与配置)

文章目录一 、什么是DHCP1.1DHCP定义1.2DHCP好处1.3DHCP的分配方式二 、DHCP 的工作过程三 、DHCP中的设置3.1 DHCP参数3.2 相关操作步骤一 、什么是DHCP 1.1DHCP定义 DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围…

swagger文件上传接口没有选择文件按钮问题解决 使用@RequestPart注解

在使用文件上传API时,swagger没有选择文件按钮 在MultipartFile前面加上RequestPart注解 PostMapping("/importFile")ApiOperation(value "文件上传API")public Object importFile(ApiParam(value "文件流", required true) Reque…

超越ChatGpt,最近爆火的AutoGPT 究竟是什么

一、AutoGPT是什么 最近几天,一款基于GPT-4的最强语言模型AutoGPT火遍了整个AI圈。众所周知,此前爆火AI圈的ChatGPT,唯一不太好用的地方就是需要人类不断的prompt。因此,如果你想要ChatGPT帮你去做一件复杂的事情,那么…

第九章 法律责任与法律制裁

第九章 法律责任与法律制裁_副本 目录 第一节 法律责任的概念 一 法律责任的含义二 法律责任的特点 第二节 法律责任的分类与竞合 一 法律责任的分类 (一)根据责任行为所违反的法律的性质 民事责任:刑事责任行政责任违宪责任 (二…

【云原生 • Docker】cAdvisor+Prometheus+Grafana 10分钟搞定Docker容器监控平台

文章目录cAdvisorPrometheusGrafana 10分钟搞定Docker容器监控平台cAdvisor部署Prometheus部署Grafana部署cAdvisorPrometheusGrafana 10分钟搞定Docker容器监控平台 cAdvisor(Container Advisor) 是 Google 开源的一个容器监控工具,可用于对容器资源的使用情况和性…

企业级信息系统开发讲课笔记3.1 基于配置文件整合SSM框架实现用户登录

文章目录零、本节学习目标一、采用MVC架构二、用户登录运行效果三、基于XML配置方式整合SSM框架实现用户登录(一)创建数据库与表1、创建数据库2、创建用户表3、在用户表里插入记录(二)创建Maven项目(三)项目…

【手把手刷CCF】202303-2-垦田计划100分(超简单思路,含详细解释注释与代码)

文章目录:故事的开头总是极尽温柔,故事会一直温柔……💜一、🌳代码如下:二、🌵解题思路❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!故事的开头总是极尽温柔,故事会一直温柔……&…

vector使用+模拟实现

目录 vector介绍 常见接口 构造函数 迭代器 容量操作 元素访问 增删查改 模拟实现 模拟实现要点图解 整体代码 迭代器失效问题 内部失效 外部失效 深浅拷贝问题 vector介绍 vector是表示可变大小数组的序列式容器。vector采用连续的空间存储元素,大小…

HTML5 <meta> 标签

HTML5 <meta> 标签 实例 描述 HTML 文档的元数据&#xff1a; <head> <meta name"description" content"免费在线教程"> <meta name"keywords" content"HTML,CSS,XML,JavaScript"> <meta name"auth…

全志v851s 在 eyesee-mpp 中添加一个hello_world sample 的流程

1. 为什么要在eyesee-mpp 中添加sample&#xff1f; 1&#xff09;保持整个openwrt 应用程序编写的完成性&#xff1b; 2&#xff09;eyesee-mpp 中包含了几乎所有全志视频音频模块的sample 以及 头文件&#xff0c;参考以及头文件调用起来非常方便&#xff0c;而且可以学习各种…

MongoDB 聚合管道中使用数组表达式运算符合并数组($concatArrays)

数组表达式运算符主要用于文档中数组的操作&#xff0c;接上一篇&#xff1a;MongoDB 聚合管道中使用数组表达式运算符&#xff08;$slice截取数组&#xff09;https://blog.csdn.net/m1729339749/article/details/130130328本篇我们主要介绍数组表达式运算符中用于合并数组的操…

InnoSetup制作安装包(EXE)

功能描述 1.666666.war为项目war包&#xff0c;666666.bat为启动war包脚本&#xff0c;通过InnoSetup将它们打包到安装包666666.exe 2.666666.exe安装包安装过程中将666666.bat注册为自启动服务&#xff0c;安装结束自动执行脚本启动项目666666.war --------------------------…

VxLAN数据中心L2/L3互通(端到端)

VxLAN数据中心端到端方式实现L2/L3互连&#xff0c;这种实现方式可以使数据中心属于同一个EVPN-VXLAN域&#xff0c;相较于hand-off方式通过端到端实现数据中心L2互连可以满足Mac mobility、ARP suppression等特性。 实现思路 DC1的Border-Leaf和DC2的Border-Leaf之间运行EBG…

测试:腾讯云轻量4核8G12M服务器CPU流量带宽系统盘

腾讯云轻量4核8G12M应用服务器带宽&#xff0c;12M公网带宽下载速度峰值可达1536KB/秒&#xff0c;折合1.5M/s&#xff0c;每月2000GB月流量&#xff0c;折合每天66GB&#xff0c;系统盘为180GB SSD盘&#xff0c;地域节点可选上海、广州或北京&#xff0c;4核8G服务器网来详细…

MySQL 日志

错误日志(error log): error log 主要记录 MySQL 在启动、关闭或者运行过程中的错误i西南西&#xff0c;在MySQL 的配置文件 my.cnf 中&#xff0c;可以通过 log-error/var/log/mysqld.log 执行 mysql 错误日志的位置 慢查询日志(slow query log): MySQL 的慢查询日志是 MyS…

【erlang】并发篇

PID类型 在之前的语法篇中&#xff0c;我们并没有介绍 PID这个类型&#xff0c;它和并发息息相关&#xff0c;因此我们在这里来学习它。 PID是进程标识符的意思&#xff0c;用来标识一个erlang进程。在所有相连的erlang节点中&#xff0c;PID都是唯一的。但是PID会被复用&…