FTPプロトコル概要

●概要
FTP(File Transfer Protocol) は呼んで字の如く、ファイルを転送する為の通信手段です。
FTPはコマンドのやり取りを行う為の回線(接続)と、データを転送する為の回線があります。


●コマンド用の回線
コマンド用の回線はクライアントからコマンドを送信しサーバから結果を受け取るといった
対話型の手順になります。
クライアントからのコマンド形式コマンド[<空>パラメータ]<CRLF>
サーバからの結果の形式<結果><区切り>[メッセージ]<CRLF>
<空>:半角空白(0x20)
<CRLF>:終端コード(0xOD、0x0A)
<結果>:コマンドの実行結果(半角数字3桁固定)
<区切り>:コマンドの実行結果が複数行で継続する場合、半角空白(0x20)以外が設定される


●データ転送用の回線
転送するデータの形式(TYPE)を指定し、転送を行うコマンド(LIST/NLST/RETR/STUR/STOU/APPE)を
実行すると、指定した手順(PORT/PASV)で回線を接続しデータの転送を行う。


FTPプロトコルコマンド
コマンド名引数コマンドの機能概要
USSRユーザIDサーバにログインする為のユーザIDを指定する
PASSパスワードサーバにログインする為のパスワードを指定する
ACCTアカウントサーバにログインする為のアカウントを指定する
CWDディレクトリ名指定したディレクトリに移動する
CDUP ディリトクリを1階層上に移動する(CD ..)
SMNT  
REIN  
QUIT無しログアウト(回線切断)を行う
PORT接続情報データ転送時(RETR、STOU、STOR、LIST、NLST)
指定した接続先にサーバが接続することを要求する
パラメータにクライアント側の接続情報(※1)を指定する
PASV無しデータ転送時(RETR、STOU、STOR、LIST、NLST)
サーバに対して接続することを要求する
応答にサーバ側の接続情報(※1)がある。
TYPEA:テキスト(アスキー)
I:バイナリ(イメージ)
他:未対応
データ転送時(RETR、STOU、STOR、LIST、NLST)転送モードを指定する
テキスト指定時に区切りをCRLFにする
STRUF/R/P 
MODES/B/C 
RETR受信ファイル名サーバから指定したファイルを受信する
STUR送信ファイル名サーバへ指定したファイルを送信する
同名のファイルがある時は上書きされる
STOU送信ファイル名サーバへ指定したファイルを送信する
同名のファイルがある時は失敗する
APPE送信ファイル名サーバへ指定したファイルを送信する
同名のファイルがある時は追加される
ALLO確認データサイズサーバが指定サイズのデータを送信可能か
確認します(NOOPとして扱うサーバもある)
REST  
RNFR変更前ファイル名指定したファイル名をRNTOで変更します
RNTO変更後ファイル名RNFRで指定したファイル名を変更します
ABOR データ転送の中止
(間に合わない事が多い?)
DELE削除ファイル名指定したファイルを削除します。
RMD削除ディレクトリ名指定したディレクトリを削除します。
但し、ディレクトリに何か有ると失敗する
MKD作成ディレクトリ名指定したディレクトリを作成します。
PWD無し現在の作業(カレント)ディレクトリを取得する
LISTディレクトリ名指定したディレクトリのリストを取得する
※情報の形式はOSに依存する
(UNIXの属性情報つきLSと同じ/EWSはls -la)
NLSTディレクトリ名指定したディレクトリのリストを取得する
情報(名前)のみ
※プログラムでファイルを処理する時は便利?
SITE  
SYST無しサーバのOSタイプを取得する
STAT無し 
HELPコマンド名使用可能コマンドやコマンドの引数を確認します
NOOP無しサーバとの接続を確認します
一定時間通信が無いとサーバは回線を切断します

※1:接続情報
 XXX,XXX,XXX,XXX,xxx,xxx
 1,2,3,4,5,6
 1〜4:IPアドレスの第1〜4バイト
 5  :ポート番号の上位1バイト
 6  :ポート番号の下位1バイト
 例1:218,216,67,37,151,101
    IP 「218.216.67.37」
    ポート「38757」

FTPプロトコルフロー



USER userid
331 Password required for userid.

>PASS password
230 User okirakusho logged in.

 



>RNFR OldFileName.txt
350 File or directory exists, ready for destination name.

>RNTO NewFileName.txt
250 Rename successful

 



>TYPE A
200 Type set to A

>PORT XXX,XXX,XXX,XXX,xxx,xxx
200 PORT command successful

>NLST
150 Opening ASCII mode data connection for file list
226 Transfer complete.

 



>TYPE A
200 Type set to A

>PORT XXX,XXX,XXX,XXX,xxx,xxx
200 PORT command successful

>RETR /dirname/filename.txt
150 Opening ASCII mode data connection for /dirname/filename.txt (xxxx bytes)
226 Transfer complete.

 



>TYPE I
200 Type set to I

>PASV 227 Entering Passive Mode (XXX,XXX,XXX,XXX,xxx,xxx).
>STOR /dirname/filename.txt
150 Opening BINARY mode data connection for /dirname/filename.txt
226 Transfer complete.

 



>PWD
257 "/DirName/DirName2" is current directory.

>CWD DirName
250 CWD command successful.

>MKD NewDirName
257 "/DirName/NewDirName" - Directory successfully created

>RMD /DirName/NewDirName
250 RMD command successful

>DELE /DirName/FileName
250 DELE command successful.