在EIGRP中,只要发生总结就会在路由表中自动产生一条指向NULL0的路由条目,这条路由的直接意思是:匹配这条路由的数据包会被路由器丢掉。它的目的是为了避免在某些情况下产生路由环路;Null0这个接口是路由器的虚拟或者伪装接口,该接口永久处于up状态,不能被封装和转发流量.
指向null0接口的路由是路由器自身产生汇总网段并通告给自己的邻居,让其减少路由表大小而出现的。那么这个接口到底是如何防止路由环路的呢?现在我们看个简单的一个例子:
假设A B两个路由器,A路由器连接三个网段分别是:172.16.1.0/24 172.16.2.0/24 172.16.30./24,那么当A对以上三个网段进行汇总,得到一条172.16.0.0/16的网段并将其传递给路由器B,此时在路由器A上会自动出现一条172.16.0.0/16 null0指向null0的路由,当路由器B收到一个去往172.16.1.0/24的数据包时,它会直接交给A来处理,此时没问题,但是如果B收到一个去往172.16.4.0/16的路由,根据路由最长匹配的原则,路由器A会将其发送到null0口,直接丢掉,因为路由器A发现自己汇总的 172.16.0.0/16的网段中细分路由里并没有172.16.4.0/24的匹配项目,所以发到null0,丢掉。那么如果此时路由器A有一条默认路由指向B并且没有null0路由就有可能发生环路了。因为去往172.16.4.0/16的路由会从默认路由出发到达B,而B会再发送到A。为了避免环路,EIGRP 则产生了Null0 的路由。
注意在高版本的IOS中,一旦汇总路由中不包含数据包目的地的详细路由,则直接将数据包转发到null0口丢弃,而不再查找默认路由。所以在对EIGRP汇总的时候尽量关闭自动汇总而采取人工详细汇总!在OSPF,IS-IS这些路由中我们也推荐创建一条null0路由来避免环路!
假设A B两个路由器,A路由器连接三个网段分别是:172.16.1.0/24 172.16.2.0/24 172.16.30./24,那么当A对以上三个网段进行汇总,得到一条172.16.0.0/16的网段并将其传递给路由器B,此时在路由器A上会自动出现一条172.16.0.0/16 null0指向null0的路由,当路由器B收到一个去往172.16.1.0/24的数据包时,它会直接交给A来处理,此时没问题,但是如果B收到一个去往172.16.4.0/16的路由,根据路由最长匹配的原则,路由器A会将其发送到null0口,直接丢掉,因为路由器A发现自己汇总的 172.16.0.0/16的网段中细分路由里并没有172.16.4.0/24的匹配项目,所以发到null0,丢掉。那么如果此时路由器A有一条默认路由指向B并且没有null0路由就有可能发生环路了。因为去往172.16.4.0/16的路由会从默认路由出发到达B,而B会再发送到A。为了避免环路,EIGRP 则产生了Null0 的路由。
注意在高版本的IOS中,一旦汇总路由中不包含数据包目的地的详细路由,则直接将数据包转发到null0口丢弃,而不再查找默认路由。所以在对EIGRP汇总的时候尽量关闭自动汇总而采取人工详细汇总!在OSPF,IS-IS这些路由中我们也推荐创建一条null0路由来避免环路!
转载于:https://blog.51cto.com/project/364069