FTP・TELNET・NTPとは ― SSHとの違いとポート番号
FTP・
FTPはファイル転送、TELNETは遠隔操作、NTPは時刻合わせのプロトコル
FTPはファイルを送受信するプロトコルで、TELNETは離れたコンピュータを操作するプロトコルです。NTPは、ネットワークを通して時計の時刻を合わせるプロトコルです。
FTPとTELNETは、パスワードを含む中身を暗号化せずに送ります。そのため今は、暗号化するSSHや、SSHの上で動くSFTPに置き換わってきています。どれもアプリケーション層のプロトコルで、決まったポート番号で待ち受けます。それぞれのポート番号と、SSHやSFTPとの違いは、次の節の表で比べます。
FTP・TELNET・NTP・SSHの違い:ポート番号と暗号化
次の表は、この記事で扱うプロトコルを、用途・ポート番号・通信の中身で比べたものです。ポート番号は、IANAという番号の管理団体に登録された値です。
| プロトコル | 何に | ポート番号 | 通信の |
|---|---|---|---|
| FTP | ファイルの転送 | TCP 21(制御用) TCP 20(データ用) | 平文 |
| FTPS | ファイルの転送 | TCP 21 TCP 990 | TLSで暗号化 |
| SFTP | ファイルの転送 | TCP 22 | SSHで暗号化 |
| TELNET | 別のコンピュータの遠隔操作 | TCP 23 | 平文 |
| SSH | 別のコンピュータの遠隔操作 | TCP 22 | 暗号化 |
| NTP | 時計の時刻合わせ | UDP 123 | 平文 |
FTPは、制御用とデータ用で2つの番号を持ちます。ただし20番を使うのは、後で見るアクティブモードのときだけです。NTPだけがUDPを使い、ほかはTCPを使います。
平文とは、暗号化されていないそのままの文字のことです。平文のプロトコルは、経路の途中で通信を見られると中身を読まれます。これは、HTTPとHTTPSの記事で説明したHTTPの弱点と同じです。
FTPとは:制御用とデータ用の2本の接続を使う
FTP(File Transfer Protocol)は、クライアントとサーバの間でファイルを送受信するプロトコルです。サーバへファイルを送ることをアップロード、受け取ることをダウンロードと呼びます。規格はRFC 959です。
FTPは、1回の利用で制御用とデータ用の2本のTCP接続を使います。制御用の接続には、ログインやファイルの指定などのコマンドと、その応答が流れます。データ用の接続には、ファイルの中身とファイルの一覧が流れます。
制御用の接続は、クライアントからサーバの21番へ張ります。この接続は、ログインしてから終えるまでつないだままです。一方、データ用の接続はふつう、ファイル1つや一覧1回ごとに張り、送り終えると閉じます。
次の例は、制御用の接続を流れる文字列です。C: はクライアント、S: はサーバが送った行です。気になる行をクリックすると、その行の意味が開きます。
# 制御用の接続(サーバの21番)を流れる文字列
サーバが最初に送る挨拶です。先頭の3けたの数字が応答コードで、220は受け付けの準備ができたことを示します。数字の後ろの文は、サーバの作りによって変わります。
クライアントがユーザー名を送ります。FTPのコマンドは英字3〜4文字の短い語で、後ろに値を付けます。このユーザー名も、暗号化されずに流れます。
331は、ユーザー名を受け付けたので、次にパスワードを送ってほしいという応答です。3で始まる応答は、続きの情報を待っていることを示します。クライアントは、この応答を見てからパスワードを送ります。
パスワードが、この文字のまま経路を流れます。FTPは暗号化しないので、途中で通信を見られるとパスワードがそのまま読まれます。FTPSなら、この行も暗号化されて読めなくなります。
230は、ログインが済んだことを示します。2で始まる応答は、頼まれたことが正常に終わったことを表します。ここから、ファイルの操作ができるようになります。
パッシブモードを頼むコマンドです。サーバに「データ用の接続を待ち受けて、その番号を教えて」と頼みます。アクティブモードなら、ここで代わりにPORTを送ります。
括弧の中の前の4つはIPアドレスで、203.0.113.50 です。後ろの2つはポート番号を256で割った商と余りで、234×256+97=60001番になります。クライアントは、この番号へデータ用の接続を張ります。
RETR は、ファイルを受け取るコマンドです。サーバへ送るときは STOR を使います。ファイルの一覧を受け取るときは LIST を使います。
150は、これからデータ用の接続でファイルを送るという応答です。このあと、ファイルの中身はデータ用の接続を流れます。制御用の接続には、中身は流れません。
226は、転送が終わってデータ用の接続を閉じたという応答です。制御用の接続は、つないだまま残ります。次のファイルを送るときは、データ用の接続を張り直します。
行をクリックすると、その行の意味が開きます。
PASSの行のとおり、パスワードも文字のまま送られます。ファイルの中身もデータ用の接続をそのまま流れるので、FTPには経路の途中で読まれるのを防ぐ手段がありません。
FTPのアクティブモードとパッシブモードの違い
2つのモードの違いは、データ用の接続をどちらから張るかです。アクティブモードではサーバから張り、パッシブモードではクライアントから張ります。制御用の接続は、どちらのモードでもクライアントから張ります。
アクティブモードでは、クライアントがPORTコマンドで自分のアドレスと待ち受けの番号を伝えます。サーバは、自分の20番からその番号へ接続してきます。20番は、RFC 959で決められたサーバ側の既定のデータ用ポートです。
パッシブモードでは、クライアントがPASVコマンドを送ります。サーバは待ち受ける番号を決め、応答で知らせます。前の節の例では、その番号が60001番でした。
| アクティブモード | パッシブモード | |
|---|---|---|
| 使うコマンド | PORT | PASV |
| データ用の接続を張る側 | サーバ | クライアント |
| サーバ側のポート | 20番 | サーバが知らせた番号 |
| クライアント側のファイアウォール | 外からの接続を通す必要がある | 内から出る接続だけで済む |
家庭や社内のネットワークでは、パッシブモードが使われる
ファイアウォールは、内側から外へ出る接続を通し、外から入る新しい接続を止める設定がふつうです。アクティブモードのデータ用の接続は、外から入る向きなので止められます。パッシブモードなら内から出る向きなので、そのまま通ります。
NATを使っている場合は、もう1つ問題があります。PORTの中には、PCのアドレスが文字で書かれます。たとえば 192.168.10.25 の50001番なら、PORT 192,168,10,25,195,81 と送ります。
195×256+81=50001 なので、後ろの2つで50001番を表しています。しかし、192.168.10.25 は外から届かないプライベートIPアドレスです。そのためNAT機器の多くは、FTPの制御用の接続の中身を見て、このアドレスを書き換えます。
RFC 1579 は、クライアントがPASVを使うよう勧めています。PASVなら、データ用の接続がファイアウォールを越えやすいからです。アドレスの書き換えは、RFC 3022 にFTPの例として書かれています。ファイアウォールの仕組みはファイアウォールの記事で、NATはNATの記事で説明しています。
SFTP・FTPSとFTPの違い
FTPを暗号化して使う方法は、2つあります。名前が似ていますが、仕組みは大きく違います。
FTPSは、FTPの通信をTLSで暗号化したものです。TLSは、HTTPSでも使う暗号化の仕組みです。FTPのコマンドと2本の接続はそのまま残るので、アクティブモードとパッシブモードの区別もあります。
FTPSには、2つの始め方があります。1つは、21番でつないでから AUTH TLS というコマンドで暗号化に切り替える方法で、RFC 4217 に定められています。もう1つは、990番でつないで最初から暗号化する方法で、この番号もIANAに登録されています。
FTPSでは、制御用の接続も暗号化されます。そのため、前の節で見たNAT機器によるアドレスの書き換えができません。RFC 3022 も、中身を暗号化するとこの書き換えが効かなくなると書いています。
SFTPは、SSHの暗号化された接続の上で動く別のプロトコルです。名前にFTPと付きますが、FTPのコマンドは使いません。SSHの22番への1本の接続だけで済むので、データ用の接続を別に張る必要がありません。
TELNETとSSHの違い:平文か暗号化か
TELNETとSSHは、どちらも離れたコンピュータを手元の画面から操作するためのプロトコルです。サーバやルータの設定を、その機器の前に行かずに変えるときに使います。違いは、通信を暗号化するかどうかです。
TELNETは、TCPの23番で待ち受けます。規格はRFC 854です。ログインのパスワードも、入力したコマンドも、返ってきた結果も、すべて平文で流れます。
SSH(Secure Shell)は、TCPの22番で待ち受けます。規格は RFC 4251 から RFC 4254 です。パスワードを含むやり取りを、すべて暗号化して送ります。
SSHは、暗号化のほかに相手の確認もします。多くのSSHクライアントは、最初の接続でサーバの鍵の指紋を表示し、確かめるよう求めます。2回目からは、鍵が前と違えば警告が出るので、なりすましたサーバに気づけます。
利用者の確認には、パスワードのほかに公開鍵を使う方法もあります。公開鍵の方法では、手元に置いた秘密鍵を持っていることを示してログインします。この方法なら、サーバにパスワードを送らずにログインできます。ホスト鍵の確認と公開鍵認証の流れは、SSHの記事で段階を追って見られます。
TELNETは今どう使われるか
今は、遠隔操作にはSSHを使うのがふつうです。ただ、telnet コマンドは、相手のポートにTCPでつながるかを試す道具として使われることがあります。たとえば telnet 203.0.113.50 80 と打つと、そのWebサーバの80番につながるかが分かります。自分のPCでどの番号が待ち受けているかは、netstat・ss・digの記事で説明したssやnetstatで調べます。
NTPとは:ネットワークで時計の時刻を合わせる仕組み
NTP(Network Time Protocol)は、コンピュータの時計を、ネットワークの先にある正しい時計に合わせるプロトコルです。UDPの123番を使います。現在の規格は、NTPバージョン4のRFC 5905です。
時刻がずれると、困ることがあります。たとえば、複数の機器のログを並べても、どれが先に起きたかが分からなくなります。HTTPSの証明書の有効期限も時計で判断するので、時計が大きくずれると正しい証明書でもエラーになります。
ストラタム:時刻の源からの段数
NTPのサーバは、階層をつくって時刻を受け渡します。GPSの受信機などの正確な時刻の源を直接つないだサーバが、ストラタム1です。時刻の源そのものを、ストラタム0と呼ぶ説明もあります。ストラタム1から時刻をもらうサーバがストラタム2で、その下が3と、1段ごとに数字が1つ増えます。
RFC 5905 では、時刻をもらうサーバの段は15までです。16は、まだ時刻が合っていないことを表します。段が下がるほど、ずれは大きくなりやすくなります。
通信にかかる時間を差し引いて、ずれを計算する
サーバから届いた時刻を、そのまま自分の時計に書き込むことはしません。届くまでにかかった時間の分だけ、遅れた時刻になるからです。そこでNTPは、1往復で4つの時刻を記録して計算します。
まず、往復にかかった時間を求めます。クライアントが待った時間の T4−T1=0.080秒 から、サーバの中で過ごした T3−T2=0.010秒 を引きます。往復の時間は0.070秒で、片道は0.035秒になります。
次に、時計のずれを求めます。ずれは、T2−T1 と T3−T4 を足して2で割ると求まります。この例では 2.030 と 1.960 を足して2で割るので、クライアントの時計は1.995秒遅れています。
この式は、行きと帰りにかかる時間が同じとみなして計算しています。どちらの式も、RFC 5905 の8章に載っています。実際のNTPは、この測定をくり返し、何回分かの結果から確からしい値を選びます。クライアントは、そのずれの分だけ自分の時計を合わせます。
NTPの簡略版として、SNTPがあります。時刻をもらう相手が1台だけで、ほかの機器に時刻を配らないクライアントなどに向けたものです。今は RFC 5905 の14章に含まれています。
複数の機器のログをsyslogサーバに集めて調べるときも、各機器の時計がNTPでそろっていることが前提になります。ログを1か所に集める仕組みはSyslogの記事で説明しています。
練習問題(全5問)
正解:データ用の
FTPは、
正解:クライアントが、
パッシブモードでは、
正解:データ用の
アクティブモードでは、
正解:TELNETは
どちらも
正解:UDPの
NTPは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
