TCPヘッダ その1
目次
TCPヘッダフォーマット
TCP/IPプロトコルスタックのトランスポート層に含まれるTCP(Transmission Control Protocl)は、とても重要なプロトコルです。そのTCPヘッダのフォーマットは次の図の通りです。
TCPヘッダは20バイトです。ここにオプションが追加されることがありますが、オプションが追加されても必ず4バイト単位になるように調整されます。
送信元ポート番号、送信先ポート番号
では、順番にヘッダの内容について見ていきましょう。
まず「送信元ポート番号」と「送信先ポート番号」を一緒に。IPアドレスでは通信するホスト(コンピュータ)は特定できます。でも、ホストはネットワークを利用するアプリケーションを1つしか使っていないか?というとそうではありませんね。メールを受信しつつ、ブラウザでホームページを見たりしています。このとき、もちろんメールはメーラーに届いてくれなければ困りますし、HTMLのデータはブラウザに届いてくれなければ困ります。
これをポート番号によって判断します。OSIをしっかりと理解している人は、セッション層の機能と同じだなと気がつくと思います。TCP/IPプロトコルスタックのトランスポート層はOSI参照モデルのセッション層の機能も一部含んでいます。
そして、ポート番号は「ウェルノウンポート番号」「ランダムポート番号」に分類されます。
「ウェルノウンポート番号」は、0~1023の間でサーバアプリケーションのポート番号です。こちらはあらかじめ決められた値です。主なウェルノウンポート番号は次の通りです
HTTP | 80 |
FTP | 20、21 |
SMTP | 25 |
POP3 | 110 |
TELNET | 23 |
:
そして「ランダムポート番号」は1024以上のポート番号でクライアントアプリケーションのポート番号です。サーバからの応答のアプリケーションを識別するためにランダムポート番号を使用します。
実際にブラウザからWEBサーバに対して何かのアクセスをするときにTCPヘッダのポート番号は次のようになります。
あと実は、「レジスターポート番号」と呼ばれるものもあります。これは正式には登録されていないけど、一般的によく使われるアプリケーションに対するポート番号です。プロキシーの「8080」というポート番号が有名ですね。
以前にルータのときにお話したパケットフィルタリングは、このポート番号を利用して、アプリケーションごとのフィルタリングを行うことができます。また、ファイアウォールもこのポート番号によるフィルタリングの設定を行います。