TCP 3-way handshakeの復習
3 way handshakeのおさらい
tcpdump の見方を勉強を見ながら自分でもやってみた。
ほとんど、上記のブログのままやってます。
clientとserverはこちらを使っています。
コネクション開始
1. SYN
クライアントからSYNを送る
時刻(HH:MM:SS.マイクロ秒) | 送信元 > 送信先 | Flags: フラグ | seq: シーケンス番号 | ack: ACK 番号 | win: ウィンドウサイズ | options: TCPのオプション | lengh: 送信バイト数 |
---|---|---|---|---|---|---|---|
15:59:33.795719 | localhost.58710 > localhost.italk | S(SYN(コネクション確立要求)) | 2814860088 | なし | 65535 | mss 16344,nop,wscale 4,nop,nop,TS val 927136454 ecr 0,sackOK,eol | 0 |
15:59:33.795719 IP localhost.58710 > localhost.italk: Flags [S], seq 2814860088, win 65535, options [mss 16344,nop,wscale 4,nop,nop,TS val 927136454 ecr 0,sackOK,eol], length 0
2. SYN/ACK
サーバーからSYN + ACKを送る
時刻(HH:MM:SS.マイクロ秒) | 送信元 > 送信先 | Flags: フラグ | seq: シーケンス番号 | ack: ACK 番号 | win: ウィンドウサイズ | options: TCPのオプション | lengh: 送信バイト数 |
---|---|---|---|---|---|---|---|
15:59:33.795801 | IP localhost.italk > localhost.58710 | S.(SYN + ACK (接続許可)) | 1552828466 | 2814860089(1のseq + 1) | 65535 | mss 16344,nop,wscale 4,nop,nop,TS val 927136454 ecr 927136454,sackOK,eol | 0 |
15:59:33.795801 IP localhost.italk > localhost.58710: Flags [S.], seq 1552828466, ack 2814860089, win 65535, options [mss 16344,nop,wscale 4,nop,nop,TS val 927136454 ecr 927136454,sackOK,eol], length 0
3. ACK
クライアントからのACK
時刻(HH:MM:SS.マイクロ秒) | 送信元 > 送信先 | Flags: フラグ | seq: シーケンス番号 | ack: ACK 番号 | win: ウィンドウサイズ | options: TCPのオプション | lengh: 送信バイト数 |
---|---|---|---|---|---|---|---|
15:59:33.795801 | localhost.58710 > localhost.italk | . |
なし | 1(本当は2のseq(1552828466) +1 tcpdumpの-Sオプションでfullの数字になる ) | 9186 | nop,nop,TS val 927136454 ecr 927136454 | 0 |
15:59:33.795814 IP localhost.58710 > localhost.italk: Flags [.], ack 1, win 9186, options [nop,nop,TS val 927136454 ecr 927136454], length 0
コネクションクローズ
1. クライアントがFIN + ACK送る
時刻(HH:MM:SS.マイクロ秒) | 送信元 > 送信先 | Flags: フラグ | seq: シーケンス番号 | ack: ACK 番号 | win: ウィンドウサイズ | options: TCPのオプション | lengh: 送信バイト数 |
---|---|---|---|---|---|---|---|
17:22:03.845002 | IP localhost.61206 > localhost.italk | F. |
1 | 6 | 9186 | nop,nop,TS val 932053925 ecr 932053925 | 0 |
17:22:03.845002 IP localhost.61206 > localhost.italk: Flags [F.], seq 1, ack 6, win 9186, options [nop,nop,TS val 932053925 ecr 932053925], length 0
2. サーバーがFIN + ACK返す
時刻(HH:MM:SS.マイクロ秒) | 送信元 > 送信先 | Flags: フラグ | seq: シーケンス番号 | ack: ACK 番号 | win: ウィンドウサイズ | options: TCPのオプション | lengh: 送信バイト数 |
---|---|---|---|---|---|---|---|
17:22:03.845253 | IP localhost.italk > localhost.61206 | F. |
6(1の時のack番号) | 2(1の時のseq + 1) | 9186 | nop,nop,TS val 932053925 ecr 932053925 | 0 |
17:22:03.845253 IP localhost.italk > localhost.61206: Flags [F.], seq 6, ack 2, win 9186, options [nop,nop,TS val 932053925 ecr 932053925], length 0
3. クライアントがFINに対するACK返す
時刻(HH:MM:SS.マイクロ秒) | 送信元 > 送信先 | Flags: フラグ | seq: シーケンス番号 | ack: ACK 番号 | win: ウィンドウサイズ | options: TCPのオプション | lengh: 送信バイト数 |
---|---|---|---|---|---|---|---|
17:22:03.845277 | IP localhost.61206 > localhost.italk | . |
なし | 7(2の時のseq + 1) | 9186 | nop,nop,TS val 932053925 ecr 932053925 | 0 |
17:22:03.845277 IP localhost.61206 > localhost.italk: Flags [.], ack 7, win 9186, options [nop,nop,TS val 932053925 ecr 932053925], length 0
その他
Flagsの定義
Flags are some combination of S (SYN), F (FIN), P (PUSH), R (RST), U (URG), W (ECN CWR), E (ECN-Echo) or `.' (ACK), or `none' if no flags are set.
なので、S.
はSYN + ACK
.
はACKのみ
TCPのオプション
- mss : 最大セグメント長 Max-segment-size
- wscale : ウィンドウスケール
- sackOK : Selective Acknowledgmentが有効
- TS val ecr : valはタイムスタンプ ecrはecho reply 参照 rfc7323
- nop : パディング No operation provides padding around other options
- eol : オプションリストの終わり
参考文献
基礎から学ぶWindowsネットワーク:第16回 信頼性のある通信を実現するTCPプロトコル(3) (1/4) - @IT