TCP/IP
インターネットプログラムが通信をするにあたって、HTTP、SFTP、FTPなど様々なプロトコルがあります。 インターネットプロトコルで最も多く使用される代表的なプロトコルは、皆さんご存知の通りIPです。 ここで重要なことはTCPIP
は階層ではなくプロトコルであることです。TCPIP
はOSI7 階層とは少し異なるTCPIP
の構造的な階層の上で動作します。
OSI7階層とは少し異なる様子です。
階層の個数も違って OSI は7 階層であるのに対し、TCPIP 階層は4階層全てであることが分かります。
1. ネットワークインタフェース階層 (Network Interface Layer)
この階層は、Node-To-Node間の信頼性のあるデータ伝送を担う階層です。
OSI7階層の物理階層とデータリンク階層の役割を、同ネットワークインタフェース階層が担っています。
したがって、MACアドレスがこの階層で使用されます。
ネットワークインタフェース階層がデータリンク階層まで担当するので、MACアドレスが使用されます。
上の装備はランカードです。 正確な名称はNICといいNetwork Interface Card
です。
LANカードがないとネットワーク通信はできません。ネットワークインタフェース階層で動作するデバイスです。
LAN上ではEthernet、TokenRing、FDDIなどがあり、WAN上ではX.25、FrameRelay、PPPなどがあります。
2. インターネット階層 (Internet Layer)
OSI7階層のネットワーク階層を担う階層です。 OSI7階層のようにホスト間のルーティングを担当することになります。
インターネット階層で動作するプロトコルは以下の通りです。
IP(Internet Protocol):非信頼性、非連結指向データグラムプロトコル
ARP(Address Resolution Protocol):アドレス変換プロトコルです。 IPアドレスをMACアドレスに変換するプロトコル
RARP(Reverse ARP):逆にMACアドレスでIPアドレスを探すプロトコル
ICMP(Internet Control Message Protocol):状態診断メッセージプロトコル。 このプロトコルを利用する代表的なプログラムがping
IGMP(Internet Group Message Protocol):マルチキャスト用プロトコル
3. 伝送階層 (Transport Layer)
OSI7階層の伝送階層と同じです。 プロセス間の信頼性のあるデータ伝送を担う階層です。
process-to-process転送を担当するためには論理的アドレスが必要ですが、processが使用するポート番号をその論理的アドレスとして使います。
転送階層で動作するプロトコルは下記の通りです。
TCP (Transmission Control Protocol):信頼性のある接続指向型プロトコル。 信頼性があるというのは、そのペケットのエラー処理や再送信などでエラーを復旧することです。 そのためTCPのヘッダーに付く情報が多いです。
UDP (User Datagram Protocol):非信頼性非接続型プロトコルです。 ペケットを失ったりエラーがあっても対処しないことです。 したがって、UDPヘッダーは簡単な構造を持っています。
4. 応用階層 (Application Layer)
ユーザーと最も近い階層です。 OSI7階層の5階層から7階層までの機能を担っています。
サーバやクライアントアプリケーションがこの階層で動作します。 私たちが知っているブラウザやテルネットのようなサービスがこの階層で動作し、動作するためには転送階層のアドレス、つまりポート番号を使用します。 例えば、httpが88番ポートを使用することと同じです。
応用階層で動作するプロトコルは以下の通りです。
HTTP(Hyper-Text Transfer Protocol):TCPベースのプロトコルでポート番号80番を使用
Telnet :TCP ポート番号23番を使用します。 遠隔ターミナルを接続する際にこのプロトコルを使用
SSH(Secure Shell):テルネットのようなサービスはセキュリティに脆弱。 パスワードが暗号化されていないため、そのまま表示されます。 これを補完したものがSSHです。 ポート番号22番を使用します。 SFTP のようなプロトコルも22 番ポートで主要使用します。
FTP(File Transfer Protocol): ファイル転送プロトコル。 ファイルのダウンロードやアップロードにFTPを使用。 FTPは、ファイルのアップロードやダウンロードの際、信頼性を重要視するため、TCPで動作します。 2 つのポートを使用します。
TCPポート20番はデータ転送のための用途、TCPポート21番は制御用として使用します。
SMTP (Simple Mail Transfer Protocol):メール転送プロトコルです。 TCP 上で動作し、ポートは 25 番を使用します。
POP3(Post Office Protocol Version 3):メール受信用プロトコルです。 アウトルックのようなプログラムはPOP3というプロトコルを使って動作します。 TCP ポート110番を使用します。
DNS (Domain Name System):ドメイン名に対するホスト情報を提供します。 基本的にUDP 上で動作します。 基本的に失敗したらもう一度要請すればいいですし、それほど重要な情報ではないからです。 しかし、信頼性を要する場合にはTCP上でも動作します。 データが長い場合、同じ時にTCPベースで動作できます。
UDP、TCP ポート53番を使用します。
このように、ポート番号が特定のプロトコルが使用していては使えないポートがあります。 このようなポートをwell-known portといいます。