1
TCPセグメントヘッダ
笹栗茂
02/7/23
牧之内研究室「UNIX とネットワーク基礎勉強会」Webページ
http://www.db.is.kyushu-u.ac.jp/rinkou/unixnet/
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
セグメントヘッダの各値の説明()
予約(6ビット)
将来のために予約されている領域
すべて0にしておく
コードビット(1ビット)
URG(緊急フラグ)
緊急に処理すべきデータが含まれているかの情報
ACK(応答確認フラグ)
応答確認フィールドが有効であることを示す
10
セグメントヘッダの各値の説明()
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