第四章 网络层
4.1 网络层提供的两种服务
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。
争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
1. 虚电路服务
- 面向连接的通信方式
- 建立虚电路(Virtual Circuit),以保证双方通信所需的一切网络资源。
- 如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点。
2. 数据报服务
(1)互联网采用的设计思路
- 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
(2)尽最大努力交付的好处
① 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
② 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
③ 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
3. 虚电路服务与数据报服务的对比
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
4.2 网际协议IP
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
本来还有一个逆地址解析协议 RARP(Reverse Address Resolution Protocol),是和ARP协议配合使用的,但现在已淘汰比使用了。
如图,画出了这三个协议与网际协议IP的关系。ARP画在最下面,因为IP经常要使用该协议,ICMP和IGMP画在这一层的上部,因为它们要使用IP协议。
4.2.1 虚拟互联网协议
(1)四种不同的中间设备
所在位置 | 中间设备 |
---|---|
物理层 | 转发器(repeater) |
数据链路层 | 网桥 或 桥接器(bridge) |
网络层 | 路由器(router) |
网络层以上 | 网关(gateway) |
① 当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。
② 互联网都是指用路由器进行互连的网络
③ 由于历史的原因,许多有关 TCP/IP 的文献将网络层使用的路由器称为网关。
(2)虚拟互联网络
① 由于参加互联的计算机网络都使用相同的网际协议IP(Internet Protocol),因此可以把互联以后的计算机网络看成是一个虚拟互联网络(internet)
② 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从网络层上看起来好像是一个统一的网络。
③ 使用 IP 协议的虚拟互连网络可简称为 IP 网。
④ 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。
![](https://i-blog.csdnimg.cn/blog_migrate/97923b7bae23504245e5d5bd7962ecad.png)
互联网可以由多种异构网络互联组成
4.2.2 分类的IP地址
1. IP地址及其表示方法
① 我们把整个因特网看成为一个单一的、抽象的网络。IP 地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
② IP 地址现在由因特网名字与号码指派公司ICANN (Internet Corporation for Assigned Names and Numbers)进行分配
③ IP 地址的编址方法共经过三个历史阶段:
分类的 IP 地址。这是最基本的编址方法,在 1981 年就通过了相应的标准协议。
子网的划分。这是对最基本的编址方法的改进,其标准[RFC 950]在 1985 年通过。
构成超网。这是比较新的无分类编址方法。1993 年提出后很快就得到推广应用。
(1)分类IP地址
① 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
② 两级的 IP 地址可以记为:( ::= 代表“定义为” )
![](https://i-blog.csdnimg.cn/blog_migrate/a17ce808ec1e94d515ab3056cfe32357.png)
(2)IP 地址中的网络号字段和主机号字段
![](https://i-blog.csdnimg.cn/blog_migrate/f2b59a4c0230ce32c044c5acdcfdb847.png)
A类、B类、C类地址的网络号字段分别为1个、2个、3个字节长,在网络号字段的最前面有1~3位的类别位,其数值位规定的0、10、110。
(3)点分十进制
![](https://i-blog.csdnimg.cn/blog_migrate/a49afa121c6f1922cc38edcab1187929.png)
点分十进制中各类地址第一字节的十进制表示(对 2 8 2^8 28 进行除二操作)
![]()
2. 常用的三种类别的 IP 地址
(1)IP 地址的使用范围
网络类别 | 最大可指派的网络数 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络中最大的主机数 |
---|---|---|---|---|
A | 126 ( 2 7 − 2 2^7 - 2 27−2) | 1 | 126 | 16,777,214 ( 2 24 − 2 2^{24} - 2 224−2) |
B | 16,383 ( 2 14 − 1 2^{14} - 1 214−1) | 128.1 | 191.255 | 65,534 ( 2 16 − 2 2^{16} - 2 216−2) |
C | 2,097,151 ( 2 21 − 1 2^{21} -1 221−1) | 192.0.1 | 223.255.255 | 254 ( 2 8 − 2 2^{8} - 2 28−2) |
A类:全0,127保留;B类:128.0.0。0不指派;C类:192.0.0.0不指派
保留地址(用于校园、企业等):
10.0.0.0
169.254.0.0
172.16.0.0 ~ 172.31.0.0
192.168.0.0 ~ 192.168.255.0
(2)一般不使用的特殊IP地址
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | 可以 | 不可 | 在本网络上的本主机 |
0 | host-id | 可以 | 不可 | 在本网络上的某台主机host-id |
全1 | 全1 | 可以 | 不可 | 只在本网络上进行广播(各路由器均不转发) |
net-id | 全1 | 不可 | 可以 | 对net-id上所有主机进行广播 |
127 | 非全0或全1的任何数 | 可以 | 可以 | 用于本地软件环回测试 |
网络号 :全0,本网络;127,环回测试;
主机号 :全0,本主机;全1,所有主机。
(3)IP 地址的一些重要特点
① IP 地址是一种分等级的地址结构。 分两个等级的好处是:
第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理
。
第二,路由器仅根据目的主机所连接的网络号来转发分组
(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间及查找路由表的时间
。
② 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。
当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址
,其网络号 net-id 必须是不同的。这种主机称为多归属主机
(multihomed host)。(路由器)
③ 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
④ 互联网同等对待每一个IP地址
(4)互联网中的IP地址
![](https://i-blog.csdnimg.cn/blog_migrate/bc7b15a7564eb65a00a0160e2a7eef06.png)
① 在同一个局域网上的主机或路由器的IP 地址中的网络号必须是一样的。
② 路由器总是具有两个或两个以上的 IP 地址。路由器的每一个接口都有一个不同网络号的 IP 地址。
③ 两个路由器直接相连的接口处,可指明也可不指明 IP 地址。如指明 IP 地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。现在常不指明 IP 地址,通常把这种特殊的网络叫作无编号网络(unnumbered network)或无名网络(anonymous network)
4.2.3 IP 地址与硬件地址
1. IP地址与硬件地址的区别
① 物理地址是数据链路层和物理层使用的地址,而IP地址是网络层及以上各层使用的地址,是一种逻辑地址。
② MAC地址决定了数据帧下一跳由哪个设备接收;IP地址决定了数据报的起点和终点。
![](https://i-blog.csdnimg.cn/blog_migrate/632b47e00761d93112ea6490c71196da.png)
2. 主机之间的通讯过程
![](https://i-blog.csdnimg.cn/blog_migrate/133da268bb0a77a0a98bc6b323353ca7.png)
① 交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包。
② 数据包在传输过程中不变,过网络设备,数据帧要用新的物理层地址重新封装。
3. 从不同层次上看IP地址和源地址
![](https://i-blog.csdnimg.cn/blog_migrate/668116bbd8497e7c05779e7b5a92c20d.png)
① IP数据报中,源IP地址、目标IP地址不变;
MAC帧中,源MAC地址、目标MAC地址不断改变。
② 在具体的物理网络的链路层只能看见 MAC 帧而看不见 IP 数据报 ;在 IP 层抽象的互联网上只能看到 IP 数据报;
③ 图中的 IP1→IP2 表示从源地址 IP1 到目的地址 IP2 ,两个路由器的 IP 地址并不出现在 IP 数据报的首部中 ;
④ 路由器只根据目的站的 IP 地址的网络号进行路由选择 。
4.2.4 地址解析协议 ARP
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
![]()
1. 地址解析过程
步骤 | 说明 |
---|---|
① | 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。 |
② | 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。 |
③ | 若无,主机 A 广播发送ARP 请求分组 ,主机 B 向 A 发送ARP 响应分组 。 |
④ | 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。 |
⑤ | 为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。 |
![](https://i-blog.csdnimg.cn/blog_migrate/0611969361055377daf53f9c8a5e9b94.png)
2. 应当注意的问题
① ARP 请求分组是广播发送的,ARP 响应分组是普通的单播
② ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
③ 从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
④ 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
3. 使用 ARP 的四种典型情况
发送方 | 接收方 | 说明 |
---|---|---|
主机 | 另一个主机 (本网络) | 用 ARP 找到目的主机的硬件地址 |
主机 | 另一个主机 (另一个网络) | 用 ARP 找到本网络上的一个路由器的硬件地址。 剩下的工作由这个路由器来完成 |
路由器 | 另 一个主机 (本网络) | 用 ARP 找到目的主机的硬件地址 |
路由器 | 另一个主机 (另一个网络) | 用 ARP 找到本网络上的一个路由器的硬件地址。 剩下的工作由这个路由器来完成 |
Q: 为什么不直接使用硬件地址进行通信?
A:
① 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
② 连接到因特网的主机都拥有统一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用 ARP 来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
4.2.5 IP 数据报的格式
![](https://i-blog.csdnimg.cn/blog_migrate/4d776d9d5b8ebae646f91b737eb3e1c4.png)
1. IP 数据报首部的固定部分中的各字段
(1)版本
占 4 位,指 IP 协议的版本。 即 IPv4/IPv6
(2)首部长度
占 4 位,单位是32位字(4字节),当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。首部长度的最小值是5个单位(20字节),可表示的最大数值是 15 个单位,因此 IP 的首部长度的最大值是 60 字节。
(3)区分服务
占 8 位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段 。
(4)总长度
占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为
2
16
−
1
=
65535
2^{16}-1=65535
216−1=65535 字节。但总长度必须不超过最大传送单元 MTU。
(5)标识(identification)
占 16 位,IP软件在存储器中维持一个计数器,用来产生数据报的标识。(每产生一个数据报,计数器就加1,并将此值赋给标识字段,当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中)。
(6)标志(flag)
占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”,MF = 0 表示最后一个分片。标志字段中间的一位是 DF (Don’t Fragment) 。只有当 DF = 0 时才允许分片。
(7)片偏移
占12 位,片偏移以 8 个字节为偏移单位,指出较长的分组在分片后某片在原分组中的相对位置。
IP 数据报分片
总长度 标识 MF DF 片偏移 原始数据报 3820 12345 0 0 0 数据报片1 1420 12345 1 0 0 数据报片2 1420 12345 1 0 175 数据报片3 1020 12345 0 0 350
(8)生存时间
占8 位,记为 TTL (Time To Live),跳数限制。(路由器在每次转发数据之前把TTL值减1,若TTL减到0,就丢弃这个数据报,不再转发。数据报能在互联网中经过的路由器的最大数值是255;若TTL为1,表示这个数据报只能在本局域网中传送)
(9)协议
占8位,字段指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程。
(10)首部检验和
![](https://i-blog.csdnimg.cn/blog_migrate/36ae8edc172e63a171b145760b596b25.png)
(11)源地址
占32位,IP地址。
(12)目的地址
占32位,IP地址。
2. IP 数据报首部的可变部分
① IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
② 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
③ 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
④ 实际上这些选项很少被使用。
4.2.6 IP 层转发分组的流程
1. 路由表
在路由表中,对每一条路由,最主要的是 (目的网络地址,下一跳地址)
![](https://i-blog.csdnimg.cn/blog_migrate/f6c94bba7b1fa37eb1a691d1a226de51.png)
根据目的网络地址就能确定下一跳路由器,这样做的结果是:
① IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
② 只有到达最后一个路由器时,才试图向目的主机进行直接交付。
2. 特定主机路由 & 默认路由(default route)
特定主机路由:
① 这种路由是为特定的目的主机指明一个路由。
② 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
默认路由:
① 采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。
② 这种转发方式在一个网络只有很少的对外连接时是很有用的。
3. 分组转发算法
步骤 | 说明 |
---|---|
① | 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。 |
② | 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行③。 |
③ | 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行④。 |
④ | 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行⑤。 |
⑤ | 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行⑥。 |
⑥ | 报告转发分组出错。 |
注意:
① IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。
② 当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。
③ 网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。
4.3 划分子网和构造超网
4.3.1 划分子网
1. 从两级 IP 地址到三级 IP 地址
① 在 ARPANET 的早期,IP 地址的设计确实不够合理。
IP 地址空间的利用率有时很低。
给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
两级的 IP 地址不够灵活。
② 从 1985 年起在 IP 地址中又增加了一个**“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。
这种做法叫作划分子网(subnetting)** 。
③ 当没有划分子网时,IP 地址是两级结构。划分子网后 IP 地址就变成了三级结构。划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id。
① 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
![](https://img-blog.csdnimg.cn/2018120914571523.png)
② 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
![](https://img-blog.csdnimg.cn/20181209145912332.png)
2. 子网掩码
(1)IP 地址的各字段和子网掩码
![](https://i-blog.csdnimg.cn/blog_migrate/189388265c583561d13bd5fc28a2e39f.png)
(2)默认子网掩码
① 子网掩码是一个网络或一个子网的重要属性。
② 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
③ 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
④ 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
![](https://i-blog.csdnimg.cn/blog_migrate/e24b177bbc04ade5b992b903d0a2d20e.png)
(3)B类地址的子网划分选择
子网号的位数( n n n) | 子网掩码 | 子网数( 2 n − 2 2^n-2 2n−2) | 每个子网的主机数( 2 16 − n − 2 2^{16-n}-2 216−n−2) |
---|---|---|---|
2 | 255.255.192.0 | 2 | 16382 |
3 | 255.255.224.0 | 6 | 8190 |
4 | 255.255.240.0 | 14 | 4094 |
5 | 255.255.248.0 | 30 | 2046 |
6 | 255.255.252.0 | 62 | 1022 |
7 | 255.255.254.0 | 126 | 510 |
8 | 255.255.255.0 | 254 | 254 |
9 | 255.255.255.128 | 510 | 126 |
10 | 255.255.255.192 | 1022 | 62 |
11 | 255.255.255.224 | 2046 | 30 |
12 | 255.255.255.240 | 4094 | 14 |
13 | 255.255.255.248 | 8290 | 6 |
14 | 255.255.255.252 | 16382 | 2 |
① 表中的 “子网号的位数” 中没有0,1,15,16这四种情况,因为没有意义。(至少要拿出两位做子网)
② 虽然根据已经成为互联网标准协议的RFC950文档,子网号不能为全1或全0,但随着CIDR的广泛使用,现在全1或全0的子网号也可以使用,但一定要谨慎使用。
例一:已知 IP 地址是 141.14.72.24,子网掩码是 255.255.192.0。试求网络地址。
例二:在上例中,若子网掩码改为255.255.224.0。试求网络地址,讨论所得结果。
结论:不同的子网掩码得出相同的网络地址。但不同的掩码的效果是不同的。
4.3.2 使用子网掩码的分组转发过程
步骤 | 说明 |
---|---|
① | 从收到的分组的首部提取目的 IP 地址 D。 |
② | 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行③。 |
③ | 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行④。 |
④ | 对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行⑤。 |
⑤ | 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行⑥。 |
⑥ | 报告转发分组出错。 |
例:已知互联网和路由器 R1 中的路由表。主机 H1 向 H2 发送分组。试讨论 R1 收到 H1 向 H2 发送的分组后查找路由表的过程。
解:
① 首先,要发送的分组的目的 IP 地址:128.30.33.138
② 因此 H1 首先检查主机 128.30.33.138 是否连接在本网络上。如果是,则直接交付;否则,就送交路由器 R1,并逐项查找路由表。
③ 主机 H1 首先将本子网的子网掩码 255.255.255.128与分组的 IP 地址 128.30.33.138 逐比特相与”(AND 操作) ,得到128. 30. 33. 128不等于H1 的网络地址。
因此 H1 必须把分组传送到路由器 R1然后逐项查找路由表.路由器 R1 收到分组后就用路由表中第 1 个项目的子网掩码和 128.30.33.138 逐比特 AND 操作 ,255.255.255.128 AND 128.30.33.138 = 128.30.33.128 ,不匹配!255.255.255.128 AND 128.30.33.138 = 128.30.33.128 匹配!这表明子网 2 就是收到的分组所要寻找的目的网络。
4.3.3 无分类编址 CIDR
1. 网络前缀
1987 年,RFC 1009 就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码 VLSM (Variable Length Subnet Mask) 可进一步提高 IP 地址资源的利用率。
在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
CIDR使用各种长度的 “网络前缀”(network-prefix) 来代替分类地址中的网络号和子网号。
IP 地址从三级编址(使用子网掩码)又回到了两级编址。
(1)无分类的两级编址
① 无分类的两级编址的记法是: IP地址 ::= {<网络前缀>, <主机号>}
② CIDR 还使用 “斜线记法”(slash notation),它又称为 CIDR记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数
)。
(2)CIDR 地址块
CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
128.14.35.7/20 | 10000000 00001110 0010 0011 00000111 | |
---|---|---|
最小地址 | 128.14.32.0 | 100000000 00001110 0010 0000 00000000 |
最大地址 | 128.14.47.255 | 10000000 00001110 0010 1111 11111111 |
以上主机号为全0和全1的地址,一般并不使用。
(3)地址掩码(address mask)
① CIRD使用32位的地址掩码
② 地址掩码由一串1和一串0组成,1的个数就是网络前缀的长度。
③ 由于目前仍有一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码。
(4)路由聚合(route aggregation)
① 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
② 路由聚合也称为构成超网(supernetting)。
③ CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。
(5)CIDR 记法的其他形式
① 省略点分十进制中低位连续的 0;如,10.0.0.0/10 可简写为 10/10
② 网络前缀的后面加一个星号 * ;如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值。
(6)构成超网
① 前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址(比
/
24
/24
/24多出
n
n
n位,则包含
2
n
2^n
2n个C类地址)。这些 C 类地址合起来就构成了超网。
② CIDR 地址块中的地址数一定是 2 的整数次幂。
③ 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
CIDR 地址块划分举例
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。
2. 最长前缀匹配
① 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
② 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。最长前缀匹配又称为最长匹配或最佳匹配。
③ 网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。
最长前缀匹配举例
收到的分组的目的地址 D = 206.0.71.128
路由表中的项目:206.0.68.0/22 (大学)
206.0.71.128/25 (四系)
D 和 11111111 11111111 111111 00 00000000 逐位相”与“ = 206.0.68.0/22 匹配
D 和 11111111 11111111 11111111 1 0000000 逐位相”与“ = 206.0.71.128/25 匹配
选择两个匹配的地址中更具体的一个,即选择最长前缀的地址。
3. 使用二叉线索查找路由表
① 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。
② IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。为了提高二叉线索的查找速度,广泛使用了各种压缩技术。