下位層(TCP ヘッダ)
OSI参照モデル(4層)
![](https://assets.st-note.com/img/1708282592689-PoEkSGCw67.png?width=1200)
TCP ヘッダ
![](https://assets.st-note.com/img/1708747196884-wkTM0wrXvY.png?width=1200)
◇ 送信元ポート
ネットワークと通信する際の自身のポート番号
◇ 宛先ポート
ネットワークと通信する際の相手のポート番号
◇ シーケンス番号 / 確認応答番号
■ シーケンス番号(Seq)
セグメントの正しい順番を通知
■ 確認応答番号(Ack)
次に受信するシーケンス番号を通知
◇Seq / Ack 処理の仕組み
■ 3Way Handshake
![](https://assets.st-note.com/img/1708743393743-8us4ZWxNpp.png?width=1200)
■ データ通信
![](https://assets.st-note.com/img/1708742756645-5mO0JUy0O3.png?width=1200)
■ コネクション切断
![](https://assets.st-note.com/img/1708743166667-XZ2RmQqGQN.png?width=1200)
◇ ヘッダ長
TCPヘッダの長さ
※別名:データオフセット
◇ コントロールフラグ
![](https://assets.st-note.com/img/1709083687412-KiCsVw8Nx9.png?width=1200)
◆ Reserved
将来のための用意により、現在は未使用 (常時:0)
◆ Accurate ECN
正確なCENフィードバックを提供 (0:提供しない、1:提供する)
◆ Congestion window Reduced
受信者へ輻輳制御ウィンドウの縮小を通知 (0:通知しない、1:通知する)
※輻輳制御ウィンドウ:送信中のデータ量を調整するパラメータ
◆ ECN-Echo
ネットワーク機器がアクセス集中しかけていることを送信側に通知
※IP headerの「CE」が1で検知した場合
◆ Urgent
緊急処理データが含まれる (0:含まれない、1:含まれる)
◆ Acknowledgment
確認応答番号のフィールドが有効(0:無効、1:有効)
◆ Push
受信データをアプリケーションに渡す (0:渡さない、1:渡す)
◆ Reset
コネクション強制終了 (0:強制終了しない、1:強制終了する)
◆ Syn
コネクション開始要求 (0:要求しない、1:要求する)
◆ Fin
コネクション終了要求 (0:要求しない、1:要求する)
◇ ウィンドウサイズ
受信側のACKを待たずに、一度に受信できるデータ量を指定
アプリケーションがサイズを指定し、パケット送受信中に変更する
※最大値:約64KB (( 2Byteの16乗=65,536Byte) ÷ 1024Byte=64KB)
◇ チェックサム
「TCPヘッダ + 疑似 IPヘッダ + ペイロード」を合わせた値
![](https://assets.st-note.com/img/1708759340448-kf8H6Dr7Me.png)
◆ 送信元IPアドレス
自身の機器に割り当てたIPv4アドレス
◆ 宛先IPアドレス
通信相手の機器に割り当てられたIPv4アドレス
◆ Zero
常時0
◆ プロトコル
プロトコル識別
例)6:TCP、17:UDP
◆ TCP長
「TCPヘッダ + ペイロード」の長さ
◇ 緊急ポイント
緊急処理開始位置の情報が入る
※コントロールフラグのUrgentが「1」のみに利用
◇ オプション
TCPヘッダに付与する情報
![](https://assets.st-note.com/img/1708762563540-LDUyJTIpPu.png)
【主なオプション説明】
◆ No-Operation
オプション間の区切り文字として利用し、4バイト単位に揃うように配置
◆ Maximum segment size (MSS)
1回のTCPパケットで送信される最大ペイロード量
※3Way Handshakeに利用
◆ Window scale
TCPフィールドのWINDOWの拡張
※範囲:0~14
最小値:64KB ((2Byteの16乗=65,536Byte) ÷ 1024Byte=64KB)
最大値:1GB ((2Byteの30乗=1,073,741,824Byte) ÷ 1,073,741,824Byte)
◆ SACK permitted
Selective ACKの利用を通知
※3Way Handshakeに利用
◆ SACK
3Way Handshake時に「SACK permitted」が示されたホスト同士の通信時に、送信側に欠けたデータだけを再送
◆ Timestamps
宛先にパケット送信から応答が返ってくるまでの時間
※3Way Handshake時に「Time Stamp」を付与した場合、コネクション中いつでもRTT値を計算できる
◇ MSSとMTUの範囲
![](https://assets.st-note.com/img/1709078383399-fQ8iaPeK5r.png?width=1200)
◇ パディング
32ビット単位になるように「0」で調整