Trivial File Transfer Protocol ( TFTP ) は、クライアント/サーバーアプリケーションでファイルを送受信するためのシンプルな通信プロトコルです。TFTP の主な用途は、ローカルエリアネットワーク上でノードが起動する初期段階で、オペレーティングシステムやファームウェアイメージがファイルサーバーに保存されている場合です。 [ 1 ]
TFTPはシンプルな設計のため、メモリ使用量の少ないコードで簡単に実装できます。そのため、リソースが豊富なコンピュータからリソースが非常に少ないシングルボードコンピュータ(SBC)やシステムオンチップ(SoC)までを対象とするBOOTP、PXE、BSDPなどのネットワークブート戦略の初期段階では、TFTPが最適なプロトコルです。また、ルーター、ファイアウォール、IP電話などのネットワーク機器にファームウェアイメージや設定ファイルを転送するためにも使用されます。現在、TFTPはインターネット転送にはほとんど使用されていません。[ 1 ]
TFTP の設計は、 PARC Universal Packet プロトコル スイートの一部であった以前のプロトコルEFTP の影響を受けています。TFTP は、1980 年にIEN 133で初めて定義されました。 [ 3 ] 1981 年 6 月に、TFTP プロトコル (リビジョン 2) が RFC 783 として公開され、その後 1992 年 7 月に RFC 1350 で更新され、特にSorcerer's Apprentice 症候群が修正されました。[ 4 ] 1995 年 3 月に、TFTP オプション拡張 RFC 1782 が定義され、その後 1998 年 5 月に RFC 2347 で更新され、TFTP の元の仕様と整合性のあるメカニズムを使用して転送前にネゴシエートされるファイル転送オプションのフレームワークを確立するオプションネゴシエーション メカニズムが定義されました。[ 5 ]
TFTPは、 UDP/IPプロトコルをベースに、よく知られたポート番号69を使用して実装された、シンプルなファイル転送プロトコルです。TFTPは小型で実装が容易なように設計されているため、より堅牢なファイル転送プロトコルが提供する高度な機能のほとんどを備えていません。TFTPはリモートサーバーとの間でファイルの読み書きのみを行い、ファイルやディレクトリの一覧表示、削除、名前変更はできません。また、ユーザー認証機能もありません。現在、TFTPは一般的にローカルエリアネットワーク(LAN)でのみ使用されています。

TFTP転送は、クライアントがサーバー上の特定のファイルを読み書きする要求を発行することによって開始されます。[ 6 ]この要求には、RFC 2347 [ 5 ]で規定されているようにクライアントが提案する一連の交渉済み転送パラメータをオプションで含めることができ、RFS 2348 [ 7 ]で規定されているブロックサイズを指定することもできます。
サーバーが要求を許可すると、ファイルは固定長のブロック (特に指定がない限り 512 バイト) で送信されます。転送される各データブロックは、IP フラグメンテーションを避けるために通常は単一の IP パケット内に含まれており、次のブロックを送信する前にクライアントによる確認応答が必要です。512 バイト未満または合意されたブロックサイズオプション未満のデータパケットは、転送の終了を示します。[ 6 ]
ネットワーク上でパケットが失われた場合、意図された受信者はタイムアウトし、最後のパケット(データまたは確認応答の場合がある)を再送信する可能性があり、その結果、失われたパケットの送信者はその失われたパケットを再送信することになります。[ 6 ]
TFTPは3つの転送モードを定義しています。「Netascii」[ 2 ]は、Telnetプロトコルと同様の変更を加えたASCII文字セットの修正版です。「Octet」は任意のバイナリデータで構成され、「Mail」はNetascii文字をファイルではなく電子メールアドレスに送信するものです。最後の転送モードはその後廃止されました。[ 6 ]
TFTPはトランスポート層でユーザーデータグラムプロトコル(UDP)を使用します。転送要求は常にポート69をターゲットとして開始されますが、データ転送ポートは転送初期化中に送信者と受信者によって独立して選択されます。ポートは、ネットワークスタックのパラメータに従ってランダムに選択され、通常はエフェメラルポートの範囲から選択されます。[ 6 ]
元のプロトコルでは、転送ファイルのサイズ制限は65535ブロック、つまり32MBでした。RFC 2348ではブロックサイズを最大65535バイトまで許可したため、最大サイズは4GBに増加しました。[ 7 ]一部のサーバーとクライアントはブロック番号のロールオーバーをサポートしており、65535ブロックの制限を超えるとブロックカウンタがリセットされます。これは標準ではありませんが、理論的には無制限の転送ファイルサイズが可能になります。[ 8 ]
TFTPはブロックごとに往復通信を成功させる必要があるため、特にレイテンシの高いリンクではスループットが低くなります。2015年1月にTFTP RFC 7440が公開され、確認応答を待つ前により多くの連続したデータブロックを送信する「ウィンドウイング」と呼ばれる戦略が導入されました。これは、IPフラグメンテーションのリスクによって制限されるブロックサイズの増加の代替手段として、PXEブートなどのユースケースのパフォーマンスを大幅に向上させます。[ 9 ]
TFTP は一般的にネットワーク ブートに関連付けられてきました。最初のアプリケーションの 1 つは、1984 年に公開された TFTP 標準 RFC 906 を使用した Bootstrap Loading であり、これは 1981 年に公開された Trivial File Transfer Protocol 標準 RFC 783 をブートストラップ ローディングの標準ファイル転送プロトコルとして使用することを確立しました。[ 10 ] [ 1 ]
プレブート実行環境(PXE)バージョン2.0は1998年12月にリリースされ、アップデート2.1は1999年9月に公開され、ファイル転送プロトコルとしてTFTPが採用されました。[ 11 ]インテルは最近、新しいUEFI仕様内でPXEを広くサポートすることを決定し、TFTPサポートをすべてのEFI/UEFI環境に拡張しました。[ 12 ] [ 13 ]
TFTPには組み込みのセキュリティメカニズムがありません。サーバーのファイルシステムのセキュリティを侵害しないように、TFTPサーバープロセスに付与する権限には注意が必要です。そのため、多くの場合、パブリック読み取りアクセス権限を持つファイルのみがTFTP経由でアクセスできるように制御してインストールされます。[ 6 ]さらに、TFTPによるファイルのリスト表示、削除、名前変更、書き込みはサポートされていません。[ 7 ]固有のプロトコル制限により克服できない法的責任の問題が発生する可能性がある場合は、TFTPファイル転送は推奨されません。[ 9 ]