第2章TCP/IP基礎知識
TCP/IPの登場の背景とその歴史
アメリカ国防総省(DoD:The Department of Defense)が中心となって進められたARPANET(Advanced Research Projects Agency Network)でパケットによるデータ通信手法が実装された。
ISP(Internet Service Provider)の普及で企業や一般家庭にインターネットが普及。
TCP/IPの標準化
TCP/IPはTCPとIPという2つのプロトコルだけでなく、IPを利用したりIPで通信したりする時に必要となる多くのプロトコル群の総称として使われる。
TCP/IPはインターネットプロトコルスイートとも呼ばれる。
IETF(Internet Engineering Task Force)の議論を通して決められ、誰でも参加できるメーリングリスト上で行われる。
議論や仕様書、プロトコルの実装や運用の情報はRFC(Request For Comments)で公開されている。
RFCの内容は変更できず、新しい番号のRFCで定義する必要がある。
インターネットドラフト=>RFC=>提案標準=>標準の流れで標準化される。
仕様よりも実装が先の姿勢から、実装を念頭に置いていたため実用性の高いプロトコルが実現できた。
インターネットの基礎知識
ネットワークはNOC(network Operation Center)で接続される。
ネットワークの運用者や運用方針、運用方針が異なるネットワークを対等に接続するポイントをIX(Internet Exchange)と呼ばれる。
TCP/IPプロトコルの階層モデル
ハードウェア(物理層)
イーサネットや電話回線など。
ネットワークインターフェース層(データリンク層)
イーサネットなどのデータリンクを利用し通信するためのインターフェースとなる階層
NICを動かすためのデバイスドライバ
インターネット層(ネットワーク層)
インターネットそうとトランスポート層がホストのOSに組み込まれることを想定。
インターネットに接続される全てのホストやルーターは必ずIPの機能を実装しなければならない。
IP(Internet Protocol)
ネットワークをまたいでパケットを配送し、インターネット全体にパケットを送り届けるためのプロトコル
それぞれのホストの識別にはIPアドレスを用いる。
データリンクを隠す役割もある。
パケットが相手に到達しなかった場合のパケット再送は行わない。
ICMP(Internet Control Message Protocol)
IPパケットの配送中に何らかの異常が発生してパケットが転送できなくなった場合にパケットの送信元に異常を知らせるプロトコル。
ARP(Address Resolution Protocol)
パケットの送り先の物理歴なアドレスであるMACアドレスをIPアドレスから取得するプロトコル。
トランスポート層
最も重要な役割はアプリケーションプログラム間の通信を実現すること。
アプリケーションの識別にはポート番号が使われる。
TCP(Transmission Control Protocol)
仮に経路の途中でパケットを喪失したり順番が入れ替わってもTCPが正しく解決する。
ネットワークの帯域幅を有効にしたりネットワークの混雑を和らげる仕組みがある。
コネクションの確率/切断だけでパケットを約7回やりとりするので、転送データ量が少ない場合は無駄が多い。
一定間隔で決められた量のデータを転送する通信には向かない。
UDP(User Datagram Protocol)
パケットが相手に届いたかどうかや、相手のコンピュータがちゃんとネットワークに接続されているかのチェックはアプリケーションのプログラムが行う必要がある。
パケット数が少ない通信やブロードキャストやマルチキャストの通信、ビデオや音声などのマルチメディア通信に向いている。
アプリケーション層(セッション層)
WWW(World Wide Web)
ブラウザとサーバー間の通信で使われるプロトコルがHTTP(HyperText Transfer Protocol)で、送信に使われる主なデータフォーマットがHTML(HyperText Markup Language)。
電子メール(E-Mail)
SMTP(Simple Mail Transfer Protocol)が利用されている。
当初はテキスト形式でしかメッセージを送信できなかったが、MIME(Multipurpose Internet Mail Extensions)というデータ形式を拡張する仕様が一般的になり、映像や音声のファイルなど様々な情報を送れるようになった。
ファイル転送(FTP:File transfer Protocol)
異なるコンピュータのハードディスク上に存在するファイルを自分のコンピュータのハードディスクに転送したり、自分のコンピュータのファイルを別のコンピュータに写したりすること。
バイナリモードやテキストモードが選べる。
ファイル転送の指示をするための制御コネクションとデータ転送をするためのデータコネクションの2つのTCPコネクションを確率する。
遠隔ログイン(TELNETとSSH)
他にもBSD UNIX系のrloginなどのrコマンド系のプロトコルも利用される。
ネットワーク管理(SNMP:Simple Network Management Protocol)
SNMPで管理されるルーターやブリッジ、ホストなどはエージェントと呼ばれ、ネットワーク機器を管理するプログラムをマネージャーと呼ぶ。
SNMPはエージェントとマネージャの通信に使われるプロトコル。
SNMPのエージェントが格納した様々な情報はMIB(Management Information Base)という構造でアクセスできる。
TCP/IPの階層モデルと通信例
パケットヘッダ
各階層では送信されるデータにヘッダと呼ばれる、送信元のや宛先の情報、そのプロトコルが運んでいるデータに関する情報が入っている。
下位層から見れば、上位層から受け取るものは全て単なる一つのデータとして認識される。
パケットの送信処理(電子メール)
アプリケーションの処理
符号化処理
TCPにコネクションの確立を指示する。
TCPモジュールの処理
アプリケーションから渡されたデータにTCPヘッダを付与する。
送信ホストと受信ホストのアプリケーションを識別するためのポート番号、そのパケットのデータが何バイト目かを表すシーケンス番号、データが壊れていないことを保証するチェックサムが含まれている。
IPモジュールの処理
TCPヘッダの前にIPヘッダを付与する。
宛先のIPアドレスと送信元のIPアドレス、IPヘッダの次に続くデータがTCPかUDPかが含まれる。
IPパケット完成後、経路制御表を参照しIPパケットを次に受けた渡すルーターやホストを決定する。
その機器が接続されているネットワークインターフェースのドライバにIPパケットを渡して実際の送信処理をしてもらう。
通信先の機器のMACアドレスが不明な場合はARPを利用してMACアドレスを調べる。
ネットワークインターフェース(イーサネットドライバの例)
イーサネットのヘッダにはMACアドレスと送信元のMACアドレス、そしてイーサネットのヘッダに続くデータのプロトコルを示すイーサネットタイプがヘッダに書き込まれる。
送信処理中にFCS(Frame check Sequence)がハードウェアで計算されパケットの最後に取り付けられる。
パケットの受信処理
ネットワークインターフェース(イーサネットドライバー)の処理
イーサネットヘッダの宛先MACアドレスが自分宛かどうかを調べ、自分宛でなければパケットを捨てる。
パケットが自分宛ならイーサネットタイプフィールドを調べて、イーサネットプロトコルが運んでいるデータの種類を調べる。
IPモジュールの処理
宛先IPアドレスが自分のホストのIPアドレスであればそのまま受信して上位層のプロトコルを調べる。
TCPならTCPの処理ルーチンに、UDPならUDPの処理ルーチンにIPヘッダを取り除いたデータを送る。
ルーターの場合は受信するIPパケットの宛先はほとんど自分宛ではなうので、経路制御表から次に送るホストやルーターを調べて転送処理を行う。
TCPモジュールの処理
チェックサムを計算してヘッダやデータが壊れていないか確認し、データが順番通りに受信しているかを確認。
ポート番号を調べて通信を行なっているアプリケーションを特定。
データが正しく届いていれば、送信ホストに対してデータが届いたことを確認するための確認応答を返す。送信したホストに届かない場合は送信ホストは確認応答されるまでデータを繰り返し受信する。
アプリケーションの処理
データを受信したらハードディスクなどにメッセージを格納。
電子メールの全てのメッセージを格納したら、処理が正常に終了したことを送信元のアプリケーションに伝える。
しかし途中でディスク容量不足などでメッセージを格納できない場合は異常終了メッセージを送信する。