网络协议:UDP

一 UDP协议及其特点

1.1 什么是UDP协议

UDP: User Datagram Protocol, 用户数据报协议,它是一种无连接,不可靠的传输,面向报文的一种协议。在IP协议的基础上提供了简答的功能,比如:复用分用和差错检测功能

1.2 UDP协议特点

#1 无连接: 和IP协议一样,发送数据报之前不需要建立连接,减少了网络开销和延时,节省了系统资源

#2 不可靠: 和IP协议一样,只保证尽最大努力交付,所以不保证可靠交付。因此不需要维护一些复杂的连接状态信息,适合可以接受数据丢失的报文。

#3面向报文:对于应用层的报文既不拆分也不合并,上层报文是什么样,UDP就是什么样。适合一次性传输少量数据的应用。



#4 UDP协议没有拥塞控制,网路出现拥塞的时候不会使得源主机的发送速率降低,这对某些实时应用是很重要的。比如视频会议。

#5 UDP支持一对一 一对多 多对一的交互通信

#6 UDP 首部开销小,只有8个字节,比TCP的20个字节首部要短

二 UDP协议数据报首部格式

2.1 源端口号

指的是发送端应用程序端口

2.2 目标端口端口

指的是接收端应用程序端口

2.3 长度

指的是UDP首部和数据部分总长度

2.4 校验和

UDP的校验和覆盖UDP首部和UDP 数据部分。主要用于判断UDP报文字啊传输过程中是否出差错。

三 UDP为什么会丢包?解决办法

3.1 丢包原因

#1 socket缓冲区满了

如果socket缓冲区满了,应用程序没来得及处理在缓冲区中的UDP包,那么后续来的UDP包会被内核丢弃,造成丢包。在socket缓冲区满造成丢包的情况下,可以通过增大缓冲区的方法来缓解UDP丢包问题。

#2 socket缓冲区太小

如果发送端报文很大,接收端缓冲太小,也会造成数据丢失

#3 IP分片丢失,CRC校验失败

3.2 解决方式(UDP冗余传输)

有什么办法可以降低UDP的丢包率呢?一个简单的办法来采用冗余传输的方式。如下图,一般采用较多的是延时双发,双发指的是将原本单发的前后连续的两个包合并成一个大包发送,这样发送的数据量是原来的两倍。这种方式提高丢包率的原理比较简单,例如本例的冗余发包方式,在偶数包全丢的情况下,依然能够还原出完整的数据,也就是在这种情况下,50%的丢包率,依然能够达到100%的数据接收。

四 UDP是否存在粘包和拆包问题?为什么?

UDP是不存在粘包和拆包问题的。因为UDP不是面向流的,是面向报文的,正因为这个特性,所以决定UDP发送数据是一份一份的,接收的时候也是一份一份的,发送和接收的都是完整的报文。即发送端发送了多少次,接收端就要接收多少次。比如接收缓冲区大小为10K, 那么发送端分别发送三次报文,1次2K,2次1K,三次6K总共9K,那么接收端就会接收三次,并且放入接收缓冲区。

那问题来了? 接收缓冲区如何保区别缓冲区里的数据呢?因为UDP接收缓冲区以链式结构来存储到达UDP包,每一个包都包含头部信息(消息来源地址,端口等)。所以它是具有保护消息边界特性

那如果缓冲区满了,怎么办? 如果缓冲区满了,数据就会被丢失。所以UDP适合一些发送频繁,且数据包比较小,对安全性不高的网络应用。如果数据包比较大,很容易造成频繁丢包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值