問題は、複数のルーティングプロトコルデーモンが実行されているLinux/UNIXデバイスでルーティングプロトコルパケットフローを再構築することです。
NICカード(物理層)からルーティング(OSPF/RIP/BGP)デーモンにルーティングプロトコルパケットがどのように到達するか(操作のフロー)?
話しているカーネルを指定していません。
BSDの観点からは、すべて TCP/IP Illustrated、Volume 2:The Implementation By Gary R. Wright、W。Richard Stevens で説明されています。
短いバージョンは次のとおりです。
mbuf
/mbuf_cluster
またはsk_buff
)。また、ここでパケットは bpf デバイスにコピーされます。ether_input
では、フレームのプロトコルとアドレスファミリに応じて、対応するprotosw
(プロトコルスイッチ)配列エントリによって処理されます。ip_input
またはtcp_input
/udp_input
のデータグラムが、対応するルーティングデーモンのso_rcvbuf
(ソケット受信バッファー)のソケットレイヤーに到着した後。(e)glibc
/libc
/libSystem
が代わりに使用されます。ルーティングデーモンとスイートは、カーネル内のルーティングテーブルを操作します。したがって、パケットはルーティングデーモンを通過せず、ルーティングテーブルに従ってルーティングされます。
ルーティングテーブルに同じ特異性の選択肢が2つある場合(最も具体的なルートが常に優先される)、どちらのルートが優先されるかについては、metric
が最も良い(最も低い)方がどちらかです(route
を参照)。シスコでは、土地は「 アドミニストレーティブディスタンス 」と呼ばれます。 RIPやBGPなどのさまざまなプロトコルには、デフォルトのメトリックがあります。 Linux固有の参照があるかどうかはわかりませんが、アドミニストレーティブディスタンスリンクを見ると、ルーティングデーモンが同じ優先度を使用していると思います。
ルーティングプロトコルパケット自体に関しては、ルーティングプロトコルに依存しますが、通常は標準のトランスポートプロトコルを使用します。たとえば、BGPはポート179でTCP/IPセッションを使用します。したがって、デーモンはそれに応じてソケットをバインドするだけです。