1 划分子网
1)从两级 IP 地址到三级 IP 地址
两级 IP 地址存在一些问题:
- 利用率有时很低
- 路由表变得太大,破坏性能
- 不够灵活
三级IP地址新增了一个子网号字段,称为划分子网(subnetting),又称为子网寻址或子网路由选择
IP地址 ::= {<网络号>, <子网号>, <主机号>}
2) 子网掩码
子网掩码是网络或子网的重要属性,路由表中要存网络地址和网络的子网掩码。
- 子网掩码是32位,由一串1和跟随的一串0组成,1对应于IP地址中原来的net-id加上subnet-id,0对应于当前的host-id
- 不管网络有没有划分子网,只要把子网掩码和 IP 地址进行逐位的 “与” 运算(AND),就立即得出网络地址来。
2 使用子网时分组的转发
使用子网划分后,路由表需要包含目的网络地址、子网掩码和下一跳地址
路由器转发的算法:
- 从收到的数据报的首部提取目的IP地址D
- 先判断是否为直接交付,对路由器直接相连的网络逐个进行检查,用子网掩码和D逐位与操作,若结果匹配,则直接交付,否则为间接交付,执行(3)
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行(4)
- 对路由表中的每一行,用其中的子网掩码和D逐位与操作得到结果N,若N与该行的目的网络地址匹配,则把数据报传送给下一跳路由器,否则执行(5)
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器,否则执行(6)
- 报告转发分组出错
3 无分类编址 CIDR(构造超网)
无分类编址,又称无分类域间路由选择(classless inter-domain routing,CIDR)
1)网络前缀
(1)消除了传统的A类、B类和C类地址以及划分子网的概念
- 使用网络前缀(network-prefix)来指明网络。IP地址::={<网络前缀>,<主机号>}
- 使用斜线记法(或称为CIDR 记法),在IP地址后面加上斜线“/”,然后写上网络前缀所占位数
(2)CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块
- CIDR使用32位的地址掩码(也可继续称为子网掩码),由0和1组成,1的个数就是网络前缀的长度
- 由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络,这种地址的聚合称为路由聚合(route aggregation)
- 路由聚合使路由表中的一个项目可以表示传统分类地址的很多个路由,又称为构成超网(supernetting)
2)最长前缀匹配
由于路由表中的项目只由网络前缀和下一跳地址组成,在查找路由表时可能会得到不止一个匹配结果,因此需要使用最长前缀匹配
最长前缀匹配:从匹配结果中选择具有最长网络前缀的路由
因为网络前缀越长,地址块就越小,路由就越具体
3)使用二叉线索查找路由表
把无分类编址的路由表存放在一种数据结构,然后自上而下地按层次进行查找,即为二叉线索(binary trie)