本文分享自华为云社区《报文在不同设备的奇妙之旅》,原文作者:鼓瑟吹笙。
简介
在上图中,HostA的报文转发到HostB上,需要报文,从本地网关出发,经过路由器RouterA,到达Host B。
Host A:Windows主机;
Router A:路由器;
Host B:Linux主机;
让我们从Host A的路由表出发,看一下网络不同位置的路由表。在看路由表之前,先了解一下路由的概念,路由是数据通信网络中最基本的要素。路由信息就是指导报文发送的路径信息,路由的过程就是报文中继转发的过程。
路由器/主机通过路由表选择路由,每个路由器/主机中都至少保存着一张路由表。
在主机的路由表中保存着了IP配置的路由和接口生成的直连路由
在路由器的路由表中保存了各种路由协议发现的路由,根据来源不同,路由表中的路由通常可分为以下三类:
- 链路层协议发现的路由(也称为接口路由或直连路由)。
- 由网络管理员手工配置的静态路由。
- 动态路由协议发现的路由。
Host A上的路由
配置:主机上必须配置本机的IPV4地址,子网掩码和默认网关;
网关又称网间连接器、协议转换器。网关在网络层以上实现网络互连,在通俗易懂一点,网关是转发路由的一个设置,如果路由的下一跳是网关,说明路由的下一跳是一个路由器,而不是一个主机;
查看Windows在路由表:
第一条路由,由配置的默认网关自动生成的一条路由,掩码为0.0.0.0,下一跳为默认网关;
网关路由是下一跳为网关的路由,首先明确,网关路由不是一种路由协议,路由协议是路由器之间维护路由表的规则,用于发现路由,生成路由表,并指导报文转发。
掩码为0.0.0.0的路由统称为默认路由, 要了解默认路由,首先要知道路由转发最长匹配原则,路由查找按位匹配,从前到后,中途出现不匹配的则代表失败,在所有失败前,相同位数最多的路由表项就是下一跳。简单说就是匹配到掩码最长的路由上为转发路由。层层在IP树枝往上查找,最终都会找到0.0.0.0,也就是默认路由。更通俗易懂,就是让那些无法找到非0地址的路由,最终有个转发的地方
了解了上面的概念,可以知道,第一条路由为默认网关路由,功能就是从本机出发的报文,如果目的地址不是本机,直接从默认网关转发出去;
报文的目的地址为10.1.1.1,不是本机IP地址,默认被从网关扔了出去;
Router A上的路由
路由器上有两个表,一个是位于控制面的路由表,以一个是位于转发面的转发表,为了方便了解转发,我们专门看一下华为路由器的转发表;
在转发表中,可以出接口GE1/1/1的配置为
interface GE1/1/1
ip address 10.1.1.10 255.255.255.0
10.1.1.0/24为网段路由,目的地址为IP地址和掩码相与的结果,下一跳为接口配置的IP地址(无任何转发意义,仅有显示意义)。用来将目的地址为同网段的报文从指定接口转发出去。
10.1.1.10/32为主机路由,目的地址为接口IP地址,所有的主机路由掩码都是32位,下一跳为环回口地址127.0.0.1,标识本机有1.1.1.1这个地址,对于目的地址为1.1.1.1的IP报文,是需要送到本机处理的,总结一句话,主机路由用来接收发送给本台设备的报文。
10.1.1.255/32为子网广播路由, 算法为IP地址与取反后的掩码地址进行异或,IP协议规定网段广播地址所有的本网段的三层接口都需要接收该地址的报文,实际应用中几乎没有任何场景使用到网段广播特性。
RouterA收到报文后,根据最长匹配原则,查找转发表,发现10.1.1.0的网段路由,把报文从GE1/1/1转发出去;
Host B上的路由
Host B是Linux操作系统,它和Windows主机有很多相似的地方
1、网关路由:Linux操作系统需要配置
Linux上的接口配置
在ETH0上,配置的IP地址为10.172.153.72,掩码长度为24
查看路由表
发现了一个现象:路由表中没有接口路由生成的主机路由。
这是Linux系统和路由,Windows不同的地方。如果是本机IP地址,直接命中,不需要查路由表。
再说一个有趣的现象,在Linux表中,网关是0.0.0.0的路由,说明报文需要在主机内部查找,在转发时,会拿着目的地址去查找ARP表单,如果找不到对应的MAC地址,报文丢弃。