TCP のバックアップ(No.6)
TCP とは †
名称 †
- Transmission Control Protocol
概要 †
- トランスポート層(OSI参照モデル、TCP/IPモデル)の通信プロトコル
- コネクション型
- 通信の信頼性が高い
- 送信元IPアドレスの偽装が難しい(可能ではある)
- セグメント
- TCPでやりとりするデータの単位(PDU)
TCPの仕組み †
TCPコネクション †
- 通信の開始時に通信路を確立し、終了時に通信路を解放する
- 3つのフェーズで行われる
- コネクション確立フェーズ
- 通信フェーズ
- コネクション切断フェーズ
コネクション確立フェーズ †
- 3wayハンドシェイク
- 1. →(SYN)
- 2. ←(ACK + SYN)
- 3. →(ACK)
- ※SYN:コネクション確立要求
- ※ACK:肯定応答
コネクション切断フェーズ †
- 1. →(FIN + ACK)
- 2. ←(ACK)
- 3. ←(FIN + ACK)
- 4. →(ACK)
TCP のデータ構造 †
- TCPヘッダとペイロードで構成される
- TCPヘッダ(20バイト~)
- ペイロード(アプリケーション層のデータ)
TCPヘッダ †
- 1〜32bit
- 送信元ポート番号(16)
- あて先ポート番号(16)
- 33〜64bit
- シーケンス番号(32)
- 65〜96bit
- 確認応答番号(ACK番号)(32)
- 97〜128bit
- データオフセット(4) ※TCPヘッダ長:単位は4Byte(32bit)
- 予約(6) ※未使用
- コントロールフラグ(6)
- ウィンドウサイズ(16)
- 129〜160bit
- チェックサム(16)
- 緊急ポインタ(16)
- 161〜192bit
- オプション(n)
- パディング(32-n)
シーケンス番号 †
- 送信データの連番
- 初期値はランダムな値
確認応答番号(ACK番号) †
- 受信データの連番
- 3ウェイハンドシェイク前
- 相手から受け取ったシーケンス番号に1を加算した値
- 3ウェイハンドシェイク後
- 相手から受け取ったシーケンス番号にデータサイズ(Byte)を加算した値
コントロールフラグ †
- コードビット
- コントロールビット
ビット位置 | コードビット | 意味 | |
1 | URG | urgent | 緊急 |
2 | ACK | acknowledgement | 応答。SYNパケットの場合"0"、SYNパケット以外の場合"1" |
3 | PSH | push | プッシュ |
4 | RST | reset | リセット。TCP接続を強制終了する場合"1" |
5 | SYN | synchronize | 同期。SYNパケットの場合"1"、SYNパケット以外の場合"0" |
6 | FIN | finish | 終了。TCP接続を終了する場合"1" |
SYNクッキー †
- TCP通信の正当性を確認するために、SYN + ACKパケットのシーケンス番号に埋め込むデータのこと
- TCPヘッダをハッシュ化した値などが使われる
TCPの脆弱性 †
- 発信元IPアドレスの偽装が難しい
- 発信元IPアドレスが偽装されていても、コネクションの確立が必要ない攻撃に対しては弱い
- 接続要求(SYN)に対する応答(SYN/ACK)を攻撃に悪用される
- 反射・増幅型DDoS攻撃
- 初期シーケンス番号を推測したセッション・ハイジャック
- TCP ACKスキャン
- 「ポートスキャン」参照