关于UDP Lite RFC中的伪标头的困惑

时间:2014-03-15 15:11:10

标签: udp checksum rfc

我正在通过RFC for UDP Lite工作,并在讨论与UDP的兼容性时陷入第5节:http://tools.ietf.org/html/rfc3828#section-5

在RFC中,它表示当UDP实现接收时,具有部分校验和覆盖的UDP-Lite数据包将被丢弃;因为不匹配的伪报头将导致UDP校验和失败。"

然而在3.2节(http://tools.ietf.org/html/rfc3828#section-3.2)中它说:" UDP-Lite的伪标题与UDP的伪标题在某种程度上不同:伪标题的Length字段的值不是取自UDP-Lite标题,而是取自IP模块提供的信息。"

但是,这并不意味着UDP和UDP-Lite伪标题实际上是相同的(只有关于数据包长度的信息来自不同的来源?)

实际上,我理解为什么校验和计算失败:当UDP Lite校验和仅覆盖部分包时,而经典UDP实现将计算整个包内容的校验和,将产生不同的校验和。但是失败不是由于不同的伪标题,是吗?

如果到目前为止我的理解是错误的,请向我纠正......

1 个答案:

答案 0 :(得分:0)

如果你只在UDP-lite中进行部分校验和,那么校验和作为UDP数据包时的失败确实不是由于你所说的不同的伪标题。

但是,我认为当解释为UDP时,完整的UDP-lite校验和可能会失败:

  • IPv4标头包含总长度字段和IP标头长度字段。
  • UDP标头包含UDP数据报长度字段。
  • 您通常会(使用IP标头长度乘以4来提供八位字节):

    Computed UDP datagram length = IP total length - IP header length
    

    并且您希望拥有平等:

    UDP datagram length field == Computed UDP datagram length
    

然而,没有什么可以保证这一点:你可以在UDP数据报之后但仍然在IP数据包中有尾随垃圾。这将导致Computed UDP数据报长度大于UDP数据报长度,从而使UDP和UDP-Lite校验和不同。

AFAICT UDP或IP中没有任何内容禁止这种情况,但我不知道(a)如何在不使用原始套接字的情况下创建它,或者(b)接收UDP对等体将对此做些什么。