일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 명령어
- tftpd-hpa
- 공유기 포트포워딩
- 라즈베리파이5
- 네트워크
- protocol
- mqtt
- tftp
- vm
- 가상머신
- Type of Attacks
- ubuntu
- rfc 1350
- 오블완
- 통신 프로토콜
- 커밋 이력
- IOT
- 라즈비안 os
- virtualbox
- mosquitto
- 우분투
- Submodule
- 부팅 스크립트
- Principles of Security
- 스피커
- 리눅스
- 티스토리챌린지
- Git
- bfg repo-cleaner
- GitHub
신짱구의 개발일지
TFTP 프로토콜이란? 본문
1. TFTP 배경
2. TFTP 개념
3. TFTP Packet 구조
4. TFTP Packet 종류
5. TFTP 전송 흐름
6. Reference
1. TFTP 배경
TFTP는 특정 기업이 아닌, 인터넷 프로토콜 표준화 과정에서 개발된 프로토콜이다. 미국 국방부 산하의 고등연구계획국(DARPA)의 지원을 받아 MIT의 Karen R. Sollins에 의해 1992년 7월 *RFC 1350 문서로 정의되었다. TFTP는 RFC에 기반한 여러 구현체가 존재하며, 그 중 대표적인 구현체로는 리눅스 환경에서 많이 사용되는 TFTP Server인 tftpd-hpa 오픈소스가 있다. 이 패키지는 Linux Foundation에서 운영하는 kernel.org(리눅스 커널 공식 코드 저장소) 사이트에서 관리되고 있다.
TFTP는 작고 구현하기 쉽게 설계되었다. 그러므로, 일반 FTP의 대부분의 기능을 지원하지 않는다. 이 프로토콜은 오직 Remote Server로 부터 파일을 읽거나 쓰는 기능만 할 수 있다.
*RFC 1350 란?
RFC는 Request for Comments의 약자로, 인터넷 표준을 정의하는 공개 문서 시리즈이다. 그 중 RFC 1350은 TFTP의 공식 사양을 정의한 문서이다.
2. TFTP(Trivial File Transfer Protocol) 란?
TFTP는 Trivial File Transfer Protocol의 약자로, 네트워크를 통해 간단한 방식으로 파일을 전송하기 위한 프로토콜이다. TFTP는 *Internet Protocol Suite에서 Application Layer에 해당하는 통신 프로토콜이고, Transport Layer에서는 UDP(User Datagram Protocol)를 기반한다. 그렇기 때문에 TFTP Server는 기본적으로, UDP 69번 포트를 사용한다. 파일은 고정된 512바이트 블록 단위로 전송되고, 마지막 블록이 512바이트 미만일 경우, 전송이 종료된다.
또한, TFTP는 인증과 암호화 과정이 없기 때문에 다른 파일 전송 프로토콜에 비해 상대적으로 빠르지만, 보안성이 떨어진다.
*Internet Protocol Suite 란?
인터넷 프로토콜 스위트는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다.
Internet Protocol Suite에는 2가지 모델이 있는데, OSI Model과 TCP/IP Model이다. 상황에 따라 적절히 사용하면 된다.
3. TFTP Packet 구조
TFTP는 데이터를 전송할 때, IP와 UDP 헤더를 추가하여 보낸다. TFTP는 Application Layer에서 동작하는 프로토콜이기 때문에 하위 Layer 정보를 헤더에 포함해야 통신할 수 있다. Network Layer의 IP 프로토콜에서 사용하는 IP 헤더로, Source(출발지) IP 주소와 Destination(목적지) IP 주소 등의 정보를 가지고 있고, Transport Layer의 UDP 프로토콜에서 사용하는 UDP 헤더로, Source Port 번호와 Destination Port 번호 등의 정보를 가지고 있다. TFTP는 UDP *Payload에 포함되어 함께 전송된다.
*Payload 란?
Payload는 패킷에서 실제로 전달하려는 데이터이다. 하나의 네트워크 패킷은 일반적으로, Header + Payload로 구성된다. Header는 바로 하위 레이어들의 정보를 포함하고, Payload는 상위 레이어의 데이터를 담고 있다.
┌──────────────────────────────┐
│ 이더넷 헤더 (Ethernet) │ ← 2계층
├──────────────────────────────┤
│ IP 헤더 (IPv4/IPv6) │ ← 3계층
├──────────────────────────────┤
│ UDP 헤더 (Port 등) │ ← 4계층
├──────────────────────────────┤
│ TFTP 헤더 (OpCode, 블록 번호) │ ← 애플리케이션 계층
│ TFTP Payload (파일 내용 일부) │
└──────────────────────────────┘
TFTP Packet 종류
TFTP는 총 5가지 종류의 패킷을 사용하고, 패킷의 첫 2 bytes인 Opcode에 따라 어떤 패킷인지 결정된다.
1. RRQ (Read Request) Packet /WRQ (Write Request) Packet
RRQ의 Opcode는 1이고, WRQ는 2이다. Filename은 요청할 파일 이름을 나타내는 변수이며, 문자열 형태이기 때문에 다음 1 byte는 NULL(\0) 문자로 끝난다. Mode는 파일 전송 방식을 지정하는 변수를 나타내고, "netascii", "octet", "mail" 중 하나를 선택할 수 있다. "netascii"는 네트워크 ASCII로, 기본 텍스트 전송 모드를 의미한다. "octet"는 바이너리 전송 모드를 의마하고, "mail"은 이메일 전송 모드를 의미한다.
2. DATA Packet (데이터 전송 패킷)
DATA 패킷의 Opcode는 3이고, Block Number와 Data 필드로 구성되어 있다. Block Number 필드는 해당 블록의 번호를 나타낸다. 블록 번호는 1로 시작해서 새로운 데이터 블록마다 하나씩 증가하여 새 패킷과 중복 패킷을 구별할 수 있도록 한다.
Data 필드의 길이는 0~512 바이트 길이다. 길이가 512바이트인 경우 해당 블록은 마지막 데이터 블록이 아닌 것으로 간주되고, 길이가 0~511바이트 사이면 전송완료 신호로 처리한다.
3. ACK Packet (확인 응답)
ACK 패킷은 Opcode는 4이고, Block Number 필드로 구성되어 있다. 모는 패킷은 확인될 필요가 있으며, ACK 패킷의 Block Number는 확인된 데이터 패킷의 블록 번호를 반영한다.
4. ERROR Packet (오류 메시지)
ERROR 패킷의 Opcode는 5이고, ErrorCode와 ErrMsg 그리고, NULL 바이트(0) 필드로 구성되어 있다. ERROR 패킷은 모든 패킷에 대한 확인 응답으로 사용될 수 있고, ErrorCode는 오류 종류를 나타내는 Integer 값으로 아래 사진의 역할에 따라 적절한 코드를 사용할 수 있다. ErrorMsg는 사람이 이해할 수 있는 문자열 형태로, 마지막 1 byte는 NULL이다.
TFTP 전송 흐름
RRQ
- Client -> Server (UDP 69 port): Read Request 패킷 전송
- Server -> Client: DATA(block 1) 전송
- Client -> Server: ACK(block 1) 전송
- 2,3번 반복...
- 마지막 DATA block이 512 bytes보다 작을 경우, 전송 종료
WRQ
- Client -> Server (UDP 69 port): Write Request 패킷 전송
- Server -> Client: ACK(block 0) 응답 -> 전송 시작 허가
- Client -> Server: DATA(block 1) 전송
- Server -> Client: ACK(block 1) 응답
- 3,4번 반복...
- 마지막 DATA block이 512 bytes보다 작을 경우, 전송 종료
Q. RRQ는 WRQ와 같이 Client가 처음 요청 패킷을 전송하고 Server에서 ACK 패킷을 전송하지 않는 이유?
결론은 TFTP 설계 구조 때문이다.
RRQ 같은 경우, 서버가 읽기 요청을 수락하고 바로 파일 전송을 시작한다. WRQ 같은 경우, 서버가 쓰기 요청을 수락했음을 확인 시켜주기 위한 ACK(block 0)을 전송한다.
이런 차이가 존재하는 이유는 WRQ의 경우, 서버는 클라이언트가 보낼 데이터를 기다리는 입장이고, 클라이언트는 서버가 수신 준비가 되었는지 확인해야되기 때문이다. 반면에 RRQ 같은 경우, 클라이언트는 서버에서 데이터를 받기만 하면 되기 때문이다.
즉, ACK(block 0)은 쓰기 작업에만 필요하다.
Reference
인터넷 프로토콜 스위트 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 인터넷 프로토콜 스위트(영어: Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다. 인터넷 프로토콜
ko.wikipedia.org
https://datatracker.ietf.org/doc/html/rfc1350
RFC 1350: The TFTP Protocol (Revision 2)
TFTP is a very simple protocol used to transfer files. It is from this that its name comes, Trivial File Transfer Protocol or TFTP. Each nonterminal packet is acknowledged separately. This document describes the protocol and its types of packets. The docum
datatracker.ietf.org
https://kernel.googlesource.com/pub/scm/network/tftp/tftp-hpa/
pub/scm/network/tftp/tftp-hpa - Git at Google
kernel.googlesource.com
TFTP 프로토콜
TFTP 프로토콜 HTML 삽입 미리보기할 수 없는 소스 Trivial File Transfer Protocol의 약자로, 인터넷 프로토콜 스위트(IP Suite)*의 일부로서 파일 전송 프로토콜이다. TFTP는 TCP/IP 프로토콜 스택을 기반으로
eteo.tistory.com
'네트워크' 카테고리의 다른 글
[네트워크] Mosquitto를 이용한 MQTT 통신 실습 (1) | 2024.12.26 |
---|---|
[네트워크] MQTT 프로토콜 이론(1) (1) | 2024.12.19 |