TCP/IP卷一:55---UDP之(UDP与IPv6、Teredo)

一、IPv6下的UDP

  • 考虑到简单性,在对IPv6而非IPv4进行操作时,UDP只需做很小的改动
  • 最明显的不同就是IPv6使用128位的地址和由此产生的对伪头部的结构带来的影响
  • 一个相关却更细致的不同在于,在IPv6里不存在IP层头部校验和。因此,如果UDP不使用校验和去运行,就没有端到端检测任何IP层地址信息的正确性。鉴于此,当UDP用于IPv6时,无论是UDP还是TCP,伪头部校验和都是必需的(由[RFC2460]第8节规定)

IPv6下的伪头部

  • 伪头部的结构由下图给出
  • 注意到长度字段已经从它的IPv4相应字段扩展到 32位。回想之前所述,这个字段对UDP来说是冗余的,但是我们可以从后面TCP连接管理的文章可以看到,对 TCP (无论是TCP/IPv4还是TCP/IPv6)来说它不是冗余的,因此在UDP/IPv6和TCP/IPv6 中都保留了该字段

二、UPv6分组长度

  • 扩展讨论一下IPv6分组长度,IPv6分组大小的两个方面会影响UDP:
    • 第一,在IPv6里,最小MTU大小是1280字节(与IPv4要求的需要所有主机支持的最小大小576字节不同)
    • 第二,IPv6支持超长数据报(大于65535字节的分组)
      • 如果我们仔细查看IPv6头部和选项集(见前面Internet文章),可以观察到使用超长数据报,32位是能够表示负载长度的
      • 这意味着单个UDP/IPv6数据报确实可以非常大。如[RFC2675]所述,对于UDP头部中的只有16 位长的UDP长度字段会产生一个问题。这样的话,超过65 535字节的UDP/IPv6数据报被封装在IPv6时,它的UDP长度字段值会被置成0
      • 注意到伪头部里的长度字段的大小仍然足够大(32位)。对IPv6超长数据报计算这个字段的值,涉及取UDP头部加上数据的总长度。当收到一个分组检查这个字段时,涉及计算UDP数据报(头部加数据)的大小,通过在Jumbo Payload选项中找到的值减去所有IPv6扩展头部的大小来得到,这也是IPv6负载的 长度(即数据报总长减40字节的IPv6头部)
  • 在UDP头部中的长度字段是0且没有Jumbo Payload选项存在的“意外的”情况下,UDP长度可以从不等于零的IPv6负载长度字段中推断得到

三、Teredo:通过IPv4网络隧道传输IPv6

  • 待续
发布了1318 篇原创文章 · 获赞 846 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/103990973