万字长文!多图预警!46张图彻底搞懂 IP 基础知识!

写在前面

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


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

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

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

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

IP 协议的位置 

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

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

ICMP:网际控制报文协议

IGMP:网际组管理协议

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

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

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

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


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

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

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



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

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




IP地址组成

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


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

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

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

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


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

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




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


注意,这里的 IP 地址指 IPv4,即第一代 IP 地址,目前仍旧使用广泛。
由于 IPv4 地址在 2011 年已被耗尽,目新的机器都只能用 IPv6 地址,目前互联网上 IPv4 和 IPv6 是共存的。

IPv4 地址表示与分类

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

10000000 00001011 00000100 00011110

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



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


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

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

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



其中,

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

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

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

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

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

特殊 IPv4 地址

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

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

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



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地址把它转发到相应的主机。


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



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

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



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

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

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

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



当在路由表中有不止一个匹配结果时,会从匹配结果中选择具有最长网络前缀的路由。另外,当一个网络不划分子网的时候,路由表中将采用默认的子网掩码。将该默认子网掩码与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 早已枯竭。


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

网络地址转换(NAT)

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

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



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



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

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

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



网络地址转换(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 位是网络号。与子网掩码类似,不过它的掩码是可变长度的。



子网掩码的概念


子网掩码一共有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 网站。



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

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

MAC 地址(硬件地址)

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



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

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



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 帧的头部。



IP 地址和 MAC 地址的关系

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

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

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



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 地址,输出为硬件地址。



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


IPv4 数据报格式

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



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

IP 层转发数据报的过程

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

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


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


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


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


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


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


问路的例子中,我们可以发现,互联网中的分组转发,强调的是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)



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

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

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

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

IPv6 组成与表示

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

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


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

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


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

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

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

IPv6 地址分为几种?

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

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


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

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


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

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


IPv6 数据包

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


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


IPv4 和 IPv6 地址分配的区别?

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

IPv4

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

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

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的过程中,数据报的首部有部分字段会缺失,这是双协议栈的缺点之一。

隧道技术

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

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


好了,手已经很酸,就先写-到这里了。如果觉得不错,欢迎<stron>,我会更有动力写更多更好的技术文章。谢谢~ </stron>


#学习路径#
全部评论

相关推荐

头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
评论
5
24
分享
牛客网
牛客企业服务