技術要素

FTPの仕組みとモードの違いを解説!(HTTPとの違い)

2021年12月9日

コンピュータ間でファイルをやり取りしたい時、どうしてますか?

USBメモリーやHDDなどの外付けメディア経由、NASやクラウドストレージなどのネットワークストレージ経由などがありますが、クライアント端末とサーバ間のファイル交換にはFTPを使うことが多いです。

Webページを作成する人は、クライアント端末からWebサーバにhtmlファイルやjpeg、gifなどの画像ファイルを配置する時にもFTPを使ったりしますね。

今回はそんなFTPの仕組みと色々なモードの違いを解説します!

FTPとは?

FTPとは「File Transfer Protocol」の略語となり、「ファイル転送プロトコル」のことです。

もうちょっと詳細に表すと、

特定のコンピュータ間でファイル転送する時に使用するアプリケーション層のプロトコル

となります。

コンピュータ間でファイルを転送する際に利用するので、ネットワーク越しにデータを転送することになります。ネットワーク越しなので、例えば10MBのファイルを送ろうとした時に、そのままのファイルを送ることはできず、ネットワークを通せる小さいサイズ(例えば1500KB)のパケットに分割して送ることになります。

この時にFTPプロトコルが活躍します!

FTPの流れ

  1. FTPがクライアントとサーバ間を繋ぐ(コントロールコネクション
  2. 送信側が送るデータを分割する
  3. データをネットワーク上に流す(データコネクション
  4. 受信側が分割したデータを結合して、ファイルを復元する

このやり取りをFTPがうまい具合にやってくれているのですね。

FTPの流れを図にしてみました。

FTPの流れのイメージ

ポイントはコントールコネクションとデータコネクションを別々のポート番号で繋げる、というところですね。このポート番号をどう使うかで、次のアクティブモードとパッシブモードの話に繋がっていきます。

アクティブモードとパッシブモード

FTPを知る上でアクティブモードとパッシブモードを理解しておくことは重要です。

前述しましたが、FTPには先ず制御の用のコントロールコネクションをクライアントとサーバ間で接続します。この接続は必ずクライアント側からサーバ側に対して接続を行います。サーバ側のポート番号(プログラムの識別番号)は「21番」と決まっています。

次にデータコネクションを接続するのですが、FTPが考えられた当初は「サーバ側からクライアント側に対して接続」を行います。恐らく、制御をクライアント側から接続したので、データコネクションはサーバ側から接続するくらいのイメージだったのでしょうかね。

そしてサーバ側のポート番号(プログラムの識別番号)は「20番」ポートと決まっております。クライアント側のポート番号は任意で都度変わっていきます。

これがアクティブモードなんですが、現在のネットワーク構成を考えると大きな問題があります。

それは、パッシブモードの場合は「Firewallなどのセキュリティ製品で通信が遮断されてします可能性が高い」、ということです。

下の図を見て頂ければ分かり易いかと思いますが、アクティブモードの場合はサーバ側からインターネットを越えて、クライアント側へ接続要求をしているので、通常クライアント側のFirewallは閉じていることが多いかと思います。(DMZとかにFTPクライアントがあれば別ですが。)

また、クライアント側のポートはランダムで決まるので、予めFirewallに設定を入れておくことも難しいです。

その対応として、現れたのが、「パッシブモード」です!

パッシブモードはサーバが指定したポート番号に対して、クライアント側から接続するので、クライアント側のFirewallを通り易くなっております。

勿論、FTPサーバのIPアドレスと指定されるポート番号をFirewallの設定で通しておく必要はありますが、内側から外側の設定なので、セキュリティ観点から見ても通信を通し易くなっております。

このような理由から最近は「パッシブモードが主流」となっております。

 

FTPのアクティブモードとパッシブモードの違い

バイナリモードとアスキーモード

続いてもう一つのモードの種類のバイナリモードアスキーモードの話です。

この二つのモードはファイルを転送する前の処理に違いがあります。

モードの違い

  • バイナリモード:データを修正せずそのままの形で転送する
  • アスキーモード:異なるOSで存在する改行コードを修正して転送する

画像や動画のデータはOSによって解釈が変わることがないのでバイナリモードで転送すれば良いのですが、プログラムなどのテキストファイルの場合、OSによって改行コードが違います。

改行コードとは、「テキスト(文字)データ中で、改行を指示する特殊な文字コード」のことで、以下の3種類があります。

  • CR (Carriage Return キャリッジ・リターン):カーソルを左端の位置に移動する。Mac系
  • LF (Line Feed ラインフィード):カーソルを次の行に移動する。Linux,Unix系
  • CR + LF (Carriage Return + Line Feed):Windows系

開発環境がWindowsで本番環境がLinux、つまりクライアント側とサーバ側が別々のOSの場合、転送したファイル内の改行コードの違いで、上手く動作しないことがあったので、転送する際に改行コードを送り先に合った形に修正して送るためにアスキーモードが登場しました。

ただし、最近は開発環境やエディタの進化により複数の改行コードも解釈できるため、アスキーモードでアップロードする必要性が少なくなってきているようですね。

FTPのバイナリモードとアスキーモードの違い

セキュアなFTPとは?

実はFTPは通信経路が暗号化されていません...

下を図を見て頂ければ分かりますが、通信系が暗号化されていないので、通信経路上のデータを盗聴されてしまうと、FTPのIDやパスワードがバレてしまいます。

ということで、最近は通信経路を暗号化する「セキュアなFTP」を使ってファイルを転送しています。

セキュアなFTPのイメージ

セキュアなFTPとして代表的なものが3つあります。

セキュアなFTP

  • FTPS(FTP over SSL/TLS)
    • httpsと同様、SSLの上でFTP通信を行う
    • 動的に複数のポート番号を使用するため、Firewallで幅広くポートを開ける必要がある
    • セキュリティ的にちょっと弱い(ポートを動的に使うためFWの範囲を広く開けておく必要があるため)
  • SFTP(SSH FTP)
    • CLI (Command Line Interface)で使うセキュアな通信
    • SSHを使ったtelnetと同様で、SSHでセッションを貼った上で、ftpを実行するイメージ
    • セキュリティは高い
  • SCP(Secure Copy Protocol)
    • SFTPに比べて通信速度が高速
    • ファイル転送のみを目的として作られてるため、リスティングやファイル削除などのファイル管理機能が無い
    • セキュリティは高い

FTPSはちょっとセキュリティが弱いので、SCP、SFTPが主に使われているようですね。

結局、HTTPとは何が違うの?

ここまでで、FTPを使うとファイルをアップロード、ダウンロードできることが分かりましたが、

「あれ?HTTPでも同じことできるよなー」と考えてしまいますよね。

そうなんです。HTTPでもファイルの転送はできます

では、FTPとHTTPはどう違うのでしょうか?

これは、色々な解釈がありますが、私的には以下のポイントかと思います。

FTPとHTTPの違い

  • 相手先
    • FTP:特定の相手とやり取りする
    • HTTP:不特定多数の相手とやり取りする
  • 接続
    • FTP:コネクションを張るのに時間がかかる。2本コネクションを張る
    • HTTP:1本のコネクションで完結
  • 機能(サービス)
    • FTP:シンプル(ファイル転送のみ)
    • HTTP:複雑(色々な用途で使われる)

やはり、用途によってプロトコルの使い分けは必要ですね。

まとめ

今回はFTPの仕組みと各種モードの違いを解説しました。

FTPのポイントは以下のようになります。

FTPのまとめ

  • FTPとは特定のコンピュータ間でファイル転送する時に使うプロトコル
  • アクティブモードとパッシブモードがあるが、パッシブモードが主に使われている
  • バイナリモードとアスキーモードがあるが、バイナリモードが主に使われている
  • セキュアなFTPとしてSFTPやSCPが使われている
  • HTTPとの違いは、特定の相手とのファイル転送に特化している部分

最近はファイルをブラウザにドラッグ&ドロップしてクラウドにアップロードすることが多いですが、システム開発においてサーバ側にプログラムファイルを転送したり、データを別環境にバックアップするためにデータをダウンロードする際はFTP(SCPやSFTP)を使いますので、まだまだ使われる仕組みですね。

FTPクライアントソフトのファイル転送状況を見ていると、「頑張れFTP!」って応援する気持ちになりますね。(笑)

以上です!

-技術要素