1.5 ネットワーク・プロトコル(pp.44-56)
議論の内容
その設計目標
設計の中心的概念である階層化
コネクション指向とコネクションレス・サービスおよび、これらのサービスを支える特定のサービスプリミティブ
1.5.1 設計目標(pp.44-46)
ネットワーク・プロトコルが共有している共通の設計目標(設計課題)を調べる
信頼性
リソース割り当て
進化性
セキュリティ
信頼性
=正しく動作するネットワークを作るという課題
↓
電気的なノイズやハードウェア欠陥、ソフトウェアのバグによって情報の損失が発生するリスクがあるという問題
送信する情報に冗長(付加的であるということ)な情報を付け加えて対処するという戦略
誤り検出(error detection) =受信した情報の誤りを見つける
誤り訂正(error correction) =誤りを含んだ情報から正しいメッセージを回復する
回線やルータが壊れているかもしれないという問題
ネットワーク中の使える経路を自動で判断するという目標=ルーティング(routing)
リソース割り当て
=ネットワークが大きくなってもうまく動作し続けさせるという課題
(=スケーラブル、Scalable な設計を目指すという課題)
↓
あるホストが有限なリソースを使用しても、他のホストのリソース利用に干渉しすぎないようにリソースを分割する(割り当てる)という問題
統計的多重化(statistical multiplexing) =各ホストに常に決まった帯域を割り当てておくのではなく、ホストが必要とするタイミングに応じてリソースを割り当てるという戦略
フロー制御(flow control) =速い送信者のデータで遅い受信者をデータで溢れさせるのをどのように防ぐかという問題
受信者から送信者へのフィードバックを用いる戦略
輻輳(congestion) =送信側のトラフィック(通信量)がネットワークのキャパシティを超えて過負荷になる問題
すべてのホストで輻輳を経験したら帯域などのリソース要求を減らすという戦略
アプリケーションからの異なった競合する要求を調停してサービスを提供するという問題
リアルタイム(real-time) 性を要求する動画配信アプリケーションもあれば、リアルタイム性に関係なく高いスループット(転送速度)を要求するファイル転送アプリケーションもあるという状況に対応できるようにするという問題
サービス品質(quality of service) =要求の調停を実現する仕組み
進化性
=新しい設計が出現しても既存のネットワークを接続して進化させるという課題
プロトコル階層化(protocol layering) =問題全体を分割して実装の詳細を隠す戦略
※後方互換性の問題でもある
↓
メッセージを伝送するネットワークには不特定多数のコンピュータが存在するという問題
あるメッセージの送信者と受信者を識別する戦略
下位層→アドレッシング(adressing)
上位層→名前付け(naming)
インターネットワーキング(internetworking) =異なった成長をするネットワーク技術が持つ異なった「制限」(例えば通信速度)を持っているという問題を扱う話題全体
メッセージが異なるネットワークを辿ると順序性が保存されないという問題に対しては、メッセージに番号をつけるという戦略
伝送できるメッセージの最大の大きさがネットワークによって異なるという問題に対しては、メッセージを分割して伝送先で再組み立てするという戦略
セキュリティ
=いろいろな種類の脅威からネットワークを防衛して、ネットワークを安全に保つという課題
↓
通信は盗聴のリスクがあるという脅威
秘密性(confidentiality) を提供する仕組みで防御するという戦略
誰かが特定の人間になりすますという脅威
認証(authentication) =本人確認を行うことで、その人が誰かがなりすました他人ではないことを確認するという戦略
メッセージが不正に変更されるという脅威
完全性(integrity) =メッセージの改竄を検出するという戦略
1.5.2 プロトコル階層化(pp.46-50)
多くのネットワークは層(layer) あるいはレベル(level) の積み重ねで構成される
この概念はコンピュータ科学で用いられる考え方で、利用者は利用者が提供するサービスの中身がどうなっているかを知らなくてもサービスが利用できるように設計する、というもの
あるマシンの第n層(Aとする)と他のマシンの第n層(Bとする)があるとき、A と B の情報のやりとりのルールをプロトコル(protocol) という
プロトコルを用いて互いに通信する主体をピア(peer) といい、ネットワークを介してある会話に参加しているAとBの二者のこと
AとBの間のデータ転送は、それらの直下の層から最下層までの層と、マシンとマシンの間の物理媒体(physical medium) が介在する
下位層には、上位層からできる操作と利用できるサービスをインタフェース(interface) として定義していて、内部の実装は上位層に知られることなく自由に実装を変更できる設計になっている
一連の層とプロトコルの組み合わせはネットワーク・アーキテクチャ(network architecture) と呼ばれ、層ごとのプロトコルのリストをプロトコル・スタック(protocol stack) と呼ぶ
図 1-26「哲学者―通訳―秘書アーキテクチャ」の例
ある人がやりとりをすべき相手と手段を決めておけば、そこを担う哲学者、通訳、秘書は誰に任せてもうまくいくようになっている
通信の実現を保証する仕組み
図 1-27「第5層での下層通信を実現する往訪の流れの例」でみる技術的詳細
送信マシンでは、第n層はメッセージの識別や送信に必要な制御情報を入れたヘッダー(Header) をメッセージに付加して、下位層に渡すことを繰り返している
ほとんどすべての場合で第3層はメッセージの大きさに制限があるため、メッセージをパケットに分割してそれぞれにヘッダーを付加して、個別に伝送されていく
第2層はヘッダーに加えてトレーラ(trailer) も付加して物理伝送のための第1層に渡す
受信マシンでは、ヘッダーを取り去りながら上の層に渡していく
「仮想の通信と実際の通信の関係と、プロトコルとインタフェースの違い」
概念的には、第4層なら第4層のプロトコルを用いて、第4層同士の水平な関係で通信しているという仮想の建前をとっている
一方で、実際には第3層とのインタフェースを通して下位層と通信をしている
ピア・プロセスを抽象化することで、ネットワーク設計という難題を、階層化された個々の層を設計するという管理可能な課題に分割している
1.5.3 コネクションと信頼性(pp.50-52)
層(レイヤー)は、コネクション指向とコネクションレスという2種類の異なるサービスを上位層に提供できる
それらは色々なレベルの信頼性を提供できるかもしれない
コネクション指向サービス
コネクション指向(connection-oriented) サービスでは、ユーザはコネクション(接続)を確立して、利用後に接続を開放する
接続は管(くだ)のようにふるまい、片方から送られたものは順番にもう片方へ送られる
送信者と受信者でお互いのステータスを確認し、接続の確立と開放を行うことをネゴシエーション(negotiation) という
固定的な帯域のようなリソースを伴うコネクションを、電話に由来して別名で 回線(circuit) という
コネクションレス・サービス
コネクションレス(connectionless) サービスは郵便システムにならってメッセージを独立して配送していて、送りっぱなしでコネクションが無いので無事に届いたかどうかはわからない
パケット(packet) =ネットワーク層のメッセージ
蓄積交換(store-and-forward switching) =メッセージ全体を受信した中間ノード(送信者と受信者を介在するマシン)が次のノードに送信する方式
カットスルー交換(cut-through switching) =メッセージ全体を受信し終わる前に次へ伝送を始める方式
しばしばデータグラム(datagram) サービスと呼ばれる
信頼性
コネクション指向サービスとコネクションレス・サービスの特徴は信頼性
例えば
データを決して失わない
受信者が送信者への到着を確認できる
高信頼コネクション指向サービスにはメッセージ列送信(メッセージ境界あり)と バイト・ストリーム送信の2つの流儀がある
「図 1-28 六つの異なるサービス・タイプ」
確認通知データグラム(aknowledged datagram) =コネクション確立は不要だが、信頼性が重要なアプリケーションに提供するサービス
層によっては高信頼通信が利用できないかもしれないし、マルチメディア通信では高信頼サービスによる遅延を許容できないかもしれないといった理由で、高信頼通信と低信頼通信は共存している
電話はノイズが入っても止まらない方がいいし、動画配信は綺麗な映像を待つよりも多少低画質で見られる方がいいということ
要求−応答(request-reply) サービスは、クライアント・サーバ間の通信でよく用いられている
1.5.4 サービス・プリミティブ(pp.52-55)
「図 1-29 簡単なコネクション指向サービスを提供する六つのサービス・プリミティブ」
サービスをユーザープロセスから利用可能な操作の集合としてみることができ、その一つ一つを プリミティブ(primitive) という
その集合は、コネクション指向サービスかコネクションレスサービスかによって違う
図 1-29 はソケット・インタフェースを簡単にした例
ブロック=ある処理をしている間は他の処理を受け付けないことで、ブロッキングともいう
p.53 から p.55 にわたって具体的な手順が書かれている(省略)
色々な理由によって、サービスの達成を一息に片付けるのではなく、細かいステップに分割する方が現実的で適切とされているということが説明されている(大省略)
1.5.5 サービスとプロトコルの関係(pp.55-56)
サービス(service) とは、ある層が上の層に提供する一連のプリミティブ(操作)の集合
プロトコル(protocol) とは、同じ層のあいだのメッセージの制御に関する規則の集合
サービスとプロトコルは別物で、オブジェクト指向に例えると、サービスがオブジェクトならば、プロトコルは実装(implement) にあたる
古いプロトコルはこれらを区別していなかった(よくないとされる)