网络层:路由表和fib的关系

Transmission Control Protocol/Internet Protocol的简写

中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础

由网络层的IP协议和传输层的TCP协议组成。

TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。

通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。
而IP是给因特网的每一台联网设备规定一个地址。

IP

IP地址可以简单看成是由网络号和主机号组成的,但具体多少位网络号,多少位主机号,不同类别的IP地址有不同的划分情况:

A类地址:8位网络号,24位主机号
B类地址:16位网络号,16位主机号
C类地址:24位网络号,8位主机号

网络号是由ICANN统一分配的,而主机号则由该网络端的系统管理员进行分配的,有时候为了更好地划分网络,还可以将主机号细化,分配成主机地址+子网地址的形式,也就是子网划分。

说完IP地址的表示方式,我们再说一下IP地址的分类,IP地址通常分为5类:

A类地址 (1.0.0.0127.255.255.255)
B类地址 (128.0.0.0191.255.255.255)
C类地址 (192.0.0.0223.255.255.255)
D类地址 (224.0.0.0 - 239.255.255.255)
E类地址 (240.0.0.0 - 255.255.255.254

当我们知道每一类地址的组成之后,相应的其范围也就非常明确了,就以网络号分配来看,A类地址要占到8位,因此其IP地址的首位肯定是0,
这样它就吧00000000 - 01111111 (0 - 127)之间所有的网络号都占满,好了,

A占满以后该B类地址了,B类地址虽然是16位的,但是你不能去抢A类地址的网络号是不,因此它的网络号的范围就是128-191,可以发现B类地址的前两位固定都是10,依次类推,C类地址的前三位就是110,所以其范围就是192-223.

路由器

网络层转发最重要的设备- 路由器

路由器的主要功能是路由选择和报文转发,这种功能的实现需用到路由协议。

路由协议是路由器之间维护路由表的规则,用于发现路由,并生成相应的路由表,同时知道报文的转发。路由协议决定路由表中存放那些路由信息。

简单点说,路由器的功能就是两点:路由,转发。

其中路由就是说经过路由器的报文,决定它的去向,当然仅仅知道报文去哪儿是不行的,路由器还需要将报文发送到相应的位置,这样才算完成一次报文的转发,

通俗点说就是,路由器对收到的报文,会做两件事,其中一件是根据路由表(后面会介绍到,是路由转发最重要的表项),决定它的去处,紧接着第二件事就是将报文转发过去

TCP/IP协议的路由表与FIB表

网络层中最主要的概念就是路由和转发

而路由器作为网络传输的载体,其最核心的功能也是路由和转发,至于怎么路由和转发,随着组网的复杂度而不同
可以是一座城市的网络,一个国家的网络,一个大洲的网络

现在我们就是来介绍路由器上存储的最为重要的两张表项- 路由表和FIB

两张表的基础概念:

路由表:

用来存储各种路由协议发现的路由,根据来源不同,路由表中的路由通常可以分为以下三类

1.链路层发现的路由(也叫接口路由或直连路由)

这种路由比较好理解,就是两台相邻的路由器,通过链路连接以后,便可以进行报文的传输。一般设备都会自己完成这个发现和建立路由

2.由网络管理员手工配置的静态路由

静态路由指的是在设备上手动敲一些指令来配置路由协议。静态路由配置方便,对系统要求低,适用于拓扑简单稳定的小型网络,缺点,不能自动适应网络拓扑的变化需要人工干预。

3.动态路由协议发现的路由

动态协议发现的路由非常灵活,需要一定的转发基础才能够利用动态协议来建立网络。优点,有自己的路由算法,能适应网络拓扑的变化,适用于一定数量三层设备的网络。缺点,配置难度大,对系统的要求高于静态路由,占用一定的网络资源。

试想存在这样一种场景,两台设备直连,现在有一个报文经由设备A,下一跳为设备B,设备A和B之间存在直连路由(DIRECT)、静态路由(STATIC)和动态协议路由(OSPF是一种动态路由协议,用来建立路由表),三条路由均有效,那么这一个报文该如何选择并进行转发呢?

路由优先级的概念在这里就能清晰的体现出来了,在上面介绍得三种路由,根据转发的需要,对其优先级做了规定,在转发过程中,设备会优先选择高优先级的路由协议作为最优路由来进行转发,其优先级是用具体的数值来规定的,其中:0表示直接连接的路由,255表示任何来自不可信源端的路由;数值越小表明优先级越高。
下面是部分路由协议以及其缺省情况下的路由优先级:
路由协议或路由种类 相应路由的优先级

      DIRECT                          0
      OSPF                            10
      IS-IS                           15
      STATIC                          60
      IBGP                            255
      EBGP                            255

假如说用户配置的路由,其优先级也一样,这个时候该选择哪条路由进行转发呢?针对这种情况,某些设备除了有上述的路由优先级,还会自己再定义一套内部优先级,专门用来识别,当不同的路由协议配置了相同的优先级以后,该选择哪条路由进行转发,其相应的数值如下:
路由协议或路由种类 相应路由的优先级

       DIRECT                        0
       OSPF                          10
       STATIC                        60
       IBGP                          200
       EBGP                          20

FIB表(Forwarding Information Base)

每条转发表项都指明了到达某网段或主机的报文应该通过路由器的哪个物理接口或逻辑接口发送。
然后就可以到达该路径的下一个路由器,或者不再经过别的路由器而直接相连到网络中的目标主机。

路由表和FIB表分别储存着网络传输中的两大关键点:路由功能和转发功能,二者之间关系密切,共同负责将报文按照最适合路径进行转发

路由器上的路由表的工作核心:

每台路由器都保存着一张本地核心路由表,同时各个路由协议也维护着自己的路由表。
协议路由表中存放着该协议发现的路由信息

路由协议可以引入并发布其他协议生成的路由。例如在路由器上运行OSPF(Opne Shortest Path First)协议,需要使用OSPF协议通告直连路由,静态路由或IS-IS路由时,要将这些路由引入到OSPF协议的路由表中

本地核心路由表用来保存协议路由和决策优选路由,并负责把优选路由下发到FIB,FIB进行知道转发。
这张路由表依据各种路由协议的优先级和度量值来选取路由

可以看到,路由表根据目的地址,存储相应的路由类型,优先级数值,下一跳地址以及出接口,
这些都是我们上一节讲路由是提到过的,每当有报文进入时,我们会从报文中封装的IP地址,
通过查询路由表,找到其最为合适的下一跳地址,并确定其出接口.

[root@localhost ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.100.254 0.0.0.0         UG        0 0          0 enp7s0
172.10.0.0      0.0.0.0         255.255.0.0     U         0 0          0 br-7d57e
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.100.0   0.0.0.0         255.255.252.0   U         0 0          0 enp7s0


[root@localhost ~]# ip route list 
default via 192.168.100.254 dev enp7s0 proto static metric 100 
172.10.0.0/16 dev br-7d57e45d676e proto kernel scope link src 172.10.0.1 linkdown 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.100.0/22 dev enp7s0 proto kernel scope link src 192.168.103.66 metric 100

主机路由
主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。
例如,在下面的示例中,本地主机通过IP地址192.168.1.1的路由器到达IP地址为10.0.0.10的主机。

Destination    Gateway       Genmask        Flags     Metric    Ref    Use    Iface
-----------    -------     -------            -----     ------    ---    ---    ---
10.0.0.10     192.168.1.1    255.255.255.255   UH       0    0      0    eth0
网络路由
网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。
例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。

Destination    Gateway       Genmask      Flags    Metric    Ref     Use    Iface
-----------    -------     -------         -----    -----   ---    ---    -----
192.19.12     192.168.1.1    255.255.255.0      UN      0       0     0    eth0

默认路由
当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。
默认路由的Flags字段为G。
例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器。

Destination    Gateway       Genmask    Flags     Metric    Ref    Use    Iface
-----------    -------     ------- -----      ------    ---    ---    -----
default       192.168.1.1     0.0.0.0    UG       0        0     0    eth0

FIB表箱存储的内容和路由表相似,但又是对路由表的一种补充,具体补充的是如何转发这一条报文,根据目的地址,确定下一跳,再确定耗时以及路由类型,最重要的当然还是出接口信息。在路由表选择出路由后,路由表会将激活路由下发到FIB表中。当报文到达路由器时,会通过查找FIB表进行转发。

FIB表的匹配遵循最长匹配原则。查找FIB表时,报文的目的地址和FIB表中的各表项的掩码进行按位“逻辑与”,得到的地址符合FIB表项中的网络地址则匹配。最终选择一个最长匹配的FIB表项进行转发报文。

举个例子:一个目的地址为8.1.2.1的报文进入路由器,查找对应的FIB表,首先,目的地址8.1.2.1与FIB表中各表项的掩码“0,8,16”作逻辑与运算,得到下面的网段地址:0.0.0.0 8.0.0.0 8.1.0.0。
这三个结果可以匹配到FIB表中对应的三个表项的匹配长度分别是0bit、8bit和16bit,最终,路由器会选择最长匹配8.1.0.0进行转发,也就是从接口GigabitEthernet2/0/0转发这条目的地址为9.1.2.1的报文。

ping

简单理解为从某个数据包发送到服务器,到收到服务器应答包为止的时间就是ping

[root@localhost ~]# ping 192.168.100.254
PING 192.168.100.254 (192.168.100.254) 56(84) bytes of data.
64 bytes from 192.168.100.254: icmp_seq=1 ttl=254 time=0.665 ms
64 bytes from 192.168.100.254: icmp_seq=2 ttl=254 time=0.649 ms

一般以毫秒计算,如果你输入的IP地址有误,或者IP地址不可达就会收到以下信息

[root@localhost ~]# ping 192.168.100.150
PING 192.168.100.150 (192.168.100.150) 56(84) bytes of data.
From 192.168.103.66 icmp_seq=1 Destination Host Unreachable
From 192.168.103.66 icmp_seq=2 Destination Host Unreachable

请求超时!
无出口!

ICMP

说到ping 其实回复报文实际上就是ICMP的差错报文(所以又是ping不通可能只是ICMP不通)

ICMP报文一般分为两种类型,一种是ICMP查询报文,作用为来在主机或路由器之间传递控制信息的协议,所谓的传递信息就是指目的地址是否可达,
路由是否可达等状态信息,ICMP协议并不传输数据,但是它却能很好的传递状态信息,而ping 程序 结合ICMP协议之后的完整过程就是:

1.首先查询本地的arp cache 信息,看是否有对方的mac地址和IP地址映射条目的记录;
 
3.如果没有,就会发起一个arp广播请求报文,等待对方(接收方根据arp协议中目的IP是否为自己确认身份)
  告知具体的mac地址;

5.收到arp 响应包之后就获得某个IP的具体mac地址,有了物理地址之后才可以通信
  同时对IP-MAC 地址做一个本地 cache;

7.发出icmp echo request 包,收到icmp echo reply 包。

前三条是一个查询arp表获取对端mac的 三层IP转发基本流程,第四条规则就是利用 ICMP报文来完成回显信息的输出

ARP

ARP协议 是一个基础的协议,但是他的运行对于应用程序或系统管理员来说 一般是透明的。

ARP告诉缓存在他的运行过程中非常关键。

我们可以用arp命令对高速缓存进行检查和操作。高速缓存中的每一项内容都有一个定时器,根据它来删除不完整和完整的表项。

arp命令可以显示和修改ARP高速缓存中的内容,我们介绍了ARP的一般操作,同时也介绍了一些特殊的功能,委托ARP和免费ARP。

简单总结起来就是,在IP转发时,仅仅知道对端IP地址是无法完成转发的,我们需要知道对短的MAC地址才能够进行转发,这个时候加入本地的ARP缓存表中查不到对端的MAC,那么则会发送ARP学习报文,去下游学习MAC,只有学到了MAC才能进一步的转发,而ARP在其中就起到了存储IP地址与MAC地址映射关系的作用,因此ARP协议是网络转发中非常重要的一个协议。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值