[ IP TCP UDP Header Format (IPv4) ] 1. IP Header Format 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ( RFC 791 より ) Version バージョン。通常は IPv4 なので 4 だ。IPv6 の場合は 6 が設定される。 IHL(Internet Header Length) 32bits を 1 としてIPヘッダの長さを表す。 この値によりパケットの中のどこからがデータなのかを計算する。 Type of Service(TOS) 通信が混雑した場合のデータの優先順位を決める。 あまり使われていないらしい。 Total Length IPヘッダとデータの合計の長さをバイト単位で表す。 Identification IPがデータを分割したときに、もともと同じデータであったことを示すための識別子。 Flags IPパケットの分割に関する情報を格納。 Flagment Offset データを分割した際にこのデータが全体のどの位置にいるかを示す。 Time to Live(TTL) データの寿命を表す。 ルータを通るたびにこの値が 1 づつ減らされ 0 になると破棄される。 Protocol 上位プロトコルが何か?を格納するフィールド。 Linux や Unix なら /etc/protocols ファイルに対応番号が書かれてある。 Header Checksum IPヘッダが壊れていないかどうかを判断するチェックサムフィールド。 Source Address データの送り元のIPアドレス Destination Address データの送り先(宛先)のIPアドレス Options 可変長のオプションフィールド。あまり使用しない。 Padding IPヘッダは 32bits の整数倍である必要があるのでそのための穴埋めフィールド。 2. TCP Header Format 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP Header Format ( RFC 793 より ) Source Port 送信元が使用するポート番号 Destination Port 送信先(宛先)のポート番号 Sequence Number シーケンス制御の行うために使用するシーケンス番号。 3 way handshake による通信の確立を行うときに使用する。 Acknowledgment Number 再送制御を行うために使用するACK番号。 Data Offset TCPヘッダの長さを4bytes(32bits)単位で表したもの。 Reserved 予約フィールドと呼ばれる場所。 Flags が今後増えたときにも対応できるようにしたものだと思う。 実質、意味は無し。 Flags(URG,ACK,PSH,RST,SYN,FIN) メッセージの種別を表すフラグの格納する場所。 URG: 現在は使われていない。 ACK: 応答確認パケットであることを示す。コネクション開設時に使用される。 PSH: バッファリングするかどうかの判定。1,受信後バッファリングしない。0,バッファリングできる。 RST: コネクションを強制的にリセットする。強制切断。 SYN: 接続要求パケットであることを示す。其以外は 0 である。 FIN: パケットが切断要求パケットであることを示す。其以外は 0 である。 Window Window制御で使用するサイズを格納する。 Checksum TCPデータが壊れていないかを判断するチェックサムフィールド。 IPヘッダとは異なり擬似ヘッダを使用する。 Urgent Pointer TCP Flags の URG が 1 になっている場合に使用されるらしいが URG 自体あまり使われてないのでよくわからない。 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | zero | PTCL | TCP Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP擬似ヘッダ チェックサムを計算する場合に使用する。TCPヘッダより前に書かなければならない。 実際には送信されない。あくまでチェックサム計算に使用するだけである。 Source Address, Destination Address 送信元、送信先(宛先)アドレス zero 0x00をいれる。正真正銘ゼロ。 PTCL(protocol) IPヘッダの protocol と同じものをいれる。 TCP Length TCPヘッダを含めたTCPデータの長さ。擬似ヘッダは含めない。 3. UDP Header Format 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | Destination | | Port | Port | +--------+--------+--------+--------+ | | | | Length | Checksum | +--------+--------+--------+--------+ | | | data | +-----------------------------------+ UDP Header Format ( RFC 768 より ) Source Port 送信元が使用するポート番号 Destination Port 送信先(宛先)のポート番号 Length UDPヘッダを含めたUDPデータの長さ。 Checksum チェックサムフィールド UDP擬似ヘッダ 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | source address | +--------+--------+--------+--------+ | destination address | +--------+--------+--------+--------+ | zero |protocol| UDP length | +--------+--------+--------+--------+ TCP擬似ヘッダと同じなので省略。 End. written by kenji aiko 2003/08/20 Copyright (C) 2003 kenji aiko All Rights Reserved