ネットワークの基礎講座
TCP(トランスミッション制御プロトコル)
TCPセグメントのヘッダ

 
 
TCPのヘッダは下図のようになっている。
 
| 
   0  | 
  
   ...  | 
  
   3  | 
  
   4  | 
  
   ...  | 
  
   7  | 
  
   8  | 
  
   9  | 
  
   10  | 
  
   ...  | 
  
   15  | 
  
   16  | 
  
   ...  | 
  
   19  | 
  
   20  | 
  
   ...  | 
  
   23  | 
  
   24  | 
  
   ...  | 
  
   27  | 
  
   28  | 
  
   ...  | 
  
   31  | 
 
| 
   送り元ポート番号(Source Port)  | 
  
   宛先ポート番号(Destination Port)  | 
 |||||||||||||||||||||
| 
   シーケンス番号(Sequence Number)  | 
 ||||||||||||||||||||||
| 
   肯定応答番号(Acknowledge Number)  | 
 ||||||||||||||||||||||
| 
   データ・オフセット (Data Offset)  | 
  
   予約(Reserved)  | 
  
   フラグ(Flags)  | 
  
   ウインドウ(Window)  | 
 |||||||||||||||||||
| 
   チェックサム(Check Sum)  | 
  
   緊急ポインタ(Urgent Pointer)  | 
 |||||||||||||||||||||
| 
   オプション(Options)  | 
  
   パッディング(Padding)  | 
 |||||||||||||||||||||
| 
   データ(Data ...)  | 
 ||||||||||||||||||||||
 
ヘッダの各フィールドは次のようである:
a)   送り元ポート番号(Source
Port)
送り元と宛先のポート番号は説明の要がない。
b)  宛先ポート番号(Destination
Port)
c)  シーケンス番号(Sequence
Number)
このセグメントのオクテット・データの最初のオクテットのシーケンス番号である(SYNが存在する場合を除く)。もしSYNが存在するときは、これは開始シーケンス番号(ISN: initial sequence number)を意味し、最初のデータ・オクテットはISN+1である。
d)  肯定応答番号(Acknowledge
Number)
ACKコントロール・ビットがセットされているときは、このフィールドは受けてが期待する送り元からの次のセグメントのシーケンス番号である。コネクションが確立された後ではこのフィールドは必ず送信される。
e)   データ・オフセット(Data
Offset)
TCPヘッダ部分の32ビット単位の長さ。これはデータの開始位置を示す。TCPヘッダは32ビット長ワードの整数である。
f)   予約(Reserved)
将来のために予約、常にゼロ。
g)  フラグ(Flags)
制御フラグで、6ビット。(左から右へ):
URG:
緊急ポインタフィールド識別
ACK:
確認フィールド識別
PSH:
Push 機能
RST:
コネクションのリセット
SYN:
同期シーケンス番号
FIN:
送信側からのデータは無い
h)  ウインドウ(Window)
肯定応答フィールドで示される番号から始まって、このセグメントの送信側が受信する、ことを歓迎するデータオクテットの数。
i)    チェックサム(Check
Sum)
チェックサムフィールドは、ヘッダとデータの全ての 16 ビット単位の
1 の補数の合計の 16 ビットの 1 の補数。もし、セグメントがチェックされるヘッダとテキストのオクテット数が奇数個を含むならば、最後のオクテットは、チェックサムを行う目的で 16 ビット単位を形成するために、右側を 0 でパディングされる。パディングは、セグメントの一部としては送信されない。チェックサムを算出する際、チェックサムフィールド自身は、0 で置き換えられる。
 
チェックサムは、TCP ヘッダの前に概念的に付加された 96 ビットの疑似(pseudo)ヘッダも含めて計算される。この疑似ヘッダは、送信元IPアドレス、宛先IPアドレス、プロトコル、TCP
長を含む。これにより、振分けに失敗したセグメントに対する TCP での防御が可能になる。この情報はIP層で運ばれ、TCP/Network インタフェースを通して、このIP上のTCP へのコールのアーギュメントか結果で渡される。 
 
+--------+--------+--------+--------+
|           Source
Address          |
+--------+--------+--------+--------+
|         Destination
Address      
|
+--------+--------+--------+--------+
| 
zero  |  PTCL  |    TCP
Length   |
+--------+--------+--------+--------+
 
TCP
長は、TCP ヘッダ長にデータのオクテット長を加えたもの (これは明示的に転送される量ではなく、計算によるもの) で、疑似ヘッダの 12 オクテットは数えない。
j)    緊急ポインタ(Urgent
Pointer)
このフィールドは緊急ポインタの現在の値を、このセグメントのシーケンス番号からの正のオフセットとして通知する。緊急ポインタは、緊急データの後に続くオクテットのシーケンス番号を指す。このフィールドは、URG 制御ビットが設定されたセグメントでのみ解釈される。
k)  オプション(Options)
オプションは TCP ヘッダの最後の部分を占め、長さは 8 ビットの倍数である。全てのオプションは、いかなるオクテット境界で始まってもよい。オプションの形式には二つのケースがある。 
Case
1: オプション種別の単一オクテット
Case
2: オプション種別の 1 オクテット、オプションの長さを示す 1 オクテット、実際のオプションデータのオクテット。
オプション長は、オプションデータオクテットだけでなく、オプション種別とオプション長の二つのオクテットも数える。 オプションのリストは、データオフセットフィールドが示している長さより短くてもよい。オプション最終オプションを超えたヘッダの中身は、ヘッダパディング (つまり
0) でなければならない。 TCP は全てのオプションを実装しなければならない。
現在定義されているオプションは、以下を含む (種別は
8 進)。 
 
| 
   種別  | 
  
   長さ  | 
  
   意味  | 
 
| 
   0  | 
  
   -  | 
  
   End of option
  list  | 
 
| 
   1  | 
  
   -  | 
  
   No-Operation  | 
 
| 
   2  | 
  
   4  | 
  
   Maximum Segment
  Size  | 
 
 
l)    パッディング(Padding)
TCP
ヘッダパディングは、TCP ヘッダの最終とデータ部の開始が 32 ビット境界にあることを保証するために使用される。パディングは、0 から成る。
m)データ(Data
...)