美文网首页
3.3 Connectionless Transport: UD

3.3 Connectionless Transport: UD

作者: 找不到工作 | 来源:发表于2020-05-17 13:51 被阅读0次

UDP 仅仅在网络层的 IP 服务上额外增加了两个功能:

  • multiplexing/demultiplexing
  • 错误校验

UDP 从应用程序中获取要发送的信息,附加上源 port 和目标 port 以及两个其他的信息,就传递给网络层。网络层将其封装为 IP 数据包,然后尽最大努力发送给目标主机,如果对方收到,UDP 会使用目标端口号将数据发送给对应的应用程序。

DNS 就是一个使用 UDP 作为传输层协议的典型应用。选择使用 UDP 而不是 TCP 的好处是:

  1. 更好地控制发送什么数据,以及什么时候发送

    • TCP 因为有拥塞控制,网络状况不好时会降低发送速率。而 UDP 都是立即发送。
    • TCP 在收到确认之前会不断重发数据,无论这个确认需要多久。然而,许多实时应用要求最低发送速度,但是允许一定程度的丢包。因此 UDP 更合适
  2. 无需建立连接

    • TCP 在发送数据前需要进行三次握手建立连接,这引入了延迟。这也是 DNS 服务选择使用 UDP 的首要原因。
    • TCP 需要维护连接状态,对服务器引入了额外的负担。
  3. 额外的数据包头开销

    • TCP 的包头是 20 字节,而 UDP 只有 8 字节。

3.3.1 UDP Segment Structure

UDP 数据包的结构如下图所示:

UDP segment structure
Field Size (byte) Meaning
Source Port 2 源端口
Destination Port 2 目的端口
Length 2 UDP 数据包大小(以字节为单位,包括头文件)
Checksum 2 校验和,接收方发现错误后会丢弃这个数据包

3.3.2 UDP Checksum

UDP 校验和用于判断 UDP 数据包在传输过程中是否被更改了(例如,因为链路上的噪声)。

虽然许多链路层的协议(包括 Ethernet)提供了错误校验,但是链路层并没有保证所有协议都有错误校验。因此,我们需要传输层实现。这也符合系统设计中的 end-end 原则。即在终端中校验错误。

虽然 UDP 提供错误校验,但是它并不负责从错误中恢复。要么丢掉这个包,要么带着警告传给应用层。

相关文章

网友评论

      本文标题:3.3 Connectionless Transport: UD

      本文链接:https://www.haomeiwen.com/subject/tzujohtx.html