FTPの通信

 FTPは、「File Transfer Protocol」の略で、ファイル転送プロトコルとも呼ばれます。ネットワークでファイルの転送を行うための通信プロトコルで、インターネットの初期の頃から存在するインターネット上で最もよく利用されているファイル転送用プロトコルとなっています。

 ファイル転送用プロトコルは、他にも、NetBIOSやNFSなどがあります。こちらは、OSのファイルシステムを利用して外部のファイルシステムに対して仮想的にマウントすることでファイル転送を実現しています。

 FTPでは、相手先のコンピュータにログインした上でFTPサーバにファイルをアップロードしたり、FTPサーバからダウンロードを行うことができます。しかし、その際にやり取りするユーザ名とパスワードは暗号化されずに平文で送信されてしまうために、盗聴されてしまう恐れがあります。

 セキュアなFTP通信を行いたい場合は、FTPS(FTP over SSL/TLS)やSFTP(SSH FTP)でファイル転送を行う必要があります。

 FTPでのファイル転送は、コマンドベースで行うことになりますが、現在は、Windows環境においても、Linux環境においても、GUIで操作できるFTP専用ソフトが充実しています。GUIツールでは、コマンドを意識することなくファイル転送を行えるようになっています。

 FTPでは、制御用とデータ転送用の2つのコネクションを使って通信を行います。制御用には21番ポート(FTP)を、データ転送用には20番ポート(FTP-DATA)が使用されます。

 まず、最初に制御コネクションを張り、ユーザ認証が行われます。ユーザ認証に成功したら、制御用コネクションが確立されます。これは、FTPサーバへ、クライアント側から要求することで確立されます。クライアントは空いている任意のポートを使って、サーバの21番へ接続します。

 制御コネクションの確立が終わったら、データコネクションを確立します。このように、FTPでは、データの送受信とは別に制御用のコネクションを確立することで、データ転送中であっても、停止命令など他の命令が出せるようになっています。

 データコネクションは、制御コネクションで渡されるコマンドによって、その都度生成され、データの転送が終了したら切断されます。データコネクションは、1回のFTP通信の間に何回も接続と切断を繰り返しながら、ファイルが転送されることとなります。

TFTPの通信

 TFTPは、「Trivial File Transfer Protocol」の略で、RFC 1350で規定されています。「Trivial」とは「取るに足らない」と言う意味があり、FTPには及ばないプロトコルであることが、名称からも分かります。

 TFTPとは、FTPの機能を単純化したプロトコルで、FTPと比べて使用できる機能が制限されシンプルな作りになっており、ユーザ名とパスワードによる認証機能やディレクトリ一覧を閲覧する機能はありません。また、ファイルの転送にはUDPを使用します。

 TFTPには、ディレクトリを閲覧する機能がないため、転送したいファイル名とそのファイルが存在する場所を正確に把握しておかなければなりません。

 TFTPは、シンプルなプロトコルである為、やりとりするデータ量が少ない通信に向いています。しかし、信頼性の面では、認証機能がないことに加え、転送にUDPを使用することから、信頼性が高いとは言えません。

そのため、現在ではセキュリティ上の関係からTFTPをサポートしているサイトは、ほとんどありません。

 現在のTFTPの使用用途は、起動のためのディスク持たないディスクレスコンピュータがOSをブートする際や、ルータやスイッチなどのネットワーク機器のOSやファームウェアをアップデートしたり入れ替えたりする際に利用されています。

TFTPのパケット

 クライアントがTFTPサーバにアクセスする際には、UDPのポート番号69を使用します。ただし、宛先のポート番号に69を指定するのは、クライアントからTFTPサーバへのリクエストの時のみで、それ以降の通信では、TFTPサーバは、ランダムなポート番号を使用して通信を行います。

 TFTPのデータは、512バイトの固定長で、順序番号付きのデータブロックを送信されます。サーバは、固定長のデータブロックを送信すると、クライアントからの確認応答を待ってから、次のデータブロックを送信します。サーバは、確認応答が来なかった場合、タイムアウト処理として直前のデータブロックを再送するようになっています。

転送ファイルが512バイトで割り切れる場合、サーバは最後にデータ部分が0バイトのデータブロックを送信します。