有类路由协议和无类路由协议
有类路由协议在产生路由更新时,并没有包含路由所对应的子网掩码。接收路由器要根据该路由是在主网内还是主网外来判定是否为掩码。
无类路由协议会在通告的路由中携带子网掩码。
RIPv1属于有类路由协议,而RIPv2、OSPF、ISIS、、BGP属于无类路由协议。
有类查找方式和无类查找方式
有类查找方式可理解为逐层查询。当路由器收到数据包时,路由器先查找目的地址所属主类,如果路由表中有主类路由,则再去找子网,如果有子网路由,则查询被限定在这些子网中,并进一步查找,如果最终查找失败(没有任何子网匹配这条路由),则丢弃数据包,即使有默认路由存在;如果本地没有该主类路由,则看是否有默认路由,如果有,则按默认路由转发,如果无,则丢弃数据包。
无类查找方式比较简单,它不会注意目的地址的类别,它会在目的地址和所有己知的路由之间逐位(bit by bit)执行最长匹配;
有类路由查找方式:
首先查看路由表或者FIB表,是否有对应的主类,A、B、C类地址(可理解为10.0.0.0/8、172.16.0.0/16、192.168.0.0/24)。此过程不看子网掩码。
如果有对应的主类网络路由,则继续判断是否为该主网内的子网,如果没有匹配的子网,则丢包。
这便意味着,即使做了默认路由,但是数据包依旧有传不出去的可能性。
例如,一个路由表当中,有2条路由,分别为默认路由“0.0.0.0/0 10.10.10.1”,和“172.16.1.250/32 10.10.10.1”。此时收到一个数据包的目的地址为“172.16.1.1”,因为主类与“172.16.1.250”相同,所以匹配到“172.16.1.250/32 10.10.10.1”这条路由表当中。匹配到最后发现包中的目的地址与该路由表不匹配,此时路由器会直接丢包。
无类路由器查找方式:
如果收到一个数据包的目的地址为“192.168.1.76”,此时的路由器当中包含以下路由条目“192.168.0.0/16”、“192.168.1.0/24”、“192.168.1.0/25”、“192.168.1.64/26”、“192.168.1.252/30”“0.0.0.0/0”。路由器收到包之后先去匹配自身路由表或FIB表当中,掩码位最长的路由条目,即“192.168.1.252/30”,不匹配。再和掩码第二长的路由条目进行匹配,即“192.168.1.64/26”,匹配,转发。
再举一个例子,上述路由器所含路由表不变,收到一个目的地址为“10.10.10.22”的数据包,则按规则依次与“192.168.1.252/30”“192.168.1.64/26”“192.168.1.0/25”“192.168.1.0/24”“192.168.0.0/16”“0.0.0.0/0”路由条目进行匹配,直到最后与默认路由匹配成功,转发。