![TCP/IP卷一:55---UDP之(UDP与IPv6 Teredo)](https://900zi.500zi.com/uploadfile/img/14/935/1a52a7dc3201d9ca7ae82120c807ca0c.jpg)
前一篇文章(/qq_41453285/article/details/103984794)对UDP和UDP数据报、UDP校验和做了简单的介绍,本片文章介绍一些UDP与IPv6有关的知识
一、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
待续