MENU

FTPとSFTPのポート番号と簡単な説明

更新日:2019/08/11

 

私はいつも、FTPやSFTPのポート番号で悩みます。
なぜなら、ネットで調べてみると20とか21とかいろいろはっきりしないからです。

 

そこで今回は、FTPのポート番号は、本当は何番が正しいか調べてみました。

 

FTPとSFTPのデフォルトポート番号

FTPとSFTPのポート番号を調べてみると、FTPは20と21、SFTPは22を使用していることがわかりました。
とりあえず、表にしてみます。

 

サーバー側ポート番号 クライアント側ポート番号 用途
20(デフォルト) 自動(エフェメラルポート) FTP:データ転送用ポート
21(デフォルト) 自動(エフェメラルポート) FTP:制御(コントロール)用ポート
22(デフォルト) 自動(エフェメラルポート) SFTP:SSH用ポート

 

こう書くと、いろいろ気になる点がありますね。
もう少し詳しく説明してみます。

FTPは20番と21番を使用

FTPは、なぜかポートを二つも使っていますね。
好きなほうを使えばいいのかと思っていたら、それぞれ役割があるようです。
どんな役割なんでしょうか。

 

順番的に、20番から説明するべきですが、21から説明したほうがしっくりいきそうなので、21から説明します。

 

ポート番号21:FTP制御ポート

 

ポート番号21はFTPの窓口。
実データを扱う前に、FTPの送受信に必要な情報をやりとりするためのポートです。

 

まずクライアントは、使用されていないポートから、FTPに使用するポートを自動で選択します。
このポートは、その場限りという意味のephemeral(儚い・泡沫)から、エフェメラルポートと呼ばれます。

 

そのポートからサーバーの21番ポートへアクセスすると、TCPという大きな通信の枠組み(プロトコル)を介して、制御用のコントロールコネクションが張られます。

 

21番ポートに制御用のコントロールコネクションを張る

 

で、やり取りは一回ではなくて、何度か情報を伝達しあいます。
イメージは、こんな感じ。

 

クライアント側

 

FTP接続できますかー?


 

サーバー側

 

いいよー。
ところで君は誰?


 

クライアント側

 

パソ子でーす。


 

サーバー側

 

なるほどー、パスワードは?


 

クライアント側

 

ネコ・ネコ・コネコです!


 

サーバー側

 

おーけー!
じゃあ、FTP通信を始めよう。


 

実際は、USERコマンドとか、PASSコマンドなどのコマンドを送信しています。

 

 

ポート番号20:FTPデータ転送ポート

 

無事ログインできたら、次はデータコネクションを確立して、実際にデータの転送(送受信)を行います。

 

と、その前に…

 

データコネクションを確立する方法には、「アクティブモード」と「パッシブモード」があって、20番ポートを使うのは、「アクティブモード」だけです。

 

そのためこの説明は、「アクティブモード限定」ということに注意してください。

 

モードの違いについては、次の記事を参考にしてください。
参考FTPのアクティブモードとパッシブモードは何が違うのか

 

では、説明に戻ります。

 

無事FTPにログインできたら、クライアント側はデータ転送に使用するエフェメラルポートを選択します。

 

そしてコントロールコネクション(21番ポート)を通じて、サーバーにポート番号を送信します。

 

クライアント側

 

データ転送したいので、XXXXポートに接続してくださーい!
ちなみにこちらのIPアドレスはXXX.XX.XX.XXです。


 

するとサーバーは、自分の20番ポートと、クライアントから申し出があったポートを接続して、データコネクションを確立します。

 

サーバー側

 

おーけー!
そのポートと、こちらの20番ポートを繋げるよー


 

サーバーからデータコネクションを確立

 

無事にデータコネクションを確立できたら、データの転送が行われます。

 

そして転送が終わると…

 

サーバー側

 

じゃあ、データコネクションを切断するよ。
他のデータを転送するなら、コントロールコネクションから、もう一度連絡してねー


 

クライアント側

 

もう一度データ転送したいので、XXXXポートに接続してくださーい!
ちなみにこちらのIPアドレスはXXX.XX.XX.XXです。


 

つまり、複数のデータを送受信する場合は、そのたびにデータコネクションを確立しているのです。

 

FTPはどうしてポートを二つ使うのか

 

クライアントサーバー間で通信を行うプロトコルの多くは、一つのポートを使用しています。
FTPは二つ使うので、他と少し変わったことをしているんですね。

 

ではどうして、二つもポートをつかっているのかというと、データのやりとりをスムーズにおこなうためです。

 

大きなデータを転送している最中は、そのポートを使って他の情報を送ることができません。

 

例えば、転送をキャンセルしたいとサーバーに伝えたくても、データの転送が終わるまで伝えることができないのです。

 

そこで、データと制御のポートを分けることで、転送中にコマンドをサーバーに送信できるようにしたようです。

 

FTPは、30年前に考えられたプロトコルです。
当時の回線速度は、今の人には想像できないくらい遅いものでした。
そのため、少しでもパケットのやり取りを減らすことも、設計する上で重要なことでした。
二つのポートを使うのは、その考えがあってのことだと思います。

 

今のネット事情には少し合わない面があるかもしれませんね。

 

しかし、多くのサーバーで標準的に使用されている仕組みを、全く新しいものに変えるのは、大変ですし、やるだけ無駄という面があります。

 

そういうものだと、深く考えない方がいいのかもしれませんね。

 

クライアント側

 

ふーん、そうなんだー


 

20や21はサーバーのポートだということに注意

 

実は私は、もう20年くらい勘違いしていました。

 

それは、「クライアントとサーバーは、同じポート番号で通信する」という勘違いです。

 

そのためクライアントからサーバーに使用するポートを伝える理由がわからず、3時間くらい悩みました。

 

でも勘違いだとわかったら、スッキリ。

 

ポート番号を指定しているのは、相手が接続するときの目印のためで、実際に通信するのは何番でもいいのです。

 

だからクライアントは、

 

クライアント側

 

この番号あいてるから、ここを使おー


 

で、いいわけです。

 

20年ぶりのスッキリでした。

 

というか、よく考えたらちょっと恥ずかしい話だわ…(/ω\)

 

 

ちなみに、このように一時的に使用されるポートを「エフェメラルポート」といいます。
エフェメラル(ephemeral)は、つかの間とか短命という意味なので、そのままのイメージですね。
現在のシステムでは49152から65535の範囲が割り振られていることが多いようです。

 

その逆に、FTPの20や21のように、用途が限定されているポートは「ウェルノウンポート」と呼ばれています。
具体的には、1から1023までの範囲です。

SFTPは22番を使用

SFTPは、デフォルトで22番を使用します。

 

というか、SFTPはSSHを利用してやりとりをするので、ポート番号はSSHのものとなります。

 

SSHは、クライアントからサーバーのコマンドを実行することができるプロトコルですね。

 

なので外部からサーバーに侵入するために、22番ポートは狙われています。
そのため、別の番号に変更することが推奨されています。

 

SFTPでサーバーに接続するときは、サーバー管理者にポート番号を問い合わせる必要があります。

記事の内容について

 

こんにちはけーちゃんです。
説明するのって難しいですね。


「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。

そんなときは、ご意見もらえたら嬉しいです。

ご意見はこちら。
https://affi-sapo-sv.com/info.php

【お願い】

お願い

■このページのURL


■このページのタイトル


■リンクタグ