TCP/IPとは?


TCP/IP

インターネットプログラムが通信をするにあたって、HTTP、SFTP、FTP など様々なプロトコルがあります。 インターネットプロトコルで最も多く使用される代表的なプロトコルは、皆さんご存知の通り IP です。 ここで重要なことはTCPIPは階層ではなくプロトコルであることです。
TCPIPは OSI7 階層とは少し異なるTCPIPの構造的な階層の上で動作します。


tcp/ip
OSI7 階層とは少し異なる様子です。
階層の個数も違って OSI は 7 階層であるのに対し、TCPIP 階層は 4 階層全てであることが分かります。


1. ネットワークインタフェース階層 (Network Interface Layer)

この階層は、Node-To-Node 間の信頼性のあるデータ伝送を担う階層です。
OSI7 階層の物理階層とデータリンク階層の役割を、同ネットワークインタフェース階層が担っています。
したがって、MAC アドレスがこの階層で使用されます。
ネットワークインタフェース階層がデータリンク階層まで担当するので、MAC アドレスが使用されます。
LANカード
上の装備はランカードです。 正確な名称は 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 といいます。