mirror of
https://github.com/Estom/notes.git
synced 2026-02-03 02:23:31 +08:00
2.8 KiB
2.8 KiB
UDP
1 概述
UDP是一个简单的面向数据报的传输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。因此如果应用程序使用UDP来实现,则应用程序几乎是直接与IP打交道,UDP只在网络层之上提供了非常有限的服务:进程间数据交付和差错检测。
2 UDP的多路复用和多路分解
原理
传输层通过socket来提供多路分解和多路复用,并且:
- 每个socket都由唯一的一个标识符
- 每个报文段由特殊的字段来指示该报文段所要交付的套接字,源端口号和目的端口号就是这种目的的特殊字段
端口号是16比特的数字,其大小在0到65536之间。0到1023之间的端口号是知名端口号,其使用是受限制的(指的是不能随意使用)。
过程
- 主机上的进程创建一个socket,并为之申请一个端口号,假设主机host1上进程A创建了一个socket并申请到端口号10000,主机host2上的进程B创建了一个socket并申请到端口号20000
- 主机host1上的进程A想和主机host2上的进程B通信,因而它从其与之关联的socket中发送一个数据报,并将源端口设置为10000,目的端口设置为20000,然后将数据报提交给网络层由网络层发送给主机B。
- 主机B的网络层收到报文后,将传输层数据提交给传输层,之后传输层根据报文信息查找对应的socket(最简单的查找是根据报文的目地地址和端口号进行查找),然后就通过找到的socket将数据体积高给了进程B。
具有相同的目的IP和目的端口,那么它们就将通过相同的socket被提交给相同的进程。
3 UDP的数据报格式
UDP数据报格式
- 端口号用于标识发送进程和接收进程。
- UDP长度字段指的是UDP首部和UDP数据的字节长度。
- UDP检验和覆盖UDP首部和UDP数据。
UDP校验过程
UDP设置伪首部,用来完成校验过程:

