
---

## 网络层次与协议模型（简要背景）

在讲这些协议之前，先说一下它们在网络协议栈中的“位置”究竟在哪儿，会更容易理解它们的作用。现代网络通信一般参考 **TCP/IP 协议族** 或者 **OSI 七层模型**。

- 在 TCP/IP 模型里，经常把协议分为四层：**网络接口层**、**网际层（Internet 层）**、**传输层（Transport 层）**、**应用层（Application 层）**。
- 大部分协议（FTP, SSH, HTTP, DNS, SMTP 等）都属于**应用层协议**，也就是直接为应用（比如浏览器、文件传输、邮件系统）提供服务的协议。
- 在应用层之下，还有传输层（常见的 TCP、UDP）为它们提供可靠或不可靠的数据传输服务；再往下是网络层（IP）负责寻址与路由等。

所以，当我们说某个协议是“在 TCP 之上”或“基于 TCP 的”时，就是说这个协议使用 TCP 来做底层的数据传输。

---


## 各协议详解

### FTP — 文件传输协议 (File Transfer Protocol)

- **作用 / 用途**：用于在客户端和服务器之间上传、下载和管理文件。
- **层级 / 依赖**：应用层协议，通常跑在 TCP 之上。
- **工作机制**：FTP 在通信时，通常会建立两条 TCP 连接：
    1. **控制连接**（control connection）：用来发送命令（例如登录、切换目录、发出“下载”命令等）
    2. **数据连接**（data connection）：用来真正传输文件数据或目录列表
    
- **优点 / 缺点**：
    - 优点：功能全面（支持各种文件操作、目录操作、权限管理等）
    - 缺点：安全性差——用户名、密码、文件内容都以明文形式传输，容易被中间人嗅探拦截 ([维基百科](https://en.wikipedia.org/wiki/File_Transfer_Protocol?utm_source=chatgpt.com "File Transfer Protocol"))
    - 对防火墙和 NAT 支持不好，因为数据连接可能由服务器发起（主动模式时）
        
- **改进 / 替代方案**：
    - **FTPS**：在 FTP 上加上 SSL/TLS 加密
    - **SFTP**（SSH File Transfer Protocol）：通过 SSH 隧道安全地传输文件（下面会讲 SSH）
- **典型端口**：21 用于控制连接，20 有时用于数据连接（在主动模式下） ([维基百科](https://en.wikipedia.org/wiki/File_Transfer_Protocol?utm_source=chatgpt.com "File Transfer Protocol"))
    

---

### SSH — 安全外壳协议 (Secure Shell)

- **作用 / 用途**：提供加密的远程登录、命令执行、以及通过隧道转发端口或做文件传输（例如通过 SFTP、SCP）等功能。
- **层级 / 依赖**：应用层协议，但其内部本身也包含加密、认证、密钥协商等机制。通常运行在 TCP 之上（默认端口 22）。 ([runoob.com](https://www.runoob.com/np/secure-shell.html?utm_source=chatgpt.com "SSH 协议 - 菜鸟教程"))
- **工作机制 / 特性**：
    1. **连接建立 & 协商**：客户端连接到服务器的 22 端口，双方协商版本、加密算法、密钥交换方法等
    2. **认证阶段**：客户端使用密码或公钥等方式向服务器认证
    3. **会话 / 通道管理**：认证成功后，在已建立的加密通道上可以开多个逻辑通道（通道可用于 shell、执行命令、端口转发等） ([jianshu.com](https://www.jianshu.com/p/8e5b7aea52b5?utm_source=chatgpt.com "SSH 协议原理、组成、认证方式和过程 - 简书"))
    4. **端口转发 / 隧道**：SSH 支持三类转发：本地端口转发（local forwarding）、远端端口转发（remote forwarding）、动态转发（相当于 SOCKS 代理） ([知乎专栏](https://zhuanlan.zhihu.com/p/235610836?utm_source=chatgpt.com "深入了解SSH - 知乎"))
- **优点 / 缺点**：
    - 优点：安全（加密通信、避免明文传输、中间人攻击风险较低）、功能强大
    - 缺点：稍微复杂，尤其是对密钥管理、权限管理需要注意
- **典型端口**：22
    

---

### SFTP — SSH 文件传输协议 (SSH File Transfer Protocol)

- 这是一个 “文件传输” 协议，但它是 **运行在 SSH 之上** 的安全文件传输协议
- 它利用 SSH 的加密通道来安全地上传／下载文件、管理文件权限等
- 因为它建立在 SSH 上，所以本身继承了 SSH 的安全性（加密、认证）

---

### HTTP / HTTPS — 超文本传输协议 / 安全版

- **HTTP（HyperText Transfer Protocol）**：
    - 作用 / 用途：Web 浏览器和 Web 服务器之间通信的基本协议，用来获取网页、图片、脚本、API 接口数据等
    - 层级 / 依赖：应用层协议，典型地运行在 TCP 之上
    - 主要机制：客户端发送请求（包含方法如 GET、POST、PUT、DELETE 等、路径、请求头、请求体等），服务器响应（状态行、响应头、响应体）
    - 特性：无状态（每个请求是独立的，不自动保留之前的状态）
    - 存在的问题：明文传输，容易被中间人窃听或篡改
- **HTTPS**：
    - HTTPS = HTTP + SSL/TLS，加上了加密和身份验证
    - 在 HTTP 发送真正数据之前，会先通过 TLS/SSL 做握手协商密钥、证书验证等，从而使后续通信内容加密、完整性保护
    - 特性：提供通信的机密性、完整性和服务器身份验证（有时也支持客户端证书验证）
    - 在 Web 安全中几乎必须使用 HTTPS 而不是 HTTP
- 版本演进：HTTP/1.1 → HTTP/2 → HTTP/3（HTTP/3 基于 QUIC，使用 UDP 做传输层） ([CSDN博客](https://blog.csdn.net/weixin_73144915/article/details/147348522?utm_source=chatgpt.com "TCP/IP、UDP、HTTP、HTTPS、WebSocket 一文讲解 ..."))
    

---

### WebSocket

- **作用 / 用途**：在浏览器和服务器之间建立一个“长连接”（persistent connection），可以做双向实时通信
- **为什么需要 WebSocket**：HTTP 本质上是请求-响应模式，是客户端发起请求才有响应；如果你想让服务器主动推送消息给客户端（如即时聊天、实时更新），就非常不方便。WebSocket 正是为这个场景设计的。
- **工作机制 / 特性**：
    1. 首先通过 HTTP 发起一个“升级（Upgrade）”请求，头部中带上 `Upgrade: websocket`、`Connection: Upgrade`、`Sec-WebSocket-Key` 等字段
    2. 服务端如果接受这个升级请求，就返回响应确认，将连接从 HTTP 协议“切换/升级”到 WebSocket 协议
    3. 升级成功后，双方可以在这个 TCP 连接上以 WebSocket 帧（frame）的形式进行双向通信，浏览器可以发送消息给服务器，服务器也可以主动推送消息给客户端
    4. 支持文本帧、二进制帧、控制帧（关闭、ping/pong 等） ([腾讯云](https://cloud.tencent.com/developer/article/1887095?utm_source=chatgpt.com "万字长文，一篇吃透WebSocket：概念、原理、易错常识 ..."))
- **优点 / 缺点**：
    - 优点：真正的双向通信、低延迟、连接保持，不需要每次都重新握手
    - 缺点：如果服务器端不善于处理大量长连接或连接管理不佳，可能资源消耗较高

---

### WebDAV — Web 分布式创作与版本控制协议 (Web Distributed Authoring and Versioning)

- **作用 / 用途**：WebDAV 是一个扩展 HTTP 的协议，使得客户端可以远程进行文件管理（创建、删除、修改、锁定、属性操作、版本控制等），在 Web 服务器上像操作文件系统那样操作文档 / 资源
- **层级 / 依赖**：是 HTTP 的扩展协议，运行在 HTTP / HTTPS 之上
- **应用场景**：常用于云盘、版本控制、远程文档编辑协作等

---

### Telnet

- **作用 / 用途**：远程登录协议，允许用户在远程主机上启动交互式 shell 或命令行界面
- **层级 / 依赖**：应用层协议，通常基于 TCP
- **问题 / 缺陷**：**不加密**，所有命令和数据（包括用户名、密码）都是明文传输，非常容易被中间人截获
- **历史 / 使用**：在早期广泛使用，但在现代多数场景下被 SSH 取代了

---

### SMTP — 简单邮件传输协议 (Simple Mail Transfer Protocol)

- **作用 / 用途**：用于在邮件服务器之间传递邮件，以及客户端向邮件服务器发送邮件
- **层级 / 依赖**：应用层协议，通常运行在 TCP 上
- **机制**：客户端或发送服务器将邮件发给目标邮件服务器；邮件服务器之间通过 SMTP 协议转发邮件至最终目的地
- **常见通信**：可与其他邮件协议（如 POP3、IMAP）配合使用，负责“发送”而不是“接收／读取”的功能

---

### DNS — 域名系统 (Domain Name System)

- **作用 / 用途**：把人类易记的域名（例如 `www.example.com`）转换为机器能识别的 IP 地址（例如 `93.184.216.34`）
- **层级 / 依赖**：应用层协议，通常运行在 UDP 上（小查询）或者 TCP（大响应或区域传输时）
- **工作机制**：
    1. 客户端向本地 DNS 服务器发起查询请求
    2. 如果本地 DNS 服务器没有缓存，会向上级 DNS 服务器、根服务器、顶级域名服务器、权威服务器逐层查询
    3. 最终得到域名对应的 IP 地址，缓存在本地 DNS 服务器以便后续查询快速响应
- **扩展 / 安全**：DNSSEC（DNS Security Extensions）用于防止 DNS 缓存中毒、篡改等安全问题
    

---
