FTP (File Transfer Protocol) là giao thức tiêu chuẩn cho việc chuyển tải tập tin qua mạng, được định nghĩa trong RFC 959. Giao thức này không phải là dịch vụ mà là cơ chế giao tiếp, với các ứng dụng triển khai như vsftpd, Pure-FTPd, FileZilla Server. Bài viết tập trung vào ba khía cạnh chính: chế độ hoạt động, lệnh điều khiển và mã phản hồi.
Chế độ kết nối
FTP sử dụng hai kết nối TCP riêng biệt: một cho lệnh điều khiển (port 21), một cho dữ liệu (port 20 hoặc ngẫu nhiên). Hai chế độ chính:
- Chế độ chủ động: Máy chủ kết nối đến cổng được chỉ định bởi client (cổng 20 → client)
- Chế độ bị động: Client kết nối đến cổng được chỉ định bởi máy chủ (client → máy chủ)
Lý do sử dụng chế độ bị động phổ biến: hầu hết client đều ở trong mạng nội bộ (NAT), máy chủ không thể kết nối trực tiếp đến client.
Lệnh điều khiển cơ bản
| Lệnh | Mô tả |
|---|---|
| USER | Xác thực tên người dùng |
| PASS | Truyền mật khẩu |
| CDUP | Chuyển lên thư mục cha |
| RETR | Tải xuống tập tin |
| STOR | Tải lên tập tin |
| PASV | Chuyển sang chế độ bị động |
| PORT | Chỉ định cổng dữ liệu (format: IP,IP,IP,IP,PORT1,PORT2) |
Mã phản hồi
Các mã phản hồi được phân loại theo cấu trúc:
- 2xx: Lệnh thành công
- 3xx: Cần phản hồi tiếp theo
- 4xx: Lỗi tạm thời
- 5xx: Lỗi vĩnh viễn
Ví dụ:
| Mã | Mô tả |
|---|---|
| 220 | Dịch vụ sẵn sàng cho kết nối mới |
| 230 | Đăng nhập thành công |
| 250 | Thao tác tập tin hoàn tất |
| 150 | Bắt đầu kết nối dữ liệu |
| 226 | Kết nối dữ liệu hoàn tất |
| 425 | Không mở được kết nối dữ liệu |
| 550 | Tập tin không tồn tại |
Ví dụ bắt gói tin
Phân tích kết nối FTP qua Wireshark:
1. Khởi tạo kết nối
220 (vsFTPd 3.0.3) OPTS UTF8 ON 200 Always in UTF8 mode.
2. Đăng nhập
USER anonymous 331 Please specify password. PASS guest@domain.com 230 Login successful.
3. Tải xuống tập tin
PORT 10,0,0,5,150,120 200 PORT command successful. RETR data.bin 150 Opening BINARY mode data connection for data.bin (1024 bytes). 226 Transfer complete.
Giải thích PORT: Cổng = 150*256 + 120 = 38520