【网络】传输层协议——UDP协议

UDP协议

1UDP的协议格式

 

               【网络】传输层协议——UDP协议

  • 源端口号(Source Port):表示发送端端口号,字段长16位,该字段有时可能不会设置,没有源端口号的时候该字段的值设置为0,可用于不需要返回的通信中;
  • 目标端口号(Destination Port):表示接受端端口,字段长度16位;
  • UDP(包)长度(Length):该字段保存了UDP首部的长度跟数据的长度之和。单位为字节(8位字节);
  • 校验码(Checksum):它是为了提供可靠的UDP首部和数据而设计的。接受主机在收到UDP数据报以后,从IP首部获知IP地址信息构造UDP伪首部,再进行校验和计算。校验和字段的值是校验和字段以外剩下部分的1的补码和,因此,包括校验和字段在内的所有数据之和结果为“16位全部为1”时,才会被认为所收到的数据是正确的,如果校验和出错,就会直接丢弃。

2.UDP的特点

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

UDP的传输类似于寄信:

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

3.面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并

4.UDP的缓冲区

  • UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层进行后续的传输动作;
  • UDP具有接受缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。

UDP的socket既能读,也能写,这个概念叫做全双工。

4.UDP的使用注意事项

UDP协议首部中有一个16位的最大长度,也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部);然而我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

5.基于UDP的应用层协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议
  • 也包括自己用程序时自定义的应用层协议

6.由于UDP面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:

  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即时通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播信号(广播、多播)