この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:atom
更新日時:2026-06-11 07:07:02

タイトル: TFTP
SEOタイトル: TFTP (Trivial File Transfer Protocol) 完全ガイド

この記事の要点
  • TFTP (Trivial File Transfer Protocol, RFC 1350)UDP/69 上で動く軽量ファイル転送プロトコル
  • 認証なし・暗号化なし。組込み機器のファームウェア更新 / Cisco 設定保存 / PXE Boot で広く利用
  • デフォルト最大サイズは 32MB(block 番号 16bit × 512 byte)→ RFC 7440 の Windowsize で拡張可
  • Linux は tftpd-hpa、Windows は SolarWinds TFTP Server / Tftpd64 が定番
  • 現代では セキュリティリスクのため公開ネットワーク非推奨、置換候補は SFTP / SCP / HTTPS

TFTP とは

TFTP (Trivial File Transfer Protocol) は、1981 年 RFC 783、現行版 RFC 1350 で定義された極めて軽量なファイル転送プロトコルです。UDP/69 上で動き、認証や暗号化を持たず、コードサイズが非常に小さいためROM に直接焼けるほどです。

項目TFTPFTPSFTP
プロトコルUDP/69TCP/21 (制御), 20 (データ)TCP/22 (SSH)
認証無しパスワード / 匿名SSH 鍵 / パスワード
暗号化無し無しあり
コード規模★ 極小
用途組込み・PXEファイル共有安全な転送

TFTP の利用シーン

  • PXE (Preboot Execution Environment) Boot: ネットワークから OS をブート(DHCP 経由で next-server / filename を取得 → TFTP でロード)
  • ネットワーク機器: Cisco / Juniper の設定ファイル (running-config / startup-config) のバックアップ / リストア
  • 組込み機器のファームウェア更新: WAP / VoIP 電話 / プリンタ
  • VoIP 電話 (Cisco IP Phone): 起動時に SEP.cnf.xml を TFTP 取得
  • シンクライアント: イメージのダウンロード

プロトコル詳細

TFTP は 5 種類のパケット (オペコード) で構成されます。

Opcode名前用途
1RRQ (Read Request)クライアント → サーバ。ファイル取得要求
2WRQ (Write Request)クライアント → サーバ。ファイル送信要求
3DATA512 byte ブロック (最後だけ 0-511 byte)
4ACK各 DATA への確認応答
5ERRORエラー通知

転送シーケンス例 (Read)

Client                              Server (UDP/69)
   |  RRQ "boot.img" "octet"          |
   |--------------------------------->|
   |  DATA block#1 (512 byte)         |  (動的ポート, 以後 UDP/N で通信)
   |<---------------------------------|
   |  ACK block#1                     |
   |--------------------------------->|
   |  DATA block#2 (512 byte)         |
   |<---------------------------------|
   |  ACK block#2                     |
   |--------------------------------->|
   |             ...                  |
   |  DATA block#N (< 512 byte)       |  ← 最後のブロックは 512 未満
   |<---------------------------------|
   |  ACK block#N                     |
   |--------------------------------->|

サイズ制限と拡張

ブロック番号が 16bit で 1 ブロック 512 byte のため、最大 65535 × 512 ≒ 32MB。これを超えるファイルは原則送れません。

拡張RFC機能
blksize オプションRFC 2348ブロックサイズを 512 → 65464 まで拡大
timeout オプションRFC 2349タイムアウト値交渉
tsize オプションRFC 2349ファイルサイズ事前通知
windowsizeRFC 7440複数 DATA をまとめて送ってから ACK = スループット向上

Linux での TFTP サーバ構築 (tftpd-hpa)

# インストール
sudo apt-get install tftpd-hpa tftp-hpa

# 設定ファイル
sudo vi /etc/default/tftpd-hpa
# TFTP_USERNAME="tftp"
# TFTP_DIRECTORY="/srv/tftp"
# TFTP_ADDRESS=":69"
# TFTP_OPTIONS="--secure --create"   # --create で WRQ 受付

# 公開ディレクトリ
sudo mkdir -p /srv/tftp
sudo chown tftp:tftp /srv/tftp
sudo chmod 755 /srv/tftp

# サービス起動
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa

# 動作確認 (クライアント)
tftp 192.168.1.10
tftp> get boot.img
tftp> put config.txt
tftp> quit

# ファイアウォール
sudo ufw allow 69/udp

xinetd 版 (古い RHEL 系)

sudo yum install xinetd tftp-server
sudo vi /etc/xinetd.d/tftp
# disable = no
# server_args = -s /var/lib/tftpboot
sudo systemctl restart xinetd

Windows での TFTP サーバ

ソフト特徴
SolarWinds TFTP Server無償。GUI 設定。商用機器ベンダー推奨多数
Tftpd64 / Tftpd32軽量。DHCP / Syslog 機能も統合
WinAgents TFTP Server商用、Windows サービス化
Windows 標準 TFTP クライアント「プログラムと機能」→ Windows 機能の有効化 で追加

Cisco 機器での TFTP 活用

# 設定をバックアップ
Router# copy running-config tftp:
Address or name of remote host []? 192.168.1.10
Destination filename [router-confg]? r1-2026-06-11.cfg

# 設定を投入
Router# copy tftp: running-config
Address or name of remote host []? 192.168.1.10
Source filename []? r1-2026-06-11.cfg

# IOS イメージのアップグレード
Router# copy tftp: flash:
Source filename []? c2900-universalk9-mz.SPA.157-3.M5.bin

# 失敗時の確認
Router# debug tftp
Router# show version

セキュリティの問題

リスク内容
認証なし同一ネットワークから誰でもファイル取得可
平文転送盗聴で全データ漏洩
UDP のため改ざん検知弱中間者攻撃が容易
WRQ 受付時の上書き悪意ある設定ファイル投入

対策: 管理 LAN セグメントに限定 / ファイアウォール厳格化 / 一時的起動のみ / 機微情報は置かない

代替プロトコル

用途推奨代替
機器設定転送SCP / SFTP (SSH ベース)
大量ファイルSFTP / HTTPS
PXE Boot 強化iPXE 経由で HTTPS Boot
組込み更新HTTPS + 署名検証

FAQ

Q: TFTP が「Timeout」で繋がらない
A: 多くはファイアウォール。TFTP は最初 UDP/69 → サーバが動的ポートで応答する特殊仕様のため、conntrack 用ヘルパーモジュール (nf_conntrack_tftp) を読み込まないと NAT 越えで失敗します。

Q: ファイルが 32MB を超えて転送できない
A: blksize オプションでブロックサイズを上げる、または windowsize 拡張対応サーバ / クライアントを使います。Cisco IOS は基本的に対応。

Q: TFTP と FTP の名前は似ているが互換性はある?
A: ありません。FTP は TCP 認証ありの全く別プロトコル。TFTP は名前のとおり「Trivial (簡素化)」版で別仕様です。