TCP はトランスポート層で動作する、コネクション型のプロトコルです。
コネクション型ですから、効率性よりも信頼性重視の仕様となっています。
TCP のヘッダ構成は以下のようになっています。
UDP のヘッダと比べても非常に多くのフィールドが存在していることが
分かるかと思います。
それぞれのフィールドの意味は以下の通りです。
1. 送信元ポート番号:16 ビット
送信元ノードのアプリケーションが使用しているポート番号が
セットされます。
2. 宛先ポート番号:16 ビット
宛先アプリケーションが使用するポート番号がセットされます。
3. シーケンス番号:32 ビット
送信するデータには、順序を付けるための「シーケンス番号」が
付与されます。
このシーケンス番号で、この「データはデータ全体の中の
どの位置のデータなのか」が分かるようになります。
シーケンス番号は送信元ノードで管理され、データを送信するたびに
データ 1 バイトごとにシーケンス番号が加算されていきます。
4. 確認応答番号:32 ビット
このフィールドは、受信したデータに対してどのどの位置まで
受信したかを表すためのフィールドで、次に受信するデータの
シーケンス番号は付与されます。
確認応答番号は受信側ノードが、送信元ノードへの応答パケットに
付与して送信されます。
5. データオフセット:4 ビット
TCP データのヘッダ超が格納されるフィールドです。
TCP ヘッダの長さはオプションがない場合、20 バイトとなるため、
このフィールドには 5(2 進数だと 0101)がセットされます。
6. 予約:6 ビット
このフィールドは将来の拡張のために用意されていて、
通常はすべて「0」がセットされます。
7. コードビット:6 ビット
コードビットは 1 ビットずつに役割があり、フラグとして
使用されています。
初期値はすべて「0」ですが、値が「1」の場合にそれぞれの
フラグが有効となります。
各ビットの役割は以下の通り。
・URG(Urgent フラグ)
このフラグが「1」の場合に、パケットの中に緊急に
処理しなければいけないデータが含まれていることを表しています。
・ACK(Acknowledgement フラグ)
このフラグが「1」の時は、TCP ヘッダの中に
確認応答番号フィールドが有効であることを表しています。
通常はコネクションを確立するとくに最初に送信する
TCP パケット以外は常に「1」がセットされています。
・PSH(Push フラグ)
このフラグが「1」の時は、受信したデータをすぐに上位の
アプリケーションに渡すことを意味しています。
通常 TCP で送信されたデータは、受信側でバッファに
溜めてから、適当なタイミングで上位アプリケーションに
渡されます。
この場合、応答性の高いアプリケーションの場合に、
遅延が発生する可能性があるため、応答性を向上させたい場合に
このフラグを有効にします。
・RST(Reset フラグ)
このフラグが「1」の時は、TCP のコネクションが強制的に切断されます。
何らかの理由で、TCP の接続が中断したままの場合などに、
このフラグを有効にして強制的に TCP 接続を終了させることができます。
また、TCP の接続要求に対して、RST フラグを有効にして
返信した場合、接続を拒否していることを表しています。
・SYN(Synchronize フラグ)
このフラグが「1」の時は、TCP の接続要求を表して居ます。
TCP の接続を開始したい場合には、このフラグを有効にして
TCP パケットを送信します。
・FIN(Fin フラグ)
このフラグが「1」の時は、コネクションの切断要求であることを
表しています。
このフラグが有効になっている場合、これ以上データの
受信の必要がないことを意味していて、FIN フラグが
セットされたパケットを送信側、受信側の双方で送信し、
コネクションの切断を実施します。
8. ウインドウサイズ:16 ビット
受信側の受信可能なデータサイズを送信側に通知するために
使用されます。
送信側では、このフィールドにセットされたウインドウサイズを
見て、送信可能な最大データサイズを判断します。
9. チェックサム:16 ビット
UDP のチェックサムと同じで通信中にエラーが発生していないか
どうかをチェックする数式がセットされます。
10. 緊急ポインタ:16 ビット
コードビットフィールドの URG フラグが有効になっているときに
使用するフィールドです。
このフィールドには、緊急に処理しなければいけない、
データの場所を示す値がセットされます。
11. オプション
TCP 通信で機能を付加する場合に使用されるフィールドです。
トランスポート層(レイヤ 4)の役割
トランスポート層(レイヤ 4)の役割について
ポート番号
ポート番号について
コネクションとコネクションレス
コネクションとコネクションレスについて
UDP
UDPについて
TCP ヘッダ
TCP ヘッダについて
仮想コネクションの確立
TCP ヘッダについて
ACK による到達確認
TCP ヘッダについて
ウインドウサイズを利用したフロー制御
TCP ヘッダについて
TCPウインドウ制御
TCPウインドウ制御とスライディング・ウインドウについて
ネットワ-ク初心者のみなさま。
ネットワークの基礎知識を疎かにすることは
大変危険です!!
これを読めばネットワークの基礎が分かる!!
ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。
もちろん無料です!!
↓メールマガジン購読はこちら↓