前幾天面試被問到爲什麼FTP服務器有PORT模式還需要PASV模式,沒回答上來,很遺憾。
FTP分爲PORT模式和PASV模式,熟知的概念。
首先要知道FTP都是通過一個控制端口發送命令的,即服務器的21端口;
PORT模式:
PORT模式也叫對於服務器的主動模式,由客戶端選擇自己的隨機端口主動連接服務器的21端口,這個時間是有三次握手,四次揮手過程在裏面的,在連接建立之後,即可以開始發送命令,並選擇用什麼模式完成此次連接(不清楚,這句話有待查驗),如果用PORT模式,則需要客戶端發送一個端口號給服務器,服務器來連接客戶端的這個端口完成此次發送文件或者目錄的任務。並且在下一次發送命令時重新選擇端口。
PASV模式:
PASV模式也叫對於客戶端的被動模式,由客戶端選擇隨機端口連接服務器的21端口,這個 過程與PORT模式相同,連接建立以後發送命令給服務器,同時發送端口號給服務器,這個時候服務器查看自己的這個端口是否是可用的,如果可用則返回ACK碼並完成此次任務傳輸,不可用時返回UNACK碼,這時客戶端重新發送PASV命令,選擇另一個新的端口完成任務。
至於爲什麼已經有了PORT模式還要用PASV模式,
約定俗成的端口更容易爲多數人所知,黑客也知道,這樣一來黑客也知道服務器20端口在發送文件,更容易入侵抓取發送的數據
PASV模式的缺點,服務器需要開啓所有的大於1024的端口以供客戶端連接,如果此時有一軟件可以知道哪個ip成功連接了ftp的服務器就只對這個客戶端開放所有的端口,或者檢測到客戶端發來的端口號以後檢測能不能用,能用的話再只對這個客戶端開放這個端口。
全文綜上,菜鳥一個,還請大佬指點。