概要
ここではTCPで使用されているヘッダー情報について解説していきます。ヘッダー情報は下記の内容で構成されています。
送信元ポート番号(Source Port)
16ビットで構成された送信元のポート番号を表します。
宛先ポート番号(Destination Port)
16ビットで構成された宛先のポート番号を表します。
シーケンス番号(Sequence Number)
32ビットで構成されシーケンス番号と呼ばれる送信したデータの位置を示す番号を示します。送信を行う度に送信データのオクテット数だけ増加します。初期値は乱数で設定されSYNパケットで受信ホストへ伝えられます。また、FINパケットではデータを含んでいなくても1オクテットが加算されます。
確認応答番号(Acknowledgement Number)
32ビットで構成され、次に受信すべきデータのシーケンス番号を示しており、この番号から1を減算した番号まで正常に受信したことを示します。
データオフセット(Data Offset)
4ビットで構成され、TCPが運んでいるデータパケットの先頭を示す値でヘッダー長を示しています。単位は4オクテットとなっております。
予約(Reserved)
4ビットで構成され、将来拡張用にに用意されたフィールドです。
コントロールフラグ(Control Flag)
8ビットで構成され、それぞれのビットに下記の役割が付与されています。
CWR(Congestion Window Reducer)
ECNフィールドとともに使用され、ふくそうウインドウを小さくしたことを相手に通知します。
ECE(ECN-Echo)
ネットワークがふくそうしている事を伝え、IPヘッダのECNが1のときに1を設定します。
URG(Urgent Flag)
緊急でデータを処理したい場合に「1」を設定します。
ACK(Acknowledgement Flag)
確認応答番号が有効であることを示し、最初のSYNセグメント以外は「1」が入ります。
PSH(Push Flag)
「1」のときは受信データを即上位に渡し、「0」の時はバッファリングする事出を許可します。
RST(Reset Flag)
「1」のときは強制的にコネクションを切断し、異常検出の際に使用されます。
SYN(Synchronize Flag)
「1」のときにコネクション確立の意思を示し、シーケンス番号の値でシーケンス番号の初期化を行います。
FIN(Fin Flag)
「1」のときは今後送信するデータが無くコネクションを切断したいことを意味します。互いのFINに対して確認応答がされればコネクションが切断されます。
ウインドウサイズ(Window)
16ビットで構成され、確認応答番号で示した位置から受信可能なデータサイズをオクテット数単位で通知するために使用されます。ここが「0:の場合ウインドウの最新情報を得るためのウインドウプロープの送信が許可されます。
チェックサム(Checksum)
UDPのチェックサムと同様の計算方法で計算されます。ただし無効にすることは出来ません。
送信側での計算は下記のように行われる。
- TCP疑似ヘッダーをデータグラムの前につける。
- 全長が16ビットの倍数になるようにデータの最後に「0」をつける。
- チェックサムフィールドに「0」を入力する。
- 16ビット単位で1の補数の和を求める。
- 求まった和の1の補数をチェックサムフィールドに入力する。
受信側では同様に疑似ヘッダーを作成して計算を行います。ただし、№3のチェックサムフィールドの値を「0」にせず計算を行います。送信側で計算で求めたチェックサムの値はチェックサムフィールドを「0」にしている事から「チェックサム部分以外の和の補数」が入っているといえます。そのため、受信側で計算したチェックサムを含むすべての和の補数を計算すれば16Bitすべてが「1」になり、ヘッダーやデータの破損が無いといえます。
緊急ポインタ(Urgent Pointer)
16ビットで構成され、コントロールフラグのURGが「1」の時に有効になり、緊急を要するデータの格納場所を示すポインタとして扱われます。緊急データの扱いについてはアプリケーション側で決定します。
オプション(Options)
オプションは通信の性能を向上させるために利用され、最大40オクテットまでで32ビットの整数倍の長さに調整されます。代表的なオプションを下記に示します。
タイプ2 Maximum Segment Size
コネクション確立時に最大セグメント長を決定するのに使用されます。
タイプ3 WSOPT – Window Scale
16ビットしかないウインドウをここで指定した値分ビットシフトする事で最大1Gオクテットまでスループットを向上させます。
タイプ8 TSOPT – Time Stamp Option
高速通信時のシーケンス番号管理に利用されます。数Gオクテット以上のデータを高速ネットワークで転送すると32ビットのシーケンス番号が数秒で巡回する可能性があり、順序入れ替えなどが起こった際に番号が前後してしまい信頼性を提供できなくなります。それを避けるためにこのフィールドを使用します。
タイプ4、5 SACK Permitted
選択確認応答に利用され、最大4つの「歯抜け状態」の確認応答が出来ます。これにより無用な再送処理を防ぎスループットを向上させます。
コメント