目录
1. UDP的目的:
1.1 什么是UDP:
UDP - User Datagram Protocol, 是区分数据流的策略。
1.2 什么时候使用UDP:
UDP非常适合以下类型的应用程序:
- 具有小请求和响应的应用程序。示例:DNS-域名系统,当客户端请求特定域的IP地址时,服务器会提供该IP地址。这就是整个对话。
- 如果我们使用UDP,我们只需要2个数据包就可以得到我们想要的东西。
- 如果我们在这种情况下使用TCP,我们需要11个数据包才能得到我们想要的东西。
- 具有内置交付确认系统的应用程序。示例:TFTP-Trivial File Transfer Protocol-琐碎的文件传输协议。
- 在上图中,我们有一个客户端向服务器请求文件。请注意,每当服务器向客户端提供块时,客户端都会发回确认。
- 应用程序使用UDP传输数据。众所周知,UDP没有ACK机制,所以这个ACK来自客户端的应用程序。
- 此外,在这种情况下,我们不使用TCP,因为它会导致重复的“可靠性”机制,一个来自传输层,一个来源于应用层。另一方面,当出现数据包丢失时,服务器将不得不重新发送数据2次,1次用于传输层的请求,1次来自应用层的请求。
- 涉及直播或流媒体内容的应用程序。示例:VoIP-IP语音,用于通过IP承载语音或电话呼叫。
- 如果我们使用TCP,想象一下,当一个单词被丢弃时,VoIP电话呼叫会停止并尝试重复确认已收到的最后一个单词,这将是多么烦人。
- 在这种情况下,人们更喜欢最新或实时的数据包,而不是旧的丢弃数据包。例如:你正在观看世界杯,不可避免地会发生丢包,当它发生时,你宁愿关注最近的事件,也不愿弄清楚丢包发生了什么。
2. UDP的特点:
2.1 不面向连接:
- 这意味着该协议没有正式的“开始”和“结束”。例如,如果主机A想向主机B发送数据,主机A只需将所有数据放在线路上,并希望它到达另一端。
- 如果TCP定义基于端口的连接,UDP定义基于“超时”的连接,这意味着任何共享相同源IP、目的IP、源端口、目的端口、UDP报头并在一定时间内到达的数据包都可以说是UDP连接的一部分。
- 这个“超时”不是一个常数值,常见的“超时”是2分钟。
2.2 未确认交货:
- 如果数据包无序地到达接收主机,并且是UDP连接,应用程序将需要以最合理的方式处理。
- 通常,应用程序需要有自己的排序方法,或者,应用程序并不真正关心数据到达的顺序(例如:当你下载100个文件时,如果文件100在文件1之前到达并不重要,只要你收到了整整100个文件,那么一切都很好)。
- 这意味着主机A只是将数据包放在电线上并希望最好,接收主机不发送任何数据传输确认。
- 由于接收主机没有发回任何数据传递确认,应用程序需要有自己的内置传递确认
- 无内在数据排序:
2.3 无流量控制:
- UDP以最快的速度传输数据。
- 想象一下,整个路径的带宽在主机A和B之间是不一致的。在下图中,假设我们在发送侧有更高的带宽,在接收侧有更低的带宽。对于UDP,它将根据本地连接的带宽尽可能快地发送,一旦数据进入低带宽区域,就会丢弃大量数据。
2.4 更少的开销:
- 这意味着与TCP相比,UDP将向数据添加一个较小的标头。在下图中,TCP标头仅包含8个字节。
- Unicast - Multicast - Broadcast(单播-多播-广播):
- UDP能够在网络中进行一对一、一对多或一对所有通信。
3. UDP 头部:
- 源端口:发送主机的端口。
- 目标端口:接收主机的端口。
- 长度:以UDP报头和UDP数据的字节为单位指定。此字段大小为UDP数据报设置了65535字节(8字节报头+65527字节数据)的理论限制。
- 校验和:用于对表头和数据进行错误校验。
4. UDP协议:
- 与TCP不同,UDP以一种简单的方式与另一端通信:它直接向目标计算机发送数据包,而无需先建立连接或指示数据包的顺序或检查数据包是否按预期到达。