TCP/IPの階層モデルのアプリケーション層について、もう少し詳しく学習していきます。
また、TCP/IPの通信例を元に、パケットの処理について学んでいきましょう。
データベースに関する基本知識とSELECT文の基本
1. TCP/IPの階層モデル
1-1. アプリケーション層(セッション層以上の位置)
OSI参照モデルのセッション層やプレゼンテーション層・アプリケーション層になります。
TCP/IPの階層モデルでは、OSI参照モデルの上記3つの層は、すべてアプリケーションプログラムの中で実装されていると考えられています。
TCP/IPのアプリケーションの多くは、クライアント/サーバーモデルで作られています。
サービス提供側がサーバー、サービスを受ける側がクライアントです。
サーバープログラムは、いつでもクライアントの要求に応えられるように、あらかじめホスト上で動作させるようにしておかなければなりません。
クライアントはいつでもサービスを要求することができます。
1-2. WWW
・WWW(World Wide Web)…
インターネットでやり取りする仕組みのことです。
ユーザーはWebブラウザと呼ばれるソフトウェアを通して、ネットワークの中を色々見ることができます。
マウスの操作だけで、サーバーにある情報が画面に表示されるのです。
ブラウザの中では、文字や絵、アニメーションなどが表示できたりします。
ブラウザとサーバーの間の通信で使われるプロトコルがHTTP(HyperText Transfer Protocol)です。
送信に使われる主なデータフォーマットが、HTML(HyperText Markup Language)です。
WWWでは、HTTPがOSI参照モデルのアプリケーション層のプロトコルと、HTMLがプレゼンテーション層のプロトコルと言えるでしょう。
・電子メール(EーMail)…
電子メールのやりとりには、SMTP(Simple Mail Transfer Protocol)というプロトコルが利用されています。
当初の電子メールはテキスト形式でしかメッセージを送信できませんでした。
現在は、データ形式で拡張するMIMEの仕様が一般的になり、メールでの文字のサイズ変更、色の変更などもできるようになりました。
・MIME…
マイムとも呼ばれていて、インターネットで幅広く使えるようにメールのデータ形式を拡張したものです。
1-3. FTP
・ファイル転送(FTP)…
サーバーとクライアント間でのファイルの送受信をするときのプロトコルです。
FTPを使用することで、異なるコンピュータのハードディスク上に存在するファイルを自分のコンピュータのハードディスクに転送したり、あるいは、自分のコンピュータのファイルを別のコンピュータへ移したりすることができるようになります。
また、FTPはWEBサイトの公開や、作成したHTMLなどのファイルをサーバーにアップロードするときや更新するときにも使用されます。
FTPは、通信経路が暗号化されていないため、セキュリティ面での脆弱性が懸念されます。
最近ではFTPに、セキュリティを加えたSFTP(SSH File Transfer Protocol)などの通信を暗号化する手段を用いることが主流になってきています。
1-4. 遠隔ログイン(TELNETとSSH)
遠隔ログインとは、ある場所に設置されたコンピュータやネットワークに、遠隔地にある別のコンピュータなどから接続し、使用できるようにするための機能です。
TCP/IPネットワークでは、遠隔ログインではTELNETプロトコルやSSHプロトコルがよく用いられています。
他にもBSD UNIX系のrloginなどのrコマンド系のプロトコルやX Windows Systemで利用されるXプロトコルは、遠隔のグラフィック端末を実現するプロトコルです。
1-5. ネットワーク管理(SNMP)
ネットワーク管理のイメージ図
TCP/IPでは、IPネットワーク上の機器をネットワーク経由で監視・制御するためにSNMP(Simple Network Management Protocol)というプロトコルが利用されています。
組織内の校内ネットワーク(LAN)の管理でよく用いられています。
ルーターやブリッジ、ホストなどは、エージェントと呼ばれています。
また、ネットワーク機器を管理しているプログラムをマネージャと呼びます。
エージェントとマネージャの通信に使われるのがSNMPです。
SNMPのエージェントでは、パケットの量や機器の温度の情報、ネットワークインタフェースの情報など、さまざまな情報が格納されており、MIB(Management Information Base)という決められた構造によってアクセスすることができます。
ネットワークの管理はネットワークが大きくなればなるほど重要になってきますので、SNMPを利用してネットワークの情報をチェックし、ネットワークの混雑具合や障害の発見などの確認等、将来のネットワーク拡張がある場合にも役立てていきましょう。
2. TCP/IPの階層モデルと通信例
TCP/IPを使うときの、アプリケーション層から物理媒体までのデータの処理の流れについて学習していきましょう。
TCP/IPの階層モデルについて一度復習しておきましょう。
下記がTCP/IPでの通信プログラムに必要なモデルになります。
TCP/IPの階層モデル
2-1. パケットヘッダ
・パケットヘッダの階層化
各階層では、データ送信に必要な情報をヘッダと呼ばれるものに組み込み、送信します。
送信元や宛先の情報、プロトコルが運んでいるデータの情報が入っています。
下位層からすれば、上位層から受け取るものはデータとして認識されることになります。
パケットのヘッダには、そのプロトコルがどんなやり取りをするのか明確に表されています。
・データを表す単位
・パケット…何でも使えるオールマイティな用語です。
・フレーム…データリンクのパケットを表すときに使用します。
・データグラム…IP7やUDPなどのネットワーク層以上でパケット単位でのデータ構造を持つプロトコルで使用されます。
・セグメント…ストリームベースでのTCPに含まれるデータを表す時に使用します。
・メッセージ…アプリケーションプロトコルのデータ単位を表す時に使用します。
2-2. 【パケットの送信処理】
TCP/IPの通信例を電子メールを利用して「おはようございます」と送ったときのやり取りについて、学んでいきましょう。
2-3. ①アプリケーションの処理
アプリケーションプログラムを動かしメールを作成します。
メールソフトを起動、メール受取人を指定、「おはようございます」と入力し、送信ボタンを押すとTCP/IPによる通信が開始されます。
まずは、アプリケーションプログラムで符号化処理が行われます。メールを送信するときにTCPにコネクションの確立を指示します。確立されたらデータの送信が行われます。
そして、アプリケーションのデータが下位層のTCPに渡され、実際の転送処理が行われます。
送受信処理の流れとしては、送信時にヘッダ付与、受信時にヘッダの解析をして、相手にデータを届けられるようにしています。
・送信処理は、トランスポート層でTCPヘッダ、インターネットイン層でIPヘッダ、ネットワークインターフェース層でイーサネットヘッダが付与されます。
・受信処理は、ネットワーク層でイーサネットヘッダを解析(自分宛MACアドレスであることを認識・上位IPがあることを認識)、インターネット層でIPアドレスを解析(上位がTCPであることを認識)、トランスポート層でTCPヘッダを解析しています。
2-4. ②TCPモジュールの処理
TCPは、アプリケーションの指示により、コネクションを確立したり、データを送信したり、コネクションを切断したりします。
データを確実に送信するために信頼性のあるデータ転送をします。
TCPはアプリケーションから渡されたデータの前にヘッダが付けられます。
そのヘッダには、アプリケーションを識別するためのポート番号、そのパケットのデータが何バイト目のデータなのかを示すシーケンス番号、データが破損していないことを保証するチェックサムなどが含まれます。
その情報をデータとしてIPに送ります。
2-5. ③IPモジュールの処理
IPでは、TCPヘッダの前にIPヘッダが付けられます。
つまり、IPヘッダ、TCPヘッダ、データと続きます。
IPパケットが完成したら、経路制御表(ルーティングテーブル)を参照して、IPパケットを次に受け渡す先(機器)を決定します。
その機器が接続されているネットワークインターフェースのドライバにIPパケットを渡して、送信処理をしてもらいます。
通信先のMACアドレスが分からないときは、ARP(Address Resolution Protocol)を利用してMACアドレスを調べることができます。
MACアドレスとIPパケットをイーサネットドライバに渡して送信処理をしてもらいます。
2-6. ④ネットワークインターフェース(イーサネットドライバ)の処理
IPから渡されたデータに、イーサネットのヘッダを付けて送信処理が行われます。
イーサネットのヘッダには、宛先のMACアドレスと送信元のMACアドレス、そして、イーサネットのヘッダに続くデータがイーサネットパケットとして物理層へ送られ、相手先に運ばれます。
送信処理の際に、FCS(Frame Check Sequence)がハードウェアで計算され、パケットの最後に付与されます。
FCSの役割としては、ノイズなどによるパケットが破壊されたことを検出できるようになっています。
2-7. データリンクを流れるパケット
データリンク層では、隣接機器を特定するために、MACアドレスなどの物理アドレスを利用してどこからどこに伝送するデータなのか通信経路を判断します。
パケットが流れるときに、先頭にイーサネットのヘッダ、そのあとにIPヘッダ、さらにTCPまたはUDPヘッダ、その後ろにアプリケーションのヘッダやデータが続きます。
そして一番最後にイーサネットトレーラがつきます。
※ヘッダが先頭につくのに対して、トレーラは最後につきます。
ヘッダの情報には2種類の情報が入っています。
・宛先と送信元のアドレス
・上位層のプロトコルがなにを示す情報なのか
プロトコルの階層ごとに、パケットを送受信するホストやプログラムを識別する情報が決められています。
イーサネットではMACアドレス、IPではIPアドレスが利用されます。
TCP/UDPでは、ポート番号の識別子が利用されます。
アプリケーションでも電子メールのメールアドレスのように、アドレスが使われることもあります。
アドレスや識別子はパケット送信時に各階層のヘッダに格納されて送信されます。
また、それぞれヘッダにはデータが何なのかを示す識別子がついており、上位層のプロトコルの種類を表しています。
3. 【パケットの受信処理】
受け取ったホストでの処理と送信ホストは逆になります。
3-1. ⑤ネットワークインターフェース(イーサネットドライバ)の処理
イーサネットからパケットを受け取ったホストはMACアドレスを調べて、自分宛だと受け取り、自分宛でないときにはパケットを捨てます。
自分宛の場合は、イーサネットタイプを調べて、データの種類を調べます。
今回の例でいうと、IPを処理するルーチンにデータを渡します。処理できないプロトコルの値であればデータを捨てます。
3-2. ⑥IPモジュールの処理
IPアドレスが自分宛であればそのまま受け取り上位層のプロトコルを調べます。
TCPならばTCPの処理ルーチンに、UDPならUDPの処理ルーチンにIPヘッダを除いたデータの部分を送ります。
ルーターの場合は、受信するIPパケットの宛先は、ほとんど自分宛ではないので、その場合は、経路制御表から次に送るホストやルーターを調べて転送処理を行います。
3-3. ⑦TCPモジュールの処理
TCPでは、チェックサムを計算してヘッダやデータが破損していないか確認します。
データの順番の確認やポート番号から通信を行っているアプリケーションを特定します。
データがきちんと届いたら、確認応答を返します。
データが届かない場合には、確認応答があるまでデータを繰り返し送信します。
3-4. ⑧アプリケーションの処理
受信側のアプリケーションは、送信側の送信したデータをそのまま受信することになります。
受信したデータを解析し、自分宛のメールであることを知り、無事にメッセージを格納し、正常に処理が終了したら、送信元のアプリケーションに伝えます。
パケットの処理を経て、受信側もディスプレイ上でメッセージを確認できるようになります。
4. まとめ
送信側と受信側でまったく逆の動きをしていることが分かりました。
また、それぞれの層でのヘッダの役割についても理解を深めることができました。
私たちが普段メールの送受信をしている裏側を少しだけ知れた気がして嬉しいです。
もっとネットワークについての知識を深めていきたいです。