IPv4和IPv6的区别,进阶!IPv4如何和IPv6设备通信
IPv4用32位整数描述地址,最多只能支持43亿设备,显然数量有限不足以全球使用,这也就是IP地址耗尽问题
为了解决这个问题,有一种可行的方法是拆分子网。拆分子网,会带来很多问题,比如说内外网数据交互,需要网络
地址转换协议(NAT 协议),增加传输成本。再比如说,多级网络会增加数据的路由和传输链路,降低网络的速
度。理想的状态当然是所有设备在一个网络中,互相可以通过地址访问。
我要在此提出一个问题,什么是拆分子网?
为了解决这个问题,1998 年与联网工程工作小组推出了全新款的P 协议一-Pv6 协议。但是目前PV6 的普及程
度还不够高,2019 年据中国互联网络信息中心(CNNIC)统计,IPV6 协议目前在我国普及率为60%,已经位居世
界首位。
既然不能做到完全普及,也就引出了一道面试题目:什么是Tunnel 技术?
IPv4和IPv6相似点
IPv6 的工作原理和 IPv4 类似,分成切片 (Segmentation)、增加封包头、路由(寻址)这样几个阶段去工作
IPv6 同样接收上方主机到主机(Host-to-Host)协议传递来的数据,比如一个TCP 段(Segment),然后将TCP
段再次切片做成一个个的1Pv6 封包 (Datagram or Packet),再调用底层局域网能力(数据链路层)传输数据
具体的过程如下图所示:
作为网络层协议的 IPv6,最核心的能力是确保数据可以从发送主机到达接收主机。因此,和PV4 类似,IPv6 同样
需要定义地址的格式,以及路由算法如何工作。
IPv6格式
IPv6 地址
接下来我们重点说说地址格式的区别。
IPv4 的地址是4个8位(octet),总共 32位IPV6 的地址是816位(hextet),总共128 位。从这个设计
来看,IPv6 可以支持的地址数量是1Pv4 的很多倍。就算将PV6 的地址分给每个人,每个人拥有的地址数量,依旧
是今天总地址数量的很多倍。
格式上,IPv4 的地址用,分割,如 103.28.7.35。每一个是8 位,用0-255 的数字表示
IPv6 的地址用:分割,如 0123:4567:89ab:cdef:0123:4567:89ab:cdef ,总共 8个16 位的数字,通常用16
进制表示。
上图中的地址是一个IPv6 地址的完全态,其实也有简写的方式。比如:
8123:4567:@08:000:0123:4567:0880:cdef
可以省略前 64 字节的 0000:0000 简写为
8123:4567::0123:4567:0:cdef
::只能出现一次,相当于省略了若干组 0000。比如说1111.2222 相当于中间省略了6组 0000。为什么
不能出现两个”呢?因为如果有两::,就会对省略的 0000 的位置产生歧义。比如说1111::2222::3333,
你就不知道究竞0000在1111:2222和2222::3333 是怎么分布的。
开头的0也可以简写,就变成如下的样子
123:4567::123:4567::cdef
还有一种情况我们想要后面部分都填 0,比如说3d:/16,这个代表只有前 1位有数据,后面是0
1234:5878:abcd/64代表只有左边 64位有数据,后面是0;再比如 ff00/8,只有左边8 位是有数据的
IPv6的寻址
接下来我们讨论下寻址,和1Pv4 相同,寻址的目的是找到设备,以及规划到设备途经的路径。和IPv4 相同,IPv6
寻址最核心的内容就是要对网络进行划分。IPv6 地址很充裕,因此对网络的划分和PV4 有很显著的差异。
IPv6的寻址分成了几种类型:
- 全局单播寻址(和 P4 地址作用差不多,在互联网中通过地址查找一个设备,简单来说,单播就是1对1)
- 本地单播(类似IPV4 里的一个内部网络,要求地址必须以 fe80 开头,类似我们PV4 中 127 开头的地址);
- 分组多播(Group Multicast),类似今天我们说的广播,将消息发送给多个接收者
- 任意播(Anycast),这个方式比较特殊,接下来我们会详细讲解。
全局单播
全局单播,就是将消息从一个设备传到另一个设备,这和IPV4 发送/接收消息大同小异。而全局单播地址,目标就
是定位网络中的设备,这个地址和IPv4的地址作用相同,
只不过格式略有差异。总的来说,IPv6 地址太多,因此
不再需要子网掩码,而是直接将IPv6 的地址分区即可
在实现全局单播时,IPv6 地址通常分成3个部分:
- 站点前缀(Site Prefix) 48bit,一般是由ISP (lnternet Service Providor,运营商)或者IR (RegionalInternet Registry,地区性互联网注册机构),RIR将IP 地址分配给运营商
- 子网号(SubnetID),16bit,用于站点内部区分子网;
- 接口号 (Interface ID), 64bit,用于站点内部区分设备
因此IPv6也是一个树状结构,站点前缀需要一定资质,子网号和接口号内部定义。IPv6 的寻址过程就是先通过站点
前缀找到站点,然后追踪子网,再找到接口(也就是设备的网卡)。
从上面全局单播的分区,我们可以看出,IP6 分给站点的地址非常多。一个站点,有16bit 的子网,相当于 65535
个子网;每个子网中,还可以用64 位整数表示设备
IPv6的全局单播和IPv4的寻址很相似不过IPv6只需要根据三个部分:网站前缀、子网号、接口号,逐级寻找即可
本地单播
理论上,虽然IPv6 可以将所有的设备都连入一个网络。但在实际场景中,很多公司还是需要一个内部网络的。这种
情况在IPv6的设计中属于局域网络
在局域网络中,实现设备到设备的通信,就是本地单播。IPv6 的本地单播地址组成如下图所示
这种协议比较简单,本地单播地址必须以 fe80 开头,后面64 位的0,然后接上 54 位的设备编号。上图中的
Interface可以理解成网络接口,其实就是网卡(54位设备编号实际上是网卡的MAC地址在IPv6中扩展的形式)
看到这里我有一个疑问,什么是网卡?
网卡(Network Interface Card,简称 NIC),也称为网络适配器,是计算机硬件的一部分,用于连接计算机到网络。网卡负责在计算机与网络之间进行数据传输。以下是网卡的几个主要功能和组成部分:
- 物理连接:
- 网卡提供物理接口(如以太网接口、无线接口)用于连接网络介质(如网线、Wi-Fi)。
- 数据链路层处理:
- 网卡在数据链路层处理数据帧的封装与解封装,包括添加和解析 MAC 地址。
- 数据传输与接收:
- 网卡将来自计算机的数据转换为网络信号发送出去,同时接收网络上的信号并转换为计算机可处理的数据。
- 协议支持:
- 网卡支持各种网络协议,如以太网协议(Ethernet)、Wi-Fi 协议等。
- 中断处理:
- 当数据到达网卡时,网卡会触发中断通知 CPU 处理数据。
网卡的类型
根据连接方式和传输介质,网卡可以分为以下几种类型:
- 有线网卡:
- 通过以太网接口(RJ45 接口)连接到网络,常见于台式机和服务器。
- 支持不同的传输速率,如 10Mbps、100Mbps、1Gbps、10Gbps 等。
- 无线网卡:
- 通过无线电波连接到 Wi-Fi 网络,常见于笔记本电脑和移动设备。
- 支持不同的 Wi-Fi 标准,如 802.11a/b/g/n/ac/ax 等。
- 虚拟网卡:
- 在虚拟化环境中创建的虚拟网络接口,用于虚拟机之间的通信。
网卡的组成部分
网卡主要由以下几个部分组成:
- MAC(介质访问控制)地址:
- 每个网卡都有一个唯一的硬件地址,用于标识网络上的设备。
- PHY(物理层接口):
- 负责将数字信号转换为物理信号,并通过网络介质传输。
- 控制器芯片:
- 处理网络协议,管理数据传输和接收。
- 接口端口:
- 有线网卡通常有 RJ45 接口,无线网卡有天线接口。
- 缓冲区:
- 用于临时存储数据帧,管理数据的发送和接收。
例子
- 有线网卡:用于台式机和服务器的 Intel 以太网卡。
- 无线网卡:用于笔记本电脑的 Intel 无线网卡或 USB 接口的 TP-Link 无线网卡。
通过网卡,计算机能够连接到局域网(LAN)、广域网(WAN)或互联网,实现与其他设备的数据交换和通信。
分组多播
有时候,我们需要实现广播。所谓广播,就是将消息同时发送给多个接收者。
IPv6 中设计了分组多播,来实现广播的能力。当IP 地址以8个1开头,也就是 00开头,后面会跟上一个分组
的编号时,就是在进行分组多播
这个时候,我们需要一个广播设备,在这个设备中已经定义了这些分组编号,并且拥有分组下所有设备的清单,这个
广播设备会帮助我们将消息发送给对应分组下的所有设备
任意播(Anycast)
任意播,本质是将消息发送给多个接收方,并选择一条最优的路径。这样说有点抽象,接下来我具体解释一下
比如说在一个网络中有多个授时服务,这些授时服务都共享了一个任播地址。当一个客户端想要获取时间,就可以将
请求发送到这个任播地址。客户端的请求扩散出去后,可能会找到授时服务中的一个或者多个,但是距离最近的往往
会先被发现。这个时候,客户端就使用它第一次收到的授时信息修正自己的时间
IPv6和IPv4的兼容
目前IPv6 还没有完全普及,大部分知名的网站都是同时支持PV6 和PV4。这个时候我们可以分成 2 种情况讨论:
1.一个IPv4的网络和一个IPv6的网络通信
2.一个IPv6的网络和一个IPv6的网络通信,但是中间需要经过一个IPv4的网络
下面我们具体分析一下
情况1.一个IPv4的网络和一个IPv6的网络通信
例如一个IPv6的客户端,想要访问IPv4的服务器,步骤入下图所示:
- 客户端通过DNS64 服务器查询AAAA 记录。DNS64 是国际联网工程任务组(IETF)提供的一种解决Pv4
和IPv6 兼容问题的 DNS 服务。这个 DNS 查询服务会把 Pv4 地址和IPv6 地址同时返回。
2.DNS64 服务器返回含IPv4 地址的AAAA 记录
3.客户端将对应的IPv4 地址请求发送给一个NAT64 路由器
4.由这个NAT64 路由器将IPv6 地址转换为IPV4地址,从而访问Pv4 网络,并收集结果 - 消息返回到客户端。
情况2:两个IPv6网络被IPV4 隔离
这种情况在普及 IPv6 的过程中比较常见,IPV6 的网络一开始是一个个孤岛,IPv6 网络需要通信,就需要一些特别
的手段。
不知道你有没有联想到坐火车穿越隧道的感觉,连接两个孤岛 PV6 网络,其实就是在PV4 网络中建立一条隧道
如下图所示:
那么,可以尝试回答面试题目: Tunnel 技术是什么了吗?
[解析]Tunnel就是隧道,这和现实中的隧道是很相似的。隧道不是只有一辆车通过,而是每天都有大量的车辆来
来往往。两个网络,用隧道连接,位于两个网络中的设备通信,都可以使用这个隧道。隧道是两个网络间用程序定义
的一种通道。具体来说,如果两个Pv6 网络被P4 分隔开,那么两个PV6 网络的出口处(和IPV4 网络的网关
-1721482299961)]
那么,可以尝试回答面试题目: Tunnel 技术是什么了吗?
[解析]Tunnel就是隧道,这和现实中的隧道是很相似的。隧道不是只有一辆车通过,而是每天都有大量的车辆来
来往往。两个网络,用隧道连接,位于两个网络中的设备通信,都可以使用这个隧道。隧道是两个网络间用程序定义
的一种通道。具体来说,如果两个Pv6 网络被P4 分隔开,那么两个PV6 网络的出口处(和IPV4 网络的网关
处)就可以用程序(或硬件)实现一个隧道,方便两个网络中设备的通信。