万字长文!多图预警!46张图彻底搞懂 IP 基础知识!
 doctorrm      2021-07-06 18:28:05      231      0      

本文章首发于我的个人公众号:小谢backup。

写在前面

这是1969年10月29日的互联网。这一天的22点30分,在加州大学洛杉矶分校(UCLA)的计算机实验室,Leonard Kleinrock(伦纳德·克莱因洛克)教授发送了人类第一封互联网消息,跨越了数千公里,到达了西北部的斯坦福大学研究院(SRI)。

img

1969年的互联网

这条消息的内容是“LO”,含义是“登录”,是用来远程登录SRI计算机的命令。第一次发送时SRI的计算机崩溃了,导致发送失败,修复后第二次才成功登录SRI的远程计算机。至此,人类的互联网开始成型。

img

时间到了1978年,为了支持实时传输,人们发明了TCP/IP协议。TCP和IP协议的发明,被认为是全球互联网诞生的标志。

img

时间拨回到今天,当我们回顾互联网为何能发展如此飞速时,通信协议起到了至关重要的作用。下图是在谷歌搜索 who invented IP(谁发明了IP)时,弹出的第一个结果。

img

IP以及IP协议,是今天互联网的通信基础。对它的了解非常重要,这篇文章里,我会通过四十余张原理图,跟大家详细阐述IP与IP协议相关知识,也希望大家能够点赞、转发、收藏,是对我最大的鼓励!

IP 协议的位置

IP 协议位于 OSI 七层协议的网络层上,与 IP 协议配套的还有 ARP、ICMP、IGMP。

ARP:地址解析协议,用于将IP地址转为机器 MAC 地址

ICMP:网际控制报文协议

IGMP:网际组管理协议

以前还有一个 RARP(逆地址解析协议),用来与 ARP 配套使用,但现在已经被废弃了。

img

其中,ICMP 和 IGMP 需要用到 IP,而 IP 需要用到 ARP。

全球 IP 地址资源如何分配?

目前的互联网,分配 IP 地址有个专门机构叫 ICANN(Intercet Corporation For Assigned Names and Numbers,互联网名字和数字分配机构)。

img

在此之前,IP 地址是由互联网号码分配局(英语:Internet Assigned Numbers Authority,简称:IANA)以及其他 5 个区域互联网注册管理机构(英语:Regional Internet Registry,简称:RIR)分配的。

RIR 的作用是管理世界上某特定地区的 Internet 资源( IP 地址和用于 BGP 路由中的自治系统号),根据地理位置划分为 5 个。

IANA 的作用是将 Internet 资源委托给 RIR,相当于世界管理员

img

其中,IPv4 地址被 IANA 以地址块为单位分给 RIR,每个地址块大约为 1680 万个地址,但自 2011年 以来在 IANA 级别已用尽。在非洲,RIR 中只有 1 个 RIR 仍然可以给当地分配(没想到,互联网也有区域性的歧视)。

由于 IANA 和美国政府关联较大,后来的 ICANN 取代了 IANA 的工作。不过,ICANN 仍要遵循美国法律。

img

IP地址组成

IP 地址为 32 位的二进制数,由网络号和主机号组合而成。

img

其中,一个网络号在整个互联网范围内必须是唯一的,一个主机号在它前面的网络号所指定的网络范围内必须是唯一的。因此,一个 IP 地址在整个互联网范围内是唯一的

IP 地址分为网络号和主机号有两个好处:

1)IP 地址管理机构(ICANN)在分配IP地址时只分配网络号,主机号由得到该网络号的单位自行分配,这样方便了对IP地址的管理;

2)路由器仅根据目的主机所连接的网络号来转发分组(而不考虑主机号),这样可以使路由表中的项目数大幅度减少,从而减小路由表的占用空间和查询路由表的时间。

实际上,作为逻辑地址,IP 地址是标志一台主机(包括路由器)和一条链路的接口,当主机没有联网时,不一定有 IP 地址。因此,当一台主机同时连接到两个网络时,该主机就必须同时具备两个响应的 IP 地址,其网络号必须是不同的。这种主机成为多归属主机,比如路由器。

路由器的每个接口都对应一个网络,也对应一个 IP 地址。

img

这里有个特殊场景,便是两个路由器之间只有连线而无主机。过去会为这条线路专门分配一个 IP 地址,为了节省 IP 地址资源,现在经常采用一种不分配 IP 地址的方式,这类网络称为无名网络

img

注意,这里的 IP 地址指 IPv4,即第一代 IP 地址,目前仍旧使用广泛。

由于 IPv4 地址在 2011 年已被耗尽,目新的机器都只能用 IPv6 地址,目前互联网上 IPv4 和 IPv6 是共存的。

IPv4 地址表示与分类

由于 IPv4 地址有 32 位,就像这样下面的A类地址:

10000000 00001011 00000100 00011110

实在反人类,因此,为了方便表示,经常会将其转为点分十进制格式。即每 8 位二进制转为十进制后,在后面加一个点,组成人类友好的格式。

img

根据用途不同,IPv4 地址分为五类:A类、B类、C类、D类、E类

img

可以看到,A类地址的地址空间有 231 地址,占整个 IP 地址空间的二分之一;

B类地址的地址空间有 230 地址,占整个 IP 地址空间的四分之一;

C类地址的地址空间有 229 地址,占整个 IP 地址空间的八分之一

img

其中,

A 类地址分配给政府机关单位;

B 类地址分配给中等规模的企业;

C 类地址分配给任何需要的人。

之所以这样划分,是因为不同组织的网络大小不同。政府机关的网络少,每个网络的主机却很多,因此不需要太多的网络号,在申请 IP 时就分配了 A 类 IP。

由此,某个单位申请 IP 地址时,实际上只申请网络号。其中具体的各台主机号则由该单位自行分配,这样方便了对 IP 地址的管理。而我们个人计算机的IP地址就是由运营商申请到一批 IP 地址后,再分给到具体个人的。

特殊 IPv4 地址

实际使用 IP 地址过程中,有部分 IP 地址有特殊含义,可见下表。其中,定向广播地址和直接广播地址的区别是:

定向广播只在本网络进行广播,各路由器均不转发;

直接广播是对指定网络号中的所有主机进行广播。

img

IP 地址的编址方式有哪些?

上面说到的 IP 地址分类实际是 IP 地址编码的一种方式。历史上,IP 地址的编址方式经历了三个阶段:

1)分类的 IP 地址:这是最基本的编址方法,在 1981 年通过了相应的标准协议;

2)子网划分:这是对最基本的编址方法的改进,1985 年通过了它的标准 RFC 950;

3)无类别域间路由(CIDR):这是比较新的无分类编址方式,1993 年提出后很快就得到了推广应用。最新的 IPv6 沿用了 CIDR,本质上也是通过增加子网数量实现更多的编址。

下面主要介绍第二种方式:子网划分,它是CIDR的基础,而CIDR将在下一节谈到。

最初的CIDR——子网划分

第一阶段的分类IP地址格式为{网络号,主机号},子网划分的IP地址格式变为{网络号,子网号,主机号}

当没有划分子网时,IP地址是两级结构,划分子网后IP地址变成了三级结构。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。

以下图的张家村第一代为例,网络和路由器只能识别到网络号和主机号,一个网络内的所有主机网络号都相同,主机平等。但凡网络144.14.0.0上的路由器R1在收到外来的数据报后,再根据数据报的目的IP地址把它转发到相应的主机。

img

下面是张家村的第二代,网络和路由器不仅可以识别网络号和主机号,还能识别子网号。但凡网络144.14.0.0上的路由器R1在收到外来的数据报后,再根据数据报的目的IP地址把它转发到相应的子网。

img

对于张家村第二代,我们直到路由器R1会将抵达的数据报发往对应的子网,那么路由器是怎么知道的呢?答案是路由表中的子网掩码

子网掩码是一串1和一串0的组合,长度等于IP地址长度。对于两级IP地址,子网掩码由16位1和16位0组成;对于三级IP地址,子网掩码由24位1和8位0组成。如下图所示。

img

那路由器如何利用子网掩码查找子网的呢?

路由器的路由表结构如下图绿表,其中,前两个字段”目的网络地址”和”下一跳地址”用于路由器之间的分组转发,而”子网掩码”用于最后一个路由器转发到目的主机时,计算目的网络子网的作用。

当一个目的地址为144.14.3.1的IP数据报抵达目的主机所属网络的路由器R1时,路由器找到路由表中对应记录后,将IP地址与子网掩码做与(AND)操作,可以得到目的主机所在的子网地址。知道了主机所在目的网络,又知道了其所在的子网,路由器R1自然能将抵达的数据报发往对应的子网2,即图中的张良家。

当一个目的地址为144.14.5.1的IP数据报抵达目的主机所属网络的路由器R1时,路由器找到路由表中对应记录后,将IP地址与子网掩码做与(AND)操作,可以得到目的主机所在的子网地址。知道了主机所在目的网络,又知道了其所在的子网,路由器R1自然能将抵达的数据报发往对应的子网3,即图中的张飞家。

img

当在路由表中有不止一个匹配结果时,会从匹配结果中选择具有最长网络前缀的路由。另外,当一个网络不划分子网的时候,路由表中将采用默认的子网掩码。将该默认子网掩码与IP地址相与,也能得到对应的目的网络地址。

  • A类地址的默认子网掩码是255.0.0.0;
  • B类地址的默认子网掩码是255.255.0.0;
  • C类地址的默认子网掩码是255.255.255.0。

下面的理解可能跟一些书和博客上的说法不同,但原理本质上是一样的,只是角度不同。有些书上会分路由器从网络外看和从网络内看。

注意!默认子网掩码可以和子网掩码共存,二者的定位不相同。默认子网掩码用于确定目的网络地址,而子网掩码用于确定目的网络内的子网地址。

默认子网掩码能够决定分组是直接交付还是间接交付。其中,间接交付发生在分组传输过程中,直接交付发生在最后一个网络。原理如下:

1)每当分组抵达路由器,路由器首先将默认子网掩码与分组内目的IP地址做”与”操作,如果结果等于路由器所在的目的网络地址,那么将直接交付,否则将分组转给其它路由器;

2)确定了直接交付,接着考虑目的网络地址划分子网的可能。因此将路由表中的子网掩码与IP地址做”与”操作,结果即为子网地址,分组直接交付给目的网络地址的子网。当然了,如果没有划分子网,那运算结果也是目的网络地址,同样是直接交付。

3)如果是间接交付,路由器将默认子网掩码与IP相与后,结果(比如144.0.0.0)可能包含了其它多个路由器的目的网络地址(比如144.1.0.0,144.2.0.0)。这时候也应该用子网掩码与IP相与,再将新的结果与其它路由器的目的网络地址比较。

子网掩码非常重要,路由器在和相邻路由器交换路由信息时,必须把自己所在网络的子网掩码告诉相邻路由器。划分子网有利于缓解IP资源分配不当,增加了灵活性;但从另外一个角度看,它却减少了能够连接在网络上的主机数。

IPv4 如何缓解地址耗尽?

IPv4 是 32 位二进制,因此仅能提供 42.9 亿个IP位置,而 2018 年,全球上网人数已达 40.21 亿,加上各类设备都要用到 IP,IPv4 早已枯竭。

img

而 IPv6 的推广较为缓慢,为了临时缓解 IPv4 地址紧张的问题,采用了两种目前广泛使用的措施:网络地址转换(NAT)无分类域间地址(CIDR)

网络地址转换(NAT)

NAT 的典型应用就是家用局域网和公司内网,比如 192.xxx.xxx.xxx 就是典型的内网地址,在访问外网时需要经过路由器进行 IP 地址转换。它的原理是将一整块内网通过一个公IP连接互联网,通常是经过路由器转换,因此不需要为每个内网主机申请一个 IPv4 地址。

NAT主要分为 基本网络地址转换(Basic NAT)网络地址端口转换(NAPT)。后者应用较为广泛,详细的分类参见下图。

img

Basic NAT 要求每一个当前连接都要对应一个公网 IP 地址,一对一的通信。但它不允许端口映射,因此无法做到多台主机共享一个公网 IP 地址,因此基本不用。

img

NAPT 允许地址映射和端口映射,因此允许多个主机共享一个公网 IP 地址。

当内网 IP 节点发起对外请求时,其内网 IP 地址会被重写为路由器的对外 IP,比如下面的 10.11.12.1,并发给公网 IP 节点;

当外网 IP 节点返回请求时,经过路由器时,会根据先前的连接记录,定向转发给内网主机。因此,路由器要维护一个带有 IP 和端口的映射表。

img

网络地址转换(NAT)有几种穿透策略?

NAT穿透即允许哪些IP进入内网。穿透策略分为穿透方式穿透协议

穿透策略:应用层网关、探针技术、中间件技术、中继代理技术、特定协议穿透。

穿透协议:RTMFP、STUN/TURN、ICE。

NAT 可以用于缓解 IPv4 地址不足的窘境,在目前的 IPv4 网络中有广泛应用。但是 IPv6 的地址空间非常充足,因此 IPv6 的网络不需要 NAT。

无分类域间地址(CIDR)

CIDR 是一个用于 IP 地址分配的有效方法,适用于 IPv4 和 IPv6。技术实现上,CIDR 是基于可变长子网掩码(VLSM)来进行任意长度的前缀分配的,它的应用主要为大型企业网络。

CIDR 的格式是在 IP 地址后加一个斜杠和表示前缀位数的数字。如 1.1.1.1/5 表示IP地址的前 5 位是网络号。与子网掩码类似,不过它的掩码是可变长度的。

img

子网掩码的概念

**
**

子网掩码一共有32位,被分为连续的两部分,高位部分的每一位都被设为二进制的1,表示 IP 地址的网络部分,其余部分的每一位均被设为二进制的0。

CIDR 对 IP 地址的分配过程如下:

互联网地址指派机构(IANA)向区域互联网注册管理机构(RIRs)分配数量多、前缀短的 CIDR 地址块,这些 RIR 各自负责管理一个单一区域(比如欧洲或者北美),然后它们把这些地址块分成小一些的地址块再分配给公众。这个细分的操作可能会由不同层次的团体多次进行。大型网络供应商(ISP)一般会从 RIR 申请 CIDR 地址块,然后再向根据它们客户的网络大小而分配更小的地址块。

如下图所示,208.130.29.33 是一个网站:www.freesoft.org 的 IPv4 地址,这个 IP 的分配遵循了 CIDR 的分配流畅。

  • 最初,前 11 位子网掩码所属的全部 IP 地址资源属于某组织 A ,组织 A 将其子网掩码进一步扩大到 22 位, 剩下的 IP 地址(10 位的地址资源)资源分配给组织 B;
  • 组织 B 将其子网掩码继续扩大到 24 位,剩余的 IP 地址(8 位的地址资源)资源分配给组织 C;
  • 最后组织 C 将其子网掩码扩大到第 32 位,此时就只有一个 IP,即 208.130.29.33 ,然后将这个 IP 分配给 freesoft 网站。

img

可以看出,CIDR 分配 IP 的方式是通过改变子网掩码的长度,从而改变网络号和主机号的位数,进而达到分配不同子网和主机的目的。它跟之前 IPv4 分为五类的方式不同,后者非常粗糙,目前大多采用 CIDR 的方式分配 IP。

总结:NAT 和 CIDR 这两种方式都是治标不治本的方法, IPv4 位数太少导致的地址资源缺乏依旧没有解决。从 1990 年开始,人们开始着手规划新一代 IP 地址。

MAC 地址(硬件地址)

下图是某路由器标签上的MAC地址,图源自维基百科。

img

MAC地址又称为硬件地址,MAC地址用于在网络中唯一标示一个网卡。因此一台主机是可以有多个MAC地址的,比如有多个网卡。

MAC地址一共48位(即6个字节),以十六进制表示。第1位为广播地址(0)/群播地址(1),第2位为广域地址(0)/区域地址(1)。前3~24位由IEEE决定如何分配给每一家制造商,且不重复,后24位由实际生产该网络设备的厂商自行指定且不重复。

img

MAC地址也有特殊地址,比如 ff:ff:ff:ff:ff:ff 作为广播地址,01:xx:xx:xx:xx:xx是多播地址,01:00:5e:xx:xx:xx是IPv4多播地址。

在实际使用中,MAC地址的位置处于数据链路层,在MAC帧的头部会存在MAC源地址和目的地址,这对主机间的路由非常重要。数据链路帧(MAC帧)格式如下,MAC地址就放在 MAC 帧的头部。

img

IP 地址和 MAC 地址的关系

IP 地址是看不见摸不着的,位于网络的”云”中,是一种逻辑概念。

要想理解这种抽象概念,最熟悉的例子莫过于我们在操作电脑的时候,鼠标点一点画面就会变化,而其中的底层实现对我们用户来说是完全不感知的,这种抽象就非常有用。

路由器等网络连接设备的每个接口都有不同的 IP 和 MAC 地址,比如下图中的”土”字形。

img

IP 数据报传输过程有几个关于地址的误区,需要澄清下:

1)IP 数据报的源地址和目的地址在传播过程中是不变的,而 MAC 帧头部的源 MAC 地址和目的 MAC 地址则是变化的;

2)IP 数据报中的源地址作用不大,路由器是根据目的地址做路由转发的;

3)IP 数据报传输过程中,从底层 MAC 帧到上层 IP 数据报会“脱衣服”(剥离 MAC 头部和尾部),而从上到下则是在“穿衣服”。

既然在底层链路上是使用硬件地址寻找目的主机的,那为什么还要有抽象的IP地址呢?如果没有IP地址,也就不需要下面的ARP,网络通信”似乎”更简单了。

其实,由于全世界存在各种各样的网络,它们可能使用不同的硬件地址,这些异构网络之间的通信就得解决复杂的硬件地址转换工作。而这些工作都是由主机自行完成的,要知道,MAC帧到达每个节点的MAC地址都会变化,因此硬件地址的转换工作可能会非常麻烦。

而使用抽象的IP地址,互联网上的主机便只需要拥有一个唯一的IP地址,主机与主机是平等的,就像在一个大网络中一样,它们之间通信的地址也会变得简单。具体的IP到MAC地址的转换在通信中对上层是不感知的,使得上层应用能更专注于通信内容本身,而非地址的转换。

ARP(地址解析协议)

ARP协议看起来很像一个函数,输入为 IP 地址,输出为硬件地址。

img

ARP的原理在于维护一张 IP 地址到硬件地址的映射表,而且这张表还得动态更新。而这张表就放在每台主机的ARP高速缓存中。

img

IPv4 数据报格式

上面讲了IP数据报会携带地址和数据等信息,用于在网络中传输数据,那么对它的格式就有必要仔细了解。其中有个字段很有意思:生存时间。它给出了IP数据报在互联网中所能经过的最大路由器数,可防止IP数据报在互联网中无限制地兜圈子。

img

聊完了 IP 数据报的格式,就到了它如何传输的问题了。这一过程由网络层和数据链路层共同负责,下面会深入浅出的介绍。

IP 层转发数据报的过程

IP数据报的分组转发特别像我们平时的问路!假设你人在国际大都市,刚下机场,想去大学城中著名的国际语言大学,但是手机没电了,用不了地图,只能问路人们。每到一个街头,你都得找一个路人问接下来怎么走,这里的”你”就是IP数据报,路人就是一个个的路由器

国际大都市自然有各个国家的人,你遇到的第一位是英国女郎,她先用肢体语言向你比划方向,然后在纸上用英语写下这句话:“往前直走一百米往右转,你将会看到一家超市”,你跟着她的指示到达超市门口后;

遇到第二位路人,是位日本高中生,她先用肢体语言向你比划方向,然后在纸上用日语写下这句话:“往前直走三百米,向左转,你将会看到一家日料店”;

到了日料店,遇到了第三位路人,是位法国模特,她先用肢体语言向你比划方向,然后在纸上用法语写下这句话:“往前走五百米,遇到红绿灯后往右转,继续走五百米,你将会看到一家LV专柜店”;

到了LV线下店,遇到了第四位路人,是位阿拉伯妇女,她先用肢体语言向你比划方向,然后在纸上用阿拉伯语写下这句话:“往前走七百米,然后左转,遇到一个岔路口再往右转,你将看到一家希尔顿酒店”;

到了希尔顿酒店,遇到了最后一位路人,是位中国小姐姐,她说已经到国际语言大学不远了,于是边比划边带你走到国际语言大学的门口。

于是在国际友人的帮助下,你成功到达了国际语言大学。在这个例子中,国际友人用肢体比划的下一个地点就是IP地址(抽象),而写在纸上的地址就是MAC地址(硬件地址)。可以看出,互不相通的MAC地址非常难以交流,得通过翻译软件才行;而跟语言无关的IP地址,可以通过肢体语言比划比划,交流起来会更方便。

img

问路的例子中,我们可以发现,互联网中的分组转发,强调的是IP数据报从一个路由器转发到下一个路由器。因此,我们并不关心某个网络的具体拓扑,也不关心网络内的任何主机。

我们前面讲到,在IP数据报传输过程中,源IP地址和目的IP地址是不变的,而且 IP 数据报的首部也没有下一跳路由器的 IP 地址,那待转发的数据报是如何知道下一跳路由器的呢?答案是目的网络地址

知识储备:

为了减小路由表所占用的空间,同时为了减小搜索路由表所用的时间,路由表的格式采用:(目的网络地址,下一跳IP地址)。而目的网络地址是唯一不变的,可以从目的IP地址中全网唯一的网络号看出来!

当路由器收到一个待转发的数据报时,在从路由表中查出下一跳路由器的IP地址后,不是将下一跳地址填入IP数据报(也没有这个字段),而是将其下沉到数据链路层的网络接口软件,后者通过ARP协议将下一跳IP地址转为下一跳MAC地址,并将此目的MAC地址塞进MAC帧的首部。然后根据这个硬件地址找到下一跳路由器,完成IP数据报的分组转发。

上面问路的例子中,每个路由器的路由表如下。值得注意的是最后一个路由器的路由表,不是(目的网络地址,下一跳IP地址),而是(目的网络地址,直接交付)。因为最后一个路由器并不需要转发给其它路由器,只需要将IP数据报直接交付给目的网络的目的主机即可,就像中国小姐姐(最后一个路由器)会直接带你(IP数据报)到国际语言大学的门口(目的主机)一样。

在实际使用中,直接交付会被记作 0.0.0.0,即(目的网络地址,0.0.0.0)

img

因此,在IP数据报分组转发的过程中,查找路由表、使用ARP得到MAC地址、将MAC地址写入MAC帧的首部这三个操作会重复执行,直至分组转发到目的主机。对应的路由算法也早被计算机科学家写出来了。

这里有两个容易误解的问题:

1)在从路由表查出下一跳路由器IP地址后,不写入IP数据报的原因是:为了保持目的网络地址的不变。因此每到一个路由器,都能根据不变的目的网络地址,找到下一跳的IP地址。

2)而在路由表中不采用下一跳MAC地址的原因是:使用了抽象的IP地址,屏蔽了底层网络的复杂性,便于分析和研究问题,在分组转发上也会更简单。

IPv6 组成与表示

早在 1990 年,人们就意识到 IPv4 资源将在不久的将来耗尽,ITEF 也开始着手规划 IPv6,且于 1998 年开始推广。但由于早期的路由器、防火墙、企业的企业资源计划系统等相关应用程序都依赖于 IPv4,因此目前仍以双架构并存居多。

IPv6 与IPv4 的最大区别是采用了128位的地址,从而拥有比 IPv4 大得多的编码地址空间,这个天文数字在可预期的未来是不会用尽的。

img

由于地址空间实在太大,IPv6 也不再依赖 网络地址转换(NAT),也没有分类 IP的说法,但仍旧保留了目前流行的 CIDR(无类别域间路由)。

在表现形式上,IPv6 地址由两个逻辑部分组成:一个 64 位的网络号和一个 64 位的主机号。主机号通常由物理地址(MAC地址)自动生成,称为 EUI-64

img

为了方便表示 128 位的 IPv6,通常将其每 16 位拆分为一组,并以十六进制表示。即冒号十六进制计法

img

上图是一个 IPv6 地址的转换图,值得注意的是,IPv6 允许用双冒号::表示一组0或多组连续的0,但只能出现一次。因此 fe80:0000:0000:0000:74f9:1af5:79ca:ea98 可以表示为 fe80::74f9:1af5:79ca:ea98。

后面的 %14 称为区域 ID,用于标识节点连接到哪个区域。

IPv6 地址分为几种?

IPv6 地址可分为三种:单播地址任播地址多播地址。每种地址都有对应的格式。

单播地址:单播地址表示特定的某个目标地址,从而在来源和目的地间直接进行通信,属于一对一通信。单播地址包括可聚类的全球单播地址链路本地地址等。其中,链路本地地址的 IPv6 格式为:fe80::主机号/10。

img

任播地址:任播会有一组接收节点的地址列表,但指定为任播的数据包,只会发送给距离最近或发送成本最低(根据路由表来判断)的其中一个接收地址。

当该接收地址收到数据包并进行回应,且加入后续的传输。该接收列表的其他节点,会知道某个节点地址已经回应了,它们就不再加入后续的传输作业。

img

多播地址:多播就是群发,其 IPv6 地址的前缀是 ff00。请求端在数据包中指定一个多播目标地址列表,通过路由器发给每个节点地址。

注意多播和广播的差别:多播是发给目标地址列表的所有节点,而广播是发给所有的节点。

img

IPv6 数据包

我们知道,IPv4的数据单元被称为数据报,而IPv6的数据单元被称为分组,不过它们之间经常可以混用。IP数据报在整个OSI分层结构中的位置如下图所示,可以看出不同层次的消息间关系。

img

IPv6数据报由两大部分组成:基本首部+有效载荷。有效载荷又分为扩展首部+数据部分。可以看出基本结构和IPv4差别不大。

img

IPv4 和 IPv6 地址分配的区别?

IPv4 和 IPv6 的地址分配稍有不同,IPv4可以通过静态分配动态分配方式获取 IP 地址;而 IPv6 主要通过无状态地址自动配置(SLAAC)获取IP地址。

IPv4

IPv4 的静态分配时通过主机硬件/软件的配置永久分配给主机的;动态分配是通过网络使用 DHCP(动态主机配置协议)分配的,在现代的台式计算机操作系统中,默认情况下会启用动态IP地址分配。

对于动态分配的方式,计算机在连接网络之前是没有IP地址的,只有接通网络的那一瞬间,IP地址才会被分配给当前节点主机。比如我本地断开网络连接后,用 ipconfig 显示都是断开连接。

img

DHCP 分配的地址是有租期的,如果主机在到期前未能续订租约,当前的 IP 地址将被分配给其它主机。某些 DHCP 实现会在主机每次加入网络时根据其 MAC 地址尝试将相同的 IP 地址重新分配给该主机。网络管理员可以通过基于 MAC 地址分配特定的IP地址来配置 DHCP。

IPv6

IPv6 的主机连接到 IPv6 网络上时,可以使用邻居发现协议对自身自动配置。这个过程称为 无状态地址自动配置(SLAAC)

在不适合使用SLAAC的场景下,网络可以使用有状态配置(DHCPv6),或者使用静态方法手动配置

IPv4 到 IPv6 的过渡方案有哪些?

要知道IPv4网络的规模相当大,不可能一夜之间将互联网的地址全部更改为IPv6,只能通过一种逐步演进的方式。同时,新安装的IPv6网络必须能够向前兼容,能够识别和转发IPv4数据报。目前广泛使用的两种过渡方案为:双协议栈、隧道技术

双协议栈

双协议栈的原理是,某些主机(包括路由器)同时具备IPv4和IPv6地址,在与IPv6目的主机通信时采用IPv6地址,而在与IPv4目的地址通信时则采用IPv4地址。这里有个问题,双协议栈的主机如何知道目的主机采用哪一种地址?答案是域名系统DNS。当DNS给双协议栈源主机的返回为IPv6地址时,双协议栈源主机就使用IPv6地址,反之亦然。

在IPv4和IPv6的转换中,会存在IPv6部分首部无法丢失的问题,并且不可避免。

如下图所示,路由器B不能向C转发IPv6数据报,因为C采用的是IPv4协议。因此,路由器B会将IPv6数据报首部地址转为IPv4首部地址后,发送给C。

同理,当IPv4数据报途径D到达E时,路由器E通过域名系统查到下一个节点采用IPv6协议,不能将IPv4数据报发送它。因此E将IPv6数据报首部地址转为IPv4地址后发送给IPv6主机F。在IPv6->IPv4->IPv6的过程中,数据报的首部有部分字段会缺失,这是双协议栈的缺点之一。

img

隧道技术

隧道技术的原理比较形象,它是在IPv6数据报进入IPv4网络前,将IPv6数据报包装为IPv4数据报。这样,IPv6数据报就成为IPv4数据报的数据部分了。

img

这种裹挟了IPv6数据报的IPv4数据报(很绕口)在IPv4网络中畅通无阻。直到离开IPv4网络后,再将IPv4数据报的外衣剥离,露出内部的IPv6数据报。下面是隧道技术的原理图,其中的“隧道”箭头就很明显。

img

好了,手已经很酸,就先写-到这里了。如果觉得不错,欢迎点赞、收藏、转发,我会更有动力写更多更好的技术文章。谢谢~

去打赏

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

正在跳转到PayPal...

发表评论