TCP/IP
一言でいうと
TCP/IPはコンピュータネットワークの共通言語
CCENT試験でのポイント
- OSI参照モデルとTCP/IPの階層の対応付けを把握しておきましょう。
- 代表的なプロトコルの特徴と仕組みを説明できるようにしましょう。
トランスポート層のプロトコル
ポート番号
ポート番号とは、TCP/IPのアプリケーションを識別するための識別番号で、このあと解説するTCPまたはUDPヘッダに記述されています。ポート番号によって、どのアプリケーションのデータであるかを識別して、適切なアプリケーションへデータを振り分けます。
ポート番号は16ビットの数値であるため、取り得る範囲は0~65535です。また、表1のように範囲で意味が決められています。
名称 | ポート番号の範囲 | 意味 |
---|---|---|
ウェルノウンポート | 0~1023 | サーバアプリケーション用に予約されているポート番号 |
登録済みポート | 1024~49151 | よく利用されるアプリケーションのサーバ側のポート番号 |
ダイナミック/プライベートポート | 49152~65535 | クライアントアプリケーション用のポート番号 |
ウェルノウンポート番号
特に重要なのがウェルノウンポート番号です[1]。ウェルノウンポート番号は、あらかじめ決められています。サーバアプリケーションを起動すると、ウェルノウンポート番号でクライアントアプリケーションからの要求を待ち受けます。たとえば、Webサーバアプリケーションは、アプリケーションプロトコルとしてHTTPを利用します。HTTPのウェルノウンポート番号は80なので、Webサーバアプリケーションはポート番号80で、Webブラウザからの要求を待ち受けることになります[2]。
主なアプリケーションプロトコルのウェルノウンポート番号は、表2のようになります。
プロトコル | TCP | UDP |
---|---|---|
HTTP | 80 | - |
HTTPS | 443 | - |
SMTP | 25 | - |
POP3 | 110 | - |
IMAP4 | 143 | - |
DNS | 53 | 53 |
FTP | 20/21 | - |
DHCP | - | 67/68 |
Telnet | 23 | - |
注
[1]: CCENT/CCNA試験ではウェルノウンポート番号はとても重要です。表2に掲げた主なウェルノウンポート番号は、しっかりと覚えておいてください。
[2]: サーバアプリケーションの設定で待ち受けるポート番号を、ウェルノウンポート番号以外にすることも可能です。ただし、そのような設定を行うことは稀です。
登録済みポートは、ウェルノウンポート番号以外でよく利用されるサーバアプリケーションを識別するためのポート番号です。登録済みポートもあらかじめ決められています。たとえば、リモートからPCなどの操作を行うリモートデスクトップは、ポート番号3389を利用します。
ダイナミック/プライベートポート
ダイナミック/プライベートポートは、クライアントアプリケーションを識別するためのポート番号です。ウェルノウンポートや登録済みポートと異なり、あらかじめ決められているわけではありません。クライアントアプリケーションが通信するときに、ダイナミックに割り当てられます。また、Webブラウザなら、ブラウザのタブやウィンドウごとに異なるポート番号が自動的に割り当てられます。これにより、Webブラウザのタブやウィンドウを識別できるようにしています。
TCP
TCPは、信頼性のあるアプリケーション間のデータの送受信を行うためのプロトコルです。また、TCPは「TCP/IP」の名前に含まれているように、TCP/IPの数々のプロトコルの中で、IPと並んで最重要プロトコルの1つになっています。
TCPを利用したアプリケーション間のデータの送受信は、次のような手順で行われます。
- 1. TCPコネクションの確立
- まず、データを送受信するアプリケーションの間で正常な通信が可能かどうかを確認します。この確認のプロセスは3ウェイハンドシェイクと呼ばれます。TCPコネクションの確立は、アプリケーション間で仮想的な直通の通信回線を確保しているようなイメージで考えてください。
- 2. アプリケーション間のデータの送受信
- アプリケーションが扱うデータをTCPで送信するためには、アプリケーションのデータにTCPヘッダを付加します。アプリケーションのデータにTCPヘッダを付加したものを、TCPセグメントと表現することがあります。このとき、アプリケーションのデータサイズが大きければ分割して、複数のTCPセグメントとして転送します[3]。どのように分割したかはTCPヘッダに記述にしており、宛先で元のデータに正しく組み立てられるようにしています。
- データを受け取ったらその確認を行います。データの受信確認のことをACKと呼んでいます[4]。届いていないデータがあると分かれば、そのデータを再送します。また、ネットワークの混雑を検出すると[5]、データの送信速度を抑えます。このようなデータの転送の仕組みをフロー制御と呼びます。
- 3. TCPコネクションの切断
- アプリケーションのデータの転送がすべて終了すれば、TCPコネクションを切断します。これにより、サーバおよびクライアントホストのCPUやメモリの利用を解放します。
注
[3]: TCPでアプリケーションのデータを分割する単位を「MSS」(Maximum Segment Size)と呼びます。MSSの標準的な値は1460バイトです。
[4]: TCPでは複数のセグメントを一度に送信することで、転送の効率を高めています。一度に受信可能なTCPセグメントのサイズを「ウィンドウサイズ」と呼びます。受信確認のACKを待たずに、ウィンドウサイズ分のTCPセグメントを一括して送信できます。
[5]: TCPでは、TCPセグメントが届かなかったらネットワークが混雑しているとみなします。ネットワークが混雑しているために、途中でTCPセグメントが破棄されてしまい、相手に届かなかったと考えています。
このような手順で、TCPは、アプリケーション間のデータ送受信を確実に行うようにしています。こうした制御を行うために、アプリケーションのデータに付加されているのがTCPヘッダです。TCPヘッダのフォーマットは次図のとおりです。
図3で示したTCPヘッダフォーマットのうち、特に重要な情報だけ簡単に補足しておきましょう。最も重要な情報は送信元/宛先ポート番号です。本文で述べたように、TCPではポート番号によって、データを適切なアプリケーションへ振り分けています。そして、データの分割や組み立て、確認に関わっているのがシーケンス番号とACK番号です。また、ウィンドウサイズは一度に受信できるTCPセグメントサイズを表し、フロー制御に利用します。