3 Minutes NetWorking
No.61

3Minutes NetWorking

第61回TFTP

■ 取るに足らないFTP

インター博士

4回続けてFTPの説明をしたわけだ。
ファイル転送という、インターネットワークで頻繁に使われるものを行うためのプロトコルだったな。

ネット助手

そうですね。
FTPによるファイル転送ってよく使いますものね。

インター博士

うむ。最近はHTTPによる転送がもっともよく使われているとはいっても、FTPのファイル転送機能にはまったくかなわないからな。
ただ、そんなFTPにも欠点はある

ネット助手

欠点?
なんかありましたっけ?

インター博士

それはTCPを使うところと、複雑な機構のためアプリケーションが大きいところだ。

ネット助手

TCPを使うところが欠点?
それだったら、他のTCPを使うアプリケーションも必ず欠点があるってことじゃないですか?

インター博士

まぁ、確かにそう言われればそうなのだが。前にも説明したとおり、小さいサイズのデータのやり取りにおいて、TCPは重厚すぎるのだよ。
FTPで転送するデータは大きいサイズのものばかりではない。

ネット助手

小さいサイズ向きではないってのはわかりますけど。
それと、アプリケーションのサイズが大きい?

インター博士

そうだ。FTPは複雑な機構により、柔軟なファイル転送機能を持つが、どうしてもアプリケーションのサイズが大きくなってしまう。

ネット助手

でも、大きいっていっても、1ギガとかじゃないですよね?

インター博士

それは極端な大きさだな、おい。確かに通常のPCならば問題にするサイズではない。
だが、ファイル転送を行うのはPCだけではなく、ハードディスクを持たないルータやディスクレスマシンなどもファイル転送を行う必要がある。

ネット助手

ルータやディスクレスマシン…。

インター博士

例えば、Cisco製のルータは、そのOSであるIOSのバージョンアップのために、IOSのデータをファイル転送してルータにダウンロードする。
つまり、ハードディスクではなくROM内におさまるファイル転送アプリケーションが必要なのだよ。

ネット助手

ははぁ。ハードディスクじゃなくて、ROMにアプリケーションを入れる、と。
ROMに入れるにはFTPは大きすぎるってことですか。

インター博士

そういうことだ。
そこで、FTPをもっと簡略化したプロトコルが使用される。これをTFTPという。 ▼ link

ネット助手

とりびあるふぁいるとらんすふぁーぷろとこる?
「とりびある」ってなんです?

インター博士

取るに足りないとか、つまらないとか。
ネット君を指し示す時に使用される形容詞の一つだな。

ネット助手

僕は「取るに足りない」人間なんですか…。

インター博士

そう嘆くな。TFTPにも使い道がある通り、ネット君にも何かしらの取り得があるさ。
どこにあるかは知らんがな

ネット助手

うぅぅぅ。

インター博士

まぁ、ともかく。その「取るに足らない」FTPがTFTPなわけだ。
なんともストレートなネーミングだな。

ネット助手

なんとも親近感を抱かせる名前ですね。

■ TFTPの特徴

インター博士

その「取るに足らない」FTP、実際は「簡易型」FTPだがそのFTPとの違いはといえば。

  • TCPではなくUDPを使う
  • ユーザ認証を行わない
  • コマンドは読み出し(RRQ)と書き込み(WRQ)のみ(FTPでのRETR/STOR)
    • ワーキングディレクトリ変更(CWD)やリスト表示(LIST)などがない
ネット助手

UDPを使うのはともかく。
ファイル転送以外は何もしないですね。

インター博士

その通り。ファイルの一覧表示すらない。
書き込み/読み出ししかないのだよ。

ネット助手

なるほど。まさしく「簡易型」FTPですね。
でも、ユーザ認証もないんですね。

インター博士

うむ、その点でセキュリティに問題点があることは間違いない。
だが、まぁ、簡易型だしな。

ネット助手

そうですね、簡易型ですものね。

■ UDPを使ったファイル転送

インター博士

さて、ネット君。TFTPはUDPを使う。
UDPは以前も話したとおり、コネクションレス型で、確認応答もなければ、受け取ったデータを並び替えるなどもしない。

ネット助手

3分間ネットワーキング第44回ですね。

インター博士

そこで話した言葉を覚えているか?
「UDPを使うアプリケーションは信頼性を確保する仕組みを自分で持つ」、と説明した。

ネット助手

あ〜、そんなことを聞いた様な。
ということは、TFTPは信頼性を確保する仕組みを自分で持っている、ってことですか?

インター博士

その通り。
まず、TFTPでは転送するデータを512バイト単位で区切る。そして先頭から1から始まるブロック番号をつける

TFTPの転送ブロック

[Figure61-01:TFTPの転送ブロック]

ネット助手

512バイトで分割。
で、1から順番に番号をつけるんですね。TCPと似てますね。

インター博士

3分間ネットワーキング第40回の話だな。だが、TCPのシーケンス番号の割り振りとはちょっと違うな。TCPは1バイトづつ番号がつくからな。
さらに、TFTPは必ず1番から始まる。

TCPでのデータとシーケンス番号

[Figure40-03:TCPでのデータとシーケンス番号]

インター博士

さて、TFTPでは512バイトのブロックごとに転送を行う
送る際に、転送するブロックのブロック番号をつけて送る。TFTPのデータはこういう形になる。

TFTPデータフォーマット

[Figure61-02:TFTPデータフォーマット]

ネット助手

ブロック番号をつけて転送する。
やっぱりTCPっぽいですよね。

インター博士

うむ。役割もTCPのシーケンス番号に似ている。
つまり、受け取った側は確認応答(ACK)を返すのだよ。

TFTP確認応答フォーマット

[Figure61-03:TFTP確認応答フォーマット]

ネット助手

データを送ると、確認応答を返す。
ますますTCPだ。

インター博士

注意して欲しいのは、TCPは「次に欲しいデータのシーケンス番号」を返すが、TFTPは「受け取ったデータのブロック番号」を返すところだ。もちろん何のためにこの番号があるかといえば、再送制御のためだ。

[Figure61-04:TFTPでの再送制御]

インター博士

つまり、ウィンドウ制御を行わないTCPのような制御なわけだな。
シンプルに、ACKが返って来たら次のデータの繰り返しだ。

ネット助手

ウィンドウ制御を行わない…。
同時にいくつも送らないで、1つ1つ送るってことですね。

インター博士

そういうことだ。単純な方法だが、有効だ。
このようにTCPの代わりにTFTP自身が信頼性を確保する仕組みをもっているわけだな。

ネット助手

なるほど。アプリケーションが信頼性を確保する仕組みを自分で持つってこういうことだったんですね。

インター博士

うむ。さらに、FTPでのデータ終了はTCPのFIN、コネクション切断が示す。
だが、TFTPではこうなる。

[Figure61-05:TFTPでのデータの終了]

ネット助手

ははぁ。512バイト未満なら終了、ですか。

■ TFTPの動作

インター博士

では、TFTPの実際の動作だが。
まず、クライアントから読み出し(RRQ)か、書き出し(WRQ)の要求が送られる。データの中身はこうだ。

TFTP読み出し/書き出し要求

[Figure61-06:TFTP読み出し/書き出し要求]

ネット助手

読み出し/書き出しのコードと、ファイル名…。
nullってのはなんであるんです?

インター博士

ファイル名とモードは可変長だ。なので区切りがないとどこまでがファイル名で、どこからがモードなのかわからない。よってその区切りをするためにnullを入れる。

ネット助手

なるほど。
で、モード。これはFTPのモードと同じですか?

インター博士

基本的には同じだ。
モードの部分には、ASCIIコードで以下の文字列が入る。

  • netascii … FTPのASCIIモード。受信側が自分の使用する文字コードに変換して保存。
  • octat … FTPのBinaryモード。送信側から無変換で送信される。
  • mail … netasciiモードと同じ。ファイル名の変わりにメールを受信するユーザ名が入る。ほとんど使われない。
ネット助手

ははぁ。FTPと同じようにコードの変換が行われるんですね。

インター博士

そうだな。「簡易型」とはいえ、FTPはFTPだからな。
さて、実際の動きはこうなる。

[Figure61-07:TFTPの動作]

ネット助手

ははぁ。なんか変な動きですねぇ。
サーバが送信する時は、69番以外のランダムなポートを使うんですか? なんでそのまま69番を使わないんですか?

インター博士

それは、複数のTFTPクライアントに対応するためだ。

ネット助手

複数に対応する?

インター博士

そうだ。もし、データ転送を69番を使って行う場合。
データ転送中に他のクライアントから要求が来ても受け取れない

69番を使い続けた例

[Figure61-08:69番を使い続けた例]

インター博士

よって、要求ごとにランダムなポート番号を使ってデータを転送する。
69番を使うのは要求のみだ。

ランダムなポートを使用した例

[Figure61-09:ランダムなポートを使用した例]

ネット助手

は〜。そりゃ上手くできてますねぇ。
……。要求を受けるポートと、データを転送するポートが別? なんか似たようなことを聞いたような…。

インター博士

うむ、なかなかいい所をついてきているな、あと一歩だ。
そう。つまりFTPで言うところの制御コネクションとデータコネクションだな。

ネット助手

あ〜〜。
そうそう、それですよ。

インター博士

UDPにはコネクションの概念はないが、まぁ、似たような形でデータを転送するわけだ。

ネット助手

なるほど。簡易型とはいえFTPの名前を持つだけありますねぇ。
やっぱり似てますよ。

インター博士

うむ。簡易型だが、立派なファイル転送用のプロトコルだ。

ネット助手

ですね。

インター博士

このように、簡単で小さなアプリケーションのため、ルータやディスクレスマシンなどのROMに搭載できるわけだ。
これはこれでよいのだが、そのためあまりよくないことに使われたりもする。

ネット助手

よくないこと?

インター博士

例えば、TFTPは小さいため、ワームのような小さなプログラムでもTFTP機能を持つことができる。

ネット助手

わーむ。
悪いことする「虫」ですね。

インター博士

ワームでもTFTPを持つことができるため、自己増殖の手段としてTFTPを使うことがある。
自分自身をダウンロードしたりすることによって感染していくのだな。

ネット助手

うわぁ、陰険だ。

インター博士

一番有名な例は、2003年夏に大流行したMS.BLASTだな。 ▼ link

ネット助手

えむえすぶらすと。
なんでしたっけ? 再起動を連発させる奴でしたっけ?

インター博士

そう、それだ。
MS.BLASTはWindowsの脆弱性を利用してTFTPクライアント機能を持つワームが侵入し、その後TFTPを使ってMS.BLAST本体をダウンロードするのだ。

ネット助手

ははぁ。
ワームでも持つことができるくらい簡易なプロトコルなんですねぇ、TFTPって。

インター博士

そういうことだ。
さて、今回はここまでにしておこう。

ネット助手

はい。

インター博士

次回からは、DNSだ。

ネット助手

了解です。
3分間ネットワーキングでした〜♪

IOS
[Internetworking OS]
正確には「Cisco IOS」。Cisco製のルータ、スイッチなどに搭載されているOS。
TFTP
[Trivial File Transfer Protocol]
簡易FTPプロトコル。
RFC1350で規定。
ブロック番号
ブロック番号は下の図にあるように2オクテット(16ビット)なので、最大値は65535。
1ブロックは512バイトなので、TFTPの最大転送量は 65,535 × 512 = 33,553,920 の33MBとなる。
ただし実際は、最後のブロックは512バイト未満である必要があるため、 33,553,919バイトが最大転送量。
ワーム
[worm]
自己増殖をしながら、破壊活動をするプログラム。
ウィルスと混同しがちだが、自らをネットワークなどにより複写する機能を有する。
有名なものは「I Love You」や「Code Red」。
MS.BLAST
Windows NT系列(NT、2000、XP、2003)が持つ脆弱性を利用したワーム。
2003年8月に大流行した。
参考リンクはIPA(情報処理振興事業協会)のMS.BLASTについての特設ページ。
ネット助手ネット君の今日のポイント
  • FTPをもてないようなホストでもファイル転送を行うことが出来るためのプロトコルがTFTP。
  • TFTPはUDPを使い、ファイルの読み出しと書き込みのみを行う。
  • TFTPはユーザ認証がないため、セキュリティが弱い。
  • TFTPは確認応答を使って信頼性を確保する。
  • 要求を受けるポートと、データを転送するポートを分け、複数からの同時要求も可能にしている。

3 Minutes NetWorking No.61

管理人:aji-ssz(at)selene.is.dream.jp