Bất cứ ai cũng có thể giải thích một cách đơn giản sự khác biệt giữa FTP chế độ thụ động (PASV) và FTP chế độ thụ động mở rộng (EPSV)?
Bất cứ ai cũng có thể giải thích một cách đơn giản sự khác biệt giữa FTP chế độ thụ động (PASV) và FTP chế độ thụ động mở rộng (EPSV)?
Câu trả lời:
Sự khác biệt duy nhất là PORT/PASV
giới hạn ở IPv4 , trong khi EPRT/EPSV
hoạt động với bất kỳ giao thức mạng nào (mặc dù chỉ sử dụng IPv6 trong thực tế).
Các lệnh tiêu chuẩn PORT
(hoạt động) và PASV
(thụ động) trong địa chỉ trao đổi giao thức điều khiển FTP và thông tin cổng dưới dạng sáu số thập phân 1 byte , từ đó đầu kia phải tạo lại địa chỉ IP bốn byte và số cổng TCP hai byte.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
Nhưng sau đó các giao thức khác bắt đầu xuất hiện. IPv4 sắp được thay thế bằng "IPng", có khá nhiều đề xuất thay thế cạnh tranh (OSI CLNP, TUBA, SIP, SIPP, CATNIP - tại nhiều thời điểm trong lịch sử), một số có kích thước địa chỉ máy chủ ngắn hơn, dài hơn, thậm chí biến đổi , cho đến khi IPv6 với địa chỉ 16 byte cuối cùng đã được xác định.
Chỉ cần gửi nhiều byte sẽ không hoạt động - máy chủ và máy khách không thể biết giao thức phù hợp hoàn toàn dựa trên độ dài địa chỉ. (Ví dụ: nếu bạn có một giao thức có địa chỉ 16 byte + cổng 4 byte, giao thức khác có địa chỉ 12 byte + cổng 12 byte thì sao?)
Bên cạnh đó - mặc dù điều này ít quan trọng hơn 20 năm trước - những ngày này có hàng triệu thiết bị NAT trên Internet, kiểm tra và quản lý các kết nối điều khiển FTP để máy chủ "bên ngoài" chỉ nhìn thấy địa chỉ IPv4 toàn cầu ngay cả khi "bên trong" máy chủ đã gửi một RFC1918 một địa phương. Ngay cả khi không có NAT, tường lửa trạng thái thường xem các lệnh điều khiển để tự động cho phép kết nối dữ liệu mà không cần quy tắc thủ công.
Điều này về cơ bản có nghĩa là chỉ cần gửi nhiều số hơn với PORT
hoặcPASV
được đảm bảo để phá vỡ cho nhiều người. Có lẽ một số tường lửa sẽ lặng lẽ giải thích sai một số byte địa chỉ là cổng và lặng lẽ loại bỏ phần còn lại; những người khác có thể mất kết nối, hoặc chỉ bị sập.
Để tránh các vấn đề khác nhau như trên, các lệnh mới phải được giới thiệu để hỗ trợ đa giao thức trong FTP.
Năm 1993, RFC 1639 (ban đầu là RFC 1545 ) đã giới thiệu "địa chỉ dài" LPRT
vàLPSV
các lệnh, giống như PORT
& PASV
nhưng với độ dài địa chỉ thay đổi ; chúng bao gồm cả định danh loại giao thức. (Mặc dù vậy, nó không thay đổi cú pháp - Địa chỉ IPv6: cổng đơn giản sẽ được gửi dưới dạng 21 số chứ không phải sáu.)
LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>
LPRT 4,4,132,235,1,2,2,24,131
LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162
Tuy nhiên, điều đó vẫn không khắc phục được một số vấn đề, chẳng hạn như yêu cầu máy chủ sử dụng giao thức khác với kết nối điều khiển. RFC cũng nhanh chóng trở nên lỗi thời; khi IPv6 xuất hiện chỉ một năm sau đó, nó không thể được sử dụng với LPRT vì không có định danh giao thức LPRT được chỉ định cho nó (chỉ dành cho các đề xuất ban đầu khác nhau).
Để khắc phục điều này, RFC 2428 vào năm 1998 đã thêm EPRT
và EPSV
, còn gọi là "cổng mở rộng" và "thụ động mở rộng" , cũng có một phương pháp để đàm phán một giao thức mà cả hai kết thúc hỗ trợ. Các lệnh "mở rộng" cũng gửi địa chỉ ở dạng người có thể đọc được - đối với IPv6, có nghĩa là sử dụng ký hiệu hex & dấu hai chấm, thay vì một chuỗi các số thập phân riêng biệt.
EPRT x<protocol>x<address>x<port>x
EPRT |1|132.235.1.2|6275|
EPRT |2|1080::8:800:200C:417A|5282|
Tóm lại, hỗ trợ IPv6 là sự khác biệt duy nhất.
EPSV
phản hồi không bao gồm địa chỉ IP ( PASV
phản hồi nào). Điều này là để tránh sự cố phổ biến khi máy chủ FTP nằm phía sau NAT không biết địa chỉ IP bên ngoài và gây nhầm lẫn cho máy khách FTP bằng cách gửi địa chỉ nội bộ của nó.
Sự khác biệt giữa chủ động và thụ động đã được trả lời. Bị động mở rộng (EPSV) chỉ là thụ động với IPv4 và IPv6, vì cú pháp của phản hồi đối với PASV là dành riêng cho IPv4 và do đó cần một lệnh mới cho IPv6. Tương tự với EPTR so với PORT ở chế độ hoạt động. Có một hành vi hơi khác với EPRT và EPSV ở chỗ chúng chỉ có thể chứa cổng, không phải IP và cổng như PORT và PASV. Do đó, việc truyền dữ liệu chỉ có thể được thực hiện giữa các hệ thống có kết nối điều khiển. Với PORT và PASV, có thể tạo kết nối dữ liệu giữa các hệ thống khác (mặc dù ngày nay được coi là thiết kế xấu và rủi ro bảo mật).