RFC 2464 Transmission of IPv6 Packets over Ethernet Networks
1、概述
这篇RFC主要描述了在以太网上传输IPv6报文的一些相关的规范定义。这些规范主要涵盖了帧格式、构造IPv6 Link-Local Address以及无状态自动配置地址(statelessly autoconfigured addresses)的方法,并且还定义了在路由恳求、路由通告、邻居恳求、邻居通告及重定向报文中使用的源/目的链路层地址选项的内容。
2、最大传输单元(MTU)
对于以太网上的IPv6报文,默认的MTU为1500,该值也可以通过路由通告或者手工配置(包括DHCP方式)的方式来设定。当收到带有MTU选项的路由通告时,应该判断该报文中指定的MTU的值。如果该值小于1500,那么就采用该值。如果该值大于1500或者大于手工配置的值,则忽略该选项,并且在系统管理日志中作相应的记录。
3、帧格式
IPv6的报文在以太网上传输的时候,是被封装在标注的以太网头部中的。以太网头部包括目的地址、源地址及类型代码。其格式如下排列:
1 Destination Ethernet Address —— 16bits * 3 2 Source Ethernet Address —— 16bits * 3 3 Ethernet Type —— 16bits = 0x86DD 4 IPv6 header and payload
4、无状态自动配置
以太网接口的接口标识(Interface Identifier)是基于EUI-64(64-bit extended unique identifier)标识的。而该网卡的EUI-64标识是由网卡内建的48位IEEE802地址(MAC地址)扩展的。
下面先介绍EUI-64的构造方法:
以太网地址的OUI(Organizationally Unique Identifier)部分(即前3个字节)构成EUI-64的company_id部分(即前3字节),EUI的第四、第五个字节是固定的16进制值 FFFE。以太网地址的最后3个字节构成EUI-64的最后3个字节。
再介绍接口标识的构造方法:
接口标识是通过将EUI-64的“全球/本地”("Universal/Local")位取反得到的。该位是EUI-64的第一个字节的次低位(即第7位)。由于网卡的内建地址是全球统一管理分配的,因此得到的标识也是全球唯一的。IEEE802或者EUI-64地址的该位为0,而全球唯一的IPv6接口标识的该位为 1。
例如,
一块网卡的MAC地址为:34-56-78-9A-BC-DE,那么其对应的接口标识应该为:36-56-78-FF-FE-9A-BC-DE。
对于手工设置的或者软件设置的网卡地址,不应该用来构造接口标识。如果一定要使用这类地址来构造接口标识,那么应该在“U/L”位上反映出该地址是否全球唯一。
用来对一块以太网卡进行无状态自动配置的IPv6地址前缀(IPv6 address prefix)的长度必须是64位。
5、Link-Local Address
以太网卡的IPv6 Link-Local Address是通过该接口的接口标识来构造的。构造方法是:最高的10位为“1111111010”,之后的54位为全0,最后64位为该接口的接口标识。
例如接口标识为:36-56-78-FF-FE-9A-BC-DE,那么对应的IPv6 Link-Local Address为:FE80::3656:78FF:FE9A:BCDE。
6、地址映射——单播
IPv6单播地址到链路层地址的映射在RFC2461(Neighbor Discovery)里有详细描述。对于以太网而言,源/目的链路层地址选项的格式如下:
1 Type: 8bits —— 1是源链路层地址,2是目的链路层地址。 2 Length: 8bits —— 1(以8字节为单位)。 3 Ethernet Address: 48bits —— 以太网地址。
7、地址映射——多播
带有IPv6多播地址的报文,对应的接收者的以太网多播地址的结构是:前2个字节为16进制3333,剩下的4个字节为该报文的IPv6多播地址的最后4个字节。
9、安全考虑
通过MAC地址来构造接口标识是为了保证全球唯一性。但是没有任何保护机制保证该地址不会因为巧合或者伪造而产生冲突。
至于具体的IPv6的地址结构,以及Neighbor Discovery的相关内容等看完相关的RFC后应该就能够搞明白了。