IP层转发分组的过程
需要掌握的知识:
- 计算 查表
- 会描述转发算法
- 几种路由的特点,用途。
匹配算法
逐跳转发
在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
每个路由器只知道下一跳。
根据目的网络地址就能确定下一跳路由器,这样做的结果是:
IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
只有到达最后一个路由器时,才试图向目的主机进行直接交付。
匹配算法
- 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
- 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行 (3)。
如何判断是不是在一个子网
计算网络地址,核算网络地址
\(网络地址= 目的主机 IP 地址 \and 子网掩码\)(二进制运算AND)
如果网络地址=本网络的网络前缀,则在本网络,否则不在
- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 (4)。
- 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行 (5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 (6)。
- 报告转发分组出错。
路由表
一般路由
直连路由
自动生成
非直连路由
主要是路由协议动态生成(动态)。
可以管理员手动配置(静态)。
按主机所在的网络地址来制作路由表
特定主机路由(路由表的最前面)**
前缀匹配是32位IP地址,管理员手动配置
虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。
适用场景
采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
默认路由(路由表的最后面)
管理员手动配置
只要目的网络不是 N1 和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1 再转发给下一个路由器。
表示:
特殊前缀:0.0.0.0/0
也就是:默认路由的网络地址是*0.0.0.0,子网掩码也是0.0.0.0
也可以用*
表示。
目的以减少路由表所占用的空间和搜索路由表所用的时间。
这种转发方式在一个网络只有很少的对外连接时是很有用的。
默认路由在主机发送 IP 数据报时往往更能显示出它的好处。
适用场景
如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。
最长前缀匹配
使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching)。
网络前缀越长,其地址块就越小,因而路由就越具体 (more specific) 。
最长前缀匹配又称为最长匹配或最佳匹配。
最长前缀匹配举例
选择两个匹配的地址中更具体的一个,即选择最长前缀的地址。
使用二叉线索查找路由表(不要求)
当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。
为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。
这里最常用的就是二叉线索 (binary trie)。
IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
例子:用 5 个前缀构成的二叉线索
从二叉线索的根节点自顶向下的深度最多有 32 层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为 0,则第一层的节点就在根节点的左下方;如为 1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。
32 位的 IP 地址 唯一前缀
01000110 00000000 00000000 00000000 0100
01010110 00000000 00000000 00000000 0101
01100001 00000000 00000000 00000000 011
10110000 00000010 00000000 00000000 10110
10111011 00001010 00000000 00000000 10111
trie