跳转至

路由


路由入网报文转发到目的网络

路由查找

路由表里会指定目的网段和子网掩码长度(route_prefix/prefix_length)

二进制查找

目的IP与子网掩码做与运算,然后比较和路由前缀是否相等
dip & mask ?= route_prefix

哈希查找

针对IPv4,地址长度32bit
建立32个hash桶,key = hash(route_prefix),存入prefix_length为索引的桶里

|子网掩码长度32|→|hash(route_prefix1/32)|...|
|子网掩码长度31|→|hash(route_prefix3/32)|...|
|子网掩码长度30|→|hash(route_prefix5/32)|...|
|子网掩码长度..|→|...|
|子网掩码长度2 |→|hash(route_prefix7/32)|...|
|子网掩码长度1 |→|hash(route_prefix9/32)|...|

搜寻时,目的IP依次与长度从32减小到1的掩码做运算,然后hash,去对应桶查找

256叉树

前缀树查找

路径压缩

在前缀树查找中,从下往下,每个节点都要比较依次,

参考

IP Address Lookup TUTORIAL