はじめに
こんにちは、ネットワークエンジニアの「だいまる」です。
今回は、ネットワークの勉強を始めたばかりだと「どっちだっけ?」となりやすい「RIB」・「FIB」の違いについて、説明していきたいと思います。
RIB/FIBの全体像
RIBとFIBの違いは「RIB」がコントロールプレーン(Cプレーン)、「FIB」がデータプレーン(Dプレーン)で動作する点にあります。
下図にあるように、CプレーンにはIPアドレス(L3)とMACアドレス(L2)を結びつけている「ARPテーブル」が存在します。
一方、Dプレーンにも「ARPテーブル」を基に作成された「隣接テーブル」を持っております。
RIB/FIBだけでなく、この2つのテーブルもルータの高速処理に必要不可欠となるテーブルとなっております。
もし、IPアドレスやMACアドレス、L3、L2がわからないという方は、以下リンクの教材がとてもおすすめなので購入して勉強してみるといいかもしれません。
RIB(Routing Information Base)とは?
RIB(Routing Information Base)は、コントロールプレーン側で生成されCPUで処理されます。
このテーブルは、IGPやEGPのプロトコルから得た情報を処理し、宛先ごとの出力インタフェース(IF)、ネクストホップ(次の宛先)の情報をまとめているデータベースになります。
CPU処理が必要のため、テーブル参照ごとにCPU負荷が上がり、パケットドロップや処理遅延につながる可能性があります。
日常生活で例えるならば、普段やらない家事やタスクを行う場合、あれこれ考えながら対応すると思います。
その場合、普段より頭や体が疲れ、「なにやってんだろ?自分」みたいな気持ちを抱き、いつもより効率が悪くなる時があるかと思いますが、そんな感じのイメージです。
普段やらないことをやる時って疲れますよね?そんな感じです!
「RIB」はルーティングテーブルなので、「show ip route」のコマンドで確認することができます。
Router1#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is 192.168.11.1 to network 0.0.0.0
S* 0.0.0.0/0 [254/0] via 192.168.11.1
10.0.0.0/8 is variably subnetted, 10 subnets, 2 masks
C 10.1.1.0/24 is directly connected, GigabitEthernet0/2
L 10.1.1.1/32 is directly connected, GigabitEthernet0/2
O 10.1.2.0/24 [110/2] via 10.1.1.2, 02:12:16, GigabitEthernet0/2
O 10.1.3.0/24 [110/2] via 10.1.4.2, 02:12:40, GigabitEthernet0/1
C 10.1.4.0/24 is directly connected, GigabitEthernet0/1
L 10.1.4.1/32 is directly connected, GigabitEthernet0/1
C 10.1.5.1/32 is directly connected, Loopback0
O 10.1.5.2/32 [110/2] via 10.1.4.2, 02:12:50, GigabitEthernet0/1
O 10.1.5.3/32 [110/2] via 10.1.1.2, 00:17:41, GigabitEthernet0/2
O 10.1.5.4/32 [110/3] via 10.1.4.2, 00:02:49, GigabitEthernet0/1
[110/3] via 10.1.1.2, 00:02:49, GigabitEthernet0/2
左側のアルファベットは経路情報の種類を表し、x.x.x.x/24の表記は経路、「via」や「is」に続く部分は出力先のインタフェース等を表します。
このことから、RIBには様々な経路とIFが紐づけられていることがわかります。
- コントロールプレーン処理・CPUにアクセス処理する必要がある
- IGP等の情報から各宛先の出力IF、ネクストホップの情報をまとめるデータベース
- 日常生活で例えると脳処理負荷が高い家事やタスクを実施するイメージ
FIB(Forwarding Information Base)とは?
FIB(Forwarding Information Base)は、ハードウェアにネクストホップと出力先IFを紐付け、それを参照しパケットを送出する仕組みとなっています。
一般的には、RIBで生成された情報を基にFIBを作成するため、パケットの高速転送が可能となります。
これも日常生活で例えると、歯磨きや手洗い・うがいといった習慣化されたタスクをイメージしてください。
このような習慣化されたタスクは、普段から何も考えずに効率的に行動ができていると思います。
これが可能な理由は、脳内で神経回路が確立されており、条件反射的に行動するためです。
FIBはこれに近いイメージと思っていただければ大丈夫かと思います。
また、「FIB」はciscoのIOSの場合、「show ip cef」系のコマンドで出力することができます。
Router1#show ip cef
Prefix Next Hop Interface
0.0.0.0/0 192.168.11.1 GigabitEthernet0/0
0.0.0.0/8 drop
0.0.0.0/32 receive
10.1.1.0/24 attached GigabitEthernet0/2
10.1.1.0/32 receive GigabitEthernet0/2
10.1.1.1/32 receive GigabitEthernet0/2
10.1.1.2/32 attached GigabitEthernet0/2
10.1.1.255/32 receive GigabitEthernet0/2
10.1.2.0/24 10.1.1.2 GigabitEthernet0/2
10.1.3.0/24 10.1.4.2 GigabitEthernet0/1
10.1.4.0/24 attached GigabitEthernet0/1
10.1.4.0/32 receive GigabitEthernet0/1
10.1.4.1/32 receive GigabitEthernet0/1
10.1.4.2/32 attached GigabitEthernet0/1
10.1.4.255/32 receive GigabitEthernet0/1
10.1.5.1/32 receive Loopback0
10.1.5.2/32 10.1.4.2 GigabitEthernet0/1
10.1.5.3/32 10.1.1.2 GigabitEthernet0/2
10.1.5.4/32 10.1.1.2 GigabitEthernet0/2
10.1.4.2 GigabitEthernet0/1
先程のRIBとは少し異なり、宛先とNexthop、出力インタフェースが記載されています。
- データプレーン処理・ハードウェアで処理
- RIBを元に生成されたデータベース
- 日常生活で例えると習慣化されたタスク処理
最後に
どうでしたか?
「RIB」と「FIB」の違いについて少しでもイメージを持っていただけたのであれば、幸いです。
ネットワークやサーバ関連の知識を少しずつアウトプットしているのでそちらの記事も参照いただければと思います。