2. プロトコルの概要 (Overview of the Protocol)
転送は、ファイルの読み取りまたは書き込みの要求で始まり、これは接続の要求としても機能します。サーバーが要求を許可すると、接続が開かれ、ファイルは512バイトの固定長ブロックで送信されます。各データパケット (Data Packet) には1つのデータブロックが含まれており、次のパケットを送信する前に確認応答パケット (Acknowledgment Packet) で確認する必要があります。512バイト未満のデータパケットは、転送の終了を示します。パケットがネットワークで失われた場合、意図された受信者はタイムアウトし、最後のパケット (データまたは確認応答の場合があります) を再送信する可能性があり、これにより、失われたパケットの送信者がその失われたパケットを再送信します。送信者は、再送信のために1つのパケットだけを手元に保持する必要があります。これは、ロックステップ確認応答 (Lock Step Acknowledgment) がすべての古いパケットが受信されたことを保証するためです。転送に関与する両方のマシンは、送信者と受信者と見なされることに注意してください。一方はデータを送信し確認応答を受信し、もう一方は確認応答を送信しデータを受信します。
ほとんどのエラーは接続の終了を引き起こします。エラーは、エラーパケット (Error Packet) を送信することによってシグナルされます。このパケットは確認応答されず、再送信もされません (つまり、TFTPサーバーまたはユーザーは、エラーメッセージを送信した後に終了する可能性があります)。したがって、接続のもう一方の端がそれを受信しない可能性があります。そのため、エラーパケットが失われた場合、そのような終了を検出するためにタイムアウトが使用されます。エラーは、3種類のイベントによって引き起こされます: 要求を満たすことができない (例: ファイルが見つからない、アクセス違反、またはそのようなユーザーがいない)、ネットワークの遅延または重複では説明できないパケットを受信する (例: 不正に形成されたパケット)、必要なリソースへのアクセスを失う (例: ディスクがいっぱい、または転送中にアクセスが拒否される)。
TFTPは、終了を引き起こさない1つのエラー条件のみを認識します。それは、受信したパケットのソースポートが正しくない場合です。この場合、エラーパケットが発信元ホストに送信されます。
このプロトコルは、実装を簡素化するために非常に制限的です。例えば、固定長ブロックは割り当てを簡単にし、ロックステップ確認応答はフロー制御を提供し、受信データパケットを並べ替える必要性を排除します。