#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]]