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