Bộ giao thức Internet |
---|
Tầng ứng dụng (Application layer) |
|
Tầng giao vận (Transport layer) |
|
Tầng mạng (Internet layer) |
|
Tầng liên kết (Link layer) |
|
FTP (viết tắt của File Transfer Protocol, nghĩa là 'Giao thức truyền tệp') là một phương thức phổ biến để trao đổi tập tin qua mạng dựa trên giao thức TCP/IP (như Internet - mạng toàn cầu - hoặc Intranet - mạng nội bộ). Để hoạt động, FTP cần có hai máy tính: một máy chủ và một máy khách. Máy chủ FTP, chạy phần mềm dịch vụ FTP, gọi là trình chủ, sẽ lắng nghe các yêu cầu từ các máy tính khác trong mạng. Máy khách sử dụng phần mềm FTP để kết nối với máy chủ, thực hiện các thao tác như tải tệp lên hoặc xuống, đổi tên, hoặc xóa tệp trên máy chủ. Vì FTP là một giao thức mở, bất kỳ công ty phần mềm hoặc lập trình viên nào cũng có thể phát triển phần mềm FTP. Hầu hết các hệ điều hành hiện nay đều hỗ trợ FTP, cho phép các máy tính trong cùng mạng TCP/IP trao đổi tệp qua lại, bất kể hệ điều hành của máy tính đó, miễn là chúng cho phép truy cập FTP.
Tổng quan
FTP thường hoạt động trên hai cổng, 20 và 21, chỉ trên nền tảng TCP. Trình chủ FTP lắng nghe yêu cầu dịch vụ từ các kết nối vào máy của trình khách trên cổng 21. Kết nối trên cổng 21 tạo ra một dòng điều khiển cho các lệnh gửi đến trình chủ FTP. Để truyền tệp, cần một kết nối khác. Tùy thuộc vào chế độ truyền, trình khách (ở chế độ chủ động - active mode) hoặc trình chủ (ở chế độ bị động - passive mode) có thể lắng nghe yêu cầu kết nối từ bên kia. Trong chế độ chủ động, trình chủ kết nối với trình khách qua cổng 20 để truyền dữ liệu. Trong chế độ bị động, yêu cầu này không cần thiết, vì kết nối không bị hạn chế.
Khi dữ liệu được truyền qua đường truyền dữ liệu, đường điều khiển vẫn đứng yên. Tình trạng này có thể gây ra vấn đề, đặc biệt khi lượng dữ liệu lớn và đi qua tường lửa. Tường lửa thường tự động ngắt kết nối sau một thời gian không hoạt động. Dù tệp có thể được truyền tải hoàn tất, nhưng đường điều khiển có thể bị gián đoạn do tường lửa, dẫn đến lỗi.
Mục đích của giao thức FTP
Mục tiêu của giao thức FTP, theo định nghĩa trong bản RFC, bao gồm:
- Khuyến khích việc chia sẻ tập tin (như ứng dụng hoặc dữ liệu)
- Hỗ trợ việc sử dụng máy tính từ xa một cách không trực tiếp (implicit).
- Ẩn đi sự khác biệt về hệ thống lưu trữ tập tin giữa các máy chủ, giúp người dùng không phải quan tâm đến các khác biệt cụ thể.
- Đảm bảo truyền tải dữ liệu một cách tin cậy và hiệu quả.
Các nhược điểm của giao thức FTP
- Mật khẩu và dữ liệu tập tin được truyền qua mạng dưới dạng văn bản không mã hóa (clear text), có thể bị chặn và lộ thông tin cho những kẻ nghe trộm. Hiện nay, đã có các cải tiến để khắc phục điểm yếu này.
- FTP yêu cầu nhiều kết nối TCP/IP: một kết nối cho điều khiển, một kết nối cho việc truyền tải tập tin lên, xuống, hoặc liệt kê thư mục. Các tường lửa cần phải có logic đặc biệt để quản lý các kết nối FTP.
- Việc quản lý lưu lượng FTP trên máy khách, khi sử dụng chế độ chủ động, qua tường lửa là khó khăn, vì máy khách phải mở một cổng mới để tiếp nhận yêu cầu kết nối. Vấn đề này thường được giải quyết bằng cách chuyển sang chế độ bị động.
- Có thể lạm dụng tính năng ủy quyền trong giao thức để chỉ định máy chủ gửi dữ liệu đến một cổng tùy chọn trên máy tính thứ ba. Tham khảo thêm về FXP.
- FTP có độ trễ cao (high latency), do phải xử lý nhiều lệnh khởi đầu trong một phiên truyền tải.
- Phần nhận không có phương pháp để kiểm tra tính toàn vẹn của dữ liệu truyền đi. Nếu kết nối bị ngắt giữa chừng, không có cách nào trong giao thức để xác nhận xem tập tin đã nhận đầy đủ hay chưa. Cần sử dụng các phương pháp bên ngoài như kiểm tra MD5 hoặc kiểm tra độ dư tuần hoàn (cyclic redundancy checking) để đảm bảo tính toàn vẹn.
Các vấn đề bảo mật khi sử dụng FTP
FTP là một phương pháp truyền tệp truyền thống không đảm bảo an toàn, vì theo thiết kế gốc của giao thức này, không có cách nào để mã hóa dữ liệu. Điều này có nghĩa là thông tin như cài đặt mạng, tên người dùng, mật khẩu, lệnh FTP, và tệp truyền tải có thể bị người khác trên cùng mạng quan sát hoặc thu thập bằng các công cụ phân tích giao thức (protocol analyzer) hay còn gọi là 'sniffer'. Đây là vấn đề thường gặp ở các giao thức internet trước khi có sự ra đời của SSL (Secure Sockets Layer), như HTTP, SMTP và Telnet. Giải pháp phổ biến là sử dụng SFTP (Secure Shell File Transfer Protocol), một giao thức dựa trên SSH, hoặc FTPS (FTP over SSL). SFTP là FTP kết hợp với chức năng mã hóa dữ liệu của SSL hoặc TLS (Transport Layer Security).
Các mã phản hồi của FTP
Xem thêm: Danh sách đầy đủ các mã phản hồi của máy chủ FTP.
Mã phản hồi của máy chủ FTP cho biết trạng thái của máy chủ sau khi hoạt động, được thể hiện qua giá trị số ở vị trí của nó. Ý nghĩa của các số và vị trí này có thể được giải thích như sau:
- 1xx: Phản hồi sơ bộ tích cực. Đề xuất đã được khởi tạo, nhưng cần đợi thêm một thông điệp phản hồi trước khi tiếp tục thực hiện.
- 2xx: Phản hồi hoàn tất tích cực. Đề xuất đã hoàn tất. Trình khách có thể tiếp tục gửi lệnh mới.
- 3xx: Phản hồi trung gian tích cực. Lệnh đã được xử lý thành công, nhưng cần thêm lệnh khác trước khi hoàn tất yêu cầu.
- 4xx: Phản hồi phủ quyết tạm thời. Lệnh không được xử lý, nhưng trình khách có thể gửi lại yêu cầu vì lỗi chỉ là tạm thời.
- 5xx: Phản hồi phủ quyết toàn phần. Lệnh không được xử lý và trình khách không nên gửi lại yêu cầu đó.
- x0z: Lỗi xảy ra do vấn đề cú pháp.
- x1z: Phản hồi liên quan đến yêu cầu thông tin.
- x2z: Phản hồi liên quan đến kết nối.
- x3z: Phản hồi liên quan đến tài khoản và quyền hạn.
- x4z: Không xác định.
- x5z: Phản hồi liên quan đến hệ thống tập tin.
FTP không cần xác thực
Nhiều máy chủ FTP cho phép truy cập qua 'FTP không cần xác thực.' Cách cấu hình này cho phép người dùng kết nối mà không cần tài khoản cụ thể. Tên người dùng cho truy cập không cần xác thực thường là 'anonymous' hoặc 'ftp'. Tài khoản này không yêu cầu mật khẩu. Dù người dùng thường được yêu cầu cung cấp địa chỉ email thay vì mật khẩu để giúp phần mềm xác minh, nhưng quy trình xác minh thường rất đơn giản hoặc không có - tùy thuộc vào máy chủ FTP và cấu hình của nó. Internet Gopher đã được đề xuất như một phương án thay thế cho FTP không cần xác thực.
Định dạng dữ liệu
Có hai chế độ chính được sử dụng để truyền dữ liệu qua mạng:
- Chế độ ASCII
- Chế độ Nhị phân
Hai chế độ này khác biệt trong cách truyền tải dữ liệu. Khi sử dụng chế độ ASCII, từng ký tự, số, và ký tự đặc biệt được chuyển đổi sang mã ASCII và lưu trữ dưới dạng tập tin văn bản. Ví dụ, máy Unix lưu trữ theo định dạng của Unix, trong khi máy Macintosh lưu trữ theo định dạng của Mac. Do đó, khi sử dụng chế độ ASCII, phần mềm FTP giả định dữ liệu truyền đi là văn bản thuần và sẽ lưu trữ theo định dạng của máy nhận. Việc chuyển đổi giữa các định dạng văn bản bao gồm việc thay thế mã kết dòng và mã kết tập tin từ mã gốc của máy gửi sang mã của máy nhận, chẳng hạn như một máy Windows nhận tập tin từ máy Unix sẽ thay thế ký tự xuống dòng bằng cặp mã kết dòng và thêm hàng. Truyền tải dữ liệu bằng mã ASCII có thể nhanh hơn một chút vì bit cao nhất của mỗi byte được loại bỏ.
Khi gửi tập tin ở chế độ nhị phân, máy gửi truyền từng bit một cho máy nhận. Máy nhận giữ nguyên dòng bit như khi gửi. Nếu dữ liệu không phải dạng văn bản, nó phải được truyền ở chế độ nhị phân để tránh bị biến dạng hoặc mất dữ liệu.
Theo cấu hình mặc định, hầu hết các trình khách FTP sử dụng chế độ ASCII khi bắt đầu. Một số trình khách FTP kiểm tra tên và nội dung tập tin để xác định chế độ phù hợp cần sử dụng.
FTP và các trình duyệt
Hầu hết các trình duyệt web hiện đại và các trình quản lý tập tin đều có khả năng kết nối với các máy chủ FTP, dù có thể không hỗ trợ tất cả các tính năng mở rộng của giao thức như FTPS. Điều này cho phép người dùng quản lý tập tin từ xa qua giao diện quen thuộc, tương tự như giao diện trên máy của họ. Ví dụ, danh sách tập tin từ máy chủ xa trông giống như trên máy tính cá nhân, và các thao tác như sao chép, đổi tên hay xóa đều được xử lý như thể trên máy tính của mình. Kết nối FTP có thể được thực hiện qua URL FTP(s) như ftp(s)://<địa chỉ của máy chủ FTP> (ví dụ: ftp.gimp.org Lưu trữ 2011-09-27 tại Wayback Machine). Mặc dù không bắt buộc, mật khẩu có thể được đính kèm trong URL, ví dụ: ftp(s)://<tên người dùng>:<mật khẩu>@<địa chỉ của máy chủ FTP>:<số cổng>. Đa số trình duyệt yêu cầu FTP hoạt động ở chế độ bị động, nhưng không phải máy chủ FTP nào cũng hỗ trợ điều này.
FTP qua SSH
'FTP qua SSH' đề cập đến việc sử dụng một kỹ thuật 'đào hầm' để truyền tải dữ liệu FTP thông qua kết nối SSH.
FTP, một giao thức truyền dữ liệu phổ biến dựa trên TCP/IP, sử dụng nhiều kết nối TCP, điều này làm cho việc kết nối qua SSH trở nên phức tạp. Với đa số trình khách SSH, khi kết nối điều hành (kết nối khởi tạo giữa máy khách và máy chủ qua cổng 21) được thiết lập, SSH chỉ bảo vệ kết nối này. Khi dữ liệu được truyền tải, trình FTP tại một trong các đầu sẽ tạo một kết nối TCP mới ('đường dẫn dữ liệu') mà không được bảo vệ bởi SSH, làm mất tính bí mật, toàn vẹn và các tính năng khác của SSH.
Nếu trình khách FTP được cấu hình để sử dụng chế độ bị động và kết nối với máy chủ qua giao diện SOCKS, nhiều trình khách SSH có thể sử dụng giao diện này để thực hiện kết nối qua SSH, điều này cho phép sử dụng FTP qua kết nối SSH.
Nếu không, các phần mềm khách SSH cần phải nắm rõ giao thức FTP, theo dõi và sửa đổi các thông điệp trong kết nối điều khiển của FTP, và tự động thiết lập các đường truyền dữ liệu cho FTP. Phiên bản 3 của phần mềm SSH từ Communications Security Corp. là một ví dụ tiêu biểu cho những khả năng này.
'FTP qua SSH' còn được gọi là FTP bảo mật (secure FTP). Điều này không nên nhầm lẫn với các phương pháp bảo mật FTP khác như SSL/TLS, hay còn gọi là FTPS. Những phương pháp truyền tải tập tin khác qua SSH, chẳng hạn như SFTP (SSH file transfer protocol - giao thức truyền tải tập tin qua SSH) hoặc SCP (Secure copy - sao chép an toàn), đều bảo vệ toàn bộ quá trình (xác thực người dùng và truyền tải dữ liệu) bằng giao thức SSH.
Các tài liệu tham khảo
Giao thức được tiêu chuẩn hoá trong RFC 0959 bởi tổ chức IETF với thông tin như sau:
- RFC 0959 Giao thức truyền tải tập tin (File Transfer Protocol - FTP) - J. Postel, J. Reynolds. tháng 10 năm 1985. Đây là bản thay thế cho RFC 765 và các bản RFC trước đó về FTP, bao gồm cả bản đầu tiên, RFC 114.
- Tham khảo thêm RFC 1579 về FTP thích ứng với bức tường lửa (Firewall-Friendly FTP).
- Công cụ tìm kiếm Archie (Archie search engine)
- Phần mềm khách FTP (FTP client)
- Danh sách đầy đủ các mã phản hồi từ máy chủ FTP (List of all FTP server return codes)
Các giao thức tương tự FTP
- FTPFS
- FTPS, FTP chạy trên nền SSL
- SFTP (Simple File Transfer Protocol), giao thức lịch sử RFC 913
- Giao thức truyền tải tập tin qua SSH (SSH file transfer protocol - SFTP), một giao thức dựa trên SSH (Secure SHell - Shell bảo mật)
- TFTP (Trivial File Transfer Protocol - Giao thức truyền tập tin cơ bản)
Phần mềm
- So sánh các phần mềm khách FTP (Comparison of FTP clients)
- Danh sách các máy chủ FTP (List of FTP servers)
Các liên kết bên ngoài
- RFC 959 — Giao thức truyền tải tập tin (FTP). Tác giả: J. Postel và J. Reynolds. Tháng 10 năm 1985. Cũng có thể xem RFC 0959 dưới dạng HTML - trình bày rõ ràng hơn
- RFC 1579 — FTP tương thích với tường lửa (Firewall-Friendly FTP)
- RFC 2228 — Các mở rộng bảo mật cho FTP (FTP Security Extensions)
- Danh sách các lệnh FTP cơ bản
- Sơ đồ trình tự FTP Lưu trữ 2010-02-06 tại Wayback Machine (dưới dạng PDF)
- Kiểm tra máy chủ FTP trực tuyến - Sử dụng FTP qua web (không cần cài đặt phần mềm)
Hướng dẫn học tập / Tổng quan
Máy chủ FTP
- FileZilla Server (Windows)
- Pure-FTPd (Unix)
- VsFTPd (Unix)
- ProFTPd (Unix)