--- ## 网络层次与协议模型(简要背景) 在讲这些协议之前,先说一下它们在网络协议栈中的“位置”究竟在哪儿,会更容易理解它们的作用。现代网络通信一般参考 **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 缓存中毒、篡改等安全问题 ---