❶ 计算机网络第四章(网络层)
4.1、网络层概述
简介
网络层的主要任务是 实现网络互连 ,进而 实现数据包在各网络之间的传输
这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可
但是如果要将这些异构型网络互连起来,形成一个更大的互联网,就需要实现网络层设备路由器
有时为了简单起见,可以不用画出这些网络,图中N1~N7,而将他们看做是一条链路即可
要实现网络层任务,需要解决一下主要问题:
网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
在数据链路层那课讲过的可靠传输,详情可以看那边的笔记:网络层对以下的 分组丢失 、 分组失序 、 分组重复 的传输错误采取措施,使得接收方能正确接受发送方发送的数据,就是 可靠传输 ,反之,如果什么措施也不采取,则是 不可靠传输
网络层寻址问题
路由选择问题
路由器收到数据后,是依据什么来决定将数据包从自己的哪个接口转发出去?
依据数据包的目的地址和路由器中的路由表
但在实际当中,路由器是怎样知道这些路由记录?
由用户或网络管理员进行人工配置,这种方法只适用于规模较小且网络拓扑不改变的小型互联网
另一种是实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路有记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网
补充 网络层(网际层) 除了 IP协议 外,还有之前介绍过的 地址解析协议ARP ,还有 网际控制报文协议ICMP , 网际组管理协议IGMP
总结
4.2、网络层提供的两种服务
在计算机网络领域,网络层应该向运输层提供怎样的服务(“ 面向连接 ”还是“ 无连接 ”)曾引起了长期的争论。
争论焦点的实质就是: 在计算机通信中,可靠交付应当由谁来负责 ?是 网络 还是 端系统 ?
面向连接的虚电路服务
一种观点:让网络负责可靠交付
这种观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用 面向连接 的通信方式。
通信之前先建立 虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。
如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
发送方 发送给 接收方 的所有分组都沿着同一条虚电路传送
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
请注意,电路交换的电话通信是先建立了一条真正的连接。
因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样
无连接的数据报服务
另一种观点:网络提供数据报服务
互联网的先驱者提出了一种崭新的网络设计思路。
网络层向上只提供简单灵活的、 无连接的 、 尽最大努力交付 的 数据报服务 。
网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
网络层不提供服务质量的承诺 。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
发送方 发送给 接收方 的分组可能沿着不同路径传送
尽最大努力交付
如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的 主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。
采用这种设计思路的好处是 :网络的造价大大降低,运行方式灵活,能够适应多种应用。
互连网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
虚电路服务与数据报服务的对比
对比的方面 虚电路服务 数据报服务
思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
连接的建立 必须有 不需要
终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
当结点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达终点 到达终点时不一定按发送顺序
端到端的差错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责
4.3、IPv4
概述
分类编制的IPv4地址
简介
每一类地址都由两个固定长度的字段组成,其中一个字段是 网络号 net-id ,它标志主机(或路由器)所连接到的网络,而另一个字段则是 主机号 host-id ,它标志该主机(或路由器)。
主机号在它前面的网络号所指明的网络范围内必须是唯一的。
由此可见, 一个 IP 地址在整个互联网范围内是唯一的 。
A类地址
B类地址
C类地址
练习
总结
IP 地址的指派范围
一般不使用的特殊的 IP 地址
IP 地址的一些重要特点
(1) IP 地址是一种分等级的地址结构 。分两个等级的好处是:
第一 ,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
第二 ,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
(2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口 。
当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为 多归属主机 (multihomed host)。
由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此 一个路由器至少应当有两个不同的 IP 地址 。
(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络 ,因此这些局域网都具有同样的网络号 net-id。
(4) 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
划分子网的IPv4地址
为什么要划分子网
在 ARPANET 的早期,IP 地址的设计确实不够合理:
IP 地址空间的利用率有时很低。
给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
两级的 IP 地址不够灵活。
如果想要将原来的网络划分成三个独立的网路
所以是否可以从主机号部分借用一部分作为子网号
但是如果未在图中标记子网号部分,那么我们和计算机又如何知道分类地址中主机号有多少比特被用作子网号了呢?
所以就有了划分子网的工具: 子网掩码
从 1985 年起在 IP 地址中又增加了一个“ 子网号字段 ”,使两级的 IP 地址变成为 三级的 IP 地址 。
这种做法叫做 划分子网 (subnetting) 。
划分子网已成为互联网的正式标准协议。
如何划分子网
基本思路
划分子网纯属一个 单位内部的事情 。单位对外仍然表现为没有划分子网的网络。
从主机号 借用 若干个位作为 子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的 目的网络号 net-id,先找到连接在本单位网络上的路由器。
然后 此路由器 在收到 IP 数据报后,再按 目的网络号 net-id 和 子网号 subnet-id 找到目的子网。
最后就将 IP 数据报直接交付目的主机。
划分为三个子网后对外仍是一个网络
优点
1. 减少了 IP 地址的浪费 2. 使网络的组织更加灵活 3. 更便于维护和管理
划分子网纯属一个单位内部的事情,对外部网络透明 ,对外仍然表现为没有划分子网的一个网络。
子网掩码
(IP 地址) AND (子网掩码) = 网络地址 重要,下面很多相关知识都会用到
举例
例子1
例子2
默认子网掩码
总结
子网掩码是一个网络或一个子网的重要属性。
路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。
无分类编址的IPv4地址
为什么使用无分类编址
无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
CIDR 最主要的特点
CIDR使用各种长度的“ 网络前缀 ”(network-prefix)来代替分类地址中的网络号和子网号。
IP 地址从三级编址(使用子网掩码)又回到了两级编址 。
如何使用无分类编址
举例
路由聚合(构造超网)
总结
IPv4地址的应用规划
给定一个IPv4地址快,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址
定长的子网掩码FLSM(Fixed Length Subnet Mask)
划分子网的IPv4就是定长的子网掩码
举例
通过上面步骤分析,就可以从子网1 ~ 8中任选5个分配给左图中的N1 ~ N5
采用定长的子网掩码划分,只能划分出2^n个子网,其中n是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的IP地址数量相同
但是也因为每个子网所分配的IP地址数量相同,不够灵活,容易造成IP地址的浪费
变长的子网掩码VLSM(Variable Length Subnet Mask)
无分类编址的IPv4就是变长的子网掩码
举例
4.4、IP数据报的发送和转发过程
举例
源主机如何知道目的主机是否与自己在同一个网络中,是直接交付,还是间接交付?
可以通过 目的地址IP 和 源地址的子网掩码 进行 逻辑与运算 得到 目的网络地址
如果 目的网络地址 和 源网络地址 相同 ,就是 在同一个网络 中,属于 直接交付
如果 目的网络地址 和 源网络地址 不相同 ,就 不在同一个网络 中,属于 间接交付 ,传输给主机所在网络的 默认网关 (路由器——下图会讲解),由默认网关帮忙转发
主机C如何知道路由器R的存在?
用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为 默认网关
例如。路由器的接口0的IP地址192.168.0.128做为左边网络的默认网关
主机A会将该IP数据报传输给自己的默认网关,也就是图中所示的路由器接口0
路由器收到IP数据报后如何转发?
检查IP数据报首部是否出错:
若出错,则直接丢弃该IP数据报并通告源主机
若没有出错,则进行转发
根据IP数据报的目的地址在路由表中查找匹配的条目:
若找到匹配的条目,则转发给条目中指示的吓一跳
若找不到,则丢弃该数据报并通告源主机
假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值
接下来路由器对该IP数据报进行查表转发
逐条检查路由条目,将目的地址与路由条目中的地址掩码进行逻辑与运算得到目的网络地址,然后与路由条目中的目的网络进行比较,如果相同,则这条路由条目就是匹配的路由条目,按照它的下一条指示,图中所示的也就是接口1转发该IP数据报
路由器是隔离广播域的
4.5、静态路由配置及其可能产生的路由环路问题
概念
多种情况举例
静态路由配置
举例
默认路由
举例
默认路由可以被所有网络匹配,但路由匹配有优先级,默认路由是优先级最低的
特定主机路由
举例
有时候,我们可以给路由器添加针对某个主机的特定主机路由条目
一般用于网络管理人员对网络的管理和测试
多条路由可选,匹配路由最具体的
静态路由配置错误导致路由环路
举例
假设将R2的路由表中第三条目录配置错了下一跳
这导致R2和R3之间产生了路由环路
聚合了不存在的网络而导致路由环路
举例
正常情况
错误情况
解决方法
黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,IP数据报进入它后就被丢弃
网络故障而导致路由环路
举例
解决方法
添加故障的网络为黑洞路由
假设。一段时间后故障网络恢复了
R1又自动地得出了其接口0的直连网络的路由条目
针对该网络的黑洞网络会自动失效
如果又故障
则生效该网络的黑洞网络
总结
4.6、路由选择协议
概述
因特网所采用的路由选择协议的主要特点
因特网采用分层次的路由选择协议
自治系统 AS :在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择
域间路由选择使用外部网关协议EGP这个类别的路由选择协议
域内路由选择使用内部网关协议IGP这个类别的路由选择协议
网关协议 的名称可称为 路由协议
常见的路由选择协议
❷ 计算机网络中CIDR地址聚合的问题
CIDR是用于帮助减缓IP地址和路由表增大的一个技术,基本思想是:取消IP地址分类,将多个地址块聚合在一起,生成一个更大的网络,以包含更多的主机
最大可能的聚合指的应该是精确聚合,使用最少的CIDR地址来精确聚合。
最大可能的聚合结果是:212.56.132.0/22,聚合的基本思想就是减少网络位来增加主机位,
❸ 计算机网络CIDR地址可以全1或是全0吗
没有全是 1 或者o 学习概念
CIDR采用各种长度的"网络前缀"来代替分类地址中的网络号和子网号,其格式为:IP地址 = {<网络前缀>,<主机号>}。为了区分网络前缀,通常采用"斜线记法"(CIDR记法),即IP地址/网络前缀所占比特数。例如:192.168.24.0/22 表示32位的地址中,前22位为网络前缀,后10(32-22=10)位代表主机号。在换算中,192.168.24.0/22 对应的二进制为: 1100 0000(192),1010 1000(168),0001 1000(24),0000 0000(0) 其中红色为主机号,总共有10位。当这10位全为0时,取最小地址192.168.24.0,当这10位全为1时,取最大地址192.168.27.255。但请注意,在实际中,主机号全为0或者全为1的地址一般不使用,作为预留地址另有作用。所以第一个地址为1100 0000,1010 10000,0001 1000,0000 0001,即192.168.24.1 最后一个地址为:1100 0000,1010 10000,0001 1011,1111 1110,即192.168.27.254 因此,本例中将第三段地址数据中最小是00011000(24),最大是00011011(27),第四段地址数据中最小为0000 0001(1),最大为1111 1110(254),以上括号中数据为十进制,其前面为二进制。所以本例中192.168.24.0/22 对应地址段为192.168.24.1-192.168.27.254,共4个网段。
❹ 计算机网络(四)网络层
主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。
链路层数据帧可封装数据的上限称为最大传送单元MTU
标识:同一数据报的分片使用同一标识。
中间位DF(Don’t Fragment):
最低位MF(More Fragment):
片偏移:指出较长分组分片后,某片在原分组中的相对位置。以8B为单位。除了最后一个分片,每个分片长度一定是8B的整数倍。
IP地址:全世界唯一的32位/4字节标识符,标识路由器主机的接口。IP地址::={<网络号>,<主机号>}
有一些IP地址是不能用的,有其特殊的作用,如:
网络地址转换NAT(Network Address Translation):在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址。
此外,为了网络安全,划分出了部分IP地址和私有IP地址,私有IP地址网段如下:
路由器对目的地址是私有IP地址的数据报一律不进行转发。
分类的IP地址的弱点:
某单位划分子网后,对外仍表现为一个网络,即本单位外的网络看不见本单位内子网的划分。
路由器转发分组的算法:
无分类域间路由选择CIDR:
CIDR记法:IP地址后加上“/”,然后写上网络前缀(可以任意长度)的位数。e.g. 128.14.32.0/20
CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。
使用CIDR时,查找路由表可能得到几个匹配结果(跟网络掩码按位相与),应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。方法:将网络前缀缩短(所有网络地址取交集)。
由于在实际网络的链路上传送数据帧时,最终必须使用MAC地址。
ARP协议:完成主机或路由器IP地址到MAC地址的映射。
ARP协议使用过程:
ARP协议4种典型情况:
动态主机配置协议DHCP是 应用层 协议,使用 客户/服务器 方式,客户端和服务端通过 广播 方式进行交互,基于 UDP 。
DHCP提供即插即用联网的机制,主机可以从服务器动态获取IP地址、子网掩码、默认网关、DNS服务器名称与IP地址,允许地址重用,支持移动用户加入网络,支持在用地址续租。
DHCP工作流程如下:
ICMP协议支持主机或路由器:包括差错(或异常)报告和网络探询,分部发送特定ICMP报文
ICMP差错报告报文(5种):
不应发送ICMP差错报文的情况:
ICMP询问报文:
ICMP的应用:
32位IPv4地址空间已分配殆尽,这时,可以采用更大地址空间的新版本的IPv6,从根本上解决地址耗尽问题
IPv6数据报格式如下图
IPv6的主要特点如下:
IPv6地址表示形式:
零压缩:一连串连续的0可以被一对冒号取代。双冒号表示法在一个地址中仅可出现一次。
IPv6基本地址类型:
IPv6向IPv4过渡的策略:
R1的路由表/转发表如下:
最佳路由:“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
路由算法可分为
由于因特网规模很大且许多单位不想让外界知道自己的路由选择协议,但还想连入因特网,可以采用自治系统来解决
自治系统AS:在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由协议以确定在AS之间的路由。
一个AS内的所有网络都属于一个行政单位来管辖,一个自治系统的所有路由器在本自治系统内都必须连通。
路由选择协议
RIP是一种分布式的基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单。
RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离 [1] 记录(即一组距离)。 RIP协议只适用于小互联网。
RIP是应用层协议,使用 UDP 传送数据。一个RIP报文最多可包括25个路由,如超过,必须再用一个RIP报文传送。
RIP协议的交换
路由器刚开始工作时,只知道直接连接的网络的距离(距离为1),接着每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
经过若干次更新后,所有路由器最终都会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即“收敛”。
RIP的特点:当网络出现故障时,要经过比较长的时间(例如数分钟) 才能将此信息传送到所有的路由器,“慢收敛”。
对地址为X的相邻路由器发来的RIP报文,修改此报文中的所有项目:把“下一跳”字段中的地址改为X,并把所有的“距离”字段+1。
开放最短路径优先OSPF协议:“开放”标明OSPF协议不是受某一家厂商控制,而是公开发表的;“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。OSPF最主要的特征就是使用分布式的链路状态协议。 OSPF直接用IP数据报传送。
OSPF的特点:
为了使OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个32 位的区域标识符(用点分十进制表示)。区域也不能太大,在一个区域内的路由器最好不超过200 个。
BGP 所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS。当BGP 发言人互相交换了网络可达性的信息后,各BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各AS 的较好路由。
一个BGP 发言人与其他自治系统中的BGP 发言人要交换路由信息,就要先建立TCP 连接,即通过TCP传送,然后在此连接上交换BGP 报文以建立BGP 会话(session),利用BGP 会话交换路由信息。 BGP是应用层协议,借助TCP传送。
BGP协议特点:
BGP-4的四种报文
组播提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持)。
IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址(一群共同需求主机的相同标识)。
组播地址范围为224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组。只能用作分组的目标地址。源地址总是为单播地址。
同单播地址一样,组播IP地址也需要相应的组播MAC地址在本地网络中实际传送帧。组播MAC地址以十六进制值01-00-5E打头,余下的6个十六进制位是根据IP组播组地址的最后23位转换得到的。
TCP/IP 协议使用的以太网多播地址的范围是:从01-00-5E-00-00-00到01-00-5E-7F-FF-FF .
收到多播数据报的主机,还要在IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
ICMP和IGMP都使用IP数据报传递报文。组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。
IGMP工作的两个阶段:
只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的;如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。
组播路由协议目的是找出以源主机为根节点的组播转发树。构造树可以避免在路由器之间兜圈子。对不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。
组播路由选择协议常使用的三种算法:
移动IP技术是移动结点(计算机/服务器等)以 固定的网络IP地址 ,实现跨越不同网段的 漫游 功能,并保证了基于网络IP的网络权限在漫游过程中不发生任何改变。
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。 路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
路由器(网络层)可以互联两个不同网络层协议的网段。
网桥(链路层)可以互联两个物理层和链路层不同的网段。
集线器(物理层)不能互联两个物理层不同的网段。
路由表根据路由选择算法得出的,主要用途是路由选择,总用软件来实现。
转发表由路由表得来,可以用软件实现,也可以用特殊的硬件来实现。转发表必须包含完成转发功能所必需的信息,在转发表的每一行必须包含从要到达的目的网络到输出端口和某些MAC地址信息的映射。
❺ 计算机网络-网络层-超网
在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码VLSM(Variable Length Subnet Mask)可进一步提高IP地址资源的利用率。在VLSM的基础上又进一步研究出无分类编址方法,它的正式名字是 无分类域间路由选择CIDR (Classless Inter-Domain Routing,CIDR的读音是“sider'”)。
CIDR最主要的特点有两个:
(I)CIDR把32位的IP地址划分为前后两个部分。前面部分是“网络前缀”(network-prefix)(或简称为“前缀”),用来指明网络,后面部分则用来指明主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编址,但这已是无分类的两级编址。其记法是:
IP地址:={<网络前缀>,<主机号>} (4-3)
CIDR还使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
(2)CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。例如,已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,现在把它写成二进制表示,其中的前20位是网络前缀,而后面的12位是主机号:
128.14.35.7/20= 1000 0000 0000 1110 0010 0011 0000 0111
这个地址所在的地址块中的最小地址和最大地址可以很方便地得出:找出 地址掩码(斜线后面的数字个数是掩码地址1的个数, 20位)中1和0的交界处 发生在地址中的哪一个字节。现在是在第三个字节,取后面12 都写成0是最小地址,写成1为最大地址。
最小地址:128.14.32.0 1000 0000 0000 1110 0010 0000 0000 0000
最大地址:128.14.47.255 1000 0000 0000 1110 0010 1111 1111 1111
以上这两个特殊地址的主机号是全0和全1的地址。一般并不使用。通常只使用在这两个特殊地址之间的地址。 这个地址块共有2^12个地址(2 的主机号位数次幂) 。我们可以用地址块中的最小地址和网络前缀的位数指明这个地址块。例如,上面的地址块可记为128.14.32.0/20。在不需要指出地址块的起始地址时,也可把这样的地址块简称为“/20地址块”。
为了更方便地进行路由选择,CIDR使用32位的地址掩码(address mask)。地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。虽然CIDR不使用子网了,但由于目前仍有一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码。例如,/20地址块的地址掩码是:1111 1111 1111 1111 1111 0000 0000 0000(20个连续的1)。 斜线记法中,斜线后面的数字就是地址掩码中1的个数。
在“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位,仍然可以在本单位内根据需要划分出一些子网。这些子网也都只有一个网络前缀和一台主机号字段,但子网的网络前缀比整个单位的网络前缀要长些。例如,某单位分配到地址块/20,就可以再继续划分为8个子网(即需要从主机号中借用3位来划分子网)。这时每一个子网的网络前缀就变成23位(原来的20位加上从主机号借来的3位),比该单位的网铭前缀多了3位。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为 路由聚合 (route aggregation),它使得路由表中的一个项目可以表示原来传统分类地址的很多个(例如上干个)路由, 路由聚合也称为构成超网 (supemetting)。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
CIDR记法有多种形式,例如,地址块10.0.0.0/10可简写为10/10,也就是把点分十进制中低位连续的0省略。另一种简化表示方法是在网络前缀的后面加一个星号*,如:0000101000*意思是:在星号*之前是网络前缀,而星号◆表示P地址中的主机号,可以是任意值。
前缀位数不是8的整数倍时,需要进行简单的计算才能得到一些地址信息。表47给出了最常用的CIDR地址块。表中的K表示2^10=1024,网络前缀小于13或大于27都较少使用。在“包含的地址数”中没有把全1和全0的主机号除外。
从表4-7可看出,每一个CIDR地址块中的地址数一定是2的整数次幂。CIDR地址块多数可以包含多个C类地址(是一个C类地址的2”倍,n是整数),这就是“ 构成超网 ”这一名词的来源。
使用CIDR的一个好处就是可以更加有效地分配PV4的地址空间,可根据客户的需要分配适当大小的CIDR地址块。假定某ISP已拥有地址块206.0.64.0/18(相当于有64个C类网络)。现在某大学需要800个IP地址。ISP可以给该大学分配一个地址块206.0.68.0/22,它包括1024(即2^10)个1P地址,相当于4个连续的C类(/24地址块),占该ISP拥有的地址空间的1/16。这个大学然后可自由地对本校的各系分配地址块,而各系还可再划分本系的地址块。
从图4-25可以清楚地看出地址聚合的概念。这个ISP共拥有64个C类网络。如果不采用CIDR技术,则在与该SP的路由器交换路由信息的每一个路由器的路由表中,就需要有64个项目,但采用地址聚合后,就只需用路由聚合后的一个项目206.0.64.0/18就能找到该ISP,同理,这个大学共有4个系,在1SP内的路由器的路由表中,也需使用206.0.68.022这个项目。这个项目好比是大学的收发室。凡寄给这个大学任何一个系的邮件,邮递员都不考虑大学各个系的地址,而是把这些邮件集中投递到大学的收发室,然后由大学的收发室再进行下一步的投递。这样就减轻了v递员的工作量(相当于简化了路由表的查找)。
从图4-25下面表格中的二进制地址可看出,把四个系的路由聚合为大学的一个路由(即构成超网),是将网络前缀缩短。 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的P地址中,划分子网是使网铬前缀变长。
在使用CIDR时,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两个部分组成,因此在路由表中的项目也要有相应的改变。这时, 每个项目由“网络前缀”和“下一跳地址”组成 。但是在查找路由表时可能会得到不止一个匹配结果。这样就带来一个间题:我们应当从这些匹配结果中选择哪一条路由呢?
答案是:应当从匹配结果中 选择具有最长网络前缀的路由 。这叫做 最长前缀匹 配longest-.prefix matching) ,这是因为网铬前缀越长,其地址块就越小,因而路由就越具体(more specific)。最长前缀匹配又称为最长匹配或最佳匹配,为了说明最长前缀匹配的概念。
假定大学下属的四系希望IS把转发给四系的数据报直接发到四系面不要经过大学的路由器,但又不愿意改变自己使用的P地址块。因此,在SP的路由器的路由表中,至少要有以下两个项目,即206.0.68.0/22(大学)和206.0.71.128/25(四系)。现在假定ISP收到一个数据报,其目的IP地址为D=206.0.71.130。把D分别和路由表中这两个项目的掩码逐位相“与”(AND操作)。将所得的逐位AND操作的结果按顺序写在下面:
D和 1111 1111 1111 1111 1111 11 00 0000 0000逐位相“与” = 206.0.68.0/22 匹配
D和 1111 1111 1111 1111 1111 1111 1 000 0000逐位相“与” = 206.0.71.128/25 匹配
不难看出,现在同一个IP地址D可以在路由表中找到两个目的网络(大学和四系)和该地址相匹配。根据 最长前缀(1的位数) 匹配的原理,应当选择后者,把收到的数据报转发到后一个目的网络(四系),即选择两个匹配的地址中更具体的一个。
从以上的讨论可以看出,如果IP地址的分配一开始就采用CIDR,那么我们可以按网络所在的地理位置来分配地址块,这样就可大大减少路由表中的路由项目。例如,可以将世界划分为四大地区,每一地区分配一个CIDR地址块:
地址块194/7(194.0.0.0至195255.255,25)分配给欧洲:
地址块198/7(198.0.0.0至199.255.255,255)分配给北类洲
地址块2007(200.0.0.0至201255.255.255)分配给中美洲和南美洲:
地址块202/7(202.0.0.0至203255.255.255)分配给亚洲和太平洋地区,
上面的每一个地址块包含有钓3200万个地址,这种分配地址的方法就使得IP地址与地理位置相关联。它的好处是可以大大压缩路由表中的项目数。例如,凡是从中国发往北美的IP数据报(不管它是地址块198/7中的哪一个地址)都先送交位于美国的一个路由器,因此在路由表中使用一个项目就行了。
使用CIDR后,由于要寻找最长前缀匹配,使路由表的查找过程变得更加复杂了。当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。例如,连接路由器的线路的速率为10Gbit/s,而分组的平均长度为2000bit,那么路由器就应当平均每秒钟能够处理500万个分组(常记为5Mpps)。或者说,路由器处理一个分组的平均时间只有200s(1ns=10^-9秒)。因此,查找每一个路由所需的时间是非常短的。
对无分类编址的路由表的最简单的查找算法就是对所有可能的前缀进行循环查找。例如,给定一个目的地址D。对每一个可能的网络前缀长度M,路由器从D中提取前M个位成一个网络前缀,然后查找路由表中的网络前缀。所找到的最长匹配就对应于要查找的路由。
"这种最简单的算法的明显缺点就是查找的次数太多。最坏的情况是路由表中没有这个路由。在这种情况下,算法仍要进行32次(具有32位的网络前缀是一个特定主机路由)。就是要找到一个传统的B类地址(即/16),也要查找16次。对于经常使用的歌认路由,这种算法都要经历31次不必要的查找。"
为了进行更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是 二叉线索 (binary trie),它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
图4-26用一个例子来说明二叉线索的结构。图中给出了5个IP地址。为了简化二叉线索的结构,可以先找出对应于每一个P地址的唯一前缀(unique prefix)。所谓唯一前缀就是在表中所有的P地址中,该前缀是唯一的。这样就可以用这些唯一前缀来构造二叉线索。在进行查找时,只要能够和唯一前缀相匹配就行了。
从二叉线索的根节点自顶向下的深度最多有32层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为0,则第一层的节点就在根节点的左下方;如为1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。由于唯一前缀一般都小于32位,因此用唯一前缀构造的二叉线索的深度往往不到32层。图中较粗的折线就是前缀0101在这个二叉线索中的路径。二叉线索中的小圆圈是中间节点,而在路径终点的小方框是叶节点(也叫做外部节点)。每个叶节点代表一个唯一前缀。节点之间的连线旁边的数字表示这条边在唯一前缀中对应的比特是0或1。
假定有一个IP地址是1001 1011 0111 1010 0000 0000 0000 0000,需要查找该地址是否在此二叉线索中。我们从最左边查起。很容易发现,查到第三个字符(即前缀10后面的0)时,在二叉线索中就找不到匹配的,说明这个地址不在这个二叉线索中。
以上只是给出了二叉线索这种数据结构的用法,而并没有说明“与唯一前缀匹配”和“与网络前缀匹配”的关系。显然,要将二叉线索用于路由表中,还必须使二叉线索中的每一个叶节点包含所对应的网络前缀和子网掩码。当搜索到一个叶节点时,就必须 将寻找匹配的目的地址和该叶节点的子网掩码进行逐位“与”运算,看结果是否与对应的网络前缀相匹配 。若匹配,就按下一跳的接口转发该分组。否则,就丢弃该分组。
总之,二叉线索只是提供了一种可以快速在路由表中找到匹配的叶节点的机制。但这是否和网络前缀匹配,还要和子网掩码进行一次逻辑与的运算。
“为了提高二叉线索的查找速度,广泛使用了各种 压缩技术 。例如,在图4-26中的最后两个地址,其最前面的4位都是1011。因此,只要一个地址的前4位是1011,就可以跳过前面4位(即压缩了4个层次)而直接从第5位开始比较。这样就可以减少查找的时间。当然,制作经过压缩的二叉线索需要更多的计算,但由于每一次查找路由表时都可以提高查找速度,因此这样做还是值得的。”