広告
広告
https://www.7key.jp/nw/technology/protocol/ftp.html#what
FTPはファイル転送プロトコルと訳され、TCP/IPネットワーク上でファイルを転送する際に使われるプロトコルです。このプロトコルを実装したサーバやクライアントを指して単にftpと呼ぶ場合もあります(習慣としてFTPと標記するとプロトコル、ftpと小文字標記するとFTPクライアント若しくはFTPサーバを表します)。ファイル転送の元になるプロトコルはRFC114として1971年に規定されましたが、FTPはこれに改良が加えられ堅牢で信頼性の高いTCPを利用するアプリケーション層のプロトコルとしてRFC959で規定されました。ファイル転送用プロトコルとしてはNetBIOSやNFSなどもありますが、これらは特定のOSファイルシステムに対して外部ファイルシステムを仮想的にマウントするファイルマウント型ファイル転送用プロトコルです。これは即ち特定のファイルシステム――特定のOS――に依存した仕組みとも言えますので、どんな環境でも使える仕組みではありません。これに対し、FTPは純粋なクライアントサーバ型プロトコルなので、サーバソフトとクライアントソフトが両端に導入されてさえいれば、環境に依存せずファイル転送を行うことが出来るのです。このことから分かるように、FTPはインターネット初期段階からある最も古いプロトコルの一つで、更に最も広く利用されているプロトコルの1つでもあると言えるでしょう。
FTPの大きな特徴の1つとして、コネクションが2つ設けられることが挙げられます。サーバとクライアント間のコネクションをFTP制御用のコネクションとデータ転送用のコネクションに分けていることから、コネクションが2つ必要となっています。
ここでPI【Protocol Interpreter】はクライアントからの命令やサーバへの指示を実際のプロトコルに翻訳する機能を持ち、プロトコル解釈部と訳されます。PIと言う概念のおかげでFTPクライアントで使うコマンドとFTPプロトコルのコマンドを切り分けることができ、環境に依存せず同じプロトコル実装部分を共有できることとなるのです。制御用のコネクションはTelnetプロトコルに基づいています。
データ転送用コネクションが別に用意されているのは、制御用コネクションを通じてデータ転送の制御を円滑に行うためです。コネクションが1つの場合、大容量ファイルの転送中等にその処理を中止したくなってもサーバへ指示する術がありません。結果そのファイルの転送が終了するまでユーザは待たなければならなくなります。そのような理由から、制御用コネクションはコマンドやデータの転送をする際、常に確立されていなければなりません。このコネクションが維持できなければデータ転送用コネクションは閉じられ、セッションは中止されます。
https://www.7key.jp/nw/technology/protocol/ftp.html#protocol_f
細かい内容については以下の説明を参考にして下さい。
https://www.7key.jp/nw/technology/protocol/ftp.html#data_transfer
FTPでは、ファイルの転送に使われるのはデータ転送用コネクションです。ただ、FTPは異なる環境の間でのファイル転送を前提に規定されているプロトコルなので、保存されたデータのコードセットやデータの構造、どんな転送方法を採るか等を事前に両端で打ち合わせをする必要があります。こちらではその打ち合わせをする内容について説明をします。
データタイプがASCIIとEBCDICの場合は、更に垂直フォーマット制御【Vertical Format Control】を定義するパラーメータが指定されることがあります。
<CR>
、<LF>
、<NL>
、<FF>
等ASCII/EBCDIC垂直フォーマットがファイル内に存在するとみなされ、プリンタプロセスはこれらを正しく解釈しなければなりません。行の終わりには<CRLF>
が使われます。0x01
、EOF(ファイル終了)として0x02
が使用されます。EORとEOFを両方とも示す場合は0x03
で表現します。
データ部分(TCPが使われるのでMSSでセグメントに分割されることもある) | ESC 11111111 | EOR 00000001 |
データ部分 | ESC 11111111 | EOR 00000001 |
データ部分 | ESC 11111111 | EOR EOF 00000011 |
記述子 (8bit) | バイトカウント (16bit) |
https://www.7key.jp/nw/technology/protocol/ftp.html#file_transfer
コマンド | 意味 | 内容 |
---|---|---|
USER | ユーザ名の指定 | 実際のユーザ名を引数としてこのコマンドに使用する。 |
PASS | パスワードの指定 | パスワードを引数としてこのコマンドに使用する。 |
ACCT | ユーザアカウントの指定 | このコマンドはユーザアカウントを示すために使用する。略さずACCOUNTと入力する場合もある。 |
CWD | カレント作業ディレクトリの変更 | 引数に変更先ディレクトリを示すことにより、作業用ディレクトリを変更する事ができる。 |
CDUP | 親ディレクトリへの移動 | 作業用ディレクトリをカレントディレクトリの親ディレクトリに変更することができる。 |
SMNT | ファイルシステムのマウント | 異なるファイルシステムのデータ構造をマウントする事ができる。 |
REIN | ユーザ処理の再初期化 | カレントユーザを終了し、開始直後の状態に制御コネクションをリセットする。USERコマンドを再入力する必要がある。 |
QUIT | ユーザ処理の終了 | ログアウトし、制御コネクション、データコネクションともに開放する。 |
コマンド | 意味 | 初期設定 | 内容 |
---|---|---|---|
PORT | データポートの指定 | - | このコマンドでクライアントはデータ転送用コネクションの待受けポートをサーバに通知する。その際、引数の形式はPORT クライアントのIPアドレス , ポート番号上位8ビット , ポート番号下位8ビット となる(ポート番号=上位8ビット*256+下位8ビット)。 |
PASV | パッシブモードの設定 | - | パッシブモードの設定、第三者ホストの利用に使う。詳細は以下。 |
TYPE | データタイプ指定 | ASCII | データの表現方法を指定する(A:ASCII/I:IMAGE)。第2引数として垂直フォーマットを指定することも可能。 |
STRU | データ構造の指定 | FILE | F:ファイル構造/R:レコード構造/P:ページ構造をそれぞれ表す。 |
MODE | FTP転送モード指定 | STREAM | S:ストリームモード/B:ブロックモード/C:圧縮モードをそれぞれ表す。 |
コマンド | 意味 |
---|---|
RETR | 指定したファイルの転送(retrieve)。サーバのファイルシステムからファイルのコピーを取り出し、クライアントのファイルシステムに保存する。これに変えてGETコマンドを実装する設定が多数となっている。また、複数のファイルに対するGET機能としてMGET機能を実装する設定もある。 |
STOR | 指定したファイルのコピーをクライアントがサーバに転送する。これに変えてPUTコマンドを実装する設定が多数となっている。 |
STOU | ディレクトリ内で固有の名前をつけてのSTOR。 |
APPE | STORと同じだが、同名のファイルが既にあれば転送ファイルのデータがそれに追加される。 |
ALLO | ファイル格納領域の確保に使用。確保するオクテット数を10進整数の引数で示す。 |
REST | 転送リスタート設定。データストリームにマーカが使われていた場合に、このコマンドの引数として与えるマーカパターンに従ってファイル上の適切な位置までサーバにスキップさせる。このコマンドの後に適切な転送コマンドが置かれ、転送を再開する。 |
RNFR | パスとファイル名を示し、そのファイル名を変更する。このコマンドだけではすぐに効果は現れず、RNTOで新しい名前が示される。 |
RNTO | RNFRと共に使用され、ファイル名の変更を行う。 |
ABOR | 最後のFTPコマンドとデータ転送の停止。 |
DELE | 指定したファイルをサーバサイトから削除する。 |
RMD | 指定したディレクトリをサーバサイトから削除する。 |
MKD | 指定されたディレクトリを作成する。 |
PWD | カレント作業ディレクトリを応答で示させる。 |
LIST | カレント作業ディレクトリの内容を一覧表示する。又、引数でファイル名が指定されている場合は、そのファイルに関する情報を返す。 |
NLST | サーバからクライアントサイトへディレクトリの一覧を送信させる。 |
SITE | サーバ固有サービス。サイト固有のコマンドと共に使用する。 |
SYST | サーバで使っているOSを知る。 |
STAT | ファイル転送状態等サーバ状態応答を促す際に使用する。 |
HELP | FTPコマンドを一覧表示する。 |
NOOP | 何ら影響を与えず、サーバからOK応答を送信させるためだけのコマンド。 |
FTP応答は3桁の数値で示され、その後にスペースが1つと1行のテキスト文字列が続きます。その次にTelnetのEOL【End of Line】コードで区切られます。ただし、FTPでは複数行の応答が許されるよう推奨されていますので、複数行のテキスト文字列を応答に使いたい場合は最初のスペースをハイフンに置き変えて複数のテキスト文字列行を置きます。最後の行には応答コードとスペースを付け、最後にテキスト文字列の最終行を示します。又、3桁のコードには以下のような規則があります。
コード | 意味 | 説明 |
---|---|---|
1xx | 肯定先行応答 | 要求したコマンドは動作中。更に応答を待ち、新しいコマンドを出しなさい。 |
2xx | 肯定完了応答 | 要求したコマンドは完了した。新しいコマンドを出しても良い。 |
3xx | 肯定中間応答 | 最後のコマンドは受理したが、更に情報が必要なので必要な情報を示す別のコマンドをクライアントから出しなさい。 |
4xx | 一時否定完了応答 | コマンドは受理されず、要求した動作は行われない。 |
5xx | 永久否定完了応答 | コマンドは受理されず、要求した動作は行われない。コマンドの構文に恒久的な問題があるか、サーバかくらいアンとに重大な障害がある場合が普通。 |
コード | 意味 | 説明 |
---|---|---|
x0x | 構文 | 構文エラー、構文は正しいが他に分類されないコマンド、実装されていないコマンド、余分なコマンドを示す。 |
x1x | 情報 | 状態やヘルプなどの情報要求に応えるもの。 |
x2x | コネクション | 制御コネクションとデータ転送用コネクションだけに関連する応答。 |
x3x | 認証とアカウント | ログイン手順とアカウント手続きに関する応答。 |
x4x | 未使用 | - |
x5x | ファイルシステム | サーバのファイルシステムの状態に関する応答。 |
コード | テキスト文字列例 | 意味 |
---|---|---|
110 | Restart marker reply. | RESTコマンドのためのマーカー返答 |
120 | Service ready in nnn minutes. | サービスは停止しているが、nnn分後にサービスが準備される |
125 | Data connection already open; transfer starting. | データコネクションはすでに開かれていて、転送が開始される |
150 | File status okay; about to open data connection. | ファイルステータスは正常で、データコネクションが開かれようとしている |
200 | Command okay. | コマンドOK |
202 | Command not implemented, superfluous at this site. | このサイトでは実装されていないコマンドか余分なコマンド |
211 | System status, or system help reply. | システム状態応答またはシステムヘルプ応答 |
212 | Directory status. | STATコマンドによるディレクトリ状態を示す |
213 | File status. | STATコマンドによるファイル状態を示す |
214 | Help message. | HELPコマンドに対する応答 |
215 | NAME system type. | SYSTコマンドに対する応答 |
220 | Service ready for new user. | 新規ユーザー向けに準備ができている |
221 | Service closing control connection. | サービスが制御コネクションを閉じようとしている(QUITコマンド時のレスポンス) |
225 | Data connection open; no transfer in progress. | データコネクションは開いているがデータの転送は行われていない |
226 | Closing data connection. | 要求されたファイル動作は成功し、データコネクションを閉じようとしている |
227 | Entering Passive Mode (h1,h2,h3,h4,p1,p2). | PASVコマンドへのレスポンス。h1〜h4はIPアドレス、p1〜p2はポート番号を示す |
230 | User logged in, proceed. | ユーザーログインの成功 |
250 | Requested file action okay, completed. | 要求されたファイルアクションはOK |
257 | PATHNAME created. | PATHNAMEが作成作成された(PWDコマンドの結果にも用いられる) |
331 | User name okay, need password. | ユーザ名OK、パスワードが必要 |
332 | Need account for login. | ログインにアカウントが必要 |
350 | Requested file action pending further information | 要求されたファイルアクションには詳細情報が必要 |
421 | Service not available, closing control connection. | サービスが利用不能、制御コネクションを閉じる |
425 | Can't open data connection. | データコネクションを開けない |
426 | Connection closed; transfer aborted. | 何らかの原因により、コネクションを閉じ、データ転送中止 |
450 | Requested file action not taken. | 要求されたファイル動作はアクセス権限やファイルシステムの理由で実行できない |
451 | Requested action aborted. Local error in processing. | 要求されたファイル動作はローカルエラーのため中止 |
452 | Requested action not taken. | ディスク容量の問題で実行不可 |
500 | Syntax error, command unrecognized. | 構文を認識できない |
501 | Syntax error in parameters or arguments. | パラメータか引数の構文エラー |
502 | Command not implemented. | コマンドが未実装 |
503 | Bad sequence of commands. | コマンドを用いる順番が不正 |
504 | Command not implemented for that parameter. | 引数やパラメータが未実装 |
530 | Not logged in. | ユーザーはログインできなかった |
532 | Need account for storing files. | ファイルの保存にはアカウントが必要 |
550 | Requested action not taken. | 要求されたファイル動作はアクセス権限やファイルシステムの理由で実行できない |
551 | Requested action aborted. Page type unknown. | ページタイプが不明なため要求された動作は中止 |
552 | Requested file action aborted. | ディスク容量の問題で要求された動作は中止 |
553 | Requested action not taken. | ファイル名が不正なため要求された動作は中止 |
https://www.7key.jp/nw/technology/protocol/ftp.html#sansya
FTPでは、データ転送用コネクションが確立されるのが必ずしもFTPサーバとFTPコマンドを起動した端末との間である必要はありません。他の2つの端末間でのファイル転送をFTPにて行うことも可能です。ただし、そのためにはその2端末に適応したユーザであることと、送信元ファイルと受信先ディレクトリへのアクセス権が必要となります。その際、自端末と他の2端末の間に制御コネクションが開かれ、他の2端末間にデータ転送用コネクションが開かれることとなります。
https://www.7key.jp/nw/technology/protocol/ftp.html#passive
FTPではファイル転送をする際に、データ転送用コネクションを使用します。このコネクションは使用ポートをクライアントがサーバに通知し、サーバ側からスリーウェイハンドシェイクを使って接続されます。環境によってはこの機能が問題となる場合があります。例えば、多くのファイアウォール環境下で外部から内部へ向けて接続要求の来るコネクションは、セキュリティ上問題が多いため許可されていません。データ転送用コネクションが開かれなければファイル転送が出来ず、FTPを使用する意味がありません。
そこで、データ転送用コネクションもクライアント側から接続するための機能としてパッシブモード【Passive Mode】が用意されています。まずFTPクライアントはサーバに向けて引数無しでPASV
コマンドを送信します。それを受けたサーバは以下のような応答を返します(括弧内書式はPORTコマンドの引数と同様)。
227 Entering Passive Mode (12,34,56,xx,14,100)
つまり、サーバは「12.34.56.xxと言うIPアドレスの3,684ポートへデータ転送用コネクションを接続して下さい」と言っているわけです。このことによりクライアントからサーバに向けてデータ転送用コネクションを確立することが出来るのです。また、パッシブモードに対してPORTコマンドを用いた通常のコネクション確立動作をアクティブモードと呼びます。
https://www.7key.jp/nw/technology/protocol/ftp.html#anonymous
FTPでファイル転送は行いたいが、わざわざユーザ認証をする必要は無い、と言う場合も多々あろうかと思います。例えばインターネット上で不特定多数に向けてファイルを公開したい場合。ユーザ認証機能が邪魔となります。その様な場合のために、RFC1635でFTPアクセス認証を行わないようにする方法が規定されています。ログインユーザ名にAnonymous
、パスワードにはメールアドレスやguestを入力し、それだけでアクセスが認められると言うものです。
https://www.7key.jp/nw/technology/protocol/ftp.html#supplement
広告