网络工程师(10):让路由告诉你去哪

传输层协议,不论是TCP还是UDP,把应用层数据封装后,都要扔给“快递小哥”,网络层大名鼎鼎的IP协议。

我们知道,电脑在封装时,如果发现源IP地址和目的IP地址不在同一个网段,会把数据发送给网关,后面的事由网关负责。

网关到底是怎么把数据发送到目的地的呢?

网关一般是路由器或三层交换机(具有路由功能的交换机),它可能连接着很多其他的路由器。而路由器是不会转发广播报文的,路由器每个接口是独立的广播域。

图中,PCA和PCB的网关是R1和R3,两台PC如果要互相访问,都会把数据发给网关,然后由网关把数据转发出去。

那么,路由器怎么转发数据呢?

交换机在一个网段内、根据以太网MAC地址表转发数据,遇到MAC表里没有的,从所有端口发出去;

路由器在不同网段间、根据IP路由表转发数据,遇到路由表里没有的,丢弃!

交换机的MAC地址表是交换机自己学的,那路由器的路由表呢?

其实路由表主要还是靠路由器自己学,但这个东东以后再说。不过路由器在学之前,必须要先有直连路由。有了直连路由,它才是路由器,不然就是一块铁,毛用没有!

啥是直连路由?

路由器要转发数据,肯定要和别人连起来啊,用哪个接口连,我们在这个接口写上个IP地址和掩码,直连路由就有了!

我们再看看图:R1连接PCA的接口配置地址10.1.1.1,掩码24位;连接R2的接口配置了地址10.1.2.1,掩码24位。那么,接口上的IP地址和掩码计算出的网络地址就成为了R1的两条直连路由。

路由表差不多就长这模样:目标地址是路由器认识的目标网络,掩码表示目标网络的范围大小,路由来源是指这条路由哪来的(direct表示是直连路由),度量值意思是这台路由器去这个目标网络的代价,不同路由来源这个值的算法也不一样,直连为0。下一跳地址表示去这个目标网络要找谁,出接口是指去这个目标网络路由器要从哪个门出去。

我们来了解下怎么查路由表。

如果R1此时收到一个数据包,IP封装中的目的地址是PCA的地址10.1.1.2,查看路由表,发现10.1.1.2属于表中10.1.1.0/24范围,于是找到下一跳10.1.1.1,把这个数据包从E0/1接口发出去。

可是,如果路由表是这样:

R1发现,目的地址10.1.1.2既属于10.1.1.0/24范围,也属于10.1.0.0/16范围!

这时,就比较谁的掩码长,24显然比16长,所以,还是找下一跳10.1.1.1并从接口E0/1发出去。

这就是路由表的查表规划:最长掩码匹配。路由器把路由表看个遍,找出所有匹配目的地址的网段,然后选掩码最长的,把数据发出去。

当然,只有直连路由显然是不够的。我们还是看上一个路由表:如果R1收到的不是去往10.1.1.0/24或10.1.2.0/24范围内的数据包,就会因为不知道该从哪个接口发出去而丢弃。

所以,必须告诉R1:如果你收到去往其他任何网段的报文,别丢,发给R2。

怎么才能告诉R1呢?一种办法是我们手工来告诉它,叫静态路由;还有一种办法是让它通过动态路由协议自己发现。

动态路由协议我们以后再讨论,先看一下静态路由。静态路由需要手工写,不同厂商写法稍有不同,小伙伴们自己查阅厂商文档。

我们给R1增加了一条路由:

0.0.0.0/0这是一条很特殊的路由,我们可以叫它缺省路由或默认路由。它可以匹配所有网段。但因为它的掩码最短,所以只有在找不到其他匹配项时才会匹配到它。

有了这条路由,R1会把除了10.1.1.0/24外的所有数据包统统发给R2,再也不会因为不认识目的地址而丢弃了。

但是,这条路由在使用时一定要注意,使用不当会造成路由环路(路由环路我们以后再讨论)。它一般用在网络的边缘路由器上,像R1、R3都可以使用,但R2在网络中间,不适合使用。

如果我们在R1和R3上都配置了缺省路由,它们就会把PCA和PCB互访的数据包转发给R2。

可是,R2的直连路由是10.1.2.0/24和10.1.3.0/24,它并不知道PCA和PCB所在的网络10.1.1.0/24和10.1.4.0/24。如果R2收到去往这两个网段的数据包,还是会丢弃。

所以,还要在R2上配置两条静态路由:

现在,三台路由器都不再是只管自己周围直连的一亩三分地,而是我们通过静态路由让它变得聪明起来,知道了网络中全部的目标网络,让PCA和PCB可以愉快地通信了。


小Q:静态路由和直连路由的出接口相同时,为啥下一跳不同?

欢迎大家留言讨论。

你可能感兴趣的:(网络工程师(10):让路由告诉你去哪)