📄 rfc1883.txt
字号:
下一报头 8位选择器。标识紧随着路由报头的报头类型。和IPv4协议域
里使用的值一样[如RFC-1700里所述一样]
扩展报头长度 8位未标记整数。长度为8个字节的路由报头,不包括头8个字
节。对于零型路由报头,报头扩展长度等于报头里地址数的两
倍,且必须是一个小于等于46的偶数。
路由类型 0。
遗留部分 8位未标记整数。剩下的路由部分数目,即被清楚列出在抵达
最终目的地之前仍然需要访问的中间节点的数目。
最大合法值是23。
预留 8位预留域。对于传输初始为零;接收时忽略。
严格/宽松的位图 24位的位图,值从0到23,并是从左到右。对于路由的每一片
来说,位图指明是否下一个目的地址必须是前一个地址的邻
居:1意味着严格(必须是邻居),0意味着宽松(不需要是邻
居)。
地址[1...n] 128位的地址矢量,数目从1到n。
多播地址不必在类型为零的路由报头里出现,或是在携带零路由报头类型分组的IPv6目的
地址域里出现。
如果严格/宽松位图的位数值为零,则源分组里IPv6报头的目的地址域必须标识源节点的
一个邻居。如果位数为零,则源发者必须使用任何合法的,非多播地址作为初始目的地址。
位数大于n的位必须被源发者设为零并被接收者忽略,这里n是在路由报头里的地址数。
路由报头不会被检查或处理除非它抵达在此IPv6报头目的地址域里被标识的节点。在那个
节点,在紧随着前一个报头的下一报头域上分派会导致路由报头模块将被调用,这样以类型
为零的路由形式来执行下列算法:
if 遗留片段 = 0 {
继续处理分组里的下一报头,它的类型是由路由报头里的下一报头域来标识的
}
else if 报头扩展长度是奇数或大于46{
发送代码为零并指向报头扩展长度域,且抛弃此分组的ICMP参数差错报文到源地
址。
}
else {
用扩展报头长度除以2来计算n,n为路由报头里的地址数。
if 遗留片段大于n {
发送代码为零并指向遗留片段域,且抛弃此分组的ICMP参数差错报文到源地
址。
}
else {
遗留片段减一;
通过把遗留片段减去n来计算i,i是地址矢量里将要被访问的下一地址的索引。
if 地址 [i] 或IPv6目的地址是广播 {
抛弃分组
}
else {
交换IPv6目的地址和地址[i]
if 严格/宽松位图的第i位值为1并且新的目的地址不是这个节点的邻居
地址{
发送ICMP目的地不可抵达报文--这不是一到源地址的邻居报文并抛
弃此分组。
}
else if IPv6 跳限制小于或等于一 {
发送ICMP时间超过--在到源地址的传输报文里跳限制超过并抛弃此
分组
}
else {
从跳限制里减掉1
重新递交分组给到新目的地的传输IPv6模块
}
}
}
}
作为上述算法效用的一个例子,考虑一种从源节点S发送一分组到目的节点D,并使用导致
分组通过紧挨着的节点I1,I2,和I3被路由的路由报头。在传递路径每个片段上的相关
IPv6报头值和路由报头域的值如下:
当分组从S到I1:
源地址 = S 报头扩展长度= 6
目的地址 = I1 遗留片段 = 3
地址[1] = I2
(如果位图的零位是 1, 地址[2] = I3
则S和I1必须是邻居, 地址[3] = D
这个将被S检查)
当分组从I1到I2:
源地址 = S 报头扩展长度= 6
目的地址 = I2 遗留片段 = 2
地址[1] = I2
(如果位图的1位是 1, 地址[2] = I3
则I1和I2必须是邻居, 地址[3] = D
这个将被I1检查)
当分组从I2到I3:
源地址 = S 报头扩展长度= 6
目的地址 = I3 遗留片段 = 1
地址[1] = I1
(如果位图的2位是 1, 地址[2] = I3
则I2和I3必须是邻居, 地址[3] = D
这个将被I2检查)
当分组从I3到D:
源地址 = S 报头扩展长度= 6
目的地址 = D 遗留片段 = 0
地址[1] = I1
(如果位图的3位是 1, 地址[2] = I2
则I3和D必须是邻居, 地址[3] = I3
这个将被I3检查)
4.5 分片报头
IPv6源发地用分片报头来发送比能适合在路径MTU里还大的分组到它们的目的地。(注意:
不象IPv4,IPv6里的分片只通过源节点来实现,而不是由沿着分组传递路径的路由器来实
现的--见第5节。)分片报头是由在前一个报头里,值为44的下一报头值来实现的,并且有
下列格式:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 下一报头 | 预 留 | 分 片 补 偿 |预留|M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 标 识 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下一报头 8位选择器。标识初始分组(如下面所定义的)的分片部分的
初始报头。使用和IPv4协议域一样的值[如RFC-1700里所述]。
预留 8位预留域。传输时初始为零,接收时忽略。
分片补偿 13位未标记整数。相对于初始分组的分片部分开始来说是随着此
报头并以8个字节为单元的数据补偿。
预留 2位的预留域。传输时初始为零,接收时忽略。
标志M 1=更多分片;0=最后的分片。
标识 32位。见下面的描述。
为了发送一个太大了以至于不适合路径MTU的分组到它的目的地,源节点可以把分组分成分
片并把每个分片作为一个独立分组来发送,这些分组到达接收者时再被重新集合。
对于每个将要被分片的分组来说,源节点产生标识值。这个标识必须和近来*同一个源发地
址和目的地址上的任何别的分片分组不同。如果路由报头出现,要考虑的目的地址就是最
后的目的地址。
*“近来”意味着是要在分组的最大可能生存时间内,包括从源发地到目的地的传输
时间和花在等待要重组的同一个分组的其余分片上的时间。然而这并不要求源节点
知道分组的最大生存周期,而是假定维持作为一个简单的,32位的,“回环”计数
器的,并且每次分组必须被分片时能增加的标识值能符合要求。这是是否维持一个
简单的节点还是多个计数器的实现选择,例如,此节点的每个可能源地址用一个计
数器,或者每个活动的(源地址,目的地址)连接一个计数器。
初始时大的未分片的分组被参考为“原始分组”,并被认为是由两部分组成的,如下:
原始分组:
+------------------+----------------------//----------------------+
| 未 分 片 | 分 片 |
| 部分 | 部分 |
+------------------+----------------------//-----------------------+
未分片的部分由IPv6报头和扩展报头组成,是必须由到目的地前中间选路上的节点处理的,
即直到包括路由报头(如果出现的话)的所有报头,另外也包括逐跳选项报头(如果出现
的话),但不包括扩展报头。
分片部分由此分组的其余部分组成,即任何仅需要由最终目的节点所处理的扩展报头以及上
层报头和数据。
初始分组的分片部分被分成分片,除了可能是最后“最右面”的那个分片,每个分片长度都
是8字节的整数倍。分片将按下面例证的独立“分片分组”来传输:
原始分组:
+------------------+--------------+--------------+--//--+----------+
| 未 分 片 | 第一个 | 第二个 | | 最终 |
| 部分 | 分片 | 分片 | .... | 分片 |
+------------------+--------------+--------------+--//--+----------+
分片分组:
+------------------+--------+--------------+
| 未 分 片 | 分 片 | 第一个 |
| 部分 | 报 头 | 分片 |
+------------------+--------+--------------+
+------------------+--------+--------------+
| 未 分 片 | 分 片 | 第二个 |
| 部分 | 报 头 | 分片 |
+------------------+--------+--------------+
o
o
o
+------------------+--------+--------------+
| 未 分 片 | 分 片 | 最终 |
| 部分 | 报 头 | 分片 |
+------------------+--------+--------------+
每个分片分组的组成:
(1) 初始分组的未分片部分和初始IPv6报头的有效载荷长度一起改变到仅包含此分
片分组的长度(除去IPv6报头自身的长度),并且未分片部分的最后报头的下
一报头域改变为44。
(2) 一个分片报头包括:
标识初始分组分片部分的第一个报头的下一报头值。
包含相对于初始分组分片部分开始而言的分片补偿,并以8字节为单元的分片补
偿。第一个分片(“最左边”)的分片补偿是零。
一个标志M,当分片是最后(“最右边”)一个时值为零,否则标志M值为1。
(3) 分片自身。.
分片的长度必须被选择能产生适合在到分组目的地路径的MTU里的分片分组。
在目的地,分片分组被重新组合为原始的,未分片的形式,如下:
重组原始分组:
+------------------+----------------------//------------------------+
| 未 分 片 | 分 片 |
| 部 分 | 部分 |
+------------------+----------------------//------------------------+
下列规则支配重组:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -