# 網路常見軟體、協定(FTP、TELNET 等)
[TOC]
Hello Guys, I'm LukeTseng. 本篇將來介紹 ip-address 跟 mac-address 的原理,若本篇文章有誤,歡迎各位指正,若你也喜歡這篇文章,不妨按下愛心跟追蹤我的個人頁面吧!
另外本篇文章主要針對上課內容製作筆記,斟酌參考~
## FTP(File Transfer Protocol)
FTP(File Transfer Protocol)直接翻譯就是檔案傳輸協定,專門用來在兩台電腦之間上傳和下載檔案。
假設你在學校寫好程式作業,想傳到家裡的電腦繼續改,就可以用 FTP。
FTP 使用明文傳輸,意思就是資料沒有加密。因此現代比較少單獨使用 FTP,反而搭配 SSH 使用 SFTP(Secure FTP)來加密傳輸。
而 FTP 採用主從式(Client-Server)架構,也就是客戶端對到一台伺服端。有一台主機作為 FTP 伺服器(用來儲存檔案),客戶端則用電腦(用戶端)連線並操作這台伺服器。
接下來 FTP 雙通道設計不像 HTTP 只用一個連線,FTP 同時開啟兩個 TCP 連線:
* 控制通道(port 21):負責傳送指令與回應(如登入、切換目錄、開始下載/上傳)。
* 資料通道(port 20 / 動態 port):只用來真正傳檔案的資料。
### FTP 傳輸流程
1. 建立連線:用戶端啟動 FTP 軟體,輸入伺服器位址、帳號和密碼,連到 FTP 伺服器。
2. 認證登入:輸入正確帳密後,登入成功。
3. 目錄導航:可透過 cd(切換目錄)、ls(檢視目錄)等指令查找和切換資料夾。
4. 檔案操作:
- 上傳(put 指令)
- 下載(get 指令)
5. 結束連線:當資訊傳輸完成,送出 quit 指令斷開連線。
### FTP 使用方式
1. 圖形化介面:如 FileZilla、WinSCP 等軟體,透過拖拉可直接操作檔案。或是部分瀏覽器有支援 FTP,但要打指令,經過實測發現 chrome 可以做到。
2. cmd 操作:
開啟 cmd,輸入 `ftp [伺服器網址]`(`[]` 不用打)。
若想要試試看的話,以下這個網址可以測試 ftp 功能:https://www.smartftp.com/zh-tw/support/kb/2779
假設我輸入 `ftp ftp.cs.brown.edu`,會出現以下畫面,提示你輸入帳號:

輸入完後會有 `ftp>` 提示可輸入指令:

接下來就可以試試看啦:

在登入以後,可以用:
* `ls`:列出檔案
* `cd [目錄名]`:切換目錄
* `get [檔名]`:下載檔案
* `put [檔名]`:上傳檔案
* `bye` 或 `quit`:離開
## TELNET
TELNET 是最早期的遠端連線技術,使用 TCP port 23。讓你可透過網路連線到遠端電腦,並在上面執行指令。
他同樣也是採用主從式架構,電腦執行 TELNET 軟體(用戶端),連線到遠端伺服器(TELNET 伺服器,通常開啟 TCP port 23)。
在 TELNET 用戶端連到伺服器後,伺服器可能會傳送歡迎訊息。
接下來還會做身份驗證,請求用戶端送出帳號密碼(都是明文,沒加密的)。
在上面輸入的每個字元、按鍵,TELNET 都會即時送到遠端伺服器。伺服器處理命令後,把結果回傳,會在電腦上看到結果。
TELNET 預設用 ASCII Code,但可以協商其他編碼(如 UTF-8),如果兩端設定不同,會出現亂碼問題。
在安全性問題上,TELNET 所有資料都是用明文傳送,包括輸入的帳號、密碼和指令。只要中途網路被監控,就會被第三方竊聽。所以後來都由 SSH(Secure Shell)來取代了。
### 如何用 TELNET?
在 Windows 開啟 TELNET 的功能可至:https://unauna1129.medium.com/windows-%E9%96%8B%E5%95%9Ftelnet%E5%8A%9F%E8%83%BD-484e9f03f9b4
同樣打開 cmd,連線指令打:`telnet [伺服器 IP] [port,預設23]`
然而因為現在完全沒人再用這東西了,所以也成為時代的眼淚,接下來就不會實際操作,而是稍作說明。
常見指令流程:
- `open [伺服器位址]`:建立連線
- `quit`:離開 TELNET
- 直接輸入命令操作遠端主機(如 Linux 指令:`ls, cd, cat...`)
而 TELNET 還能用來測試伺服器端口(如 Web 服務是否活著),直接用 telnet 指令,輸入 IP+port,觀察回應即可。例如:
```
telnet www.example.com 80
```
## SSH(Secure Shell)
SSH 基本上就是 TELNET 的替代版本,因為 SSH 安全,有個 Secure。
SSH(Secure Shell,安全殼層協定)是一種可以安全遠端連線與操作伺服器的網路協定,在類 Unix 系統中應用最廣泛,也支援在 Windows、macOS 及多種設備。
SSH 為所有資料傳輸提供加密、身分驗證和完整性保護,廣泛應用於遠端維運、檔案傳輸、隧道加密等。
SSH 預設用 TCP port 22。
### SSH 運作原理
1. 非對稱式加密:Asymmetric Encryption(公鑰 / 私鑰)
當連線伺服器時,伺服器先送出「公鑰」。
用戶端用公鑰加密敏感資料(如登入密碼或用來協議的對稱金鑰),只有伺服器能用「私鑰」解開這些資料。
主要目的是驗證伺服器身分、協商會話(Session)金鑰。
2. 對稱加密(Session Key)
連線後,雙方用協議產生的「會話(Session)金鑰」,
所有後續資料通訊都用對稱加密(如 AES、ChaCha20)。
3. 資料完整性與驗證
利用雜湊演算法(如 SHA-2、HMAC)確保資料沒被竄改,也會反覆校驗封包。
### SSH 使用
一般來說格式都長這樣:
```bash
ssh [username]@[ip address]
```
第一次連線時需要輸入密碼。
若使用公鑰認證登入的話(無密碼),則是以下流程:
會先在本機端生成金鑰:
```bash
ssh-keygen
```
會得到 `~/.ssh/id_rsa`(私鑰)與 `~/.ssh/id_rsa.pub`(公鑰)。
然後將這組金鑰傳給 server:
```bash
ssh-copy-id tom@192.168.1.10
```
之後使用私鑰就可安全登入,不用每次都要輸密碼。
### SFTP
SFTP(SSH File Transfer Protocol),稱為 SSH 檔案傳輸協定,是一種基於 SSH 協定的安全檔案傳輸方式。實際上就是 FTP 的安全版啦。
有什麼差異呢?除了安全以外。
SFTP 的 Port 全都使用 22,而連線通道從原本的 FTP 的雙通道,降到 1 通道,就這樣。
而 SFTP 的連線語法跟 SSH 是一樣的:
```bash
sftp user@server.example.com
```
若用的不是標準的 Port,可額外寫:
```bash
sftp -P 2222 user@server.example.com
```
而一旦進入到互動式介面時,操作就跟原本的 FTP 是一樣的了。
## 總結
### FTP(File Transfer Protocol)
FTP 是早期用於兩台電腦間傳送檔案的協定,採主從式架構,使用明文傳輸,因此不安全。
採雙通道設計:
* 控制通道:port 21,用於指令與回應。
* 資料通道:port 20 或動態埠,用於傳輸檔案。
基本流程包含:建立連線 → 登入 → 瀏覽目錄 → put/get 上傳下載 → quit 離開。
可用圖形化工具(FileZilla、WinSCP)或 cmd 操作。
由於明文不安全,現代多以 SFTP 取代。
### TELNET
TELNET 是早期的遠端文字介面登入技術,使用 TCP port 23。
採主從式架構,所有資料(包含帳密)皆為 明文,容易遭竊聽,因此已被淘汰。
用法為:`telnet [IP] [port]`。
除遠端登入外,也常用來測試伺服器埠是否開啟。
已全面被 SSH 取代。
### SSH(Secure Shell)
SSH 是安全版的 TELNET,使用 TCP port 22。
提供加密、身份驗證與資料完整性保護,是現代標準的遠端連線方式。
運作方式:
* 非對稱加密(公私鑰)用於身分驗證與協商金鑰。
* 對稱加密(Session Key)負責後續傳輸。
* 雜湊驗證確保資料未被竄改。
登入方式:`ssh user@ip`。
也可使用 key pair(`ssh-keygen` + `ssh-copy-id`)達成免密碼安全登入。
### SFTP(SSH File Transfer Protocol)
SFTP 是 FTP 的安全版本,基於 SSH 建立,使用 單一 port 22。
語法與 SSH 類似:`sftp user@server`。
進入後的 `put/get/ls` 指令與 FTP 類似。
## 參考資料
[遠端連線與傳輸講義 - HackMD](https://hackmd.io/@ncnu-opensource/book/https%3A%2F%2Fhackmd.io%2F%40ncnu-opensource%2FrkLUNTfiel#%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A%E8%88%87%E5%82%B3%E8%BC%B8)
[Telnet,Mstsc,SSH,FTP之间的比较和区别 - 上善若泪 - 博客园](https://www.cnblogs.com/jingzh/p/16018410.html)
[SSH介紹及應用 | 凌群電子報](https://www.syscom.com.tw/ePaper_Content_EPArticledetail.aspx?id=84&EPID...)
[鳥哥私房菜 - 第十三章、遠端連線伺服器 Telnet / SSH / VNC / XDMCP / RSH](https://linux.vbird.org/linux_server/centos4/0310telnetssh-centos4.php)
[Day9: 遠端連線 | iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天](https://ithelp.ithome.com.tw/m/articles/10321343)