本文作為 TCP/IP 學習筆記系列的第八篇,系統梳理了應用層三大核心協議——FTP(文件傳輸)、SMTP(郵件傳輸)、NFS(網絡文件系統) 的協議架構、命令交互流程、數據表示方式及關鍵機制,為網絡編程與系統集成提供協議級參考。
PORT 命令告知臨時端口,服務器從 20 端口主動連接客戶端。PASV,服務器回應監聽端口,客戶端主動連接(穿越防火牆/NAT 首選)。| 類別 | 選項 | 說明 |
|---|---|---|
| 文件類型 | ASCII (默認) | NVT ASCII 碼,行尾 CRLF,需雙端轉換本地格式 |
| EBCDIC | 雙端均為 EBCDIC 系統時使用 | |
| Image (Binary) | 連續位流,無轉換,適用程序/壓縮包/圖片 | |
| Local | 異位寬主機間二進制傳輸 | |
| 格式控制 | Non-print (默認) | 無垂直格式信息 |
| Telnet Format | 含遠程打印機垂直格式控制 | |
| Fortran Carriage | 首字符為 Fortran 控制符 | |
| 數據結構 | File Structure (默認) | 連續位元組流,無內部邊界 |
| Record Structure | 僅文本文件,有記錄邊界 | |
| Page Structure | 分頁帶頁號,支持隨機訪問 | |
| 傳輸模式 | Stream (默認) | 位元組流,文件結尾關閉數據連接標記 EOF |
| Block | 數據塊帶首部(長度、描述碼) | |
| Compressed | 運行長度編碼壓縮 |
常用命令:USER/PASS 認證、TYPE 設置類型、MODE/STRU 設置模式結構、PORT/PASV 協商數據端口、RETR/STOR 下載上傳、LIST/NLST 目錄、CWD/PWD 目錄操作、QUIT 退出。
典型響應碼:
125 數據連接已開啟,開始傳輸200 命令執行成功226 關閉數據連接,傳輸完成331 用戶名正確,需密碼425 無法建立數據連接530 未登錄/認證失敗550 文件不可用/權限不足基於 TCP 25 端口,採用「命令-響應」模式(NVT ASCII)。核心 5 命令完成發信:
HELO/EHLO 域名 -> 250 OK
MAIL FROM:<sender> -> 250 OK
RCPT TO:<recipient> -> 250 OK (可重複多個收件人)
DATA -> 354 Start mail input
郵件首部 + 空行 + 正文
. (單獨一行句號) -> 250 Queued
QUIT -> 221 Bye
擴展命令 (ESMTP):EHLO 觸發,支持 SIZE(聲明郵件大小)、8BITMIME(8位數據)、AUTH(認證)、STARTTLS(加密)等。
MAIL FROM/RCPT TO 指定,不向用戶顯示。From、To、Subject、Date、Message-ID、Received(每經過一個 MTA 添加一條)等。解決非 ASCII 內容傳輸,定義 5 大首部:
MIME-Version: 1.0Content-Type:text/plain、multipart/mixed(附件)、image/jpeg 等Content-Transfer-Encoding:7bit、quoted-printable、base64、8bit、binaryContent-ID、Content-Description非 ASCII 首部編碼:=?charset?encoding?encoded-text?= 格式(RFC 2047),encoding 為 Q (Quoted-Printable 變體) 或 B (Base64)。
(Program, Version, Protocol, Port),Client 查詢獲取端口再發起 RPC 調用。/etc/fstab 或自動掛載器完成。| 過程 | 功能 | 備註 |
|---|---|---|
| NFSPROC_GETATTR | 獲取文件屬性 | 最頻繁調用 |
| NFSPROC_LOOKUP | 目錄中查找文件名 | 返回 FH + 屬性 |
| NFSPROC_READ | 讀取數據 | 指定偏移、長度 |
| NFSPROC_WRITE | 寫入數據 | 指定偏移、數據 |
| NFSPROC_CREATE | 創建文件 | 需目錄 FH + 文件名 + 屬性 |
| NFSPROC_REMOVE | 刪除文件 | |
| NFSPROC_RENAME | 重命名 | |
| NFSPROC_MKDIR/RMDIR | 創建/刪除目錄 | |
| NFSPROC_READDIR | 讀取目錄條目 | 支持 Cookie 分頁 |
| NFSPROC_LINK/SYMLINK/READLINK | 硬/符號鏈接操作 | |
| NFSPROC_STATFS | 文件系統統計信息 | 空間、inode 等 |
FTP 以雙連道解決命令與數據分離,SMTP 以簡單請求-響應實現郵件遞交並經 MIME 擴展支撐多媒體,NFS 則建立在 RPC/XDR 之上實現透明文件共享。理解這三大協議的「為什麼這樣設計」(如 FTP 被動模式穿透 NAT、SMTP 信封與首部分離、NFS 無狀態帶來的冪等要求),是排查網絡存儲、郵件遞送、文件傳輸疑難雜症的關鍵鑰匙。