NULL0是路由器上的一个虚拟端口,也被称为丢弃端口。所有到达该端口的数据被直接丢弃。
那么上面的这条语句究竟用处何在?
假设:某公司新申请了16个C类地址,设为200.200.192.0/24-200.200.207.0/24;而现在初期建设阶段只用了其中3个:200.200.192.0、200.200.193.0、200.200.207.0,并有一台路由器通过点对点连接到Internet。
那么在该路由器上就会有类似下面的路由表:
200.200.192.0/24 :e0
200.200.193.0/24 : e0
200.200.207.0/24 : e1
0.0.0.0/0 : s0
最后一条为默认路径,指向Internet。
现在的问题是:路由器接受到一个包,其目的地址为200.200.194.1。应该怎样处理?
根据上面的路由表,唯一能匹配该地址的就是默认路由,如果没有其他的配置,路由器会将其发送到Internet上。但这样对么?200.200.194.1是在本公司所申请地址范围内的,只所以不存在是因为本公司还没有使用。可以肯定的是,在Internet上的其他地方也不会有这个地址。本路由器就应该将其丢弃。至少应当在路由器上写
ip route 200.200.194.0 255.255.255.0 null0
ip route 200.200.195.0 255.255.255.0 null0
...
ip route 200.200.206.0 255.255.255.0 null0
但是这样类似的十多条语句,岂不麻烦。
用一句
ip route 200.200.192.0 255.255.240.0 null0
就可以了。
200.200.192.0 255.255.240.0也就是200.200.192.0/20,是整个公司所有网段的汇总。当有200.200.193.0/24网段上的数据来时,因为使用最长匹配原则,会将数据转发到正确的网段(根据上面的例子是e0);而当地址为不存在,但在公司地址范围内的话,就会匹配这条丢弃语句,而不会匹配默认路由了。
上面是使用静态路由时的例子,当使用路由协议时也有类似的情况。
如OSPF中的area range命令,例如区域51使用192.168.168.0/24网段,该网络被划分了多个子网,但并非使用了所有的子网。那么
area 51 range 192.168.168.0 255.255.255.0
实际起了两个作用。1:向骨干区域宣告汇总的区域路由;2:没有使用的子网地址,不会传播到骨干区域(相当于一条null0语句)
还例如,在允许自动边界汇总的EIGRP中,会在每个类地址边界上生成null0语句。OSPF的summary-address、EIGRP的summary-address语句也都有类似的两个功能