ipv6有必要打开吗_IPv6系列-初学者的10个常见困扰

本文详细解答了IPv6的10个常见困扰,包括IPv4与IPv6的区别、IPv6配置、地址解析、多播与安全等方面的问题。作者强调IPv6协议栈与IPv4不同,对应用程序有感知,且IPv6地址配置和使用需根据不同场景决定。此外,文章还探讨了IPv6的安全性和学习路径。
摘要由CSDN通过智能技术生成

a4a2af476372f8aad1f92491c500a68e.png

本文是《IPv6系列》文章的第二篇《常见困扰》,紧接《入门指南》,用于解答IPv6的10个常见困扰。

小慢哥的原创文章,欢迎转载


目录

▪ 本文缘由

▪ 困扰1. IPv4和IPv6只有地址格式不同吗

▪ 困扰2. IPv4到IPv6对应用程序是透明无感知的吗

▪ 困扰3. 提供WEB服务,需要每台服务器都配置IPv6地址吗

▪ 困扰4. IPv4和IPv6要配在同一张网卡上吗

▪ 困扰5. 我的网卡有fe80开头的地址,可以用来上公网吗

▪ 困扰6. IPv6地址如何配置

▪ 困扰7. 没有了ARP,如何解析MAC地址

▪ 困扰8. IPv6使用多播替代广播,需要做哪些改造

▪ 困扰9. IPv6真的安全吗

▪ 困扰10. 如何学习IPv6

▪ 后续说明


本文缘由

在笔者的上一篇文章《IPv6系列-入门指南》里,简要阐述了以下内容:

▷ 掌握IPv6的必要性

▷ IPv6的3个常见顾虑

▷ IPv6基础知识

▷ 常用测试方法

而在进一步的实践学习中,会遇到很多的困扰。笔者结合自己以及身边的同行兄弟们遇到的困扰,精心挑选出10个困扰在本文中进行解答。

如果没有阅读过《IPv6系列-入门指南》,敬请劳神垂阅,以便知识的连贯。


困扰1. IPv4和IPv6只有地址格式不同吗

除了地址格式不同,IPv4与IPv6协议栈也不同,他们在逻辑上是完全不同的2个世界

以下实践中经常会遇到的4个不同之处:

基本通讯过程:ND替代ARP、多播替代广播、fe80地址成为标配、ICMP成为通讯核心

IP配置方式:客户端以无状态自动配置IP成为主流,弱化DHCP

DNS域名解析:AAAA记录替代IPv4的A记录、对应用存在优先级问题(优先解析AAAA还是A)

应用层适应性:socket编程中AF_INET仅支持IPv4,AF_INET6仅支持IPv6


困扰2. IPv4到IPv6对应用程序是透明无感知的吗

错,是有感知的,上层应用程序需要进行改造。

举个例子,当访问http://fzxiaomange.com时候,是要优先解析IPv6地址(AAAA)还是IPv4地址(A),因为总得选一条线路来发送请求。现在许多框架会优先选择IPv6。

注意:如果解析出AAAA记录,即使本机没有可路由IPv6地址,也有可能依然尝试通过IPv6进行请求,导致请求失败

还有一个典型的例子,是程序会在应用层里交互底层IP地址,比如FTP主动模式会在应用层里交互IPv4地址,而如果实际可用的是IPv6地址,就可能导致后续连接的异常。

无法做到透明无感知,是导致产生IPv4到IPv6的部分过渡方案的原因之一。


困扰3. 提供WEB服务,需要每台服务器都配置IPv6地址吗

现在有一种言论,说“IPv6地址无限多,每台服务器都可以配一个IP地址,不用做NAT”。

这很容易误导人,具体如何使用IPv6,还得根据场景而定。比如笔者的个人博客http://fzxiaomange.com,由nginx->php->mysql组成,分别位于3台服务器上,那只需要在nginx上配置IPv6地址,并在DNS上添加一条AAAA记录指向L7的IPv6地址即可。完全没必要在php、mysql服务器上配置IPv6地址,而且一旦配置了,就直接暴露内网了。

每个设备都配置IPv6,主要适用于偏客户端以及地址需求量大的场景,诸如物联网设备、手机4G、家庭宽带等。

另外,IPv6有NAT,适用于办公PC、机房服务器等需要访问IPv6网络,而不想被别人主动访问的场景。


困扰4. IPv4和IPv6要配在同一张网卡上吗

都可以,首先需要先了解2个词“单栈”“双栈”

以节点为角度(通用的解释):

▷ 单栈:表示一个IPv6节点,也就是一台服务器,或一部手机,仅有IPv6地址,或仅有IPv4地址,前者叫做“IPv6单栈”“IPv6-Only”,后者叫“IPv4单栈”“IPv4-Only”

▷ 双栈:表示一个IPv6节点,同时拥有IPv6地址和IPv4地址

以网卡为角度

▷ 单栈:表示一张网卡仅有IPv6地址,或仅有IPv4地址,示意图如下

9eff646f8dafe5521570c675051e2292.png

▷ 双栈:表示一张网卡同时拥有IPv6地址和IPv4地址

15fdc3e5da5f2c1f3fe9cd487527ef5d.png

IPv4和IPv6在逻辑上是两个完全不相交的世界。如果终端处位于同一个物理层,比如同一个VLAN,那么网卡就只能同时配置IPv6地址和IPv4地址;反之,就必须一张网卡配置IPv6,另一张网卡配置IPv4。所以,关键看网络架构是如何设计,各有利弊。比如放同一张网卡上,就可以做到带宽共享,而放不同网卡,可以做到带宽分别限制与计费。


困扰5. 我的网卡有fe80开头的地址,可以用来上公网吗

4ef1dc5c4d362602f20fa9508829814b.png

d037f8b32708c38f2176554c7930bc2d.png

当网卡启动的时候,会自动生成“链路本地地址”(Link-Local Address),这是一个fe80::/10的单播地址。“链路本地地址”用于IP自动配置邻居发现等。

注意事项

▷ 核心:每张网卡都会存在“链路本地地址”,这是IPv6协议通讯的核心,不应当删掉

▷ 范围:仅在同一个二层范围内进行传播,不会被路由器做转发

▷ 地址:“链路本地地址”的算法不统一,有的操作系统会根据mac地址计算而来(EUI-64),而有的则是随机或其他某种算法计算而来

▷ 服务:“链路本地地址”虽然可以在二层内互通,但主要用于核心通讯以及某些网络高级协议。不适用于上层应用业务之间的通讯。因此不能用来上公网,也不能用于对外提供服务


困扰6. IPv6地址如何配置

公网地址和私网地址

▷ 公网地址:“全球单播地址”(Global Unicast Address,2000::/3)

▷ 私网地址:“唯一本地地址”(Unique-Local Address,fc00::/7)

细心的人可能会发现,为什么这里叫做“全球单播地址”,而“唯一本地地址”却不叫做“唯一本地单播地址”,好吧,其实都是简称,在RFC里是这么定义的:“Global Unicast Addresses”、“Link-Local IPv6 Unicast Addresses”。其实“全球单播地址”是可以叫做“全球地址”的,只是这样显得有点别扭。

自动生成还是固定IP

在IPv6里,任何单播地址都可以自动生成,也可以手工配置固定IP,具体看应用场景:

▷ 客户端:如果我想访问ipv6互联网,而不对外提供服务,那么使用自动生成即可,无需使用固定的ip地址

▷ 服务端:如果需要对外提供服务,那么ip地址就需要固定了,不能使用自动生成

自动配置IP

在ipv6里还分为2种方法:“有状态”与“无状态”

▷ 有状态(Stateful):地址由DHCPv6 Server统一管理,DHCPv6 Client从中获得一个可用的IP地址

▷ 无状态(Stateless,简称SLAAC):路由器发出“路由通告”报文(Router Advertisement,简称RA),报文内包含了IPv6地址的前缀信息。当收到RA包后,就会根据其中前缀信息,自动生成一个或多个IP地址


困扰7. 没有了ARP,如何解析MAC地址

ARP协议是IPv4用于解析目标MAC地址的协议,而在IPv6里,解析地址采用的是邻居发现(Neighbor Discovery Protocol,简称NDP或ND)

ND不是一个具体协议,而是用来描述多个相关功能的协议的抽象集合,所涵盖的所有协议均是基于ICMPv6。其中有2种报文与解析MAC地址有关:

邻居请求报文NS(Neighbor Solicitation):请求解析

邻居通告报文NA(Neighbor Advertisement):响应解析

这与ping是非常类似的:

▷ ping:发送icmp的echo request报文,对端响应icmp的echo reply报文

▷ 地址解析:发送icmp的ns报文,对端响应icmp的na报文


困扰8. IPv6使用多播替代广播,需要做哪些改造

IPv6使用多播替代了广播,多播的特点是不会像广播那样完全泛洪,而是数据包只发送给加入了多播组的机器。

但是,这有个前提,就是交换机要能识别并维护多播组的信息,主流交换机都具备此功能,然而并不都是默认开启的。对于二层交换机来说,需要开启MLDv2 Snooping

顾名思义,就是交换机会识别“MLDv2成员报告”报文从哪个端口发来的,并记录下来,之后当交换机收到多播包后,会先查找其多播地址是否能在缓存里匹配上

▷ 匹配成功:仅会将数据包从相应的端口发出

▷ 匹配失败:就会泛洪,此时和广播毫无差异


困扰9. IPv6真的安全吗

理想很美好,IPv6从设计之初,就进行了大量的安全方面的设计,“完整的”IPv6在安全方面有至少以下3个优势:

▷ 原生支持的端到端加密

▷ 安全的邻居发现(Secure Neighbor Discovery,简称SEND

▷ 更大的地址空间

现实很残酷,只有第3点发挥了作用,更大的地址空间,减少了被非法扫描到的概率。而第1、2点并没真正普及起来,因为协议本身就很复杂、学习难度很大、实现起来也很不容易。因此IETF为了加速IPv6的普及,对安全性不再强制要求。这也导致了IPv6实际上并没有预期中的那么安全,在IPv4里存在的地址欺骗、虚假网关等情况,在IPv6里依然存在。


困扰10. 如何学习IPv6

网上能找到非常多的IPv6教程,其中有很多教程都是通篇讲IPv6地址、IP包格式、ICMP包格式,这很容易让初学者打退堂鼓。笔者虽然不是专业的网工,但愿能抛砖引玉,推荐的学习步骤如下:

1️⃣ IPv6的历史、设计理念

2️⃣ IPv6的地址格式、分类、前缀计算,以及与IPv4的对比

3️⃣ IP地址、网关路由的配置与查看

4️⃣ 服务端实践,尝试给自己的网站增加IPv6

5️⃣ 客户端实践,让自己的PC访问IPv6互联网

6️⃣ 应用层实践,自己写一对C/S程序,能同时支持IPv4与IPv6

7️⃣ IPv6通讯原理,抓包分析每个包,熟悉ND、DHCPv6等

8️⃣ IPv4与IPv6的互访、过渡

9️⃣ IPv6安全

具体领域的IPv6,例如移动IPv6


后续说明

在《IPv6系列》后续文章中,笔者会有选择性地对“困扰10”中提到的部分内容整理成文。为什么是有选择性,因为笔者并非网工出身,没有把握写出更好的文章,不能误人子弟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#DESCRIPTION:Resource namespaces pidns01 pidns01 pidns02 pidns02 pidns03 pidns03 pidns04 pidns04 pidns05 pidns05 pidns06 pidns06 pidns10 pidns10 pidns12 pidns12 pidns13 pidns13 pidns16 pidns16 pidns17 pidns17 pidns20 pidns20 pidns30 pidns30 pidns31 pidns31 pidns32 pidns32 mqns_01 mqns_01 mqns_01_clone mqns_01 -m clone mqns_01_unshare mqns_01 -m unshare mqns_02 mqns_02 mqns_02_clone mqns_02 -m clone mqns_02_unshare mqns_02 -m unshare mqns_03 mqns_03 mqns_03_clone mqns_03 -clone mqns_04 mqns_04 mqns_04_clone mqns_04 -clone netns_netlink netns_netlink netns_breakns_ip_ipv4_netlink netns_breakns.sh netns_breakns_ip_ipv6_netlink netns_breakns.sh -6 netns_breakns_ip_ipv4_ioctl netns_breakns.sh -I netns_breakns_ip_ipv6_ioctl netns_breakns.sh -6I netns_breakns_ns_exec_ipv4_netlink netns_breakns.sh -e netns_breakns_ns_exec_ipv6_netlink netns_breakns.sh -6e netns_breakns_ns_exec_ipv4_ioctl netns_breakns.sh -eI netns_breakns_ns_exec_ipv6_ioctl netns_breakns.sh -6eI netns_comm_ip_ipv4_netlink netns_comm.sh netns_comm_ip_ipv6_netlink netns_comm.sh -6 netns_comm_ip_ipv4_ioctl netns_comm.sh -I netns_comm_ip_ipv6_ioctl netns_comm.sh -6I netns_comm_ns_exec_ipv4_netlink netns_comm.sh -e netns_comm_ns_exec_ipv6_netlink netns_comm.sh -6e netns_comm_ns_exec_ipv4_ioctl netns_comm.sh -eI netns_comm_ns_exec_ipv6_ioctl netns_comm.sh -6eI netns_sysfs netns_sysfs.sh shmnstest_none shmnstest -m none shmnstest_clone shmnstest -m clone shmnstest_unshare shmnstest -m unshare shmem_2nstest_none shmem_2nstest -m none shmem_2nstest_clone shmem_2nstest -m clone shmem_2nstest_unshare shmem_2nstest -m unshare shm_comm shm_comm mesgq_nstest_none mesgq_nstest -m none mesgq_nstest_clone mesgq_nstest -m clone mesgq_nstest_unshare mesgq_nstest -m unshare msg_comm msg_comm sem_nstest_none sem_nstest -m none sem_nstest_clone sem_nstest -m clone sem_nstest_unshare sem_nstest -m unshare semtest_2ns_none semtest_2ns -m none semtest_2ns_clone semtest_2ns -m clone semtest_2ns_unshare semtest_2ns -m unshare sem_comm sem_comm utsname01 utsname01 utsname02 utsname02 utsname03_clone utsname03 -m clone utsname03_unshare utsname03 -m unshare utsname04_clone utsname04 -m clone utsname04_unshare utsname04 -m unshare mountns01 mountns01 mountns02 mountns02 mountns03 mountns03 mountns04 mountns04 userns01 userns01 userns02 userns02 userns03 userns03 userns04 userns04 userns05 userns05 userns06 userns06 userns07 userns07 userns08 userns08 # time namespaces sysinfo03 sysinfo03 clock_nanosleep03 clock_nanosleep03 clock_gettime03 clock_gettime03 timens01 timens01 timerfd04 timerfd04
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值