소개
이 랩에서는 Linux 의 tftp (Trivial File Transfer Protocol) 명령을 살펴보고 클라이언트와 서버 간에 파일을 전송하기 위해 tftp 서버를 구성하는 방법을 배웁니다. TFTP 프로토콜은 FTP 와 같은 더 복잡한 프로토콜에서 발견되는 인증 기능 없이 파일을 전송하는 간단한 메커니즘을 제공합니다.
tftp 명령의 기본 사용법, 다양한 옵션 및 명령을 이해하는 것부터 시작하겠습니다. 그런 다음 tftp 서버를 설정하고 서버와 파일을 주고받는 연습을 할 것입니다. 이 랩은 네트워크 부팅, 네트워크 장치로의 구성 파일 전송 및 기타 경량 파일 전송 작업에 일반적으로 사용되는 tftp 프로토콜에 대한 실질적인 경험을 제공합니다.
TFTP 프로토콜 이해하기
Trivial File Transfer Protocol (TFTP) 는 경량 파일 전송 작업을 위해 설계된 간단한 프로토콜입니다. 더 복잡한 File Transfer Protocol (FTP) 와 달리 TFTP 는 인증 기능이나 디렉토리 목록을 제공하지 않습니다. 포트 69 에서 UDP 를 사용하여 작동하므로 TCP 기반 프로토콜보다 빠르지만 안정성은 떨어집니다.
먼저 TFTP 클라이언트가 시스템에 제대로 설치되어 있는지 확인해 보겠습니다.
which tftp
다음과 유사한 출력이 표시되어야 합니다.
/usr/bin/tftp
이제 TFTP 클라이언트 버전을 확인해 보겠습니다.
tftp --version
출력은 다음과 같이 표시되어야 합니다.
tftp-hpa version 5.2
TFTP 클라이언트는 대화형 모드에서 작동합니다. 이 모드로 들어가려면 단순히 입력하십시오.
tftp
그러면 tftp> 프롬프트가 표시되며 여기서 다양한 명령을 입력할 수 있습니다. 사용 가능한 명령을 보려면 다음을 입력하십시오.
help
다음과 같은 명령 목록이 표시되어야 합니다.
Commands may be abbreviated. Commands are:
connect connect to remote tftp
mode set file transfer mode
put send file
get receive file
quit exit tftp
verbose toggle verbose mode
trace toggle packet tracing
status show current status
binary set mode to octet
ascii set mode to netascii
rexmt set per-packet retransmission timeout
timeout set total retransmission timeout
? print help information
가장 중요한 TFTP 명령 중 일부를 살펴보겠습니다.
connect- 원격 TFTP 서버에 대한 연결을 설정합니다.get- 서버에서 로컬 컴퓨터로 파일을 다운로드합니다.put- 로컬 컴퓨터에서 서버로 파일을 업로드합니다.quit- TFTP 클라이언트를 종료합니다.binary- 전송 모드를 바이너리 (대부분의 파일에 권장) 로 설정합니다.ascii- 전송 모드를 ASCII(텍스트 파일용) 로 설정합니다.
다음과 같이 입력하여 TFTP 클라이언트를 종료할 수 있습니다.
quit
다음 단계에서는 TFTP 서버를 실행하고 파일 전송을 위해 올바르게 구성하는 방법을 배웁니다.
TFTP 서버 구성 및 관리
이 단계에서는 시스템에서 TFTP 서버가 어떻게 구성되고 실행되는지 살펴보겠습니다. 설정 스크립트가 이미 TFTP 서버를 설치하고 구성했지만, 작동 방식을 이해하는 것이 중요합니다.
먼저 TFTP 서버가 실행 중인지 확인해 보겠습니다.
sudo service tftpd-hpa status
서비스가 활성 상태이고 실행 중임을 나타내는 출력이 표시되어야 합니다.
TFTP 서버의 구성은 /etc/default/tftpd-hpa 파일에 저장됩니다. 해당 내용을 살펴보겠습니다.
cat /etc/default/tftpd-hpa
다음과 유사한 내용이 표시되어야 합니다.
TFTP_USERNAME="labex"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
각 설정의 의미는 다음과 같습니다.
TFTP_USERNAME: TFTP 서버가 실행되는 사용자 계정TFTP_DIRECTORY: TFTP 가 파일을 제공하고 저장할 루트 디렉토리TFTP_ADDRESS: 서버가 수신 대기하는 IP 주소 및 포트 (0.0.0.0 은 모든 인터페이스를 의미)TFTP_OPTIONS: 서버에 대한 추가 옵션 ("--secure"는 TFTP 디렉토리로 작업을 제한합니다)
이제 TFTP 디렉토리를 살펴보겠습니다.
ls -la /tftpboot
초기에는 이 디렉토리가 비어 있거나 시스템 파일만 포함할 수 있습니다. 이 디렉토리에 테스트 파일을 만들어 보겠습니다.
echo "This is a file in the TFTP server directory." > /tmp/server-file.txt
sudo cp /tmp/server-file.txt /tftpboot/
파일이 성공적으로 생성되었는지 확인해 보겠습니다.
ls -la /tftpboot
디렉토리에서 server-file.txt를 볼 수 있어야 합니다.
TFTP 서버가 이 디렉토리에서 파일을 읽고 쓸 수 있도록 하려면 권한을 확인해야 합니다.
ls -ld /tftpboot
설정 스크립트에서 구성한 대로 권한은 모든 사용자가 읽고 쓸 수 있도록 (777) 설정되어야 합니다.
언제든지 TFTP 서버를 다시 시작해야 하는 경우 다음을 사용할 수 있습니다.
sudo service tftpd-hpa restart
이제 다운로드할 준비가 된 테스트 파일이 있는 실행 중인 TFTP 서버가 있습니다. 다음 단계에서는 TFTP 클라이언트를 사용하여 서버와 파일을 주고받는 방법을 배웁니다.
TFTP 클라이언트를 사용한 파일 전송
이제 테스트 파일이 있는 실행 중인 TFTP 서버를 확보했으므로 TFTP 클라이언트를 사용하여 파일을 전송하는 방법을 알아보겠습니다. 서버에서 파일을 다운로드하고 서버로 파일을 업로드하는 두 가지 모두를 연습할 것입니다.
중요 참고: 파일을 업로드하기 위해 TFTP 를 사용할 때 클라이언트는 현재 작업 디렉토리에서 파일을 찾습니다. 파일을 업로드하기 전에 올바른 디렉토리 (~/project) 에 있는지 확인하십시오.
TFTP 서버에서 파일 다운로드하기
먼저 이전 단계에서 생성한 server-file.txt 파일을 다운로드해 보겠습니다. 대화형 모드에서 TFTP 클라이언트를 사용하겠습니다.
cd ~/project
tftp localhost
tftp> 프롬프트를 볼 수 있어야 합니다. 모든 파일 형식에 적합한 바이너리 전송 모드를 설정해 보겠습니다.
binary
이제 서버에서 파일을 다운로드합니다.
get server-file.txt downloaded-file.txt
이 명령은 서버에서 server-file.txt를 다운로드하여 현재 디렉토리에 downloaded-file.txt로 저장합니다.
파일 전송이 완료된 후 TFTP 클라이언트를 종료합니다.
quit
파일이 올바르게 다운로드되었는지 확인해 보겠습니다.
cat downloaded-file.txt
다음과 같이 표시되어야 합니다.
This is a file in the TFTP server directory.
TFTP 서버로 파일 업로드하기
이제 TFTP 서버로 파일을 업로드해 보겠습니다. 프로젝트 디렉토리에는 설정 스크립트에서 생성한 sample.txt 파일이 이미 있습니다.
먼저 올바른 디렉토리에 있는지 확인하고 이 파일의 내용을 확인해 보겠습니다.
cd ~/project
ls -la sample.txt
cat sample.txt
다음과 같이 표시되어야 합니다.
This is a sample file for TFTP transfer testing.
이제 이 파일을 TFTP 서버로 업로드해 보겠습니다.
tftp localhost
tftp> 프롬프트에서 바이너리 전송 모드를 설정하고 파일을 업로드합니다.
binary
put sample.txt uploaded-sample.txt
"File not found" 오류가 발생하면 TFTP 를 종료하고 파일이 있는지 확인하십시오.
quit
ls -la ~/project/sample.txt
cd ~/project
tftp localhost
binary
put sample.txt uploaded-sample.txt
이 명령은 로컬 sample.txt 파일을 서버로 업로드하고 uploaded-sample.txt로 저장합니다. 파일 전송이 완료된 후 TFTP 클라이언트를 종료합니다.
quit
이제 파일이 서버에 성공적으로 업로드되었는지 확인해 보겠습니다.
cat /tftpboot/uploaded-sample.txt
다음과 같이 표시되어야 합니다.
This is a sample file for TFTP transfer testing.
단일 명령줄로 TFTP 사용하기
필요한 모든 정보를 단일 명령줄로 제공하여 대화형 모드로 들어가지 않고도 TFTP 를 사용할 수 있습니다. 예를 들어:
cd ~/project
echo "One-line TFTP test" > oneline-test.txt
tftp -c put oneline-test.txt localhost
파일이 서버에 업로드되었는지 확인해 보겠습니다.
cat /tftpboot/oneline-test.txt
다음과 같이 표시되어야 합니다.
One-line TFTP test
이를 통해 필요에 따라 TFTP 를 대화형으로 또는 단일 명령줄로 사용할 수 있음을 알 수 있습니다.
다음 단계에서는 더 고급 TFTP 옵션과 문제 해결 기법을 살펴보겠습니다.
고급 TFTP 옵션 및 문제 해결
이 단계에서는 TFTP 클라이언트에 대한 몇 가지 고급 옵션을 살펴보고 일반적인 문제를 해결하는 방법을 배웁니다.
상세 모드 (Verbose Mode)
TFTP 로 파일을 전송할 때 전송 프로세스에 대한 자세한 내용을 보는 것이 도움이 될 수 있습니다. 상세 모드를 활성화하여 더 많은 정보를 볼 수 있습니다.
tftp localhost
tftp> 프롬프트에서 상세 모드를 활성화합니다.
verbose
다음과 같이 표시되어야 합니다.
Verbose mode on.
이제 파일을 다운로드해 보겠습니다.
get server-file.txt verbose-download.txt
상세 모드를 활성화하면 전송 프로세스에 대한 더 자세한 정보가 표시됩니다.
TFTP 클라이언트를 종료합니다.
quit
파일 상태 확인
TFTP 전송 기능을 테스트하기 위해 다양한 크기의 파일을 만들어 보겠습니다.
## 프로젝트 디렉토리에 있는지 확인
cd ~/project
## 작은 텍스트 파일 생성
echo "This is a small text file." > small.txt
## 중간 크기 파일 생성 (약 10KB)
dd if=/dev/urandom of=medium.bin bs=1K count=10 2> /dev/null
## 파일이 생성되었는지 확인
ls -la small.txt medium.bin
## 이 파일들을 업로드 시도
tftp localhost
tftp> 프롬프트에서:
binary
put small.txt
put medium.bin
status
quit
status 명령은 연결된 서버 및 전송 모드를 포함하여 현재 TFTP 세션에 대한 정보를 표시합니다.
일반적인 TFTP 문제 및 해결 방법
TFTP 사용 시 발생할 수 있는 일반적인 문제와 해결 방법은 다음과 같습니다.
파일을 찾을 수 없음 (put 작업의 경우): TFTP 클라이언트가 업로드하려는 파일을 현재 디렉토리에서 찾을 수 없을 때 발생합니다.
해결 방법: 올바른 디렉토리에 있고 파일이 존재하는지 확인하십시오.
pwd ls -la filename.txt cd ~/project권한 거부: TFTP 서버 디렉토리에 올바른 권한이 없는 경우 발생할 수 있습니다.
해결 방법: TFTP 디렉토리에 적절한 권한이 있는지 확인하십시오.
sudo chmod -R 777 /tftpboot연결 거부: TFTP 서버가 실행 중이 아니거나 액세스할 수 없는 경우 발생할 수 있습니다.
해결 방법: TFTP 서버 상태를 확인하십시오.
sudo service tftpd-hpa status실행 중이 아닌 경우 시작하십시오.
sudo service tftpd-hpa start파일을 찾을 수 없음 (get 작업의 경우): 서버에 존재하지 않는 파일을 다운로드하려고 할 때 발생할 수 있습니다.
해결 방법: TFTP 디렉토리의 파일을 나열하여 파일이 존재하는지 확인하십시오.
ls -la /tftpboot
의도적으로 파일이 존재하지 않는 상황을 만들고 오류를 확인해 보겠습니다.
cd ~/project
tftp localhost
tftp> 프롬프트에서:
get non-existent-file.txt
파일을 찾을 수 없다는 오류 메시지가 표시되어야 합니다.
quit
TFTP 타임아웃 설정
TFTP 에는 파일 전송 중 타임아웃을 제어하는 설정이 있습니다. 이는 불안정한 네트워크에서 파일을 전송할 때 유용할 수 있습니다.
cd ~/project
tftp localhost
tftp> 프롬프트에서:
rexmt 5
timeout 25
status
quit
이 명령은 패킷당 재전송 타임아웃을 5 초로, 총 재전송 타임아웃을 25 초로 설정합니다.
이제 TFTP 와 함께 다양한 고급 옵션을 사용하는 방법과 일반적인 문제를 해결하는 방법을 알게 되었습니다. 이러한 기술은 실제 시나리오에서 TFTP 를 사용할 때 유용할 것입니다.
요약
이 실습에서는 Linux 에서 Trivial File Transfer Protocol(TFTP) 을 살펴보았습니다. TFTP 의 주요 기능과 제한 사항을 배웠으며, 이는 네트워크 부팅 및 네트워크 장치로의 구성 파일 전송과 같은 특정 사용 사례에 적합합니다.
다음은 우리가 다룬 내용입니다.
TFTP 프로토콜 이해: TFTP 의 기본 개념과 다른 파일 전송 프로토콜과의 차이점을 배웠습니다. TFTP 클라이언트의 대화형 모드와 기본 명령을 살펴보았습니다.
TFTP 서버 구성 및 관리: Linux 에서 TFTP 서버가 구성되는 방식, 구성 파일 설정 및 올바른 작동에 필요한 디렉토리 권한을 검토했습니다.
TFTP 클라이언트를 사용한 파일 전송: 대화형 모드와 단일 명령줄을 모두 사용하여 TFTP 서버에서 파일을 다운로드하고 서버로 파일을 업로드하는 연습을 했습니다.
고급 TFTP 옵션 및 문제 해결: 상세 모드 및 타임아웃 설정과 같은 고급 옵션을 탐색하고 일반적인 TFTP 문제를 해결하는 방법을 배웠습니다.
TFTP 는 네트워크 관리 및 임베디드 시스템에서 특정 목적을 수행하는 경량 프로토콜입니다. FTP 또는 SFTP 와 같은 보다 강력한 프로토콜의 많은 기능을 제공하지는 않지만, 최소한의 프로토콜이 필요한 시나리오에서는 단순성 덕분에 가치가 있습니다.
이 실습에서 배운 기술은 다음과 같은 작업에 적용할 수 있습니다.
- 네트워크 장치의 펌웨어 업데이트
- 네트워크 부팅을 사용한 새 서버 프로비저닝
- 시스템 간 구성 파일의 빠른 전송
- 네트워크 장치 구성에 대한 자동 백업 시스템 설정
TFTP 사용 시 중요 팁:
- 파일을 업로드할 때는 항상 올바른 작업 디렉토리에 있는지 확인하십시오.
- TFTP 전송은 암호화되지 않으므로 신뢰할 수 있는 네트워크 환경 또는 중요하지 않은 데이터에만 사용하십시오.
- TFTP 는 디렉토리 목록 기능을 제공하지 않으므로 정확한 파일 이름을 알아야 합니다.
- 성공적인 전송을 위해서는 클라이언트 및 서버 디렉토리의 파일 권한이 중요합니다.



