TCP のバックアップソース(No.3)

#author("2021-12-09T11:32:48+09:00","default:k1rou","k1rou")
*TCP とは [#z837be3c]
**名称 [#f0cc4e87]
-Transmission Control Protocol

**概要 [#fe9200f3]
-トランスポート層([[OSI参照モデル]]、[[TCP/IPモデル]])の通信プロトコル
-コネクション型
--通信の信頼性が高い
--送信元[[IPアドレス]]の偽装が難しい(可能ではある)

*TCPの仕組み [#t30689b8]
**TCPコネクション [#ldc46dbb]
-通信の開始時に通信路を確立し、終了時に通信路を解放する
-3つのフェーズで行われる
++コネクション確立フェーズ
++通信フェーズ
++コネクション切断フェーズ

***コネクション確立フェーズ [#a38000d7]
-[[3wayハンドシェイク]]
--1. →(SYN)
--2. ←(ACK + SYN)
--3. →(ACK)
-※SYN:コネクション確立要求
-※ACK:肯定応答

***コネクション切断フェーズ [#j7f991bf]
--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]]