传输层合同,不论是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:静态路由和直连路由的出插口相同时,为何下一跳不同?
欢迎你们留言讨论。