什么是UDP
UDP ( User Datagram Protocol ) ,中文名称为用户数据包协议。是一个简单的面向数据报的通信协议。仅仅三页纸的标准规范延续至今。
详见:RFC0768
什么是通信传输协议?
简单来说,例如人类的语言沟通:
如果你需要和别人沟通聊天。可是你们相互之间没有任何联系,更不理解对方说的是什么东西。就会形成下面的这种情况。
A:!@#FWEFEWF!$#
B:!@$#@%FWEFWGEWQ
由于你们互相不知道对方在说什么,所以你们利用手势和声音互相约定了一种规范。由此,语言就诞生了。 你们可以依靠这个规范来进行沟通。
A:吃了没?
B:我吃了,你呢?
……
UDP 的特点
UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份( 所以UDP有时候也被认为是不可靠的数据报协议 )。其适用于不需要或在程序中执行错误检查和纠正的应用,它避免了协议栈中此类处理的开销。
结合上文的故事,并代入 UDP 的理念,你就可以发现,基于 UDP 思想的人就会总是在 “碎碎念”。例如以下情况:
A 突然想起一件事要和 B 说,也不在乎 B 有没有听到。( UDP 的不可靠性,不会确认对方状态,也不会关心对方是否已经正确收到。 ) A 一直在滔滔不绝的讲,也不在意 B 是否已经无法承受。( UDP 的无拥塞控制,即使网络条件不好,也不会对发送速率进行调整。)UDP 用在什么地方
由于UDP的快速和时效性,对时间有较高要求的应用程序通常使用 UDP ,因为丢弃数据包比等待或重传导致延迟更可取。例如一些流媒体、在线游戏流量通常使用UDP进行传输。丢包或者错误的数据包只会发生一些质量的轻微下降。
我们生活中最常见的例子就是我们日常打电话。其技术就是依赖 UDP 来实现的,高效的传输效率使得我们人与人之间的沟通不会有太大的延时。
UDP 报文格式
UDP报头由4个域组成,其中每个域各占用2个字节,具体包括源端口号、目标端口号、数据包长度、校验值。
源端口号/目标端口号 :UDP 采用端口号来实现同一时刻对多个应用同时发送和接受数据。由于 UDP 报头使用两个字节存放端口号,所以端口号的有效范围是从 0 到 65535。 长度 :数据报的长度是指包括报头和数据部分在内的总字节数。包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。
校验值 :UDP协议使用报头中的校验值来保证数据的安全。A 通过特殊方法计算出后传给 B ,B再通过同样的方法进行解析来判断该数据报是否被篡改过过已经损坏。UDP 不会对出错的结果进行更正,它只是简单的把数据丢弃或给应用层一个警告。
如何让UDP 变得可靠 ( Reliable UDP )
如此简单且快速的数据传输协议使得 UDP 协议经过快40年来没有做过任何重大修改。但由于它太简单,不提供差错纠正、也不管理发送端和接收端的队列、不负责消除重复报文,更没有流量控制和拥塞控制。使得它也获得了不可靠的评价。
那么,我们可以想办法让UDP 变得可靠吗?
让 UDP 变的可靠
拿出一张被用烂掉的通信领域三角平衡关系。来介绍我们登场的 RUDP ( Reliable UDP )。
由此可见,相比于其他传输协议,RUDP 做出了更好的兼容。
RUDP的作用范围
RUDP 主要作用在一些端到端连通性( NAT 穿越 )问题,弱网环境下延时处理、资源优化等问题上。
RUDP 如何实现重传机制从而解决丢包问题
定时重传:很好理解,定时重传的理念就是如果 A 向 B 发送消息,发送时 A 会起一个定时器,如果 B 没有在规定时间内返回 ACK,则重新传输。优点:对延迟敏感但对流量成本要求不高的场景比较友好。 缺点:大几率的重传会导致大量流量浪费。
请求重传:在 B 接收请求时,如果发现 UDP 丢失,会记录下来,并在发送 ACK 时带上丢失记录。当网络条件不好时,接收端会不断发起重传请求,造成发送端不停的重传,引起网络风暴,通信质量会下降
FEC ( Forward Error Correction ) 选择重传 :在发送方发送报文的时候,会根据 FEC 把几个报文进行分组,并生成若干个冗余包,如果接收端发现丢包但能通过分组算法还原,就不向发送端请求重传,如果分组内包不能恢复,就向发送端请求原始的数据包。冗余的包可能会带来一些网络的压力
总结
本篇文章讲解了物联网通信中许许多多传输协议的基石之一 – UDP协议,了解了一些 UDP 的特点与所产生的问题。和它的一个特殊变体 RUDP 。 下一篇文章将会讲解另一个基石,UDP 的兄弟 TCP( Transmission Control Protocol )。
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:物联网传输协议基石 – UDP ( User Datagram Protocol ) https://www.yhzz.com.cn/a/12710.html