IPV4 && IPV6
IPV4¶
展示了A、B、C类IP地址的二进制表示和它们的特征:
类别 | 地址范围 | 网络数 | 主机数 | 说明 |
---|---|---|---|---|
A | 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 1-126 | 2^24-2 | 第一位为0 |
B | 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 128-191 | 2^16-2 | 前两位为10 |
C | 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 192-223 | 2^8-2 | 前三位为110 |
D | 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 224-239 | 不适用 | 用于多播 |
E | 11110xxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 240-255 | 不适用 | 保留用于实验和未来使用 |
在这个表格中:
- A类地址的范围是从
0.0.0.0
到127.255.255.255
,第一位必须是0。 - B类地址的范围是从
128.0.0.0
到191.255.255.255
,前两位必须是10。 - C类地址的范围是从
192.0.0.0
到223.255.255.255
,前三位必须是110。
D类和E类地址用于特殊用途,不用于普通的网络和主机地址分配。
拥抱ipv6¶
ipv6 原本是为了解决ipv4不足而提出的:
- IPv4的地址范围是
0.0.0.0~255.255.255.255
,其地址总量约43亿个(2的32次方),这其中还要刨去私有网段、网络ID、广播ID、保留网段、本地环回、组播地址等特殊地址段,最终的实际可用地址约为25.68亿个,全球互联网设备数是远超这个的。所以一方面设计了私有地址来上网 - 另一方面就是ipv6。IPv6的地址长度为128位,虽然地址长度仅仅是IPv4的4倍(IPv4是32位的),但IPv6的地址总量却达到了惊人的\(2^{128}\)。换一种更通俗的说法:地球上每一平方米,都可以分到10^26次方个IPv6地址,夸张一点来说,可以给每一粒尘埃都分配到一个地址。
实际运用的困难:
- 大多数设备默认没有开启
- 光猫 和 路由器都需要开启
- 需要自己check。访问
IPV6公网地址段分配¶
首先公网ipv6,也就是可聚合全球单播地址Aggregate global unicast address。是由IANA分配的可在全球路由的公网IP地址:
- 目前已分配的前缀:
2000::/3
占用了12.5%的IPV6地址空间 2000:0000:0000:0000:0000:0000:0000:0000
--3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
::
== zeros
The use of the “::” symbol is a special syntax that you can use to compress one or more group of zeros or to compress leading or trailing zeros in an address.
国内的ipv6地址段分配¶
-
三大运营商的IPv6地址分配情况:
- 电信是
240e
开头的(240e::/20
)、 - 移动是
2409
开头的(2409:8000::/20
)、 - 我家移动宽带:
2409:8a50:ece:c110:ccf5:d43:c845:ece6
- 联通是
2408
开头的(2408:8000::/20
) - 教育网
2001:da8::/32
- 学校的教育网地址:
2001:da8:d800:611:989d:fca0:ca20:f288
- 各大高校ipv6地址段
- 电信是
-
两种隧道技术获得的地址也是公网 IPv6 地址
2002
: 开头的是 6to4 地址,由用户端设备自动建立- 6in4并没有固定的地址段,而是由服务商自行分配。常见的由HE.net提供的隧道和Windows自动建立的Teredo隧道都恰好以2001开头而已。
- 以上两种不是由运营商提供的,而是用户端设备把 IPv6 数据包封装到 IPv4 的数据包中,再通过第三方 Broker 服务器中转来访问 IPv6 互联网,速度通常比较慢。
其他一些说明:
2001:250::/32
CERNET IPv6 Backbone 主干网- 2000年,CERNET获得由亚太地区网络信息中心(APNIC)分配的正式IPv6 sTLA地址
2001:250::/32
。 - 自 1995 年以来,CERNET 在北京设立唯一的国际出口,与美国、欧洲、亚太地区的学术网实现互联。目前,CERNET 网络国际和港澳地区带宽达到 10G 以上,CERNET 国内与其它互联网单位互联带宽达到 59G 以上。
- 2000年,CERNET获得由亚太地区网络信息中心(APNIC)分配的正式IPv6 sTLA地址
2001:da8::/32
China Next Generation Internet CERNET2- 中国下一代互联网(CNGI)示范工程核心网建设项目CERNET2
- CERNET2项目由中国工程院协调负责。由清华大学等25所大学联合承担的“CNGI-CERNET2主干网和CNGI-6IX”是该项目的重要组成部分。
- 2003年,为完成CERNET2建设项目,CERNET网络中心从亚太地区网络信息中心申请获得IPv6地址
2001:0da8::/32
。 - 2004年底建成了以2.5~10 Gb/s速率连接分布在20个城市的核心节点的CERNET2主干网,并以45 Mb/s速率与北美、欧洲、亚太等地的国际下一代互联网实现了互连。CERNET2可为全国100余所著名高校提供IPv6高速接入,为CNGI 6个主干网之间的高速互连打下了基础。
- 具有以下几个主要特点:主干网采用纯IPv6协议,而不是IPv4/IPv6双协议栈技术,是世界上规模最大的纯IPv6网络;
2001:252::/32
CNGI International Gateway Network (CNGIIGN)- 所有教育网出国流量都要经过它
2001:7fa:5::/48
RIPE Network Coordination Center- 欧洲IP网络资源协调中心(Réseaux IP Européens Network Coordination Centre,缩写作 RIPE NCC),全球五大区域性互联网注册管理机构之一, 是负责管理欧洲、西亚、前苏联地区Internet资源的区域互联网注册管理机构。总部设在荷兰阿姆斯特丹,并有一个在杜拜的分支机构。
非公网地址段¶
::1
代表 loopback 地址,表示本机,等价于 IPv4 中的127.0.0.1
。fe80::/10
地址是所谓的 link local 地址段- 当DHCP分配失败时由机器自动生成,只在同一链路上有效,不能跨网段通信,使用链路本地址的数据包的TTL值一般被设置为1,不会被路由器转发
- 类似于 IPv4 下的
169.254.0.0/16
。
fd00::/8
这个段就是通常意义上的内网地址段了,等价于 IPv4 的10.0.0.0/8
,172.16.0.0/12
以及192.168.0.0/16
这三个段。如果你要组建 IPv6 内网,通常是在这个大段里随机挑选一个 /64、/56、或者 /48 的子网来用。比如可以挑选fd12:3456:789a:bcde::/64
作为你家或者你公司的局域网 IP 段。- IPv6 规范中鼓励你随机挑选地址段,避免和别人家的地址段重复,以免并网时的麻烦。
fec0::/10
曾经是ipv6的内网地址段,但是为了支持 Unique Local Addressing,已在2004年9月的RFC3879中舍弃,并且新系统不应该支持这类型的地址。fc00::/8
也是一个保留的巨大内网地址段,具体怎么用现在还没有规范。
手机的ipv6问题¶
- 问题一:手机并不会默认分配ipv6,需要访问需要ipv6的网站来激活ipv6地址
- 查看手机ipv6:
- 华为鸿蒙系统:设置→ 关于手机→状态信息→网络
- 网站:
ipw.cn
- 激活ipv6:访问
test6.ustc.edu.cn
,如果能访问,说明ipv6已经激活
- 查看手机ipv6:
- 问题二: 手机流量ipv6的DNS解析极烂,而且无法配置DNS服务器
- 实际情形:自己Cloudflare注册的
jellyfin6.shaojiemike.top
无法解析 - 解决方法一:Clash配置里勾选ipv6和DNS解析代理,所有DNS请求会走代理.(手机的日志文件可以看出ipv6流量走了clash的路由管理)
- 解决方法二:如果只是为了wireguard连接能ping通wg服务端
6.shaojiemike.top
域名,只需在wg配置文件里添加DNS服务器为8.8.8.8
- 实际情形:自己Cloudflare注册的
ipv6地址的分配¶
目前 IPv6 的动态地址分配方式可以分成有状态(stateful)和无状态(stateless)两种, 动态的常见有DHCPv6,而高校中比较常见的也即其中的无状态地址自动配置(SLAAC)。
SLAAC 协议主要过程如下:
- 在客户端会向多播地址
ff02::2
广播 RS(Router Solicitation)信息; - 路由节点在收到 RS 后即会单播回复 RA(Router Advertisement)来告知客户端路由前缀(如
2001:da8:abc:def::/64
); - 客户端收到 RA 获取其所在子网的前缀,并配合 DAD 协议自动生成该前缀下唯一的全局路由地址。
多数高校中配置的 IPv6 环境会通过上述过程让客户端获取一个 /64 的地址段(如 2001:da8:abc:def:aa:bb:cc:dd/64
)
常见问题¶
ipv6偶发性断网的原因¶
不像校园网,ipv6分配好静态就不会变。运营商会固定周期更新ip。这种情况下,固定间隔时间点到的时候,光猫的IP地址会改变,但是下级设备无法自动跟随上游更新IP地址,导致地址冲突,所以会出现断网。所以需要重启光猫,重新分配有效ipv6。
解决办法:
- 打客服电话要求运营商将自动重播时间改为7天或者30天
- 光猫内设置定时重启,然后路由器重启获取光猫最新的IP地址
OpenWRT 给内网的每台设备分配单独ipv6¶
默认openwrt的ipv6是关闭的,需要手动开启,然后设置dhcpv6,这样才能获取ipv6地址。
首先要区分上网的环境是DHCP还是pppoe
- 如果你在开通宽带以后有宽带帐号、宽带密码;就选择拨号(PPPOE);这种上网方式,宽带运营商会分配一个宽带账号、宽带密码给用户;在未使用路由器的情况下,电脑上需要使用“宽带连接”拨号来实现上网,目前国内绝大多数用户办理的宽带,都属于pppoe拨号这种类型。
- 如果宽带运营商给你提供了IP地址、子网掩码、网关和DNS服务器地址;那么就应该选择静态IP
- 如果宽带运营商只提供了一根网线到用户家里,没有宽带帐号、密码;也没有IP地址、子网掩码、网关和DNS。这种情况下就应该选择动态IP(DHCP)
没有Prefix Delegation的OpenWRT设置办法
图形化界面修改如下:
- relay 模式, 中继模式
- 注意: 有时候客户端能获取地址却 ping 不通公网,但 ping 一下路由器的 wan口 IPv6 地址后就可以上网了。OpenWRT会更新自己的IPV6路由表,重新发现客户端。
- wan口的中继模式配置的意思是可以让这个wan口继承上一级路由的ipv6地址分配功能,从来进一步往lan口分发这种能力。
- RA 也就是:Router Advertisement(路由器通告报文)是一种 ICMPv6 报文,ICMP 也就是我们日常 Ping 命令使用的报文。在 IPv6 点环境中路由发出的 RA 会携带一系列的信息告知设备如何配置自己的 IP 地址。
- DHCPv6是一个用来配置工作在IPv6网络上的IPv6主机所需的IP地址、IP前缀和/或其他配置的网络协议。 IPv6主机可以使用無狀態地址自动配置(SLAAC)或DHCPv6来获得IP地址。
- NDP(neighbor Discovery protocol)是ICMPv6的子协议是IPV6协议体系中一个重要的基础协议,邻居发现协议替代了IPV4的ARP(MAC ip对应表),ICMP路由器发现(RA)。 它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现,以及重定向等功能。
- PD(prefix delegation) 就是地址委派,来分配IPV6地址。
或者参考yfy的脚本的关于网络设置的一段:
# === ipv6 ===
if [ $IS_PPPOE -eq 0 ]; then
# === ipv6/dhcp ===
echo "[INFO] set ipv6/dhcp"
uci set dhcp.lan.ra='relay'
uci set dhcp.lan.dhcpv6='relay'
uci set dhcp.lan.ndp='relay'
uci set dhcp.lan.ra_flags='none'
if ! uci -q show dhcp.wan6
then
uci set dhcp.wan6=dhcp #add named section, name=wan6
fi
uci set dhcp.wan6.interface='wan6'
uci set dhcp.wan6.dhcpv6='relay'
uci set dhcp.wan6.ra='relay'
uci set dhcp.wan6.ndp='relay'
uci set dhcp.wan6.master='1'
uci commit dhcp
else
# === ipv6/pppoe ===
# 设置wan.ipv6='auto'就可以正常ipv6上网了
# 另外设置lan.ip6class='wan_6'可以避免LAN获得ULA地址(私有ipv6地址)
echo "[INFO] set ipv6/pppoe"
uci delete network.wan6 #pppoe会自动生成wan_6,不需要wan6
uci set network.wan.ipv6='auto'
uci del_list network.lan.ip6class
uci add_list network.lan.ip6class='wan_6'
uci commit network
uci set dhcp.lan.dhcpv6='server'
uci set dhcp.lan.ra='server'
uci commit dhcp
fi
家中的ipv6网络
由于家庭情况,我不能动入户的拨号光猫,但是我发现它会给下一级的两个路由器(客厅和卧室)分别分配单个ipv6和ipv6段 2409:8a50:ec3:4f70:5e02:14ff:fe45:a054/64
和2409:8a50:ec3:4f70:62be:b4ff:fe08:4bc0/128
,但是参考教程1操作后, 遇到了同样的问题:
wan6口一切正常,但是lan口怎么都获取不到IPv6地址。这个问题我遇到过,在网页上怎么改都没有用,最后是重置openwrt解决的。碰到类似的问题也可以试试重置。
命令行技巧¶
命令行查看ip所属实际地址¶
$ curl ipinfo.io/202.38.64.58
{
"ip": "202.38.64.58",
"city": "Shanghai",
"region": "Shanghai",
"country": "CN",
"loc": "31.2222,121.4581",
"org": "AS24362 CERNET2 IX at University of Science and Technology of China",
"timezone": "Asia/Shanghai",
"readme": "https://ipinfo.io/missingauth"
}%
参考文献¶
https://3g.163.com/dy/article_cambrian/EKMFF7TF0537828W.html
https://bgp.he.net/AS23911#_prefixes6
https://bgp.he.net/AS23910#_prefixes6
https://blog.icpz.dev/articles/notes/odhcpd-relay-mode-discuss/
https://l2dy.sourceforge.io/2021/05/11/openwrt-ipv6-relay.html
https://www.lategege.com/?p=676
ipv6偶发性断网的原因: https://jaylinwu.wordpress.com/2022/03/24/optical-network-terminals-enable-ipv6/