TCP
TCP(Transmission Control Protocol, 伝送制御プロトコル)
コネクション型プロトコル
相手の確認と通信経路の設定を行なってから通信を開始する方式
送ったデータが相手に届いたか、その都度確認しながら通信するやり方
関連: UDP
ポート番号をもとにアプリケーションにデータを振り分けるプロトコル
3-wayハンドシェイク
TCPにおけるコネクションの確立の手順
信頼性の確保
誤り制御
再送制御
順序制御
輻輳制御
データ単位(PDU)はTCPセグメント
TCPヘッダは20バイト
3ウェイハンドシェイク
SYN=1, ACK=0, シーケンス番号=M,確認応答番号=0
コネクション確立の要求
SYNパケット
Mはランダムな値
SYN=1, ACK=1, シーケンス番号=N,確認応答番号=M+1
接続先の接続OKの応答
SYN+ACKパケット
Nはランダムな値?
SYN=0, ACK=1, シーケンス番号=M+1,確認応答番号=N+1
接続元の接続OKの応答
ACKパケット
code:mermaid
sequenceDiagram
participant A as ホストA
participant B as ホストB
A->>B: 1. 接続確認<br>SYN=1, ACK=0, シーケンス番号=N, 確認応答番号=0
B->>A: 2. 接続先の接続OKの応答<br>SYN=1, ACK=1, シーケンス番号=N, 確認応答番号=M+1
A->>B: 3. 接続元の接続OKの応答<br>SYN=0, ACK=1, シーケンス番号=M+1, 確認応答番号=N+1
TCP関連のカーネルパラメータを確認する場合はsysctlを使ってgrepする。
$ sudo sysctl -a 2>&1 | grep -i tcp
カーネルパラメータについてはここを見るのがよさそう?
linux/Documentation/sysctl/net.txt at v4.15 · torvalds/linux
ソケットの状態はnetstatやssコマンドで確認する
Linux内部で使われているものはTIPCと呼ぶのかもしれない。
TIPCはTransparent Inter-Process Communicatinというものなので違うっぽい
TCP関連のRFC
RFC 7414 - A Roadmap for Transmission Control Protocol (TCP) Specification Documents
RFC 9293 - Transmission Control Protocol (TCP)
確認用
Q. TCP
Q. コネクション型のプロトコルとは
Q. 3-wayハンドシェイクの手順
Q. 1回目の場合
Q. 2回目の場合
Q. 3回目の場合
関連
ポートスキャン
nmap
トランスポート層
参考
TCP/IP - TCPとは - TCPヘッダ
TCP/IP - TCP 3ウェイハンドシェイク
Transmission Control Protocol - Wikipedia
RFC 7414 - A Roadmap for Transmission Control Protocol (TCP) Specification Documents
RFC 9293 - Transmission Control Protocol (TCP)
TCP/IP - TCP 順序制御、再送制御
TCP/IP - TCP ウィンドウ制御、フロー制御
【図解】TCPの状態遷移 〜Listen、Establish、FIN Wait等〜 | SEの道標
ネットワーク関連の雑多な用語整理 - Qoosky
TIPCのメモ
Transparent Inter-process Communication - Wikipedia
tipc(8) - Linux manual page
メモ
Nmapによるポートスキャン基礎 #Security - Qiita
【数分解説】TCP: フロー制御と輻輳制御、再送により確実な通信を行うプロトコル.UDPと違いリアムタイム性より信頼性重視【トランスポート層/通信】 - YouTube
#TCP/IP #プロトコル