FTP
File Transfer Protocol(ファイル・トランスファー・プロトコル、略称:FTP)は、ネットワークでファイルの転送を行うための通信規約(プロトコル)です。日本語訳は、ファイル転送プロトコル。
インターネット初期の頃から存在するプロトコルで、今でもインターネットでよく使用されるプロトコルの1つです。プロトコル上は任意のホスト間のファイル転送を行うことが可能でありますが、通常は接続したクライアントとサーバ(FTPサーバ)間の転送に利用されます。用途としてはウェブページ用各種データファイル(HTMLソース、画像など)のクライアントのパソコン→ウェブサーバへのアップロードパソコンソフト配布サイトや、データが入っているFTPファイルサーバからクライアントへのファイルのダウンロードなどに使われます。ダウンロードについては、ブラウザソフトでも可能であるが、アップロードについてはFTPクライアントソフトやCUIコマンドが必要となります。任意のホスト間の転送を指示できる名残として、サーバへの接続時のコマンド用とは別にデータ転送用のコネクションを確立しますが、この確立方法にアクティブモード、パッシブモードという2種類の方式があります。アクティブモード(ポートモードとも言う)では、クライアントがサーバへ待ち受けIPアドレスとポート番号を通知し、サーバがクライアントから通知されたIPアドレスのポート番号へコネクションを確立しに行きます。このとき利用するポート番号が毎回異なるので、ファイアーウォール、NAT(IPマスカレード)などを使った環境では場合によってはうまく接続できないこともあります。この場合はパッシブモードを用います。パッシブモードではサーバがクライアントへ待ち受けポート番号を通知し、待ち受けポート番号の通知を受けたクライアントがサーバへコネクションを確立しに行きます。いずれのモードでも、コマンド用とデータ用で別々のコネクションを張ることには変わりはありません。サーバ側にファイアーウォールがある場合、データコネクションのためにどのポート番号を使うかを設定してファイアーウォールとの整合を確認する必要があります。パッシブモードを使っている限りにおいては、クライアント側のファイアーウォールは気にする必要がありません。通常、サーバに接続する際には認証を必要としますが、専らファイル(主に無償のフリーソフトなど)を配布する目的で、匿名でアクセスできる Anonymous(匿名) FTP サーバを用いる場合もあります。ただし、匿名アクセスでも形式上認証が必要であり、この場合、ユーザとして"anonymous"または"ftp"を指定します。パスワードは通常何でもいいですが、配布したソフトに瑕疵があった場合などにサーバ管理者が連絡をとることができるよう、ユーザの電子メールアドレスを指定するのがマナー(ネチケット)とされてきました(メールアドレスのドメインがクライアントのIPアドレスの逆引きなどから明らかな場合は、"foo@"のようにドメインを省略することも多い)。サーバによっては、パスワードがメールアドレスの形式を満たさないと利用できないこともあります。しかし、近年ではスパム(迷惑メール)などの問題により、むやみにメールアドレスを公開しない風潮が高まっていることから、このマナーは廃れつつあります。また、現在ではFTPクライアント機能を備えたウェブブラウザで匿名FTPサーバにアクセスすることも多く、この場合パスワードは特に指定しない限りブラウザのデフォルト設定(Internet Explorerであれば"IEuser@"など)が使われ、メールアドレスとして意味のあるものにはなりません。
FTPのセキュリティ
FTPは、サーバ(ウェブサーバなど)へのアップロードを行う場合、コマンドによりサーバ側のファイルを変更、消去することも可能であるため(一般的にクライアント側からのウェブサーバ内のデータファイルの入れ替えや削除などのメンテナンスは、FTPソフトを使って行うことが多い)、転送前にユーザ名とパスワードによる認証が必要となります。通常のFTPアップロードでは、パスワードが暗号化されず危険であるため、ワンタイムパスワードを利用した認証を行ったり、SCP(「同様の目的に使えるプロトコル」参照)などで代替したりすることが多いです。一方、フリーソフトなどのダウンロード専用のFTPサーバでは、認証無しで接続・ダウンロードできるサーバも多いです。
TFTP
Trivial File Transfer Protocol (TFTP) は、UDPを用いてコンピュータ間でファイルを転送するためのプロトコルです。FTPに比べて軽量・単純なプロトコルです。認証機能が無いためにユーザ名やパスワードを必要としません。ポート番号69をデフォルトとして使用します。Remote Installation ServicesやPXEなどのネットワーク・ブート環境において、ディスクレスマシンがブートする際、BOOTPやDHCPで構成情報を取得した後に、実際のOSコードをサーバから取得する際に利用されます。また、ルータなどの設定の読み取りや書き込みなどにも用いられます。
FTPS
FTPS (File Transfer Protocol over SSL/TLS) は、FTPで送受信するデータをSSLまたはTLSで暗号化するプロトコル。IETFにより、RFC 2228やRFC 4217で標準化されています。Well-known Portは、FTPと同じ21/tcp。SFTP (SSH File Transfer Protocol) とは全くの別物です(SFTPは22/tcp)。FTPの認証で送信されるユーザ名、パスワードの電文が暗号化されていない状態(クリアテキスト)であるため、第三者に盗聴・侵入される危険性があります。FTPSはその危険性を回避するために制定されました。FTPSには、認証コマンド(AUTHコマンド)実行後に暗号化通信を開始するExplicitモードと、FTPSサーバ接続開始時点から暗号化通信を開始するImplicitモードが存在します。Explicitモードは、サーバに接続した後にクライアントがAUTHコマンドを実行して、使用するプロトコル(SSLまたはTLS)のネゴシエーションをおこない、適合したプロトコルでのハンドシェイク完了後に暗号化された通信がおこなわれます。つまりExplicitモードの場合、クライアントがAUTHコマンドを実行しなければ通常のFTPとして機能します。Implicitモードは、サーバに接続した直後にSSLまたはTLSによるハンドシェイクがおこなわれます。Implicitモードで動作するサーバに接続する場合、クライアントはサーバが採用している暗号化プロトコルに適合したFTPSクライアントソフトを使用する必要があります。また、データ転送チャネル(PORTまたはPASVコマンドで作成されるチャネル)での通信を暗号化する場合、PROTコマンドを用いて保護レベルをP (Private) に設定する必要があります。