#author("2021-09-30T21:45:02+09:00","default:k1rou","k1rou")
*TCP [#b5f1582b]
-Transmission Control Protocol
**TCP とは [#z837be3c]
-通信プロトコル
-トランスポート層([[OSI参照モデル]]、[[TCP/IPモデル]])
-コネクション型
--通信の信頼性が高い
--送信元[[IPアドレス]]の偽装が難しい(可能ではある)
**TCPの仕組み [#t30689b8]
***TCPコネクション [#ldc46dbb]
-通信の開始時に通信路を確立し、終了時に通信路を解放する
-3つのフェーズで行われる
++コネクション確立フェーズ
++通信フェーズ
++コネクション切断フェーズ
-コネクション確立フェーズ
--[[3wayハンドシェイク]]
---1. →(SYN)
---2. ←(ACK + SYN)
---3. →(ACK)
--※SYN:コネクション確立要求
--※ACK:肯定応答
-コネクション切断フェーズ
---1. →(FIN + ACK)
---2. ←(ACK)
---3. ←(FIN + ACK)
---4. →(ACK)
**TCP のヘッダ構成 [#j4aa20e5]
-1〜32bit
--送信元ポート番号(16)
--あて先ポート番号(16)
-33〜64bit
--シーケンス番号(32)
-65〜96bit
--確認応答番号(32)
-97〜128bit
--データオフセット(4)
--予約(6)
--コントロールフラグ(コードビット)(6)
--ウィンドウサイズ(16)
-129〜160bit
--チェックサム(16)
--緊急ポインタ(16)
-161〜192bit
--オプション(n)
--パディング(32-n)
*** コントロールフラグ(コードビット) [#qcb22efb]
| ビット位置 | コードビット | 意味 |h
| 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クッキー [#w9a3179d]
-TCP通信の正当性を確認するために、SYN + ACKパケットのシーケンス番号に埋め込むデータのこと
-TCPヘッダをハッシュ化した値などが使われる
**TCPの脆弱性 [#vcb4764a]
-発信元IPアドレスの偽装が難しい
-発信元IPアドレスが偽装されていても、コネクションの確立が必要ない攻撃に対しては弱い
--[[SYNフラッド攻撃]]
-接続要求(SYN)に対する応答(SYN/ACK)を攻撃に悪用される
--反射・増幅型[[DDoS攻撃]]
-初期シーケンス番号を推測した[[セッション・ハイジャック]]
-TCP ACKスキャン
--「[[ポートスキャン]]」参照
**関連用語 [#qd1439c9]
-[[Keep-Alive]]
-[[TCP/IP]]
-[[TFO]](TCPファストオープン)
-[[SPDY]]
-[[DCTCP]](データセンターTCP)
-[[パケット]]
-ハーフオープン
-[[UDP]]