关于 UDP 的 10 个问题

是否可以向 UDP 的 90000 端口发送数据包?

不可以

TCP 或 UDP 数据包中的端口字段为 16 位,2^16 是 65536,所以最大的端口号是 65535。

每个UDP数据包都有一个目的端口吗?

是的

UDP 报头为 8 个字节。

根据 RFC,源端口是可选的,但目的端口是必须的。以下是 UDP 的报头结构:

1
2
3
4
5
6
 <-   16 bits  ->
+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-
| source port | dest port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| length | checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

可以发送一个长度为 100万字节的 UDP 数据包吗?

不可以

UDP 数据包的长度字段同样为 16 位,所以单个包的最大长度是 65535。

可以把把 JSON 放在 UDP 数据包里吗?

可以

UDP 数据包中可以放入任何字节,甚至可以放一个很短的 MP3 文件。

能否保证 UDP 数据包的到达顺序与发送顺序一致?

不能

发送一个UDP数据包后,有没有方法办法判断它是否到达?

没有

协议没有提供。

如果把 UDP 数据包发送到同一数据中心的另一台服务器上,是否能保证到达?

不能

即使在同一台计算机内发送,数据包仍然可能被丢弃(例如:缓冲区满了)。

当你发送一个 UDP 数据包时,如果发生丢失会怎样?

那就真的就丢了

如果想在 UDP 之上实现重试,只能自己去实现。

操作系统的 TCP 协议实现了 TCP 包的重试。

UDP 的 80 端口与 TCP 的 80 端口一样吗?

不一样

UDP 和 TCP 都支持相同的端口号(1-65535),但它们是不同的协议。

你可以同时在 UDP 的 80 端口和 TPC 的 80 端口运行 2 个不同的服务。

建立在 UDP 之上的协议有哪些?

DNS、DHCP, QUIC, NTP, statsd 和各种视频会议协议。