UDP 协议

UDP协议端格式

教科书上的:

16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度,描述了这个数据报多长;

实际上的:

UDP 会把载荷数据,就是通过 UDP Socket,即 send 方法拿来的数据基础上,在前面拼接上 8 个字节的报头。报头分成四个部分,每个部分 2 个字节。

因为 UDP 报文长度是 2 个字节表示,即 16 位,表示的范围是 -32768 → +32767,即 0 → 65535,换算单位就是 64 KB。如果应用层的数据包超过了 64 KB,有两种方法解决:1. 通过代码针对应用层数据报进行手动分包(send 多次)。2. 换成使用 TCP。

校验和:作用是验证传输的数据是否正确。因为在网络传输中,受到一些干扰可能会出现"比特翻转"(0 变 1,1 变 0)的情况。发送方会发数据和校验和过去,接收方会针对收到的数据生成一个校验和跟收到的校验和进行比较,一样的话就是正确的,不一样就会直接丢弃。出现内容变了但校验和没变的情况概率极小就忽略不计。

比较知名的生成校验和的算法:

  1. CRC:循环冗余校验。把数据的每个字节循环往上累加,溢出的高位就丢弃。但会出现一个数据变动了两个 bit 位,前一个少 1,后一个多 1。虽然内容变了但 CRC 没变。

  2. MD5:进行一系列复杂的数学运算。

特点:1. 定长,无论原始数据多长,得到的 MD5 值都是固定的。2. 冲突概率小,原始数据哪怕只改动一个地方,算出来的结果都会大相径庭。3. 不可逆,通过原始数据计算 MD5 很容易,但想通过 MD5 还原原始数据很难(运算量极大)。针对于这些特点,MD5 的用途有:计算校验和、作为计算 hash 值的方式、进行加密。(所谓的 MD5 解密实际上只是储存了常见的数据,进行查表而已)

  1. SHA1:只是跟 MD5 的计算方式不同。

UDP 的特点

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

无连接

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

不可靠

没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。

面向数据报

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

缓冲区

UDP只有接收缓冲区,没有发送缓冲区:UDP没有真正意义上的 发送缓冲区 。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一 致;如果缓冲区满了,再到达的UDP数据就会被丢弃;UDP的socket既能读,也能写,这个概念叫做 全双工

大小受限

UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。

基于 UDP 的应用层协议

NFS: 网 络 文 件 系 统

TFTP: 简 单 文 件 传 输 协 议

DHCP: 动 态 主 机 配 置 协 议

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

DNS:域名解析协议

¥问题:

  1. UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传 输,应该如何设计?
  2. UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?

以上两个问题答案类似,都可以参考TCP的可靠性机制在应用层实现类似的逻辑: 例如:

引入序列号,保证数据顺序;

引入确认应答,确保对端收到了数据;

引入超时重传,如果隔一段时间没有应答,就重发数据;

相关推荐
Yang96112 分钟前
鼎讯信通热剥钳实测:大芯径光纤如何做到无损剥除
网络
贞明电子8 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
明天也要努力学习9 小时前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler
HideF9 小时前
Linux
linux·服务器·网络
万联WANFLOW9 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
听风说ml9 小时前
socket编程 【C语言】
c语言·udp·tcp·socket编程
sbjdhjd9 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
taktok_ai11 小时前
用 cc-switch 连接 Taktok
网络
小嘉丶学长13 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
pt104315 小时前
Cisco设备网络安全系列-18:SIEM与SOAR安全解决方案
网络·安全