12.5.2 経路選択
- 経路を選択するアルゴリズム(集合を与えられたときにどこのルートを使うかをえらぶ)
- radix検索トライ
129.168.2.0 0の場合はセグメントのネットワーク全体を表している。
探索によりループバックアドレスとIPアドレスが検索できる。
サブネットマスク=固定されていないところはなんでもいい
0はネットワーク全体、255はブロードキャストなので、1-254まで
拡張は192.168.0.0 まで 192.168.はローカル
この図はわりと重要で、BSDだけに限ったことではないことに留意する。
サブネットマスクは変えようと思ったら変えられる。
/16 /24 /28
個々の経路はradix木で管理しない。
rtentry構造体はFreeBSD5.2では活用し始めている
12.5.3 経路のリダイレクト
プロトコルがルーティングシステムに対して既存のルーティングテーブルエントリを修正したり、新しいルーティングテーブルエントリを作成することを要求する
古いホスト経路をじどうてきに削除しない
12.5.4 ルーティングテーブル管理インターフェイス
ルーティングテーブルを操作する関数
- rtalloc()
- rtredirect()
- RTFREEマクロ
この図はなんだかよくわからない
12.5.5 ユーザレベルのルーティングポリシー管理
カーネルのルーティング機能は、意図的にポリシー上の判断を行うことを避けている
ユーザプロセスがルーティングポリシーを決める
- routed
- Quagga
QuaggaはZebraをForkしたやつ。
GNU Zebra - Wikipedia, the free encyclopedia
12.5.6 ユーザレベルのルーティングインターフェース: ルーティングソケット
カーネル内の経路を追加、削除、変更するためにカーネルのルーティングテーブルに対するインターフェースを必要とする
システムコール的なのがあるんじゃないのかっていうやつ。
ルーティングテーブル以外から変更が来ても監視しているから通知が来る。
通常はゲートウェイアドレスも必須。
インターフェースとはNICのこと。NICはLANのくち。普通は別のネットワークで運用する。
12.6 バッファ管理と輻輳制御
バッファ管理ポリシーがプロトコルの性能を左右する
ちゃんとしたポリシーがないと…
- パケットの取りこぼし
- プロトコルによる適切なウィンドウ情報の選択
- メモリの断片化
- ホスト全体の性能低下
メモリ領域を拡張することはできるが、拡張されたメモリについてはシステムに戻すことはできず、領域の再利用について検討されることはなかった
ネットワークのデータを処理するメモリ領域、データが増えるとメモリ領域が増えるが、データ量が通常に戻ってもメモリ領域はもとにもどらない
12.6.1 プロトコルのバッファ管理ポリシー
ソケットを作成するとき、プロトコルは送信および受信キューのために、一定量のバッファを確保する
通信するときにソケットを作る ファイルハンドリングを想定したらいい(ファイルディスクリプタ)
高水位線 閾値(いきち しきいち) データ処理を止めるかどうかを判断する閾値のこと
12.6.2 キューの制限
到着したパケットはメモリ割り当てに失敗しない限り受け付けられる
キューの長さを調整することは可能であるが、適切なデータ量を決める必要がある
(でも誰がどうやって調整するのかは知らないけど、防衛機構って書いてあるならそういうシステムが存在することは間違いないのであろう)
ただ、実際のコードは長大すぎるので探しづらい。。
12.7 RAWソケット
パケットにはヘッダがある
データだけではなくヘッダ、データ全部を見たい場合にRAWソケットを使う。
ICMPソケットを用いて実装されている。
12.7.1 制御ブロック
- rawcb 管理ブロック
12.7.2 入力の処理
RAWソケットフィルタリングするraw_input
マッチしたものはいろいろなところにコピーされる。
12.7.3 出力の処理
raw_usendを使う。プロトコルファミリ固有の出力関数を実行する。
12.8 ネットワークシステムに関するその他の話題
12.8.1 帯域外データ
ストリームソケットとシークエンスパケットによってのみサポート
そもそも帯域外データってなんぞ
- 別枠で送られるデータ
- 緊急データ
- 異常データ
SO_OOBINLINE OutOfBind
帯域外データが来たら1バイト削除する→次の緊急データを受け取るときに問題が発生する
12.8.2 アドレス解決プロトコル
アドレス解決プロトコル(ARP)はIPアドレスをMacアドレスに対応させる例のやつ
ネットワークアドレスがIPで、リンク層アドレスがMACアドレス
ARPの中にはいっていないやつはまずブロードキャストする
ローカルのEthernetに対する経路は包括経路
タイムアウトしない完全な変換
20秒間はないものとする。
ARPの返事待ち
マシンごとでMACアドレスをくださいって送り合っている。
- DNS FQDN⇔IP
- ARP IP→MAC
- RARP IP←MAC
直接経路 マシンごとにMACアドレスをARPでひもとく。
13 ネットワークプロトコル
ネットワークプロトコルの実装について考える
通信ドメインのサポート
- IPv4
- IPv6
- XeroxNSプロトコル
- ローカルドメインなど
4.2BSDのネットワークアーキテクチャ上で最初に実装されたプロトコル
4.3BSDでXeroxNSプロトコルが実装された
IPv4プロトコルの構成と実装に焦点をあてる。
しばらくIPv4について話
複数のプロトコルに対応しようとした話
13.1 IPv4 ネットワークプロトコル
TCP/IPは多くのプロトコルのひとつにすぎない
バイトが8ビットじゃないやつもある ので、厳密化するためのオクテット
ホップ 中継地点の一つ一つにジャンプすること (tracerouteで)