网络基础(二):UDP协议

一、UDP协议端格式

在这里插入图片描述
其中,UDP协议包头占8字节:

struct udphdr
{
    
    
	u_init16_t uh_sport;//源端口
	u_init16_t uh_dport;//目的端口
	u_init16_t uh_ulen;//udp数据报长度
	u_init16_t uh_sum;//校验和
};

端口:传输层是负责端与端之间的传输,因为在传输层协议当中只负责端口,不负责ip,也就是意味着只负责数据从哪一个进程来到哪一个进程去。源端口和目的端口的范围均是:[0,65535]
数据报长度:共16位。如果全为1,就是最大的传输能力,因此UDP数据报最大长度是65535字节
校验和:接收方进行校验。

  1. 如果校验成功了,会将数据递交给应用层;
  2. 如果校验失败了,即使数据已经到达了传输层的UDP协议,也会被丢弃。

二、UDP协议特点

  1. 无连接。对于客户端,不需要前期和服务端建立某种关系,只需要知道服务端的ip和侦听端口,直接按照这个ip和端口发送数据;
  2. 不可靠。没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
  3. 面向数据报。不能够灵活的控制读写数据的次数和数量。

三、UDP缓冲区

发送缓冲区:调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作。

接收缓冲区:从网络中接收回来的数据放到UDP的接收缓冲区当中,但是UDP接收缓冲区不保证数据是有序到达的,也不保证数据在传输过程中没有失真。如果缓冲区满了,再到达的UDP数据就会被丢弃。

四、UDP使用注意事项

我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。然而64K在当今的互联网环境下, 是一个非常小的数字,如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。

五、基于UDP的应用层协议

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

猜你喜欢

转载自blog.csdn.net/zhao_leilei/article/details/111572871