码迷,mamicode.com
首页 > 其他好文 > 详细

《网络协议》UDP 协议

时间:2014-11-27 22:04:25      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:udp协议   网络协议   检验和   

概述


        UDP 是无连接、不可靠的数据报传输层协议,为应用程序发送和接收数据报,只是将数据报的分组从一台主机发送到另一台主机,但并不保证数据报能够到达另一端,任何必须的可靠性都由应用程序提供。在 UDP 情况下,虽然可以确保发送消息的大小,却不能保证消息一定会达到目的端。没有超时和重传功能,当 UDP 数据封装到 IP 数据报传输时,如果丢失,会发送一个 ICMP 差错报文给源主机。

        即使出现网络阻塞情况,UDP 也无法进行流量控制。此外,传输途中即使出现丢包,UDP 也不负责重发,甚至当出现包的到达顺序杂乱也没有纠正的功能。若需要这些细节控制,则必须交给 UDP 的应用程序去处理。


UDP 首部


        UDP 首部由源端口号、目标端口号、UDP 包长度以及检验和组成。UDP 首部只有 8 字节,每个部分 占 16 位。其结构如下图所示:


bubuko.com,布布扣


      --源端口号:表示发送端的端口号,字段长度为 16 位。该字段是可选的,有时可能不会设置源端口号,没有源端口号时该字段的值设为 0。此时,可用于不需要返回的通信中;

      --目标端口号:表示接收端的端口号,字段长度为 16 位;

      --UDP 包长度:该字段保存了 UDP 首部的长度与 UDP 数据的字节长度之和,该字段的最小值为 8 字节,IP 数据报是指数据报总的长度,因此,UDP 数据报长度是总的长度减去 IP 首部的长度;

      --检验和:检验和是为了提供可靠的 UDP 首部和数据而设计;


检验和


        首先先说明计算 UDP 检验和引入 UDP 伪首部的原因。在前面介绍《TCP 与 UDP 协议基本概述》中说到,为了防止相同端口号之间通信混乱,TCP/IP 或 UDP/IP 通信中通常采用 5 个信息来识别一个通信。它们分别是“源 IP 地址”、“目的 IP 地址”、“协议号”、“源端口号”、“目标端口号”。只要其中某一项不同,则被认为是其他通信。然而在 UDP 首部中只有源端口号和目的端口号,余下的 3 项都包含在 IP 首部中。假如其他 3 项信息(协议号、源 IP 地址、目的 IP 地址)被破坏,可能会导致无法正确接收到所需要的包(即可能收不到需要的包,而收到不该收的包)。为了避免这类问题的出现,有必要验证一个通信中必要的 5 项识别码是否正确。因此,在检验和的计算中引入了伪首部信息,UDP 伪首部为 12 字节,它包含 IP 首部的一些字段,其目的是让 UDP 两次检查数据是否已正确到达目的地。

        在 IP 首部的检验和中,只需对 IP 首部进行检验,而 UDP 和 TCP 的检验和,对 UDP 首部和 UDP 数据或者 TCP 首部和 TCP 数据都进行检验。UDP 的检验和是可选的,而 TCP 的检验和是必须的。

        UDP 检验和是一个端到端的检验和,它由发送端计算,然后由接收端验证。其目的是为了发现 UDP 首部和数据在发送端到接收端之间发生变化。如果 UDP 数据报的发送端没打开 UDP 校验和,而接收端计算校验和有差错,那么 UDP 数据报将会被丢掉,不产生任何差错报文。

bubuko.com,布布扣


最大 UDP 数据报长度


       理论上 IP 数据报的最大长度为 65535 字节,去除 20 字节的 IP 首部和 8 个字节的 UDP 首部,因此 UDP 数据报的最大长度为 65507 字节。但是,大多数实现所提供的长度比这个最大值小。由于 UDP 最大数据报的限制,大于这个限制的数据报会被截断,从而发生数据丢失,且不会有任何数据丢失的通知。一般有两个因素的限制:

  1. 应用程序可能会受到其程序接口的限制,一些 API 的实现中可能有限定 UDP 数据报的最大长度。另外,现在大部分系统都默认提供了可读写大于 8192 字节的 UDP 数据报。
  2. 受限于 TCP/IP 内核的实现,可能存在一些实现特性,使 IP 数据报长度小于 65535 字节。


        UDP 优点:在少量数据的传输时,使用 UDP 协议传输信息流,可以减少 TCP 连接的过程,提高工作效率;
        UDP 缺点:当使用 UDP 协议传输信息流时,用户应用程序必须负责解决数据报排序,差错确认等问题;


参考资料:

《TCP/IP 详解》
《图解 TCP/IP》

《网络协议》UDP 协议

标签:udp协议   网络协议   检验和   

原文地址:http://blog.csdn.net/chenhanzhun/article/details/41552359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!