はじめに
こんにちは、ネットワークエンジニアの「だいまる」です。
今回は、ネットワークの勉強を始めたばかりだと「どっちだっけ?」となりやすい「RIB」・「FIB」の違いについて、説明していきたいと思います。
そもそもRIB・FIBの違いとは?
そもそもの違いは動作する環境が異なる点です。
RIBはコントロールプレーンで動作し、FIBはデータプレーンで動作します。
コントロールプレーンとは「データ転送の制御を行う世界」であり、データプレーンは「データそのものが動く世界」になります。
この2つの違いは「普段利用する道路」をイメージしてもらえれば理解しやすくなります。
コントロールプレーンは「信号や警察官などの交通整備を行う機械や人」になります。
一方、データプレーンは「道路を走る車」になります。
このイメージを持ってもらったところで、コントロールプレーンとデータプレーンの更なる違いに触れていきます。
下の図にもある通り、コントロールプレーンは「IPアドレス(L3)とMACアドレス(L2)を紐づけるARPテーブル」が存在します。
一方、データプレーンにも「ARPテーブルを基に作成された隣接テーブル」があります。
この2つのテーブルもルータの高速処理に必要不可欠のため、頭の片隅に入れておきましょう。
RIBとFIB、コントロールプレーンやデータプレーンの全体像がなんとなくわかったところで、次はその詳細について触れていきます。
RIB(Routing Information Base)とは?
RIB(Routing Information Base)は、コントロールプレーンで生成されるため、CPUで処理されます。
具体的にどんな情報が載っているのか?
それは、IGPやEGPのプロトコルから得た情報を処理し、宛先ごとの出力インタフェース(IF)、ネクストホップ(次の宛先)の情報になります。
パケットの送信先を制御しているため、コントロールプレーン動作になるのです!
コントロールプレーン上の動作では、CPU処理が必要となるため、パケット受信時のRIB参照によるCPU負荷が高まることで、ドロップや処理遅延につながる可能性があります。
日常生活で例えるのであれば、普段やらない家事やタスクをあれこれ考えながら対応するイメージになります。
普段やらないことはいつもより頭や身体の労力を使うため、疲労が出やすいと思います。
それが重なるといつもより効率が悪くなったり、無気力になったりすると思います。
そんなイメージです。
「RIBとは何か?」がわかったところで、次は実機での確認方法を見ていきます。
一般的には「show ip route」のコマンドで確認することができます。
利用するOSによってコマンドは異なります。
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」に続く部分が出力先のインタフェース等を表します。
この結果からも経路とIFが紐づけられていることがわかります。
- コントロールプレーン処理・CPU処理
- ルーティングプロトコル等から得た経路、出力IF、Nexthopをまとめるデータベース
FIB(Forwarding Information Base)とは?
FIB(Forwarding Information Base)は、ルーティングテーブルを基に生成し、ハードウェアでパケット処理を行うテーブルを指します。
より具体的に言うと、RIBは様々な経路が保持されていますが、FIBは最適経路のみ保持されているデータベースとなります。
これにより、RIBの参照によるCPU処理が不要となるため、パケットの高速転送が可能となります。
これを日常生活で例えた場合、歯磨きや手洗い・うがいといった習慣化された行動をするイメージになります。
習慣化された行動は普段から何も考えずに行動ができていると思います。
FIBは、RIBとは異なり最適経路を探す必要がなく、すぐに最適経路を発見できるため、このイメージになるのです。
また、「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」の違いについて少しでもイメージを持っていただけたのであれば、幸いです。
ネットワークやサーバ関連の知識を少しずつアウトプットしているのでそちらの記事も参照いただければと思います。