概述
IP地址用于IP网络中的主机识别(RFC 791)。一个典型的IPv4地址由四个八位字节组成。为了正确寻址,路由器还需要网络掩码,即完整的IP地址中哪些位是指主机的地址,哪些是指网络的地址。网络地址值是通过网络掩码和IP地址值的二进制运算计算出来的。也可以指定一个IP地址,后面跟一个斜线"/"和构成网络地址的比特数。
在大多数情况下,只需指定地址、网络掩码和接口参数即可。网络前缀和广播地址会自动计算。
可以在一个接口上添加多个IP地址,也可以让接口不分配任何地址。在桥接或PPPoE连接的情况下,物理接口可能没有分配任何地址,但完全可以使用。为桥接物理接口配置 IP 地址,意味着要在桥接接口本身实际设置。
可以使用 /ip address print detail 来查看该地址属于哪个接口。
IPv4地址
IPv4使用4字节的地址,这些地址被分割成四个8位的字段,称为八位数。每个八位数都被转换为十进制格式,并用一个点隔开。比如说
11000000 10101000 00000011 00011000 =>; 192.168.3.24
IPv4网络由三个地址组成:
网络地址 -是指分配给一个网络的IPv4地址的标准方式。例如,我们可以把网络192.168.1.0或172.16.0.0称为 "网络地址"。
广播地址 - 每个网络的特殊地址,允许与该网络中的所有主机通信。广播地址使用网络范围内的最高地址。例如,如果192.168.1.0/24网络的广播地址将是192.168.1.255
主机地址 - 任何其他不是网络地址和广播地址的地址都可以作为主机地址使用。例如,192.168.1.2 - 254个主机地址可以从192.168.1.0/24地址范围内使用
有几种类型的IP地址
单播 - 通常指单个发送者或单个接收者,可用于发送和接收。通常,单播地址与单个设备或主机有关,但它不是一对一的对应关系。
广播 - 向所有可能的目的地发送数据的地址("全主机广播"),它允许发送者只发送一次数据,而所有接收者都收到一份数据。在IPv4协议中,地址 255.255.255.255 被用于本地广播。此外,通过将网络前缀与完全由二进制1组成的主机后缀相结合,可以进行定向(有限)广播。例如,用于向192.0.2.0/24网络上的设备定向广播的目标地址是192.0.2.255
多播 - 与一组感兴趣的接收者相关的地址。在IPv4中,地址224.0.0.0到239.255.255.255被指定为多播地址。发送者从其单播地址向多播组地址发送一个数据报,中间路由器负责制作副本并将其发送给所有加入相应多播组的接收者。
私有地址范围
以下IP地址范围被保留(RFC 6890)用于私有寻址。这些地址在全局路由表中不被路由,应通过网络地址转换(NAT)将其转换为全局地址:
10.0.0.0/8 - start: 10.0.0.0; end: 10.255.255.255
172.16.0.0/12 - start: 172.16.0.0; end:172.31.255.255
192.168.0.0/16 - start: 192.168.0.0; end: 192.168.255.255
其他保留地址范围
198.18.0.0/15 - 基准测试
192.88.99.0/24 - 6to4中继任播地址范围
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 - 文件
169.254.0.0/16 - 自动配置地址范围
添加IP地址
考虑一个设置,两个路由器用电缆直接连接,不浪费地址空间:
R1配置:
/ip address add address=10.1.1.1/32 interface=ether1 network=172.16.1.1
R2配置:
/ip address add address=172.16.1.1/32 interface=ether1 network=10.1.1.1
IPv6寻址
互联网协议版本6(IPv6)是互联网协议(IP)的较新版本。最初预计它将在足够短的时间内取代IPv4,但目前看来,在可预见的未来,这两个版本将在互联网上共存。然而,随着未分配的IPv4地址池耗尽日期的临近,IPv6变得更加重要。
与IPv4相比,IPv6的两个主要好处是:
更大的地址空间;
支持无状态和有状态地址自动配置;
内置安全性;
新的报头格式(更快的转发)。
与IPv4的4字节地址相比,IPv6使用16字节的地址。IPv6地址的语法和类型在 RFC 4291 中描述。
有多种IPv6地址类型,可以通过其前缀来识别。RouterOS区分了以下几种:
多播(前缀为ff00::/8)
链路本地(前缀为fe80::/10)
唯一的本地地址(前缀为fc00::/7)。
回环(地址为::1/128)
未指定的(地址::/128)
其他(所有其他地址,包括过时的站点-本地地址,以及 RFC 4193 独特的本地地址,它们都被视为全局单播)。
IPv6和IPv4地址的一个区别是,IPv6为每个支持IPv6的活动接口自动生成一个 链接本地的 IPv6地址。
IPv6地址的表示方法与IPv4地址有一点不同。对于IPv6,128位地址被分为8个16位块,每个16位块被转换为4位十六进制数字,并用冒号分隔。由此产生的表示法被称为冒号-十六进制。
在下面的例子中,二进制格式的IPv6地址被转换为冒号-十六进制表示法
0010000000000001 0000010001110000 0001111100001001 0000000100110001
0000000000000000 0000000000000000 0000000000000000 0000000000001001
2001:0470:1f09:0131:0000:0000:0000:0009
通过去除每个区块中的前导零,可以进一步简化IPv6地址:
2001:470:1f09:131:0:0:0:9
正如你所看到的,IPv6地址可以有很长的零序列。这个连续的序列可以被压缩为 :
2001:470:1f09:131::9
零压缩只能使用一次。否则,你无法确定每个双冒号的实例所代表的0比特的数量
IPv6前缀是以 地址/前缀长度 格式书写的。与IPv4相比,不能使用网络掩码的十进制表示法。前缀的例子:
2001:470:1f09:131::/64
2001:db8:1234::/48
2607:f580::/32
2000::/3
地址类型
存在几种IPv6地址类型:
单播
任意广播
组播
正如所看到的,在IPv6网络中没有广播地址,相比之下,IPv4的广播功能完全被组播所取代。
单播地址
寻址到单播地址的数据包只传送到一个单一的接口。该组属于:
全局唯一地址,可用于连接到任何地方的全局范围的地址;
链接本地地址;
唯一的本地地址(ULA RFC4193)
站点本地地址(FEC0::/48)–已废弃;
特殊用途的地址;
兼容性地址;
全局单播地址可以通过 无状态地址自动配置来自动分配给节点。
链接本地地址
每个支持IPv6的接口都需要一个链路本地地址,即使没有IPv6路由,应用程序也可能依赖于链路本地地址的存在,这就是为什么链路本地地址是使用接口标识符(如果存在MAC地址,则从EUI-64计算)为每个活动接口自动生成的。地址前缀总是 FE80::/64,IPv6路由器从不将链路本地流量转发到链路之外。
这些地址与IPv4的自动配置地址169.254.0.0/16相当。
IPv6邻居发现过程也需要链路本地地址。
如果接口被设置为桥接端口,特定接口的链路本地地址就会被删除,只留下桥接的链路本地地址
独特的本地地址
唯一本地地址(ULA)是保留给家庭和企业环境中的本地使用,不在公共地址空间中路由,相当于IPv4私人地址范围。
保留的地址范围是 fc00::/7。
特殊用途地址
| 地址 | 说明 |
|---|---|
| Unspecified address(:/128) | 从未分配给接口或用作目的地址,仅用于表示没有地址。相当于IPv4的0.0.0.0地址。 |
| loopback address(::1/128) | 用于识别环回接口,使节点能够向自己发送数据包。它相当于IPv4环回地址127.0.0.1。 |
| 2002::/16 | 这个前缀用于6to4寻址。这里,也使用了IPv4网络192.88.99.0/24的地址。 |
| 2001:db8::/32 | 地址范围为文件保留。这些地址不应该被看作是源地址或目的地。 |
| 2001:0010::/28 | 兰花固定期限实验。不应被看作是源头或目的地。 |
| 2001:0002::/48 | 用于基准测试,不应视为源头或目的。 |
| 2001:0000::/32 | Teredo |
兼容地址
| 地址 | 说明 |
|---|---|
| IPv4 compatible address | 由双栈节点使用,这些节点通过IPv4与IPv6进行通信。当IPv4兼容地址被用作IPv6目的地时,IPv6流量会被自动封装在IPv4头中,并通过使用IPv4基础设施发送至目的地。地址写成以下格式::w.x.y.z,其中w.x.y.z是公共IPv4地址的点十进制表示。 |
| IPv4映射地址 | 用于将一个纯IPv4节点表示给一个IPv6节点。它仅用于内部表示。IPv4映射的地址永远不会被用作IPv6数据包的源地址或目的地址。IPv6协议不支持使用IPv4映射的地址。该地址的书写格式如下::fff:w.x.y.z,其中w.x.y.z是公共IPv4地址的点状十进制表示。 |
组播地址
组播最重要的方面是:
流量被发送到一个地址,但被多个主机处理;
组成员是动态的,允许主机在任何时候加入和离开该组;
在IPv6中,多播听众发现(MLD)信息用于确定网段(也称为链路或子网)上的组成员;
一台主机可以向组的地址发送流量而不属于相应的组。
一个单一的IPv6组播地址可以被每个组播组识别。每个组的预留IPv6地址由该组的所有主机成员共享,他们可以收听和接收发送到该组地址的任何IPv6消息。
组播地址由以下部分组成:
组播地址的前8位总是1111 1111(在十六进制格式中是FF)。
标志使用第9至12位,显示这个组播地址是否是预定义的(知名的)。如果它是众所周知的,所有位都是0。
范围ID表示多播地址属于哪个范围,例如,范围ID=2是链接本地范围。
组ID用于指定一个多播组。有一些预定义的组ID,如组ID=1–所有节点。因此,如果组播地址是ff02::1,这意味着范围ID=2,组ID=1,表示链路本地范围内的所有节点。这类似于IPv4上的广播。
下面是为组播保留的IPV6地址表:
| 地址 | 描述 |
|---|---|
| FF02::1 | 全节点地址用于联系同一链路上的所有节点。 |
| FF02::2 | 所有路由器地址用于联系同一链路上的所有路由器。 |
| FF02::5 | 全开放最短路径优先(OSPF)路由器地址用于到达同一链路上的所有OSPF路由器。 |
| FF02::6 | 全OSPF指定的路由器地址用于到达同一链路上的所有OSPF指定的路由器。 |
| FF02::1:FFXX:XXXX | 征求节点地址用于地址解析过程,将链路本地节点的IPv6地址解析为其链路层地址。征求节点地址的最后24位(XX:XXXX)是IPv6单播地址的最后24位。 |
下表是保留给IPv6组播并在互联网号码分配机构(IANA)注册的IPv6组播地址的部分列表。有关分配地址的完整列表,请阅读 IANA文件
多播地址可用于发现网络中的节点。例如,发现所有节点
mrz@bumba:/media/aaa/ver$ ping6 ff02::1%eth0
PING ff02::1%eth0(ff02::1) 56 data bytes
64 bytes from fe80::21a:4dff:fe5d:8e56: icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from fe80::20c:42ff:fe0d:2c38: icmp_seq=1 ttl=64 time=4.03 ms (DUP!)
64 bytes from fe80::20c:42ff:fe28:7945: icmp_seq=1 ttl=64 time=5.59 ms (DUP!)
64 bytes from fe80::20c:42ff:fe49:fce5: icmp_seq=1 ttl=64 time=5.60 ms (DUP!)
64 bytes from fe80::20c:42ff:fe21:f1ec: icmp_seq=1 ttl=64 time=5.88 ms (DUP!)
64 bytes from fe80::20c:42ff:fe72:a1b0: icmp_seq=1 ttl=64 time=6.70 ms (DUP!)
发现所有路由
mrz@bumba:/media/aaa/ver$ ping6 ff02::2%eth0
PING ff02::2%eth0(ff02::2) 56 data bytes
64 bytes from fe80::20c:42ff:fe28:7945: icmp_seq=1 ttl=64 time=0.672 ms
64 bytes from fe80::20c:42ff:fe0d:2c38: icmp_seq=1 ttl=64 time=1.44 ms (DUP!)
任意广播地址
任意广播地址是纳入IPv6的一种新的地址类型。
任意广播是一种新的网络范式,支持面向服务的地址,一个相同的地址可以分配给提供特定服务的多个节点。任意广播数据包(即具有任意广播目标地址的数据包)被传递到具有相同任意广播地址的这些节点之一。
任意广播地址没有分配一个特定的地址范围。它是从单播地址范围中分配的。
接口标识符
IPv6地址的最后64位是接口标识符,它对IPv6地址的64位前缀是唯一的。有几种方法来确定接口标识符:
EUI-64;
随机生成,提供一定程度的匿名性;
手动配置。
EUI-64
网络适配器的传统接口标识符是48位MAC地址。这个地址由一个24位的制造商ID和一个24位的板卡ID组成。
IEEE EUI-64是网络接口地址的一个新标准。公司ID的长度仍然是24位,但扩展ID是40位,为网络适配器创造了一个更大的地址空间。
要从接口MAC地址创建一个EUI-64地址:
0xFFFE被插入制造商ID和板卡ID之间的MAC地址中。
第一个字节的第7位被颠倒过来。
用下面的MAC地址做一个例子 00:0C:42:28:79:45。
上面的图片说明了转换的过程。当结果被转换为冒号十六进制符号时,我们得到了接口标识符20C:42FF:FE28:7945。因此,相应的链路本地地址是
FE80::20C:42FF:FE28:7945/64
在RouterOS中,如果配置了地址的EUI-64参数,该地址的最后64位将自动生成并使用接口标识符更新。在这种情况下,最后几位必须被配置为零。例子如下:
[admin@MikroTik] > ipv6 address add address=fc00:3::/64 interface=ether3 eui-64=yes
[admin@MikroTik] > ipv6 address print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
# ADDRESS INTERFACE ADVERTISE
...
5 G fc00:3::20c:42ff:fe1d:3d4/64 ether3 yes
[admin@MikroTik] > interface ethernet set ether3 mac-address=10:00:00:00:00:01
[admin@MikroTik] > ipv6 address print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
# ADDRESS INTERFACE ADVERTISE
...
5 G fc00:3::1200:ff:fe00:1/64 ether3 yes
配置IPv6地址
本例展示了如何在两个路由器之间用全局IPv6地址设置简单寻址。
R1配置:
/ipv6 address add address=2001:DB8::1/64 interface=ether1 advertise=no
R2配置:
/ipv6 address add address=2001:DB8::2/64 interface=ether1 advertise=no
检查地址列表:
[admin@R1] /ipv6 address> print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
# ADDRESS FROM-POOL INTERFACE ADVERTISE
0 G 2001:db8::1/64 ether1 no
3 DL fe80::219:d1ff:fe39:3535/64 ether1 no
请注意,添加的地址有一个G标志,表明这个地址可以全局路由。在接口上有一个链路本地地址,这是为每个支持IPv6的接口自动创建的。
测试连接性:
[admin@R1] /ipv6 address> /ping 2001:DB8::2
HOST SIZE TTL TIME STATUS
2001:db8::2 56 64 12ms echo reply
2001:db8::2 56 64 0ms echo reply
sent=2 received=2 packet-loss=0% min-rtt=0ms avg-rtt=6ms max-rtt=12ms
SLAAC IPv6地址
如果在IPv6/Settings菜单下的 "accept-router-advertisements "选项被启用,并且路由器收到了一个路由器广播包,那么SLAAC IPv6地址将被自动分配给收到广播的接口。这个地址会有DG标志,意味着这个地址是动态和全局的。这个地址将显示有效参数和寿命参数。
[admin@R1] /ipv6/address/print detail where dynamic && global
Flags: X - disabled, I - invalid, D - dynamic; G - global, L - link-local
0 DG address=2001:db8::::ba69:f4ff:fe84:545/64 from-pool="" interface=ether1
actual-interface=test_fp eui-64=no advertise=no no-dad=no valid=4w2d
preferred=1w
如果接受SLAAC地址,那么也将产生面向互联网的动态路由。如果在广播包上指定,它也将包含一些限制。例如,跳数限制和MTU。如果在同一个接口上收到多个地址,那么将使用每个接口的最低MTU值。
[admin@R1] /routing/route/print detail where slaac
Flags: X - disabled, F - filtered, U - unreachable, A - active;
c - connect, s - static, r - rip, b - bgp, o - ospf, d - dhcp, v - vpn, m - modem, a - ldp-address, l - ldp-mapping, g - slaac, y - bgp-mpls-vpn;
H - hw-offloaded; + - ecmp, B - blackhole
Ag + afi=ip6 contribution=active dst-address=::/0 routing-table=main
pref-src="" gateway=fe80::ba69:f4ff:fe84:7b2%ether1
immediate-gw=fe80::ba69:f4ff:fe84:7b2%ether1 distance=1 scope=30
target-scope=10 belongs-to="slaac" mtu=1400 hoplimit=10
debug.fwp-ptr=0x201C2C00