Ipv6
IPv6 培训
IPv6核心协议
IPv6协议头
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Length | Next Header | Hop Limit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- version
- Traffic Class
- Flow Label
- PayLoad Length
- Next Header
- Hop Limit(替代TTL)
- Source Address(128)
- Source Address(128)
与IPv4的异同
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Example Internet Datagram Header
- 由原来的32字节变为128字节
- 简化包头
地址类型
- 单播
- 本地链路地址(fe80)
- 映射IPv4格式(::ffff:192.168.80.160)
- 站点本地地址(fec0)
- 可集聚全球单播地址(prefix)
- 组播
- 任播(anycast)
邻居发现协议
同一链路上的IPv6节点(hosts and routers)使用邻居发现来发现彼此的存在,确定彼此的链路层地址,查找路由器以及维护与活动邻居的路径的可达性信息。
ND 定义了 5 个不同的 ICMP 分组类型: Router Solicitation 和 Router Advertisement 消 息, Neighbor Solicitation 和 Neighbor Advertisements 消息,以及 Redirect message 消息。这 些消息服务于下述目的:
- Router Solicitation:当接口能使后,主机可以发出 Router Solicitations,要求路由器立即
生成 Router Advertisements,而不是在它们的下一个规定时间生成。
wireshark filter: icmpv6.type == 133
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- Router Advertisement:路由器周期地用此消息通告它们的存在及各种链路参数和互联网参数,或响应 Router Solicitation 消息。 Router Advertisements 包括前缀,这些前缀用于确定是否另一个地址共享相同链路(on-link 确认)和/或地址配置, 建议的跳数限制值,等等。
wireshark filter: icmpv6.type == 134
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O| Reserved | Router Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reachable Time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Retrans Timer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- Neighbor Solicitation: 由节点发送,以便确定邻居的链路层地址,或者通过缓存的链路
层地址验证邻居仍然可达。 Neighbor Solicitations也用于Duplicate Address Detection。
wireshark filter: icmpv6.type == 135
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- Neighbor Advertisement: 响应Neighbor Solicitation消息。 节点也可以发送非请求的
Neighbor Advertisements,通知链路层地址改变。
wireshark filter: icmpv6.type == 136
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
- Redirect:由路由器使用,用于通知主机有到目的地的较好的第一跳。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
无状态地址自动配置
无状态地址自动配置描述了在 IPv6 中,主机在决定如何自动配置它的接口时采取的步骤。自动配置 处理包括利用无状态地址自动配置生成链路本地地址, 生成全球地址,以及启动验证链路上 地址唯一性的重复地址检测(Duplicate Address Detection)程序
重复地址检测(Duplicate Address Detection)
重复地址检测(Duplicate Address Detection)必须在所有单播地址上执行, 是在这些地址 被分配到接口前执行,无论这些地址是通过无状态自动配置, DHCPv6,或手工配置获得的.
生存期
tentative address
临时地址。一个地址,在被分配到接口前,它在链路上的唯一性正在被验证。 一般意义上, 不认为将临时地址分配给接口。接口抛弃收到的寻址到临时地址的分组, 但是接受与临时 地址的 Duplicate Address Detection 相关的 Neighbor Discovery 分组。
preferred address
优先地址。 分配到接口的可由上层协议不受限制使用的地址。优先地址可用作发送到(或来 自)该接口的分组的源地址(或目的地地址)。
deprecated address
过时地址。分配到接口的地址,它的使用不受鼓励,但是不被禁止。在新的通信中应当不 再用过时地址作为源地址,但是发送到或来自过时地址的分组被正常交付。在这样的情况 过时地址可以继续作为源地址在通信中使用,那里转变到优先地址会给特定上层活动(例如, 现存 TCP 连接)带来困难。
valid address
合法地址。优先地址或过时地址。合法地址可作为分组的源地址或目的地地址,并且可以 期待互联网路由系统会将发送到合法地址的分组交付到它们的预期接收者。
invalid address
不合法地址。没有分配给任何接口的地址。合法地址在它的合法生存期到期后将变成不合 法地址。 不合法地址不应当作为分组的目的地地址或源地址。 对于前者,互联网路由系统 将不能传递该分组;对于后者,分组的接收者将不能响应该分组。
preferred lifetime
优先生存期。合法地址处于优先状态的时间长度(即, 到过时前的时间)。当优先生存期到 期,地址变成过时地址。
valid lifetime
合法生存期。地址保持合法状态的时间长度(即,到不合法前的时间)。 合法生存期必须大 于等于优先生存期。 合法生存期到期,地址将变成不合法
Path MTU
当一个IPv6节点有大量数据要发送到另一个节点时,数据将通过一系列IPv6数据包进行传输。这些数据包通常最好能够成功地遍历从源节点到目的节点的路径。这个数据包大小被称为路径MTU(PMTU),它等于路径中所有链路的最小链路MTU。 IPv6为节点发现任意路径的PMTU定义了一个标准机制。
未实现路径MTU发现的节点使用中定义的IPv6最小链路MTU作为最大数据包大小。在大多数情况下,这会导致使用比必要的更小的数据包,因为大多数路径的PMTU大于IPv6最小链路MTU。发送比路径MTU小得多的分组的节点正在浪费网络资源并且可能获得不理想的吞吐量。
使用ping6测试:
-M pmtudisc_opt
Select Path MTU Discovery strategy. pmtudisc_option may be either do (prohibit fragmentation, even local one), want (do PMTU discovery, fragment locally when packet size
is large), or dont (do not set DF flag).
ICMPv6
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Message Body +
| |
ICMPv6 messages are grouped into two classes: error messages and informational messages. Error messages are identified as such by a zero in the high-order bit of their message Type field values. Thus, error messages have message types from 0 to 127; informational messages have message types from 128 to 255.
ICMPv6 error messages:
1 Destination Unreachable (see Section 3.1)
2 Packet Too Big (see Section 3.2)
3 Time Exceeded (see Section 3.3)
4 Parameter Problem (see Section 3.4)
100 Private experimentation
101 Private experimentation
127 Reserved for expansion of ICMPv6 error messages
ICMPv6 informational messages:
128 Echo Request (see Section 4.1)
129 Echo Reply (see Section 4.2)
200 Private experimentation
201 Private experimentation
255 Reserved for expansion of ICMPv6 informational messages
Linux IPv6 使用
IPv6 配置
- 查看IPv6地址
ip -6 addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2001:db8::5cb:18af:38c4:d0c7/64 scope global temporary dynamic
valid_lft 80331sec preferred_lft 8331sec
inet6 2001:db8::b533:1a84:429:c0f3/64 scope global temporary deprecated dynamic
valid_lft 66129sec preferred_lft 0sec
inet6 2001:db8::c4cf:abd0:a33f:dcf8/64 scope global temporary deprecated dynamic
valid_lft 51996sec preferred_lft 0sec
inet6 2001:db8::c85f:3777:d1fd:2f87/64 scope global temporary deprecated dynamic
valid_lft 37938sec preferred_lft 0sec
inet6 2001:db8::80be:cf50:b6e1:f77e/64 scope global temporary deprecated dynamic
valid_lft 23806sec preferred_lft 0sec
inet6 2001:db8::880b:1908:9925:9350/64 scope global temporary deprecated dynamic
valid_lft 9664sec preferred_lft 0sec
inet6 2001:db8::b4fe:91cf:10dd:a0be/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 86259sec preferred_lft 14259sec
inet6 fe80::d586:f818:7bc7:4db6/64 scope link
valid_lft forever preferred_lft forever
4: vmnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UNKNOWN qlen 1000
inet6 fe80::250:56ff:fec0:1/64 scope link
valid_lft forever preferred_lft forever
- 查看IPv6路由
ip -6 route show
2001:db8::/64 dev enp1s0 proto kernel metric 256 expires 35070sec pref medium
fe80::/64 dev enp1s0 proto kernel metric 256 pref medium
fe80::/64 dev vmnet1 proto kernel metric 256 pref medium
fe80::/64 dev vmnet2 proto kernel metric 256 pref medium
fe80::/64 dev vmnet3 proto kernel metric 256 pref medium
fe80::/64 dev vmnet8 proto kernel metric 256 pref medium
default via fe80::20c:29ff:fe69:acf2 dev enp1s0 proto static metric 100 pref medium
添加IPv6地址
添加IPv6路由
软件测试IPv6自动分配地址
- radvd
IPv6 系统配置参数
- Sysctl
- /etc/sysctl.conf
- /proc/sys/net/ipv6
IPv6 测试及查看数据包
测试本地链路地址
- ping6 -I dev fe80::
测试全局地址
- ping xxxx
查看路由
- traceroute6
测试 PMTU
tracepath6
ping6 -c 1 -M dont -s 1452 -I le0 FF1E::1:2
ping6 -c 1 -M dont -s 1352 -I le0 FF1E::1:2
IPv6与IPv4编程
struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
struct sockaddr *ai_addr;
char *ai_canonname;
struct addrinfo *ai_next;
};
其他
IPv6选路
ipv6 的选路方式还是与ipv4一样,主要如下两种:
- 选路信息协议 ( RIP )
RIP协议是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递。RIP协议基于距离矢量算法(DistanceVectorAlgorithms),使用“跳数”(即metric)来衡量到达目标地址的路由距离。
- 最短路径优先 ( OSPF )协议
开放最短路径优先(OSPF)是Internet协议(IP)网络的路由协议。 它使用链路状态路由(LSR)算法,属于一组内部网关协议(IGP),在单个自治系统(AS)内运行。 OSPF通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,每个OSPF路由器使用这些最短路径构造路由表。
ref: ipv6详解
IPv6 安全性
ref: https://tools.ietf.org/html/rfc2401
在IPv6中去除了检验和,因为上层都提供了检验和的功能,另外的话是使用 IPSec 来保证安全。