📄 rfc1883.txt
字号:
原始分组只能从具有同一源地址,目的地址以及分片标识的分片分组来重组。
重组分组的未分片部分由直到但不包含第一个分片分组的分片报头的所有报头组成(就是
说,分组的分片补偿是零),有下面两个变化:
未分片部分最后一个报头的下一报头域是从分片报头的第一个分片的下一报头域里获得的。
重组分组的有效载荷长度是从未分片部分和最后一个分片的长度和补偿里计算得到的。例
如,一种计算重组初始分组的有效载荷长度的公式是:
PL.orig = PL.first - FL.first - 8 + (8 * FO.last) + FL.last
这里
PL.orig = 重组分组的有效载荷长度域。
PL.first = 第一个分片分组的有效载荷长度域。
FL.first = 随着第一个分片分组的分片报头的分片长度。
FO.last = 最后一个分片分组的分片报头的分片补偿域。
FL.last = 随着最后一个分片分组的分片报头的分片长度。
重组分组的分片部分是从接着每个分片分组的分片报头的分片来建立的。每个分片的长度
是通过从分组有效载荷长度里减去IPv6报头和分片本身之间的长度来计算的。它在分片部
分的相对位置是通过它分片补偿值来计算的。
分片报头没有出现在最后的重组分组里。
当重组被分片的分组时可能产生以下错误类型:
假如收到的分片数不足以使在那个分组第一个抵达分片接收60秒内完成重组的话,则分组
重组必须被终止而且所有已经被收到的分组分片必须被抛弃。如果第一个分片(即分片补
偿值为零的那个)已经被接收,ICMP时间超出--分片重组时间超出报文应该被发送到分片
的源发地。
如果作为从分片分组有效载荷长度域引出的分片长度不是8字节的倍数并且分片的标志M是
1,那么这个分片必须被抛弃并发送代码为零且指向分片分组有效载荷长度域的ICMP参数
差错代码报文到分组的源发地址。
如果分片的长度和补偿值致使从分片重组产生的分组有效载荷长度将超过65,535字节那么
这个分片必须被抛弃并发送代码为零且指向分片分组分片补偿域的ICMP参数差错代码报文
到分组的源发地址。
下列情况不期望发生,但如果出现了则不应被视为错误:
同一初始分组的不同分片的前面分片报头的报头数目和内容可能不同。不管报头怎样出现,
在排列用来重组的分片之前,前面每个分片分组分片报头在分组抵达时首先被处理。只有
那些补偿为零的分片分组里的那些报头保留在重组后的分组里。
同一原始分组的不同分片的分片报头的下一报头值可能不同。只有从补偿值为零的分片分
组里来的值才被用于重组。
4.6 目的地选项报头
目的地选项报头是用来携带仅需要被分组的目的节点检查的优化信息的。目的地选项报头
用紧前面一个报头里为60的下一报头值来标识,格式有如下:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 下一报头 | 扩展报头长度 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
. .
. 选 项 .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下一报头 8位选择器。标识紧接着目的地选项报头的报头类型。使用和
IPv4协议域一样的值[如RFC-1700里所述]。
扩展报头长度 8位未标记整数。目的地选项报头长度是以8字节为单元的,
不包括头8个字节。
选项 可变长度域,其长度可使目的地选项报头完整为8字节的整数
倍。正如4.2节里形容的一样包含一个或多个TLV编码选项。
本文档里定义的唯一目的地选项是在第4.2节里说明的填料1和填料N。
注意到有两种可能的方法可以编译IPv6分组里的优化目的地信息:要么作为目的地选项
报头的一个选项,要么做一个独立的扩展报头。分片报头和授权报头是后一种方法例子。
使用哪种方法取决于不能理解优化信息的目的节点所期望的是何种行为:
o 如果目的节点期望行为是抛弃分组并且分组的目的地址不是一个多播地址的话,
那么信息要么被编码成一个独立报头要么作为目的选项报头里的一个选项,此
目的选项报头里的选项类型在其本身最高两位值为11。这个选择可能取决于怎
样采用更少的字节,或怎样产生更好的队列,或更有效的语法等因素。
o 如果期望的是任何别的行为,则信息必须被编码成目的选项报头里的一个选项,
其在最高两位的选项类型值为00,01,或10,用来说明期望行为(见4.2节)。
4.7 无下一报头
IPv6报头的下一报头域里的值为59或者任何扩展报头指出这个报头后没有报头了。如果
IPv6的有效载荷长度指出字节晚于一个下一报头域里有59的报头末尾出现时,这些字节
将被抛弃,并且如果分组被转发则字节将不改变地传递。
5. 分组尺寸问题
IPv6要求在Internet网上的每个链路都有576或更多字节的MTU。在任何一个不能搬运576
个
字节或更多字节分组的链路上,链路特定分片或重组必须在IPv6下一层来提供。
从每个链路到它直接连着的节点,节点都必须能接收和链路MTU一样大的分组。有一个
可配置的MTU(如PPP链路[RFC-1661])的链路必须被配置为有至少576字节的MTU。推荐
配置一个更大的MTU以适应可能的不招致分片的封装。
为了发现并利用具有大于576字节MTU的路径,强烈推荐IPv6节点实现路径MTU发现
[RFC-1191]。然而最小化的IPv6实现(如在导入ROM里)可能简单地限制本身发送不超
过576个字节的分组,且忽略了路径MTU发现的实现。
为了发送一大于路径MTU的分组,节点可使用IPv6分片报头来在源发地分开分组并在目的
地重组分组。然而这样分片在任何能调节本身分组去适合标准路径MTU(即降到576字节)
的应用里是不成功的。
一个节点必须能接收在重组后有1500字节大的分片分组,分组包括IPv6报头。节点允许
接收重组后大于1500字节的分片分组。然而节点不能发送重组后尺寸大于1500字节的分
片除非其已清楚地得知目的地能重组这样大尺寸的分组。
作为IPv6分组被发送到IPv4目的地的响应(即,分组经历从IPv6到IPv4的转换),初始
IPv6节点可能收到一个报告下一跳MTU少于576的ICMP分组太大报文。这样IPv6节点就不
被要求去减少后续分组尺寸到少于576字节,但必须包括一个分片报头在分组里以使IPv6
到IPv4转换路由器能获得一个用在导致IPv4分片的有效标识值。注意到这意味着有效载荷
可能必须被减少到528字节(576减去IPv6报头的40和分片报头的8个字节),并且如果附
加扩展报头被使用的话还可以更小。
注意:路径MTU发现必须被一致执行,这里主机“认为”目的地是连接到和本身一样
的链路上。
注意:不象IPv4,为了执行路径MTU发现,IPv6里不必要设置“不分片”标签在分
组报头里。就是说这是每个IPv6分组里的隐含特征。而且RFC-1191程序中的那些
包括MTU“台阶”表使用的部分不能应用于IPv6,这是因为“自带寻址信息分组太
大”报文的IPv6版本已经标识了要被使用的准确MTU。
6. 流标签
IPv6报头里的24位流标签域可以被源发地用来标记那些要求IPv6路由器进行特殊控制(如
非默认QOS或“实时”服务)的分组。在写本文档的时候,IPv6的这个问题仍然是实验性
的并且归因于对Internet里的流标签要求变得更清晰的改变。不支持流标签域功能的主机
和路由器被要求在初始分组时域要设置为零,在转发分组时不改变的穿过这个域,并且在
收到分组时忽略这个域。
流是从特定源发地发送到特定目的地(单播或多播)的一个分组序列,对于流来说,源发
地要求介于期间的路由器能对其进行特殊控制。特殊控制的本性可以通过控制协议,诸如
资源预留协议,或者通过在流分组自身里的信息,如在逐跳选项里的信息来转运到路由器。
这样控制协议或选项的细节已经超出了本文档的范围。
和没有与任何流联合在一块的通信一样,从一个源发地到目的地可能有多个活动流。一个
流是由源发地和非零流标签联合在一起来唯一标识的。不属于一个流的分组携带的流标签
为零。
流的源节点将一个流标签分配给一个流。新的流标签必须(伪)随机选择并且范围一律是
从1到0xffffff。随机分配的目的是为了在适合被路由器用做哈希键值的流标签域里设置
任何一组位,用来查询和流联合的状态。
所有属于同一流的分组必须随着同一源地址,目的地地址,优先权以及流标签一起发送。
如果任何那些分组中任何一个包括逐跳选项报头,那么它们都必须用同样的逐跳选项报头
内容(不包括逐跳选项报头的下一报头域)来初始。如果任何分组包括一路由报头,那么
它们都必须用直到包括路由报头的所有扩展报头(不包括下一路由报头的下一报头域)里
的同样内容来初始。用路由器和目的地来检查这些条件是否被满足是允许的但不是要求的。
如果探测到阻碍的话,那么节点必须通过发送代码为零且指向流标签域高位字节(也就是
IPv6分组里补偿值1)的ICMP参数差错代码报文到分组的源发地址。
对任何流来说,路由器可以自由地“象机会主义者”一样设置流控制态,甚至是在没有通
过控制协议、逐跳选项或别的方法提供给路由器清晰的流建立信息。例如,一旦收到从一
特定源发地来的带有未知且非零的流标签的分组,路由器就可以处理分组的IPv6报头和任
何必须的扩展报头,就象此时流标签是零一样。这样的处理将包括决定下一跳接口以及可
能的其它行为,如更新逐跳选项、推前路由报头里的指针和地址、或者判定怎样基于优先
权域来排列分组。然后路由器可能选择“记住”那些处理步骤的结果并缓存这些信息,同
时使用源地址加上流标签作为缓存键值。接着随后带有同一源地址和流标签的分组就可以
参考缓存的信息来操控,而不是根据文章前面要求那样去检查所有那些能假设为流里所见到
的从第一个分组开始就未改变的域。
正如前面所述,不管同一流的其他分组是否继续抵达,随机设置的缓存流控制态在其被建
立后6秒之内必须被抛弃。如果在缓存态已经废弃后别的带同一源地址和流标签的分组抵
达的话,分组将经受完全、正常地处理(好象它的流标签是零一样),可能导致对这个流
重建缓存流态。
例如被控制协议和逐跳选项随机设置的缓存流控制态的生存周期必须作为清晰的设置机制
规范的一部分来说明。
源发地在任何可能已经为流标签预先使用而建立的流控制态的生存周期里不能再为新的流
使用流标签。这是因为在6秒生存期内流控制态可以随机为任何流建立,在使用同一流标
签的流的最后一个分组和一新流的第一个分组间间隔是6秒。有更长流态生存期的用作清
晰设置流的流标签在被重新为新流使用前必须保持不被用做那些更长生命周期。
当一个节点停止并重新开始(如作为“崩溃”的结果)时,它必须仔细地不要使用一个已
经被用作更早的、生存期可能还没有过期的流的流标签。这可能通过在稳定存储器上记录
流标签以使流标签在崩溃后能被记住,或者通过在直到任何先前可能建立流最大生存期到
期(至少6秒;如果带有更长生存期的清晰流设置机制已经使用则时间更长)之前避免使
用任何流标签来完成。如果重起节点的最小时间(经常是多于6秒)已知,那么在开始分
配流标签前这个最小时间能被从必须等待时期内扣除。
对于所有或甚至大多数属于流,也就是携带非零流标签的分组来说并没有特殊要求。这份
评估放在这儿让协议设计者和实现者不要去考虑别的方面。例如仅假定大多数分组属于流
就想要去设计一个性能完备的路由器或者去设计一个仅工作在属于流的分组之上的报头压
缩机制都是不明智的。
7. 优先权
IPv6里的4位优先权域可以使源发地能相对于从同一源发地来的别的分组用它期望的传输
优先权进行标识。优先权值被分成两个范围:0到7的值用来指定通信优先权给正在提供阻
塞协议的源发地,即作为对阻塞的响应“退回”的通信如TCP通信。8到15的值是用来给在
响应阻塞时不能退回的通信如以常速率发送的“实时”分组以优先权。
对于受约束的阻塞通信,推荐下列优先权值给特定应用范围:
0 - 无特征通信
1 - “填空”通信(如网络新闻)
2 - 不被注意的数据传输(如email)
3 - (预留)
4 - 被留意的块传输(如FTP,NFS)
5 - (预留)
6 - 交互通信(如telnet,X)
7 - Internet控制通信(如路由控制协议,SNMP)
对于不受约束的阻塞通信来说,在阻塞条件下最低优先权值(8)应该用做那些发送者最
希望抛弃的分组(如高保真视频通信),最高优先值(15)应该赋给那些发送者最不希
望抛弃的分组(如低保真的音频通信)。在受约束的阻塞优先权和不受约束的优先权之
间没有暗示的相对顺序。
8. 上层协议问题
8.1 上层校验和
任何包括从IP报头来的地址的传输层或别的上层协议在它的校验和计算里必须修改得可
以在IPv6上使用,即用128位IPv6地址来代替32位IPv4地址。特别的,下面的例证显示
了IPv6的TCP和UDP的“伪报头”。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ 源 地 址 + |
|
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -