フラグ | 概 要 |
SYN | TCPコネクションの確立を要求する最初のパケットに付与されるフラグ。 |
ACK | 応答確認のためのフラグであり、接続要求以外の全てのパケットに付与されるフラグ。 |
PSH | 受信したデータをバッファリングせず、直ちにアプリケーションに渡すことを要求するフラグ。大きなデータをフラグメントした場合は、最後のパケットに付与される。 |
FIN | コネクションの切断を要求するフラグ。 |
RST | コネクションの強制切断用のフラグ。データ転送中にキャンセルボタンを押した時などに送出される。 |
FTP通信のイメージ
[凡例]
・Src. : パケットの送信元
・Dst. : パケットの送信先
・Prot : 全てTCPであるが、コネクション制御は「TCP」、制御コネクションは「FTP」、データコネクションは「FTPD」で表記
・Info : パケットの使用ポート番号や実際のデータ。Res.:Responce Req:Request
緑:制御コネクションの設定・開放
黒:制御コネクション上でやり取りされる制御情報
青:データコネクションの設定・開放
赤:データコネクション上で実際にやり取りされるデータ(リスト、test.txt等)
No. |
Src. Dst. Prot info |
概 要 |
1 |
client server TCP 1223 > ftp [SYN] server client TCP ftp > 1223 [SYN, ACK] client server TCP 1223 > ftp [ACK] |
クライアント側の1223番ポートから、サーバ側の21番ポートに向かって制御コネクションを設定するフェーズ。フラグが上記のとおり設定されている様子がわかる。 |
4 |
server client FTP Res: 220 ProFTPD 1.2.7rc3 Server (Aconus.com
FTP Server) client server FTP Req: USER linux server client TCP ftp > 1223 [ACK] |
サーバからの接続メッセージを受け、クライアントからログインユーザを通知するフェーズ。 |
7 |
server client FTP Res: 331 Password required for linux. client server FTP Req: PASS ******* server client TCP ftp > 1223 [ACK] server client FTP Res: 230 User linux logged in. |
サーバからのユーザに対するパスワード要求と、クライアントからサーバへのパスワード送信とその応答フェーズ。 |
11 |
client server FTP Req: PWD server client TCP ftp > 1223 [ACK] server client FTP Res: 257 "/" is current directory |
クライアントからサーバへのカレントディレクトリの送信要求とその応答。 |
14 |
client server FTP Req: TYPE A server client FTP Res: 200 Type set to A. |
クライアントからサーバへのASCUモードへの変更要求とその応答。 |
16 17 |
client server FTP Req: PORT 192,168,1,2,4,200 server client FTP Res: 200 PORT command successful |
クライアントからデータコネクションの待ち受けアドレス(4*256+200=1224)をPORTコマンドでサーバに通知。 |
18 | client server FTP Req: LIST -aL | LISTコマンドでリストの送信を要求。 |
19 |
server client TCP ftp-data > 1224 [SYN] client server TCP 1224 > ftp-data [SYN, ACK] server client TCP ftp-data > 1224 [ACK] |
LISTコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1224番ポートに向かってデータコネクションを設定するフェーズ。 |
22 |
server client FTP Res: 150 Opening ASCII mode data
connection for file list server client FTPD FTP Data: 251 bytes |
LISTを送るための制御コネクションのオープンを通知し、LISTデータをサーバからデータコネクションを使って送信。 |
24 |
server client TCP ftp-data > 1224 [FIN, ACK] client server TCP 1224 > ftp-data [ACK] client server TCP 1224 > ftp-data [FIN, ACK] server client TCP ftp-data > 1224 [ACK] |
双方から使用したデータコネクションを開放するフェーズ。FTPの場合、データコネクションは一回の通信ごとに設定、開放される。 |
28 |
server client FTP Res: 226 Transfer complete. client server TCP 1223 > ftp [ACK] |
No.28で制御コネクションでサーバ側から送信完了を通知。No.29は、クライアント側からの送信完了通知に対する応答。 |
30 31 |
client server FTP Req: TYPE A server client FTP Res: 200 Type set to A. |
クライアントからサーバへのASCUモードへの変更要求とその応答。 |
32 33 |
client server FTP Req: PORT 192,168,1,2,4,201 server client FTP Res: 200 PORT command successful |
クライアントからデータコネクションの待ち受けアドレス(4*256+201=1225)をPORTコマンドでサーバに通知。 |
34 | client server FTP Req: RETR test.txt | RETRコマンドでtest.txtの送信を要求。 |
35 36 37 |
server client TCP ftp-data > 1225 [SYN] client server TCP 1225 > ftp-data [SYN, ACK] server client TCP ftp-data > 1225 [ACK] |
RETRコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1225番ポートに向かってデータコネクションを設定するフェーズ。 |
38 39 |
server client FTP Res: 150 Opening ASCII mode data connection
for test.txt (906 bytes) server client FTPD FTP Data: 926 bytes |
指定ファイルを送るための制御コネクションのオープンを通知し、指定されたファイルをサーバからデータコネクションを使って送信。 |
40 41 42 43 |
server client TCP ftp-data > 1225 [FIN, ACK] client server TCP 1225 > ftp-data [ACK] client server TCP 1225 > ftp-data [FIN, ACK] server client TCP ftp-data > 1225 [ACK] |
双方から使用したデータコネクションを開放するフェーズ。 |
44 45 |
server client FTP Res: 226 Transfer complete. client server TCP 1223 > ftp [ACK] |
サーバからクライアントへデータ転送が完了した旨の通知とその応答。 |
46 47 |
client server FTP Req: PORT 192,168,1,2,4,202 server client FTP Res: 200 PORT command successful |
クライアントからデータコネクションの待ち受けアドレス(4*256+202=1226)をPORTコマンドでサーバに通知。 |
48 | client server FTP Req: STOR test.txt.bak | STORコマンドでtest.txt.bakの受信を要求。 |
49 50 51 |
server client TCP ftp-data > 1226 [SYN] client server TCP 1226 > ftp-data [SYN, ACK] server client TCP ftp-data > 1226 [ACK] |
STORコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1226番ポートに向かってデータコネクションを設定するフェーズ。 |
52 53 |
server client FTP Res: 150 Opening ASCII mode data connection
for test.txt.bak client server FTPD FTP Data: 926 bytes |
指定ファイルを受信するための制御コネクションのオープンを通知し、ファイルをクライアントからデータコネクションを使って受信。 |
54 55 56 57 |
client server TCP 1226 > ftp-data [FIN, ACK] server client TCP ftp-data > 1226 [ACK] server client TCP ftp-data > 1226 [FIN, ACK] client server TCP 1226 > ftp-data [ACK] |
双方から使用したデータコネクションを開放するフェーズ。(ここではクライアントから先に切断したように見えている) |
58 59 |
server client FTP Res: 226 Transfer complete. client server TCP 1223 > ftp [ACK] |
サーバからクライアントへデータ転送が完了した旨の通知とその応答。 |
60 61 |
client server FTP Req: TYPE A server client FTP Res: 200 Type set to A. |
クライアントからサーバへのASCUモードへの変更要求とその応答。 |
62 63 |
client server FTP Req: PORT 192,168,1,2,4,203 server client FTP Res: 200 PORT command successful |
クライアントからデータコネクションの待ち受けアドレス(4*256+203=1227)をPORTコマンドでサーバに通知。 |
64 | client server FTP Req: LIST -aL | LISTコマンドでリストの送信を要求。 |
65 66 67 |
server client TCP ftp-data > 1227 [SYN] client server TCP 1227 > ftp-data [SYN, ACK] server client TCP ftp-data > 1227 [ACK] |
LISTコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1227番ポートに向かってデータコネクションを設定するフェーズ。 |
68 69 |
server client FTP Res: 150 Opening ASCII mode data connection
for file list server client FTPD FTP Data: 251 bytes |
LISTを送るための制御コネクションのオープンを通知し、LISTデータをサーバからデータコネクションを使って送信。 |
70 71 72 73 |
server client TCP ftp-data > 1227 [FIN, ACK] client server TCP 1227 > ftp-data [ACK] client server TCP 1227 > ftp-data [FIN, ACK] server client TCP ftp-data > 1227 [ACK] |
双方から使用したデータコネクションを開放するフェーズ。 |
74 75 |
server client FTP Res: 226 Transfer complete. client server TCP 1223 > ftp [ACK] |
サーバからクライアントへデータ転送が完了した旨の通知とその応答。 |
76 77 |
client server FTP Req: QUIT server client FTP Res: 221 Goodbye. |
クライアント側からの切断要求とその応答。 |
78 79 80 |
server client TCP ftp > 1223 [FIN, ACK] client server TCP 1223 > ftp [ACK] client server TCP 1223 > ftp [RST] |
最後にサーバ側から制御コネクションの切断要求とその応答が見える。最後のRSTフラグのパケットは強制切断である。 |