TCPとは
TCP(Transmission Control Protocol)とは、トランスポート層で動作する信頼性の高い通信プロトコルです。
通信プロトコルとは、通信のルールの事をいいます。例えば会話であればお互い「日本語」で話すことで会話が成り立ちます。片方が「日本語」で片方が「英語」だと会話になりせません。
通信も同じルールを決めて通信を行います。
TCPの特徴は、データを受け取った受信側が「受け取った」というデータ(確認応答)を返信します。
送信側は、受信側からの「受け取った」という返信を確認することで、確実にデータが送られたことを確認することが出来ます。
仮にデータの送信に失敗した場合は、一定時間後に再送する仕組みがあります。
TCPは相手との1対1での通信を実現し、まるで会話をするような信頼性のある通信プロトコルです。
スポンサーリンク
ポイント
TCPヘッダ
TCPで通信する時の、TCPヘッダは以下です。TCPでデータを送信する時は、送信データだけではなく、「送信元ポート番号」などの情報もTCPヘッダとして付与されます。
項目 | ビット数 | 説明 |
送信元ポート番号 | 16 bit | 送信元のポート番号 |
宛先ポート番号 | 16 bit | 宛先のポート番号 |
シーケンス番号 | 32 bit | 送信するデータの順番を表す番号。シーケンス番号で「このデータはデータ全体の中でどの位置のデータなのか」を判定します |
確認応答番号 | 32 bit | どの位置までデータを受信したかを表す番号 |
データオフセット | 4 bit | TCPヘッダの長さ示す値 |
予約 | 6 bit | すべてビット「0」が入る。将来の拡張のために用意されています |
コントロールフラグ | 6 bit | 下記の1ビットのフラグが存在します URG(Urgent フラグ) ACK(Acknowledgement フラグ) PSH(Push フラグ) RST(Reset フラグ) SYN(Synchronize フラグ) FIN(Fin フラグ) |
ウィンドウサイズ | 16 bit | 受信側の受信可能なデータサイズを送信側に通知するために 使用。送信側では、このフィールドにセットされたウインドウサイズを見て、送信可能な最大データサイズを判断します |
チェックサム | 16 bit | TCPヘッダとデータ部分のエラーチェックを行うために使用します |
緊急ポインタ | 16 bit | 緊急データの開始位置を示す情報 |
オプション | 可変長 | TCP 通信で機能を付加する場合に使用されるフィールド |
パディング | 可変長 | TCPヘッダの長さを32ビットの整数にするためにPaddingとして空データの 「 0 」 の値を入れることにより調整します |
TCP 3ウェイハンドシェイク
TCPはコネクション型プロトコル。コネクション型とは、通信相手の応答があって開始する通信のことをいいます。
データ転送を行う前に、通信相手とコネクションの確立を行います。この通信開始とのコネクションの確立を3ウェイハンドシェイクといいます。
3ウェイハンドシェイクのイメージは、下記図の通りです。
※SYNは質問、ACKには回答が入ります。
1. コンピュータAは、コンピュータBにコネクションの確立を要求します。TCPヘッダには、SYN:1、ACK:0、シーケンス番号は最初はランダムの値が入ります。SYNが1なので、質問を投げている形です。
2. コンピュータBは、コンピュータAからのコネクション要求に応答します。そしてコンピュータBからもコネクションの確立を要求します。TCPヘッダには、SYN:1、ACK:1が入ります。SYNが1、ACKが1なので、質問と回答を投げている形となります。
3. コンピュータAは、コンピュータBからのコネクション要求に応じます。これでTCPの接続が確立されました。TCPヘッダには、SYN:0、ACK:1が入ります。ACKが1なので、回答を投げている形となります。