【TCPの機能(概要、ヘッダ、ポート番号)について】

このHPはTCPの機能(概要、ヘッダ、ポート番号)についてまとめたものです。



1-1 TCPとは


TCPは、トランスポート層で動作するコネクション型のプロトコルで、信頼性の高い接続を上位レイヤに提供する。トランスポート層には、「TCP」と「UDP」という2つのプロトコルがあり、TCPは「信頼性」を、UDPは「速度」を重視したプロトコル。


TCPでは信頼性を提供するために、「順序制御」や「再送制御」を行う。また、「フロー制御」や「輻輳回避制御」、NWの利用効率を向上させる仕組みなど、数多くの機能を持つ。




◆ソケット

アプリケーションから「TCP」や「UDP」を利用する時には、OSが用意しているライブラリを利用する。このライブラリを「API」と呼び、「TCP」や「UDP」を利用して通信するときは、「ソケット」と呼ばれるAPIが広く使用される。アプリケーションはソケットを利用して、通信相手のIPアドレス/ポート番号を設定したり、データの送受信の要求をする。










1-2 TCPヘッダフォーマット


TCPのセグメントフォーマットを示す。TCPのヘッダはUDPに比べてかなり複雑になっている。それぞれのフィールドについて説明する。







◆送信元ポート番号【16ビット】
 送信元のポート番号。


◆宛先ポート番号【16ビット】
 宛先のポート番号。


◆シーケンス番号【32ビット】
 送信したデータの順序を示す番号。受信側で到達したデータの順序制御 に使用。なお、シーケンス番号は「0」や「1」からは始まらない。コネクションを確立するときに、初期値が乱数値で決定され、「SYNパケット」で受信ホストに伝えられる。そして、初期値に転送したバイト数を加算してデータの位置を示す。


◆確認応答番号【32ビット】
確認応答番号は次に受信すべきデータのシーケンス番号。従って、実際には確認応答番号から「1」を引いた値までのデータを受信したことになる。



◆データオフセット【4ビット】
TCPヘッダの長さを4バイト単位で表す値。


◆予約【6ビット】
将来の拡張のために用意されているフィールド。通常は全ビット「0」になる。


◆コントロールフラグ【6ビット】
このフィールドは6ビット長で、6つのビットから構成される。個々のビットに意味を持たせて様々な制御をおこなうことができる。各ビットに「1」が指定された場合、以下の様な意味を持つ。これらは「コントロールフラグ」と呼ばれる。





◆ウィンドウサイズ【16ビット】
同じTCPヘッダに含まれる確認応答番号で示した位置から、受信可能なデータサイズを通知するのに使われる。この値のデータ量を超えて送信することはできない。


◆チェックサム【16ビット】
TCPヘッダとデータ部分が無事かどうかを確認するための値を書き込む。


◆緊急ポインタ【16ビット】
コントロールフラグの「URG」が「1」のときに使用する。このフィールドに入る値は、緊急データの場所を表す数値を指定する。


◆オプション【可変長】
TCPの機能を拡張するときに使用。データサイズMSSを決定するときなどに使用。

◆パディング【可変長】
ヘッダが、32ビットの整数倍にならない時に、「0」をつけ足してヘッダの大きさを調整する。










1-3 ポート番号
TCPヘッダ内の「送信元ポート番号」と「宛先ポート番号」には、TCPの上位の階層に位置するアプリケーションを区別するための「ポート番号」と呼ばれる情報が入る。




TCPの上位層は「アプリケーション層」だが、この階層で動作するアプリケーションプロトコルは、「TELNET」、「FTP」、「SMTP」、「POP」等がある。




■ポート番号でのアプリケーションの識別
「ポート番号」とは、1台のコンピューターの中で動作しているアプリケーションを識別するための番号。
コンピューターでは、「WEBブラウザ」や「メールソフト」等、複数のアプリケーションを動作させることができる。
トランスポート層プロトコルは「ポート番号」を使用して、通信しているアプリケーションを識別し、正しくデータを渡すように処理する。

TCPでは、データを受け取ると、TCPヘッダの宛先ポート番号の値を参照し、ここにセットされているポート番号に対応するアプリケーションにデータを渡す。

クライアントPC上で動作するアプリケーションのポート番号は、動的に割り当てられる。このため、下図「クライアントB」のホスト上で動作する2つのブラウザには、別々のポート番号が割り当てられる。












■ポート番号の分類
ポート番号は「0」〜「65535」の範囲で、トランスポート層の「TCP」及び「UDP」のヘッダに含まれる。

またポート番号は、以下の3種類がある。







また、代表的なウェルノウンポート番号を以下に示す。