Q:舉例解釋說明執行FTP的過程/運作流程(commands, status code / phrase)
Ans:
FTP(File Transfer Protocol, 檔案傳輸協定)是一種不同電腦之間在網際網路上的通訊協定。
遵循這個協定的 FTP 軟體,會將檔案轉換成符合 FTP 協定的編碼,
讓檔案能夠在伺服器端(Server)與用戶端(Client)之間傳送。
所謂伺服器端,就是讓其他用戶登入的電腦,
而用戶端指欲從伺服器端下載檔案,或者欲將檔案傳送到伺服器的那一方;
使用網路,幾乎每個人都有在網站下載檔案的經驗。
運作流程:
1.建立命令通道的連線
如上圖所示,用戶端會隨機取一個大於 1024 以上的埠口 (port AA) 來與 FTP 伺服器端的 port 21 達成連線,
這個過程當然需要三向交握了!
達成連線後用戶端便可以透過這個連線來對 FTP 伺服器下達指令,
包括查詢檔名、下載、上傳等等指令都是利用這個通道來下達的;
2.通知 FTP 伺服器端使用 active 且告知連接的埠號
FTP 伺服器的 21 埠號主要用在命令的下達,但是當牽涉到資料流時,就不是使用這個連線了。 用戶端在需要資料的情況下,會告知伺服器端要用什麼方式來連線,如果是主動式 (active) 連線時, 用戶端會先隨機啟用一個埠口 (圖 21.1-1 當中的 port BB) ,且透過命令通道告知 FTP 伺服器這兩個資訊,並等待 FTP 伺服器的連線;
3.FTP 伺服器『主動』向用戶端連線
FTP 伺服器由命令通道瞭解用戶端的需求後,
會主動的由 20 這個埠號向用戶端的 port BB 連線, 這個連線當然也會經過三向交握啦!
此時 FTP 的用戶端與伺服器端共會建立兩條連線,分別用在命令的下達與資料的傳遞。
而預設 FTP 伺服器端使用的主動連線埠號就是 port 20 囉!
附註:何謂三向交握?
在上面的封包連接模式當中,在建立連線之前都必須要通過三個確認的動作,
所以這種連線方式也就被稱為三向交握(Three-way handshake)。
那麼我們將整個流程依據上面的 A, B, C, D 四個階段來說明一下:
A:封包發起
當用戶端想要對伺服器端連線時,就必須要送出一個要求連線的封包,
此時用戶端必須隨機取用一個大於 1024 以上的埠口來做為程式溝通的介面。
然後在 TCP 的表頭當中,必須要帶有 SYN 的主動連線(SYN=1),
並且記下發送出連線封包給伺服器端的序號 (Sequence number = 10001) 。
B:封包接收與確認封包傳送
當伺服器接到這個封包,並且確定要接收這個封包後,
就會開始製作一個同時帶有 SYN=1, ACK=1 的封包, 其中那個 acknowledge 的號碼是要給 client 端確認用的,
所以該數字會比(A 步驟)裡面的 Sequence 號碼多一號 (ack = 10001+1 = 10002),
那我們伺服器也必須要確認用戶端確實可以接收我們的封包才行,
所以也會發送出一個 Sequence (seq=20001) 給用戶端,並且開始等待用戶端給我們伺服器端的回應喔!
C:回送確認封包
當用戶端收到來自伺服器端的 ACK 數字後 (10002) 就能夠確認之前那個要求封包被正確的收受了,
接下來如果用戶端也同意與伺服器端建立連線時,就會再次的發送一個確認封包 (ACK=1) 給伺服器,
亦即是 acknowledge = 20001+1 = 20002 囉
D:取得最後確認
若一切都順利,在伺服器端收到帶有 ACK=1 且 ack=20002 序號的封包後,就能夠建立起這次的連線了。
生活應用:
利用架 FTP 的軟體(伺服器端,如 FTP Serv-U )在我的電腦上建立了 FTP站台,
並且放了一些 MP3、電影、照片、遊戲和網路小說想分享給朋友,
於是將自己設定好的 FTP 站台位址(相當於瀏覽網頁的網址)、帳號密碼給我的朋友,
我的朋友們只要在專門讀取 FTP 站台的軟體(用戶端,如 CuteFTP )上輸入這些資訊即可進入下載;
我的朋友如果有東西想分享給我,也可以利用用戶端軟體將檔案上傳到我的 FTP 站台裡。
參考資料:鳥哥的Linux 私房菜