TFTP(Trivial File Transfer Protocol)

TFTP(Trivial File Transfer Protocol)

ファイル転送を行うためのTCP/IPアプリケーションプロトコルとして、FTPの他にTFTP(Trivial File Transfer Protocol)があります。FTPがトランスポート層にTCPを利用するのに対して、TFTPではトランスポート層にUDPを利用しています。そして、TFTPのウェルノウンポート番号は69です。FTPでは20と21の2つだったのですが、TFTPはひとつです。次の図は、TFTPの階層構造を示したものです。

UDPを利用することによって、ファイル転送に先立ってコネクションの確立を行いません。また、UDPには確認応答の仕組みがありません。そのため実際のファイル転送以外のオーバヘッドが小さくなり、効率のいいファイル転送を行うことができます。しかし、TCPを利用するFTPに比べてファイル転送の信頼性は低くなってしまいます。TFTPは小さなファイルを転送したいときなどに利用されることが多いです。小さなファイルを送るだけだと、わざわざTCPコネクションを確立してTCPによる確認応答を行うのはちょっと大げさになってしまいます。小さなファイルだとちょっとぐらい信頼性が低くても、効率のいい転送を行うほうがいいです。もしも、どこかでエラーが発生して送りなおすことになってもそれほどたいした手間でもありませんし。

FTP、TFTPどっちが優れいるというわけではありません。どういうファイルを転送するのか?信頼性は必要なのか?という状況に応じて使い分けていくことが大切なポイントです。

TFTPによるファイル転送

FTPではサーバでは20と21のポートを使い、クライアントではそれぞれに対応するランダムポートを使って、コマンドと応答コードのやりとりや実際のデータ転送を行っていました。TFTPでもサーバはFTPと同様に2つのポートを使います。ひとつが69で、クライアントからの要求を受け付けます。そしてもうひとつはランダムポートで、実際のファイルを転送したりTFTPの確認応答を返すために使っています。TFTPクライアントはひとつのランダムポートだけを使います。

上の方で、TFTPはUDPを使っているので、確認応答はしていないと言ったのですが、UDPでは確認応答しないのですが、TFTPによって確認応答しています。ファイル転送なので、まったく確認応答しないのはあんまりなので、アプリケーションレベルでの確認応答を行っています。この辺りは、プロトコルの階層構造をうまく利用して、階層ごとに役割を分担させているのがよくわかる例ですね。

実際のファイル転送もFTPのときとよく似ています。クライアントはサーバのポート69に対してファイル転送の要求を出します。サーバはデータ転送用のランダムポートからファイルのデータを転送してきます。クライアントは、そのデータを受け取るとサーバのランダムポートに対して、「ちゃんと受け取りました!」という意味の確認応答を返していきます。

TFTPでは1回あたり最大512バイトのデータを転送することができます。
TFTPの用途として、ぼくがよく利用しているのは、ルータの設定ファイルを一時的にTFTPサーバに保存しています。何か設定を変更しなくてはいけなくなったときにすぐに変更前の設定に戻せるようにTFTPサーバに保存をしておいて、また元の設定に戻したくなったら、TFTPサーバから設定ファイルをダウンロードしてルータで設定を読み込ませています。

あと、ルータのOSをバージョンアップするときなどにTFTPサーバに新しいOSをおいてルータで新しいOSを読み込ませるのにもよく使っています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA