Network Seminar 2014
自分へのメモも兼ねています。スライド->http://www.slideshare.net/slideshow/embed_code/35562225
いい加減書かないとなーと思いつつ気づいたらこんなに時間が立っていました。 まともに書いてるととんでもない量になりそうなので、講習では要所をうまく区切ってやるつもりです(できるとは言っていない)。
コンピュータ・ネットワークってなんぞや
簡単にいえば、別々であるが相互に接続されたいくつかのコンピュータが何らかの作業を行うモデルのこと(コンピュータ・ネットワーク)。 昔はコンピュータが高価だったため、1台のコンピュータがすべてを賄うモデルが多く採用されていた。 最も知られる例として、インターネットがあげられる。 ネットワークの分類的には以下の2つの分類が重要となる。
インターネット・ハードウェア
伝送技術
- ポイント・トゥー・ポイント回線(Point to Point)
- 1対のコンピュータの間を接続し、パケット(相手に送るメッセージのようなもの)を送信する。パケットは複数のサーバーを経由する可能性があるので、最短経路を求めることが有用となる。
- ブロードキャスト回線(Broadcast)
- ネットワーク上のすべてのマシンにパケットを送信する。 それぞれのマシンはパケットを解析し、自分宛てだった場合は処理をし、そうでない場合は破棄する。 このような動作をブロードキャストという。一部のマシンにも送れる機能があるものはマルチキャストと呼ばれる。
規模
- PAN(Personal Area Network)
- 一人の人の範囲で機器の通信を可能にするネットワーク。 例として、Bluetooth、無線キーボード、マウスなどがあげられる。
- LAN(Local Area Network)
- 家庭内やオフィス、工場のような一つまたは複数の建物の中で運用される私有ネットワークである。 パソコンや家電機器などを接続し、プリンタなどの資源を共有する際に用いられる。 企業でLANが使われる時は企業ネットワーク(enterprise network)と呼ばれる。 有線LANの規格として、IEEE 802.3で標準化されているEthernetが有名である。
- MAN(Metropolitan Area Network)
- Metropolitanの文字にある通り、ひとつの都市をカバーするネットワークである。 一番の例といえば、多くの都市で使用されているケーブルテレビである。 またWiMAXももう一つのMANとして知られている。(IEEE802.16として標準化された)
- WAN(Wide Area Netowork)
- 国、大陸単位でつながる広大なネットワークである。 ISP(Internet Service Provider),NSP(Network Service Provider)などが例である。
ネットワーク・ソフトウェア
プロトコル階層
- なぜ層があるのか?
- ネットワークの複雑度を軽減させるため。層ごとに役割を分割し、他の層のことは他の層に任せるようにすることによって管理をしやすくする。
- プロトコルとは
- あるマシンの層が他のマシンの同じ層と会話をするときに用いられる決まりや慣習のこと。
- Peer(ピア)
- 異なるコンピュータ上で対応する階層を構成しているもの。 接続されているコンピュータで、同じプロトコルを用いて通信しているマシン同士のことも指す。
- 同じ層同士の通信
- ある層から対応する層へ直接通信するわけではなく、実際は直下の層にデータを渡し、最下層に届けられる。その後最下層から物理媒体を用いて相手に送られる。 隣り合う層の間にはインターフェイスと呼ばれる、下の層に対して上の層ができる操作とサービスを定義したものが存在する。
- ネットワーク・アーキテクチャ
- これらの一連のプロトコルと層の組み合わせのことを、ネットワーク・アーキテクチャと呼ぶ。
- プロトコル・スタック
- あるシステムで用いられる層ごとに存在するプロトコルリストのことをプロトコル・スタックと呼ぶ。
各層における設計上の問題点
- 信頼性
- データの誤り
- 受信した情報に誤りがないという確証はどこにもない。なぜならそれを知る手段がないからである。 これを防ぐために、誤り検出用の符号を用いて通信を行うことによって正しい情報が得られるまで取得し直すことができる。 もっと強力な場合、検出だけでなく訂正も可能となる。
- ルーティング
- 信頼性でもう一つ重要になる課題である。大抵の場合、送信元のマシンと送信先のマシンの間には複数の経路があり、大規模なネットワークとなるとどこか使えない回線があったり、ルーターが動いていない回路もあるかもしれないのである。ネットワークはこの判断を自動的に行い、現状での最短経路を見つけ出そうとする。これをルーティングという。 (ちょうど目的地までの最短ルートを教えてくれるカーナビと同じようなものである。)
- データの誤り
- ネットワークの進化
- 時間とともにネットワークは大きくなり、新しい設計が出現すると既存のネットワークと接続する必要があるかもしれない。こういう時に新しい設計だから繋げないという柔軟ではない設計だと困ってしまうので、ネットワークには柔軟な設計が求められている。その考えから出来たのは上に述べたプロトコル階層である。つまり問題となる部分を細く分割し、実装の詳細をブラックボックス化してしまうことによって解決しようとするのだ。(こんなかんじでいいのかな…?)
他にもアプローチ方法はある。いかなる層においても送信者と受信者を識別するための機構が必要となる。これを下位層ではアドレス付け、上位層では名前付けとよんでいる。
- 時間とともにネットワークは大きくなり、新しい設計が出現すると既存のネットワークと接続する必要があるかもしれない。こういう時に新しい設計だから繋げないという柔軟ではない設計だと困ってしまうので、ネットワークには柔軟な設計が求められている。その考えから出来たのは上に述べたプロトコル階層である。つまり問題となる部分を細く分割し、実装の詳細をブラックボックス化してしまうことによって解決しようとするのだ。(こんなかんじでいいのかな…?)
- 資源割り当て
- ネットワークにも当然資源があり(伝送回線の容量など)、ネットワークはホストに対して資源を提供する。ただしこれだとある特定のホストが資源を占有しすぎてしまうなどの問題点があるため、干渉し過ぎないようにする機構が必要となってくる。 多くのネットワークの設計では、とりあえずホストに帯域を割り当てる(通信するしないは別として)という方式を採用しておらず、ホストからの短い時間内での要求に対して帯域を動的に割り当てている。この設計を系統的多重化(statistical multiplexing)と呼ぶ。
- どのレベルでも起こりうる問題として、フロー制御と輻輳があげられる。 フロー制御は速い送信者が遅い受信者をデータで溢れ返してしまうという問題である。基本的には受信者から送信者へのフィードバックが解決策として用いられる。 また輻輳は、多くのコンピュータが大量のトラフィックを送信し、ネットワークが処理しきれないために定員超過を起こしてしまってることである。この場合輻輳が起きた時に要求を減らすことで解決しようとする。
- コネクション指向とコネクションレス・サービス
- サービス・プリミティブ
参照モデル
OSI参照モデル
- 物理層(Phisical Layer)
- 通信チャンネル上で生のビットデータを伝送する。
- データリンク層(Data Link Layer)
- 物理層の設備を伝送誤りのない回線に見せること(要は送るデータが間違っていないように見せること)が主な仕事である。これを満たすために送信側はデータをデータ・フレームに分割し、フレームを順に送信する。誤りが検出されなければ確認通知フレームという正しく受信したことを示すフレームを返して確認する。
- また、フロー制御が起きないようにトラフィックの制御機構も備えている。
- ネットワーク層(Network Layer)
- サブネット(大きなネットワークを小さなネットワークに分割したもの)の動作を制御する。
- 最も重要な役割として、送信元から送信先へパケットを送る経路をどのように決定するかを決めることである。
- サブネット内のパケットが多すてしまうために起こる輻輳に対処するのもネットワーク層の仕事である。
- 異なるネットワーク同士での相互接続で起こる問題(プロトコル、アドレス方式の違いなど)を解決するのも仕事の一つである。
- トランスポート層(Transport Layer)
- 上の層からデータを受け取り、適切な形にしてネットワーク層に送信し、ネットワーク層から与えられたデータを逆に上の層に正しく届くことを保証するのが主な仕事である。
- また、上の層に対して提供するサービスの種類を決定するのも仕事である。(大抵はポイント・トゥー・ポイントチャネルだが、トランスポートサービスなどいろいろある)
- セッション層(Session Layer)
- 異なるマシンのユーザー上でのセッションを設定するのが仕事である。
- セッションには、対話制御、同期、トーク管理などの様々なサービスが存在する。
- プレゼンテーション層(Presentation Layer)
- 下位層とは異なり、この層では転送される情報の文法、意味を取り扱う。
マシンごとに異なるデータ構造を回線上での標準的な符号化方式と一緒に定義する。
- アプリケーション層(Application Layer)
ネットワークの利用者から一般的に必要とされているプロトコルを複数提供する。最も広く用いられているアプリケーション・プロトコルの一つは、HTTP(HyperText Transfer Protocol)である。
TCP/IP参照モデル
- リンク層(Link Layer)
- インターネット層(Internet Layer)
- トランスポート層(Transport Layer)
- アプリケーション層(Application Layer)
Ethernet
- IEEE802.3で標準化されている、有線LANの規格として今のところ最も使われている規格である。Ethernetにはクラシック・イーサネット(Classic Ethernet)とスイッチ式イーサネット(Switched Ethernet)の2種類がある。どちらの場合もCSMA/CDと呼ばれるケーブル内でのデータの衝突を防ぐ方式を採用している。
- クラシック・イーサネット(Classic Ethernet)
- 1本の長いケーブルが建物銃を這いまわり、すべてのコンピュータを接続するタイプ。1つのケーブルで遅れるデータの長さの上限は決まっているのでこれより長くする際はリピータと呼ばれるものを使って信号を増幅する。
- スイッチ式イーサネット(Switched Ethernet)
- LANの飽和を防ぐために考案された。このシステムは全てのポートをつなぐ高速なバックプレーンを有するスイッチがあるという点で異なる。
- スイッチの中ではフレームの宛先であるポートにしかフレームを出力しない。
IP(Internet Protocol)
- TCP/IPモデルにおいて、インターネット層で用いられる公式のプロトコルである。
- 主たる目的は、IPアドレスと呼ばれる識別用の番号を元に送信先へIPパケットを到達させることである。
ICMP(Internet Control Message Protocol)
- ICMPはIPの機能を助けるためのプロトコルである。英語の通り、ルーターの処理で何か問題、想定外の事が起こった場合にこのプロトコルに通知される。
- インターネットのテストにも用いられるため、pingコマンドやtracerouteコマンドに利用されている
- メッセージは12種類ある。全部説明するのはだるいので一部の種類名だけ書く。割りと名前だけで推測できるものも多い(…はず)。
- DESTINATION UNREACHABLE
- TIME EXCEEDED
- PARAMETER PROBLEM
- SOURCE QUENCH
- REDIRECT
- ECHO
- TIMESTAMP REQUEST
- ROUTER ADVERTISEMENT
ARP(Address Resolution Protocol)
- イーサネット上で特定のIPアドレスを誰が持っているのかを尋ね(ブロードキャスト・パケットによって行われる)、そのIPアドレスに該当するホストが返答することによってホストのイーサネットアドレス(要はMACアドレス。NICなどに固有番号として書かれてあるあれである)を解決するプロトコルである。
- MACアドレスからIPアドレスを解決することもあり、その場合はRARP(Reverse Address Resolution Protocol)と呼ばれる。
TCP(Transmission Control Protocol)
- トランスポート層のプロトコルである。
- 低信頼相互ネットワーク上で、高信頼エンド・エンドのバイトストリームを提供するように設計されたプロトコルである。要はユーザーが要求するデータの正確性、順序正しく揃っているかどうか、ネットワークが混雑してないかを検出し、正しく届くように制御するプロトコルである。
- TCPサービスは送信者と受信者との間でソケットと呼ばれるエンド・ポイントを作成して使用する。ソケットはホストのIPアドレスとポート(port)と呼ばれるローカルな16bitのソケット番号を持っている。通信を行うにはソケット間でコネクションを明示的に行う必要がある。
- ソケットには複数のコネクションを収容することができ、重複するから複数との通信はできないというのはない。
- また、portの1024番以下のポート番号に関しては標準的なサービス用に予約されており、これをウェルノウンポート(Well-Known Port)という。それらのポートは基本的に特権ユーザー(UNIXでいうroot)によって起動される。
Well-Known PortはIANA(Internet Assigned Numbers Authority)が管理、公開しており、www.iana.orgで公開されている。
UDP(User Datagram Protocol)
- これもトランスポート層のプロトコルである。
- TCPとは異なり、コネクションの確立を必要とせず、データグラムと呼ばれるデータ単位(厳密にはカプセル化されたIPデータグラム)を送信する手段を提供する。
- あくまで送信手段を提供するだけなので、TCPみたいに再送、再構成などの面倒は見てくれない。それを行うのはアプリケーション層の仕事になる。
- その単純さ故に、Client-Serverの通信環境等で用いられる。
DNS(Domain Name System)
多くの人によっては覚えにくいであろうIPアドレス(例えば173.194.38.68など)を対応する名前に相互変換する機構である。
- 巨大な名前空間を管理するために、トップレベルドメイン(Top Level Domain)と呼ばれるいわば住所のような階層的なアドレス付けを採用している。これはICANN(Internet Corporation for Assinged Names and Numbers)という組織によって管理されている。
BIND
- インターネットで最も利用されているDNSサーバであり、UNIX系列のシステムにおいては特にその傾向が強い。
DHCP(Dynamic Host Configureation Protocol)
- ホストが自身のIPアドレスなどを取得する必要がある場合に、一時的に必要な基本情報を自動的に割り当てるプロトコルである。
- 基本的には、IPアドレスが割り当てられていない状態でIPアドレスの要求をブロードバンドキャストし、これを受け取ったサーバーが開いてるIPアドレスを割り当ててホストに返すという動作を行う。
- IPアドレスは一定の期間しか使用できず、この仕組をリース(Leasing)と呼ぶ。ホストはリースが失われる前にサーバーにDHCPの更新要求を行わなければならず、できなかった場合は使い続けることができなくなる。
Routing
- 送信元から送信先への複数個存在する経路のうち、最適な経路を自動的に選択すること。
AS
- 巨大なネットワークを複数個に分割した時、ある1つまたは複数のルーティングポリシー(経路制御)の下にあるネットワークまたはルーターの集合体のこと。
- 例) ISP(Internet Service Provider)
EGP
- AS間での経路情報の交換のために使用されていたルーティングプロトコルである。
- EGPとBGPを総称してEGPsと呼ぶ。
IGP
- EGPsではAS間の経路情報の交換のためのプロトコルなのに対し、IGPではAS内の経路情報の交換を行うルーティングプロトコルである。
BGP
- EGPと同様にAS同士での経路情報の交換のために使われるルーティングプロトコルである。
- 現在ではBGPが主に使用されている。