routed
routed は、ネットワークのルーティングテーブルを管理するために、ブート時に起動される。 ルーティングデーモンは、 Xerox NS ルーティング情報プロトコル (Routing Information Protocol) を変更したものを使う。 これにより、カーネルのルーティングテーブルのエントリを最新に保つ。 このサーバは、複数のアドレスタイプを使用できる一般化したプロトコルを使う。 しかし、現在のところは、ネットワーククラスタ内で インターネットのルーティングをするためだけに使われている。 通常の運用において routed は、 ルーティング情報パケットを待つために、 route(8) サービス ( services(5) を参照) 用の udp(4) ソケットの接続を待つ。 ホストがネットワーク間のルータである場合、 routed は、直接接続されている全てのホストとネットワークに、 ルーティングテーブルの複製を定期的に提供する。 routed が動作し始めると、 システムで設定されており、 かつ up'' とマークされている 直接接続されたインターフェースを探すために、 SIOCGIFCONF ioctl(2) が使われる (ソフトウェアループバックインターフェースは無視される)。 複数のインターフェースが存在する場合、 ホストはネットワーク間でパケットを転送するものと仮定される。 それから routed は、 リクエスト パケットを各インターフェースから送信する (インターフェースがサポートしている場合は、ブロードキャストパケットを使う)。 そして、 routed は、他のホストからの リクエスト パケットと レスポンス パケットの接続を待つループに入る。 リクエスト パケットを受信すると、 routed は内部テーブルで管理している情報に基づいてリプライを作成する。 作成された レスポンス パケットには既知のルートのリストが含まれ、 各ルートには「ホップカウント」メトリックが付く (16 以上のホップカウントは「無限大」とみなされる)。 ここで返された各ルートのメトリックは、 送信者からの相対的な メトリックである。 routed は外部からのパケットを処理するのに加え、 定期的にルーティングテーブルのエントリをチェックする。 エントリが 3 分間以上更新されていない場合、 そのエントリのメトリックは無限大に設定され、 削除のためのマークが付けられる。 そのエントリの失効が ローカルのインターネット上で通知されるのを保証するために、 削除は更に 60 秒後になる。 ネットワーク間ルータとして動作しているホストは、 直接接続された全てのホストやネットワークに対して、 30 秒毎に無条件でルーティングテーブルを提供する。 レスポンスは、 ブロードキャスト機能を持つネットワークのブロードキャストアドレス・ point-to-point リンクの到達先アドレス・ ルータ自身の他のネットワークでのアドレス に対して送信される。 無条件にレスポンスを送信する場合、 通常のルーティングテーブルは無視される。 ネットワークとインターフェースが正しく機能しているかを、 各ネットワークがレスポンスを受信できるか否かを使って決定する。 あるインターフェースでレスポンスが受信できない場合、 そのインターフェースに対してルーティングするために別のルートを選択する。 また、他のルートもない場合、そのルートはルーティングテーブルから削除される。 上記の機能に加えて、 routed は「遠隔にある」 passive もしくは active なゲートウェイという概念をサポートする。 routed が起動すると、 SIOGIFCONF ioctl(2) からの情報のみでは突き止められない可能性のあるゲートウェイを見付けるために、 /etc/gateways ファイルが読み込まれる。 このようにして指定したゲートウェイには、 ルーティング情報を交換するつもりがない場合には、 passive というマークを付ける必要がある。 また、ルーティング情報を交換する場合には、 active というマークを付ける必要がある (すなわち、この場合には routed がマシン上で稼働している必要がある)。 passive ゲートウェイを通るルートは、 起動時に一度だけカーネルのルーティングテーブルに設定される。 このようなルートは、送信されるルーティング情報には含まれない。 active ゲートウェイは、ネットワークインターフェースと同様に扱われる。 ルーティング情報はゲートウェイに配布される。 また、一定時間ルーティング情報が受信されない場合、 それに関連したルートは削除される。 external とマークされたゲートウェイも passive であるが、 カーネルのルーティングテーブルに載ることもなく、 ルーティングの更新時にもその情報が含められることはない。 external エントリの機能は、 routed に対して、 「別のルーティングプロセスがそのようなルートを追加する可能性があり、 その到達先に対して他のルートを設定すべきでない」 と知らせることである。 external エントリは、 2 つのルータが同じ到達先へのルートを覚えてもよい場合にのみ、必要である。 routed は (動作などが) 疑わしい。 gated(8) または zebra(8) の使用を考慮に入れること。 リダイレクトによりルートが変更または追加された場合、 カーネルのルーティングテーブルと routed のルーティングテーブルが対応しない可能性がある。 routed は、 raw ソケット経由で受信した ICMP パケットを読み込むことにより、 受信したリダイレクトを注目すべきである。
routed は他のルーティングプロトコルも組み込むべきである。 各プロトコルに対して別々のプロセスを使うには、 余計なルートや競合するルートを排除するために、設定オプションが必要である。
routed は、より多くの情報を集めるために、 IMP のようなインテリジェントなインタフェースで接続を待つべきである。 routed は、(例えば、出力側の失敗といった) ネットワークインターフェースの 一方向の失敗を、常に検出できるとは限らない。