计算机网络:网络层与IP协议(2)

一、划分子网

1.划分子网的提出

传统的两级IP地址(网络号和主机号)设计的不够合理,主要表现为:
● IP地址空间的利用率很低,大量地址无法使用而被浪费;
● 每一个物理网络都分配一个网络号,将导致路由表变得过于庞大,引起性能恶化;
● 两级地址结构不够灵活,新增设备在前往互联网管理机构申请IP地址前不能连接到互联网。

为解决以上问题,1985年RFC-950标准在传统IP地址中增加了一个子网号字段,将两级IP地址变更为三级IP地址
这种做法叫做划分子网(子网寻址/子网路由选择)。

2.划分子网的基本思想

  1. 有多个物理网络的单位,可以将所属的物理网络划分为若干子网;划分子网是单位内部的事情,本单位以外的网络看不见这个网络的子网,该单位对外仍然表现为一个网络
  2. 划分子网的方法是从IP地址的主机号借用若干位作为子网号(subnet-id),将两级地址变为三级地址。记法为:
    IP地址 = {<网络号>,<子网号>,<主机号>}。
  3. 凡是从其它网络发送给本单位主机的数据报,仍然根据目的网络号寻找路由器;在本单位的路由器接收该数据报时,再加入子网号找到目的子网,把数据报交付给目的主机。

3.子网掩码

传统IP地址有固定的几类网络,路由器通过前八位即可判断IP地址的种类,得到网络号。但在划分子网模式下,单凭IP地址无法判断主机的网络号和子网号。为此,我们需要子网掩码来协助判断,子网掩码是一个网络/子网的重要属性。
子网掩码是一个长度为32位的二进制码,。掩码中为1的部分对应了IP地址的网络号和子网号,0的部分对应了IP地址的主机号。下面是一个划分子网的IP地址及其对应子网掩码:
在这里插入图片描述
在获取子网掩码后,将IP地址转为二进制码,再与子网掩码逐位作与运算,就可以得到相应的网络号和子网号。

虽然没有强制规定子网掩码的1必须连续(即子网号必须紧贴着网络号),但一般都使用连续的1,避免差错。

在路由表中,也对应新增储存子网掩码的一栏。如今的标准规定:所有网络都必须使用子网掩码。对于路由器所处单位中的各个子网,路由器正常存储其网络号+子网号以及子网掩码;对于普通的网络(在其它单位中可能是一个子网,但在本路由器只识别其普通网络号),就使用默认子网掩码,其数字1的长度与网络的网络号长度相当。例如一个A类网络的默认子网掩码为255.0.0.0。

由于划分子网需要占用主机号的空间,相比于采用传统IP地址的网络,增加了网络的灵活性,但减少了可连接的主机总数

4.使用子网的分组转发

在划分子网的情况下,由于子网掩码的导入,路由器分组转发算法改动后如下:

  1. 从收到的数据报首部提取目的地址D
  2. 判断是否为直接交付:用路由器直接相连的各个子网掩码与D作与运算,比较结果与网络地址是否匹配,匹配则完成交付
  3. 判断路由表中是否有到目的地址D特定路由交付,若有则发送给指定的下一跳地址
  4. 将路由表的每一行的子网掩码与D作与运算,判断是否和该行对应的网络号匹配;若匹配则发送到该行的下一跳地址
  5. 判断路由表是否给定了默认路由,若有则发送给指定的默认路由地址
  6. 报告转发分组出错

二、构造超网

1.无分类编址的提出

划分子网的仍然面临三个必须解决的问题:
● 各类地址的余额不足,很快将被全部分配完
● 互联网主干网的路由表项目急剧增加
● IPv4的地址空间最终将被全部耗尽

其中,第三个问题相比可以暂缓,而前两个问题迫在眉睫。为了解决前两个问题,IETF决定采用无分类编址的方法。
1987年,RFC-1009标准提出了在一个划分子网的网络中使用变长子网掩码VLSM可进一步提高IP地址的资源利用率。
在VLSM的基础上,研究出了无分类编制方法,正式名称为无分类域间路由选择CIDR

2.CIDR地址

CIDR的主要特点有两个:

  1. 消除传统的ABC类网络和划分子网的概念,将IP地址划分为网络前缀主机号两个部分,成为无分类的两级地址
    此外,CIDR采用斜线记法,或称CIDR记法,在IP地址后面写上" / ",并写上网络前缀所占的位数。
    IP地址 = {<网络前缀>,<主机号>}/网络前缀位数
    例如(下划线划出的部分即为网络前缀):
    在这里插入图片描述
  2. 将网络前缀相同的连续IP地址组成一个CIDR地址块,只需要知道一个CIDR地址,就可以知道该地址块的最小和最大地址。
    上面的CIDR地址的最小地址和最大地址为:
    在这里插入图片描述

为了方便路由选择,CIDR使用32位的地址掩码,习惯上也可称为子网掩码。斜线记法后面的数字就是地址掩码中1的个数。
虽然CIDR不在32位地址内给出划分子网,但各个单位可以根据需要单独划分出一些子网。

3.路由聚合

由于一个CIDR地址块中有很多地址,路由表中就可以用CIDR地址块来查找目的网络,这种地址的聚合称为路由聚合
路由聚合使路由表中的一项表示原先的多个路由,因此也称为构成超网。路由聚合减少了路由器间信息交换,提高了网络性能。
路由聚合的另一个好处就是可以更加有效地分配IPv4地址的资源,可以根据需要分配大小适当的CIDR地址块。而分类编址下只能分配8、16、24长的网络号。下面是CIDR地址块分配的例子:某个大学需要800个IP地址,每个系之间又有不同的地址需求。
在这里插入图片描述

*记法是CIDR的另一种记法。*前的部分为网络前缀,*后的部分为主机号。

4.最长前缀匹配

在使用CIDR使,由于采用了网络前缀的记法,路由表中每个项目由网络前缀下一跳地址组成。但是查找路由表时,可能会得到不止一个匹配结果。在多个匹配结果中,应当选择最长网络前缀的路由,称为最长前缀匹配,因为网络前缀越长,其地址块就越小,相应的路由就越具体。例如:
设有一个IP数据报的目的地址D = 206.0.71.128/25;路由表中存在两项206.0.68.0/22和206.0.71.128/25;使用对应的地址掩码与D作与运算后,得到的结果与两个网络地址都匹配。根据最长前缀匹配原则,应将IP数据报发往206.0.71.128/25的下一跳地址。

5.二叉线索查找

由于采用了最长前缀匹配,查找的过程变得更加复杂。当路由表项目很大时,为了减小查找时间,需要好的数据结构和先进的算法。最简单的做法是对所有可能前缀做顺序查找,但这种方式的查找次数太多,速度太慢。
为了进行更有效的查找,通常将路由表存放在一种层次的数据结构中,自上而下进行查找,最常用的方式是二叉线索查找
IP地址从左到右的比特值决定了从根节点向下延伸的路径,各个路径表示路由表存放的地址。为了简化二叉线索的结构,可以找出每个IP地址对应的唯一前缀:使用唯一前缀构造二叉线索,在查找时和唯一前缀匹配。
在这里插入图片描述
二叉线索的最大深度为32,因为IP地址最多只有32位,一层对应IP地址中一位。唯一前缀一般小于32位,深度往往不到32层。
● 将一个IP地址存入二叉线索的规则为:从左边第一位开始;若当前位置为0,下一层的结点在根结点的左下方,否则在根结点的右下方;当前位置构造结点后再检查下一位,直到唯一前缀的最后一位。
● 查找一个IP地址的规则为:从最左边查起,与存入的方式类似,查找二叉线索的结点。如果查找到叶子结点,就找到了与该IP地址的唯一前缀匹配的表项;若中途查找不到匹配的结点,说明该地址不在二叉线索中。

二叉线索查找的步骤,只能找到唯一前缀匹配而不是与网络前缀匹配。在找到唯一前缀匹配表项后,还需要与地址掩码做一次与运算。

三、网际控制报文协议

IP协议为了有效利用网络资源,提供了不可靠无连接数据报交付服务。IP协议缺少了差错控制查询辅助机制
为了更有效地转发IP数据报,RFC-792标准提出使用网际控制报文协议ICMP,允许主机和路由器报告差错情况,提供有关异常情况的报告,并提供了一种查询机制,有利于网络环境分析网络问题定位
ICMP是网络层协议而非高层协议。

1.ICMP报文格式

ICMP报文的格式如下:
在这里插入图片描述
类型指明了报文的类型;代码提供报文类型的进一步信息;校验和提供整个ICMP报文的校验和。
数据部分包括出错报的报头和前64Bit数据,帮助主机确定出错的数据报。
这四个部分组成一个完整的ICMP报文,并插入到IP数据报的数据部分进行发送。

2.ICMP报文的种类

ICMP报文有两种:ICMP差错报告报文ICMP询问报文
在这里插入图片描述

● ICMP差错报告报文
  1. 终点不可达:当路由器或主机不能交付数据报,就向源主机发送终点不可达报文
  2. 时间超过:当路由器收到生存时间(TTL)为0的数据报时,丢弃该数据报,并向源主机发送时间超过报文
    另外,当终点在预先的时间内不能收到一个数据报的全部数据分片时,也要将收到的分片丢弃,并发送时间超过报文
  3. 参数问题:当路由器或目的主机收到的数据报首部有字段的值不正确时,丢弃该数据报,并发送参数问题报文
  4. 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下一次将数据报发送给另一个路由器,获得更好路由

ICMP差错报告报文的格式:
前8个字节包括4个字节的统一字段、1个字节的类型字段、1个字节的代码字段和2个字节的校验和字段。
数据字段则是需要进行差错报告的IP数据报首部和前八个字节。
在这里插入图片描述
以下几种情况不应该发送ICMP差错报告报文:
● 对ICMP差错报告报文,不再发送;
● 对第一个分片的数据报片之后的所有分片,都不发送;
● 对具有多播的数据报,都不发送;
● 对具有特殊地址的数据报,不发送;

● ICMP询问报文
  1. 回送请求和回答ICMP回送请求报文是主机或路由器向特定目的主机发出的询问,收到报文的主机必须发送ICMP回送回答报文;该报文用于测试目的站是否可达,并了解其有关状态。
  2. 时间戳请求和回答ICMP时间戳请求和回答报文是请求某台主机或路由器回答当前的日期和时间,回答报文中有一个32位字段,表示1900年1月1日到当前时刻一个多少秒;该报文用于时钟同步和时间测量。

3.ICMP应用举例

PING命令:测试两台主机的连通性。
PING命令使用了ICMP回送请求和回答报文,是应用层直接使用网络层协议的例子,没有通过运输层的TCP和UDP协议。
命令行中可以使用PING命令,主机会发送四个ICMP回送请求报文,并通过回答报文的时间戳得到往返时间统计结果
在这里插入图片描述
tracert命令:跟踪一个分组从源点到终点的路径。
tracert命令向目的主机发送一连串IP数据报,里面封装的是无法交付UDP用户数据报(使用了非法端口号)。工作原理为:

  1. 第一个数据报的生存时间TTL设置为1,经过第一个路由器R1后路由器将TTL减一,然后丢弃数据报,发送时间超过报文
  2. 接着发送第二个数据报,TTL设置为2,经过第二个路由器R2,丢弃数据报,发送时间超过报文
  3. 以此类推
  4. 最后一个数据报到达目的主机,但由于IP数据报携带的是无法交付的UDP用户数据报,目的主机要发送终点不可达报文
  5. 源主机根据发送回来的ICMP差错报告报文,得到从源主机到达目的主机的路由信息,以及每个路由器的往返时间

命令行中可以使用tracert命令,主机对每一个TTL值都会发送三个同样的IP数据报:
在这里插入图片描述

发布了39 篇原创文章 · 获赞 4 · 访问量 2034

猜你喜欢

转载自blog.csdn.net/weixin_44712386/article/details/105362408