当前位置:   article > 正文

计算机网络 — UDP协议(看这一篇就可以

udp协议

UDP协议

UDP是传输层的重要协议之一,另一重要协议为TCP协议。两者对比:TCP协议复杂,但传输可靠。UDP协议简单,但传输不可靠。

UDP协议全称为:User Datagram Protocol(用户数据报协议)。

它是一个简单的面向数据报传输层协议。提供的是无连接的、不可靠的数据流传输。它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱序等。但由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

UDP是传输层协议,这意味着UDP的数据包需要经过IP协议的封装,然后通过IP协议传输到目的电脑。随后UDP包在目的电脑拆封,并将信息送到相应端口的缓存中。

UDP的特点

UDP传输的过程类似于寄信。

无连接

无连接指的是:UDP传输知道对应的IP和端口号就可以直接进行传输,不需要建立连接。

理解“无连接”特性:

因为使用UDP协议的发送方和接受方之间不需要存在长期的联系。它们没有建立连接这个过程,整个消息传输过程简单来说就是“发送即结束”。在UDP协议传输的过程中,可以向某一个服务器端口发起接收数据申请,然后在下一次再向另外一个端口发起申请。

这样一来,一个UDP服务器接口可以在一段时间内接受多个客户端发送的请求,同样的一个UDP服务器可以从若干个不同的客户接收数据报。

不可靠

不可靠指的是UDP协议没有任何安全机制,发送端发送数据报后,如果出现丢包等现象,UDP协议层也不会给应用层返回任何错误信息。

只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱序等。

面向数据报

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

如果,发送端一次性发送1000个字节,那么接收端也必须一次性接收1000个字节,不能将其拆为100份,每份10字节,每次接收一份。

缓冲区

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

UDP没有真正意义上的发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。

UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP数据报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再达到的UDP数据就会被丢弃。

大小受限

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

这是UDP在使用中的一个致命缺陷,也就是说UDP无法直接表示一个比较大的数据报。

解决方法:

可以在应用层,针对大的数据报进行分包(拆分成多个部分),然后再通过多个UDP数据报分别发送(但是这样子无法保证顺序)接收方再将收到的几个包拼接成完整的数据。

上述这种方式是下策。

上策是:将其改成TCP协议,TCP协议没有这样的长度限制。

基于UDP的应用层协议

  • NFS:网络文件系统

  • TFTP:简单文件传输协议

  • DHCP:动态主机配置协议

  • BOOTP:启动协议

  • DNS:域名解析协议

......

UDP协议报文格式

实际格式:

源端口号和目的端口号

用来标记发送和接受的应用进程。因为UDP不需要应答,所以源端口是可选的,如果源端口不用,那么置为零。

当运输层从IP层收到UDP数据报时,就是根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点--应用程序。

UDP长度

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

UDP校验和

校验和用来验证网络传输的这个数据是否是正确的,本质上是光信号和电信号(会被外界因素干扰,导致信号出错)。

校验和正确,不能保证数据100%是对的,但校验和不正确,数据100%是不对的。

UDP网络编程模型

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/84400
推荐阅读
相关标签
  

闽ICP备14008679号