9.2 KiB
9.2 KiB
网络层次与协议模型(简要背景)
在讲这些协议之前,先说一下它们在网络协议栈中的“位置”究竟在哪儿,会更容易理解它们的作用。现代网络通信一般参考 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 连接:
- 控制连接(control connection):用来发送命令(例如登录、切换目录、发出“下载”命令等)
- 数据连接(data connection):用来真正传输文件数据或目录列表
-
优点 / 缺点:
- 优点:功能全面(支持各种文件操作、目录操作、权限管理等)
- 缺点:安全性差——用户名、密码、文件内容都以明文形式传输,容易被中间人嗅探拦截 (维基百科)
- 对防火墙和 NAT 支持不好,因为数据连接可能由服务器发起(主动模式时)
-
改进 / 替代方案:
- FTPS:在 FTP 上加上 SSL/TLS 加密
- SFTP(SSH File Transfer Protocol):通过 SSH 隧道安全地传输文件(下面会讲 SSH)
-
典型端口:21 用于控制连接,20 有时用于数据连接(在主动模式下) (维基百科)
SSH — 安全外壳协议 (Secure Shell)
- 作用 / 用途:提供加密的远程登录、命令执行、以及通过隧道转发端口或做文件传输(例如通过 SFTP、SCP)等功能。
- 层级 / 依赖:应用层协议,但其内部本身也包含加密、认证、密钥协商等机制。通常运行在 TCP 之上(默认端口 22)。 (runoob.com)
- 工作机制 / 特性:
- 连接建立 & 协商:客户端连接到服务器的 22 端口,双方协商版本、加密算法、密钥交换方法等
- 认证阶段:客户端使用密码或公钥等方式向服务器认证
- 会话 / 通道管理:认证成功后,在已建立的加密通道上可以开多个逻辑通道(通道可用于 shell、执行命令、端口转发等) (jianshu.com)
- 端口转发 / 隧道:SSH 支持三类转发:本地端口转发(local forwarding)、远端端口转发(remote forwarding)、动态转发(相当于 SOCKS 代理) (知乎专栏)
- 优点 / 缺点:
- 优点:安全(加密通信、避免明文传输、中间人攻击风险较低)、功能强大
- 缺点:稍微复杂,尤其是对密钥管理、权限管理需要注意
- 典型端口: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博客)
WebSocket
- 作用 / 用途:在浏览器和服务器之间建立一个“长连接”(persistent connection),可以做双向实时通信
- 为什么需要 WebSocket:HTTP 本质上是请求-响应模式,是客户端发起请求才有响应;如果你想让服务器主动推送消息给客户端(如即时聊天、实时更新),就非常不方便。WebSocket 正是为这个场景设计的。
- 工作机制 / 特性:
- 首先通过 HTTP 发起一个“升级(Upgrade)”请求,头部中带上
Upgrade: websocket、Connection: Upgrade、Sec-WebSocket-Key等字段 - 服务端如果接受这个升级请求,就返回响应确认,将连接从 HTTP 协议“切换/升级”到 WebSocket 协议
- 升级成功后,双方可以在这个 TCP 连接上以 WebSocket 帧(frame)的形式进行双向通信,浏览器可以发送消息给服务器,服务器也可以主动推送消息给客户端
- 支持文本帧、二进制帧、控制帧(关闭、ping/pong 等) (腾讯云)
- 首先通过 HTTP 发起一个“升级(Upgrade)”请求,头部中带上
- 优点 / 缺点:
- 优点:真正的双向通信、低延迟、连接保持,不需要每次都重新握手
- 缺点:如果服务器端不善于处理大量长连接或连接管理不佳,可能资源消耗较高
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(大响应或区域传输时)
- 工作机制:
- 客户端向本地 DNS 服务器发起查询请求
- 如果本地 DNS 服务器没有缓存,会向上级 DNS 服务器、根服务器、顶级域名服务器、权威服务器逐层查询
- 最终得到域名对应的 IP 地址,缓存在本地 DNS 服务器以便后续查询快速响应
- 扩展 / 安全:DNSSEC(DNS Security Extensions)用于防止 DNS 缓存中毒、篡改等安全问题