什么是UDP?
UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP的正式规范是IETF RFC768。UDP在IP报文的协议号是17。
在OSI模型中,UDP在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的 TCP(传输控制协议)协议一样,UDP 协议直接位于 IP(网际协议)协议
的顶层。根据 OSI(开放系统互连)参考模型,UDP 和 TCP 都属于传输层协议。 UDP 协议
的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据
的传输单位。每一个数据包的前 8 个字节用来包含报头信息,剩余字节则用来包含具体的传
输数据。
UDP报头
UDP报头包括4个字段,每个字段占用2个字节(即16个二进制位)。
在IP4v中,“来源连接端口”和“校验和”是可选字段(粉色背景标出)。
在IPv6中,只有来源连接端口是可选字段。
UDP数据报格式有首部和数据两个部分。首部很简单,共8字节。包括:
源端口(Source Port):2字节,源端口号。
目的端口(Destination Port):2字节,目的端口号。
长度(Length):2字节,用于校验UDP数据报的数据字段和包含UDP数据报首部的“伪首部”。其校验方法用IP分组首部中的首部校验和。
伪首部,又称为伪包头(Pseudo Header):是指在TCP的分段或UDP的数据报格式中,在数据报首部前面增加源IP地址、目的IP地址、IP分组和协议字段、TCP或UDP数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。
TCP和UDP区别
特征点 | TCP | UDP |
---|---|---|
传输可靠性 | 面向连接 | 面向非连接 |
应用场景 | 传输数据量大 | 传输量小 |
速度 | 慢 | 快 |
TCP(传输控制协议)提供的是面向连接、可靠的字节流服务。当客户端和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP(用户数据协议)是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP咋传输数据前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
由于UDP缺乏拥塞控制(congestion control),需要基于网络的机制来减少因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中,增加主机拥塞控制,来减小这个潜在的问题。
UDP方式传输数据
发送时:先把数据放到报文,写到缓冲区字节数组再传送。
接收时:从缓冲器数组读取,打包到报文。
UDP的应用场景
在选择使用协议的时候,选择UDP必须要谨慎。由于缺乏可靠性且属于非连接导向协议,UDP一般必须允许一定量的数据包丢失、出错和复制粘贴。但有些应用,比如TFTP,需要可靠性保证,则必须在应用层增加根本的可靠机制。但是绝大多数UDP应用都不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒体、即时多媒体游戏和IP电话(VoIP)就是典型的UDP应用。如果某个应用需要很高的可靠性,那么可以用传输控制协议(及TCP协议)来代替UDP。
由图一我们可以看到,使用UDP协议的应用有:域名系统(DNS)、简单网络管理协议(SNMP)、路由信息协议(RIP)等等。因为UDP不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以音频、视频和普通数据在传送时使用UDP比较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用到的QQ就是使用UDP协议。
UDP的单播、广播、组播
①单播:用于两个主机之间端对端的通信。即一对一(客户端与服务器端点到点连接)。
②广播:用于一个主机对整个局域网上所有主机通信。即一对所有。广播禁止在Internet宽带网上传输(广播风暴)。
③组播(多播):对一组特定的主机进行通信,而不是整个局域网上的所有主机。即一对一组
将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据。
单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是组播的用途。
注意:只有UDP才有广播、组播的传递方式。而TCP是一对一连接通信。组播的重点是高效的把同一个包尽可能多的发送到不同的,甚至可能未知的设备。但是TCP连接是一对一明确的。
组播的优点
具有同种业务的主机加入同一数据流,共享同一通道,节省了带宽和服务器的优点,具有广播的优点而又没有广播所需要的带宽。
服务器的总带宽不受客户端带宽的限制。由于组播协议由接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。
与单播一样,多播是允许在广域网即Internet上进行传输的,而广播仅仅在同一局域网上才能进行。
IP地址的不同
广播:主机发送广播消息时,需要指定目的IP地址255.255.255.255和接受者的端口号。
多播:在多播系统中,有一个源点一组终点。这是一对多的关系。在这种类型的通信中,源地址是一个单播地址,而目的地址则是一个组地址。
IP多播通信必须依赖于IP多播地址,在IPv4中它是 一个D类IP地址,范围从224.0.0.0到239.255.255.255,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址三类。
局部多播地址 | 在224.0.0.0~224.0.0.244之间,是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。 |
---|---|
预留多播地址 | 在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。 |
本地管理组播地址 | 在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。 |
本次分享到此结束,感谢大家的阅读!