一篇文章带你搞懂UDP协议报文以及注意事项

目录

1.UDP协议端的格式

2.UDP的特点

3.面试题

4.TCP/UDP协议的对比

1.UDP协议端的格式

我们先用一张图来表示一下UDP协议:
一篇文章带你搞懂UDP协议报文以及注意事项_第1张图片

 16位UDP长度,标识整个数据报的最大长度(UDP首部+UDP数据)

如果检验出错就会直接丢弃.

而16位源端口号和目的端口号,顾名思义就是保存了自身的端口号和目标端口号.

2.UDP的特点


  它的传输方式有点类似于寄一信一样,就是发送过去就不管了,如果信丢了,那就丢了.

无连接:
知道对方的IP地址和端口号就可以进行传输数据,不需要连接.

不可靠:
没有任何的安全措施,发送端发送数据以后.如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层任何错误提示信息.

面向数据报:

应用层较给UDP多长的报文,UDP都会发送,也不会拆分和合并.

如果一次发送了100个字节,那么接收端也必须一次接受100个字节,而不是循环接收十次

缓冲区:

UDP只有接收缓冲区,而没有发送缓冲区

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

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

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

3.面试题

1.UDP本身是无连接,面向数据报,不可靠的一种网络协议,如果要基于这种协议,来实现一个可靠传输应该如何设计.

答:我们可以参考TCP是如何实现可靠传输的,可以设置序列号来做一个确认应答机制,如果对端收到了我们的信息,就会发送一个应答序列号,如果我们没有收到这个序列号,就可以进行超时重发了,

2.UDP的大小受到限制,如果要基于传输层的UDP协议,传输超过64k的数据,如何设计.

我们可以通过分片和重组的方式来实现:

1.将数据进行分片,每片的数据都小于64k

2.给这些数据块进行排列序号,并且发送到我们的目标端口去.

3.目标端口接收到了以后,通过序列号来重新组装这些数据,起到合并的效果.

4.TCP/UDP协议的对比

TCP是可靠,有连接,面向字节流的一种网络协议,而且传输的文件大小也没有限制,那么是不是TCP协议就一定要比UDP协议好呢?答案是否定的.

TCP协议用于可靠传输,可以用来传输文件,重要状态更新等.

而UDP协议用于高速传输以及对实时性比较高的通信领域,比如聊天室,视频传输等.也可以用于广播.

这两个协议都是程序员手中的工具,具体怎么用,什么实际用,还得看具体需求场景来判断.

你可能感兴趣的:(udp,网络,网络协议)