FTPの通信をパケットキャプチャーしてみよう。

FTPの通信をパケットキャプチャーしてみよう。

 

参考URL

tcpdump の見方を勉強 - Please Sleep

linux-biyori.sakura.ne.jp

サーバ:Linuxサーバ

クライアント:Javaで作成したFTPプログラム


サーバ側でキャプチャーしてみました。

FTP

FTP基本:21番ポートが制御用
     20番ポートがデータ用

コマンド:tcpdump port 20 or port 21

①まずクライアント側から サーバ側の21番ポートに対して、Flagが [S] SYN(コネクション確立要求)です。
 シーケンス番号は「2155816753」windowサイズが8kb

17:36:16.965909 IP 192.168.3.2.49624 > 192.168.3.150.ftp: Flags [S], seq 2155816753, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

②次に、サーバ側の21番ポートから同様にFlags [S.](コネクション確立要求)です。なんで[S.]があるんだろう??
 ACKがあることは、SYNに対する確認応答です。ACKは「2155816754」で+1されています。

17:36:16.965984 IP 192.168.3.150.ftp > 192.168.3.2.49624: Flags [S.], seq 2742584544, ack 2155816754, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7],

③フラグがなくなりました。ただしクライアント側からもきちんとACKしていますね。
 ackの「1」は見やすくしているためで、本当は、+1しているので「2155816755」です。(余計にわかりにくいな。。。)
 ※ちなみにtcpdump に -S オプションをつけるとそのままのシーケンス番号を表示してくれる。

17:36:16.966903 IP 192.168.3.2.49624 > 192.168.3.150.ftp: Flags [.], ack 1, win 256, length 0

④21番ポートから20バイトのデータが送信されている。開始シーケンスと終了シーケンスが記載されている。
 seq 1:21は"開始シーケンス番号:終了シーケンス番号" という意味らしい。納得。
1+20は21という感じかな
 ちなみに、PはPUSH(バッファリングせず、即時にデータを送るようTCPに要求)
 マスタリングTCP/IPには、Pがある場合は、バッファリングしてはならない。即座にデータを送信する必要あり。

17:36:16.970634 IP 192.168.3.150.ftp > 192.168.3.2.49624: Flags [P.], seq 1:21, ack 1, win 115, length 20

⑤次はクライアント側から13バイト送信している。
 そのためシーケンス番号はseq 1:14で納得。ackもしており、21までokって。双方向通信だな。
 

17:36:16.975339 IP 192.168.3.2.49624 > 192.168.3.150.ftp: Flags [P.], seq 1:14, ack 21, win 256, length 13

⑥サーバ側から14番ack。今更だけど「.」(ドット)はフラグなしみたい。

17:36:16.975362 IP 192.168.3.150.ftp > 192.168.3.2.49624: Flags [.], ack 14, win 115, length 0

途中省略

⑦次にftp-dataからのコネクションのSYNパケットが開始される。
 クライアント側から21番ポートにSYNを送って通信は開始されるが
 20番ポートの場合は、サーバ側からSYNパケットが始まるんだ。今回はクライアント側からのPUTにも関わらず、、

17:36:17.035540 IP 192.168.3.150.ftp-data > 192.168.3.2.49625: Flags [S], seq 1545207833, win 14600, options [mss 1460,sackOK,TS val 93797 ecr 0,nop,wscale 7],

⑧これはseqが+1されているので問題なし。

17:36:17.036495 IP 192.168.3.2.49625 > 192.168.3.150.ftp-data: Flags [S.], seq 1 482706172, ack 1545207834, win 8192, options [mss 1460,nop,wscale 8,sackOK,TS va l 122508 ecr 93797], length 0 length 0

⑨それでデータ転送が開始されていきます

17:36:17.036514 IP 192.168.3.150.ftp-data > 192.168.3.2.49625: Flags [.], ack 1, win 115, options [nop,nop,TS val 93798 ecr 122508], length 0