计算机网络:什么是 IPv6?和 IPv4 有什么区别?

#计算机网络#操作系统#面试八股

计算机网络:什么是 IPv6?和 IPv4 有什么区别?

结论:IPv6 用 128 位地址取代 IPv4 的 32 位,地址空间从约 43 亿扩展到 3.4×10^38; 同时简化首部、取消首部校验和与路由器分片、原生支持地址自动配置(SLAAC)与组播,设计上不再需要 NAT 来续命。

1. 对比

维度IPv4IPv6
地址长度32 位,约 43 亿个128 位,约 3.4×10^38 个
写法点分十进制 192.0.2.1冒号十六进制 2001:db8::1
首部20~60 字节,含校验和40 字节固定,无校验和
分片沿途路由器可分片只在源端分片,依赖路径 MTU 发现
地址配置DHCP 为主SLAAC + DHCPv6
NAT几乎必用设计上不需要
广播有广播地址取消广播,改用组播与任意播
首部扩展选项字段扩展首部链,路由器不解析
安全IPsec 可选IPsec 在设计之初即纳入

首部去掉校验和不是偷工减料:链路层与传输层已有校验,逐跳重算 16 位校验和反而拖慢路由器转发。

2. 地址怎么写

完整形式:2001:0db8:85a3:0000:0000:8a2e:0370:7334
压缩规则:① 每组前导 0 可省  ② 连续的全 0 组用 :: 代替(只能出现一次)
压缩后:  2001:db8:85a3::8a2e:370:7334

结构划分(常见 /64 子网):
|<- 全局路由前缀 48 位 ->|<- 子网 ID 16 位 ->|<- 接口 ID 64 位 ->|
        2001:db8:85a3      :    0001        : 0211:22ff:fe33:4455

特殊地址记几个就够:

地址含义
::1/128环回地址,对应 127.0.0.1
::/128未指定地址,对应 0.0.0.0
fe80::/10链路本地地址,同一链路上通信,下一跳常用它
fc00::/7唯一本地地址(ULA),类似内网私有地址
2000::/3全球单播地址,公网可路由
ff00::/8组播地址

3. 配置与检查

# 查看地址:global 可路由,link 仅本链路有效
ip -6 addr show dev eth0

# 加默认路由,下一跳通常是链路上对端的链路本地地址
ip -6 route add default via fe80::1 dev eth0

# 排查兼容问题时临时关掉某网卡的 IPv6
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

# 连通性测试,注意 -6 与方括号写法
curl -6 -g -I "http://[2001:db8::10]:8080/healthz"

nginx 同时监听双栈:

server {
    listen      443 ssl;
    listen [::]:443 ssl;      # 监听所有 IPv6 地址
    server_name example.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
}

4. 常见追问

Q:为什么推了这么多年还没普及? NAT 已经把 IPv4 的地址压力大幅缓解,迁移是"纯成本、无直接收益"的工程; 再加上老旧设备、监控系统、内网硬编码地址的改造量巨大,运营商又习惯用 CGNAT 顶住,动力自然不足。

Q:IPv6 没有 NAT,是不是更不安全? NAT 从来不是安全边界,它只是地址转换的副作用。 IPv6 的安全靠防火墙默认拒绝入站、只放行必要端口;而且地址空间巨大,随机扫描很难命中,但这不能替代访问控制。

Q:IPv4 和 IPv6 能互通吗? 不能直接互通,需要过渡技术:双栈(最常见,两端都跑两套协议)、NAT64 + DNS64(把 IPv4 目标映射成 IPv6)、 隧道(6to4、6rd、GRE)。生产上以双栈为主。

Q:为什么 IPv6 只在源端分片? 路由器逐包分片开销大且易被放大攻击。IPv6 改为源端根据路径 MTU 发现(PMTUD)决定报文大小, 中间路由器遇到过大包直接回 ICMPv6 "Packet Too Big",由源端调整。

Q:IPv4 地址真的用完了吗? IANA 的地址池在 2011 年分配完毕,各区域注册机构也早已耗尽,剩余地址主要靠回收与交易流转。 这也是 CGNAT 和 IPv6 双栈并行的现实原因。

Q:[::1] 和 ::1 有什么区别? ::1 是地址本身;URL 里必须写成 [::1],方括号是 IPv6 地址在 URL / Host 头中的定界符, 用来和端口冒号区分,例如 http://[::1]:8080/。

小结

IPv6 不只是"地址变长",而是一次协议瘦身:固定首部、去掉逐跳校验和、取消广播、把分片推到源端、把配置交给 SLAAC。 迁移的现实路径是双栈共存,而不是一夜切换;判断一套系统是否真的支持 IPv6,看监听、路由、DNS AAAA 记录和防火墙策略四处是否都到位。

笔记加载中…