udp协议详解
1.udp头部
- 源端口: 源端口号,需要对方回信时选用,不需要时全部置0
- 目的端口:目的端口号,在终点交付报文的时候需要用到
- UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
- 校验和:检测UDP数据报在传输中是否有错,有错则丢弃
2.UDP的特点
- 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接。
- 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息。
- 面向数据报: 不能够灵活的控制读写数据的次数和数量。
3.面向数据报
- 应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并。
- 如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节。
4.UDP的缓冲区
- UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作。
- UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃。
- UDP协议首部中有一个16位的最大长度。一次最多可以发送64K,如果传输的数据超过64K,则需要分包。
5.基于UDP的应用层协议
- NFS: 网络文件系统
- TFTP: 简单文件传输协议
- DHCP: 动态主机配置协议
- BOOTP: 启动协议(用于无盘设备启动)
- DNS: 域名解析协议