TCP/IP卷一:55---UDP之(UDP与IPv6、Teredo)
分类:
文章
•
2024-05-18 23:27:40
一、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