TCPヘッダ

  0                   1                   2                   3   
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |              (1)              |              (2)              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                              (3)                              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                              (4)                              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  (5)  |  (6)  |      (7)      |              (8)              |
 |       |       |a|b|c|d|e|f|g|h|                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |              (9)              |              (10)             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                       (11)                    |      (12)     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                             data                              |
 :                                                               :
                         TCP Header Format

http://www.ietf.org/rfc/rfc793.txt

オプションのないTCPヘッダは、オプションのないIPv4ヘッダと同じく20バイト。
(1) Source Port(送信元ポート番号(16bit))
(2) Destination Port(宛先ポート番号(16bit))
(3) Sequence Number(シーケンス番号:送信データの位置をオクテット単位で示す。(32bit→0〜4,294,967,296))
(4) Acknowledgment Number(確認応答番号:次に受信すべきデータのシーケンス番号を示す。(32bit→0〜4,294,967,296))
(5) Data Offset(データオフセット:TCPヘッダ長に相当。4オクテット単位で示す。(4bit→20〜64バイト))
(6) Reserved(予約:拡張用。昔は6bitだったがCRWとECEができて4bitに減った。)
(7) Control Flag(コントロールフラグ:SYNやACKなど。(8bit))
(7a) CWR(Congestion Window Reduced)(ECEを受け、輻輳ウインドウを小さくしたことを相手に伝える。)
(7b) ECE(ECN-Echo)(相手側からこちらへの通信が輻輳していることを伝える。)
(7c) URG(Urgent Pointer field significant)(緊急に処理すべきデータが含まれていることを伝える。データの位置は緊急ポインタで伝える。…多分有効に使われてない。)
(7d) ACK(Acknowledgment field significant)(返答であることを伝える。確認応答番号が有効であることを伝える。コネクション確立時を除けば必ず立てる。)
(7e) PSH(Push Function)(データを速やかに上位アプリケーションに渡すことを伝える。…これも多分有効に使われてない。)
(7f) RST(Reset the connection)(コネクションの強制切断を伝える。)
(7g) SYN(Synchronize sequence numbers)(コネクション確立希望を伝える。)
(7h) FIN(No more data from sender)(コネクション切断を伝える。)
(8) Window(ウインドウサイズ:確認応答番号で示した位置から受信可能なデータサイズをオクテット単位で示す。(16bit→0〜65535バイト))
(9) Checksum(チェックサムTCP疑似ヘッダを追加したTCPセグメントのチェックサム。計算方法などはhttp://www.mew.org/~kazu/bsdmag/cksum.htmlが詳しい。(16bit))
TCPセグメント長はIPヘッダのパケット長とTCPヘッダのデータオフセット(TCPヘッダ長)とから計算する必要がある。

             TCP疑似ヘッダ
 +--------+--------+--------+--------+
 |          送信元IPアドレス         |
 +--------+--------+--------+--------+
 |           宛先IPアドレス          |
 +--------+--------+--------+--------+
 |00000000|00000110| TCPセグメント長 |←前は0パディングとプロトコル番号(TCPは6)
 +--------+--------+--------+--------+
 |           TCPセグメント           |
 :                                   :

(10) Urgent Pointer(緊急ポインタ:緊急処理データの位置を伝える。データ先頭からの長さをオクテット単位で伝える。(16bit→0〜65535バイト))
(11) Options(オプション(任意の長さ))

EOL(End of Option List):オプション終了 タイプ0
NOOP(No-Operation):パディング タイプ1
MSS(Maximum Segment Size):最大セグメント長 タイプ2
WSOPT(Window Scale):ウインドウスケールオプション タイプ3
SACK Permitted:選択確認応答許可 タイプ4
SACK(Selective Acknowledgment):選択確認応答 タイプ5
TSOPT(Time Stamp Option)タイムスタンプ タイプ8

(12) Padding(詰め物:オプションの長さと合わせて32bitの整数倍になるよう0を入れる。)

2014 徹底解説ネットワークスペシャリスト本試験問題 (本試験問題シリーズ)

2014 徹底解説ネットワークスペシャリスト本試験問題 (本試験問題シリーズ)