1
TCPセグメントヘッダ
笹栗茂
02/7/23
2
TCPセグメントヘッダのフォーマット
160 318 244 12 20 28
送信元ポート 送信先ポート
シーケンス番号
応答確認番号
ヘッダ長 予約 F
I
N
S
Y
N
R
S
T
P
S
H
A
C
K
U
R
Gウインドウ
チェックサム 緊急ポインタ
オプション パディング
TCPデータ
3
各データ項目の機能(1)
送信元ポート番号 送信元のポート番号
宛先ポート番号 送信先のポート番号
送信シーケンス番号
(SEQ)
送信したデータの位置を表す
応答確認番号
(ACK)
次に相手から受信すべきデータ
のシーケンス番号
ヘッダ長 TCPヘッダの長さを表す
リザーブビット 将来の拡張性のため確保され
ている領域
4
各データ項目の機能(2)
コードビット 各ビットをフラグとして使用、左から順
にURG,ACK,PSH,RST,SYN,FIN
ウインドウサイズ 受信側が現在受信可能なデータサイ
ズを送信側に通知するために使用
チェックサム 誤り検出のために使用
緊急ポインタ 緊急に処理すべきデータの位置を示す
オプション TCPによる機能や性能を向上させるた
めの情報
パディング 32ビットの倍数になるように0で調整
5
セグメントヘッダの各値の説明(1)
•送信元ポート(16ビット)
–TCPデータの送信元プロセスのポート番号
•宛先ポート(16ビット)
–TCPデータの宛先プロセスのポート番号
•ポート番号
–Well-known
–Registered
–Private
6
セグメントヘッダの各値の説明(2)
•シーケンス番号(32ビット)
–送信元が送る全データのうち、このデータが何番
目のセグメントであるかを表す
•応答確認番号(32ビット)
–次に受信するとき送信先が使うであろう送信用の
シーケンス番号
–これによりパケットの流れや再送確認などが行わ
れる
7
1000 200 250 TCPにより送信するデータ
送信側 受信側
SEQ=0
ACK=100
SEQ=100
ACK=200
SEQ=200
ACK=250
100バイト
受信
100バイト
受信
50バイト
受信
8
セグメントヘッダの各値の説明(3)
•ヘッダ長(4ビット)
–TCPヘッダの長さを表す
–単位は4オクテット
–オプションを含まない場合、この値は5
(5×4=20オクテット=160ビット)
9
セグメントヘッダの各値の説明(4)
•予約(6ビット)
–将来のために予約されている領域
–すべて0にしておく
•コードビット(各1ビット)
–URG(緊急フラグ)
•緊急に処理すべきデータが含まれているかの情報
–ACK(応答確認フラグ)
•応答確認フィールドが有効であることを示す
10
セグメントヘッダの各値の説明(5)
–PSH(プッシュフラグ)
•相手ホストへデータを送るときに指定可能
•このフラグの立ったセグメントを受け取った受信側
はアプリケーションプロセスに直ちにデータを渡す
–RST(リセットフラグ)
•コネクションを強制切断するときに指定
–SYN(シンクロナイズフラグ)
•コネクション接続時に指定
–FIN(フィンフラグ)
•コネクションを終了する場合に指定
11
セグメントヘッダの各値の説明(6)
•ウインドウ(16ビット)
–相手ホストへ自分がどれだけ許容量があるかを通
知
–受け入れ可能な最大セグメントサイズ(オクテット)
送信側 受信側
Window=100 100バイト
受け入れ可能
100バイト
送信しよう
Window=0のときは送信側は送信を一時停止
12
セグメントヘッダの各値の説明(7)
•チェックサム(16ビット)
–ヘッダとデータの両方を対象にする
–擬似ヘッダを、セグメントの前に置いて計算
–16ビット単位で1の補数和を計算し、この値の1の
補数をチェックサムとして格納
0 31168 送信元アドレス
宛先アドレス
プロトコル
0TCPセグメント長
擬似ヘッダ
13
セグメントヘッダの各値の説明(8)
•緊急ポインタ(16ビット)
–このセグメント中の緊急データの位置を表す
–シーケンス番号からのオフセット値(単位:オクテット)
•オプション(可変)
–TCPヘッダは複数のオプションをサポート可能
–現在定義されているオプションは3種類
•有効なオプションは最大セグメントヘッダオプションのみ
00000010 00000100 最大セグメントサイズ
Kind=2 長さ=4
0 8 16 31
14
セグメントヘッダの各値の説明(9)
•パディング(可変)
–セグメントヘッダサイズを32ビットの倍数になるよう
に調整
–値はすべて0