1. TCP 三次握手与四次挥手
三次握手(建立连接)
- SYN:客户端发送 SYN 包请求建立连接。
- SYN-ACK:服务器收到 SYN 包后,回复 SYN-ACK 包。
- ACK:客户端收到 SYN-ACK 包后,回复 ACK 包,建立连接。
四次挥手(断开连接)
- FIN:客户端发送 FIN 包,表示请求关闭连接。
- ACK:服务器收到 FIN 包后,回复 ACK 包。
- FIN:服务器准备好关闭连接后,发送 FIN 包。
- ACK:客户端收到服务器的 FIN 包后,回复 ACK 包,连接关闭。
2. 为什么会出现 TCP 的队头阻塞?
队头阻塞 (Head-of-Line Blocking) 是指当一个 TCP 连接中的一个数据包丢失或延迟,后续的数据包必须等到这个数据包被正确接收后才能继续处理。即使其他数据包已经到达,仍需要等待队头的数据包。
- 根本原因:
- 可靠性:TCP 为了确保数据的可靠传输,会等待丢失的数据包被重新传输并按顺序接收,从而导致后续数据的延迟。
- 解决方案:
- HTTP/2:通过多路复用和流优先级来缓解,但仍然受到 TCP 固有问题的影响。
- HTTP/3:通过 QUIC 协议利用 UDP 彻底解决了 TCP 层的队头阻塞。
3. DNS 解析的过程
- 浏览器缓存:首先查看浏览器的 DNS 缓存中是否有该域名的解析记录。
- 操作系统缓存:如果浏览器没有缓存,再查看操作系统的 DNS 缓存。
- 本地 DNS 服务器查询:如果操作系统缓存中也没有,查询配置的本地 DNS 服务器。
- 递归查询流程:
- 根域名服务器:本地 DNS 服务器首先向根域名服务器查询,根服务器知道顶级域(TLD)服务器的地址。
- TLD 服务器:根域名服务器返回 TLD 服务器地址,本地 DNS 服务器向 TLD 服务器查询(如 .com、.cn)。
- 权威 DNS 服务器:TLD 服务器返回权威 DNS 服务器地址,本地 DNS 服务器向该服务器查询最终的 IP 地址。
- 返回结果:解析完成后,本地 DNS 服务器将结果返回给客户端。
4. Cookie 的属性和含义
Cookie 是服务器存储在用户浏览器上的小段文本信息。其核心属性如下:
- Name / Value:存储数据的键值对。
- Domain:指定 Cookie 在哪个域名下有效。
- Path:指定 Cookie 的有效路径。
- Expires / Max-age:
- Expires:过期时间戳(GMT 格式)。
- Max-age:失效倒计时(秒)。
0立即失效,负数或未设置则关闭浏览器失效(默认值为-1)。
- Size:Cookie 的字节大小。
- HttpOnly:若为
true,则脚本无法通过document.cookie访问,有效防止 XSS 攻击。 - Secure:仅通过 HTTPS 协议传输。
- SameSite:防御 CSRF 攻击。
- Strict:完全禁止第三方 Cookie。
- Lax:部分限制,允许导航到目标网址的 GET 请求发送。
- None:不限制。
[!NOTE] 导航到目标网址的 GET 请求:指用户直接输入 URL、点击链接或通过脚本触发的页面跳转。
5. 对称加密与非对称加密
1. 对称加密
加密和解密使用同一个密钥。
- 过程:密钥共享 → 发送方加密 (AES/DES) → 传输 → 接收方用相同密钥解密。
- 特点:速度快,适合加解密大量数据;但密钥交换过程存在安全风险。
2. 非对称加密
使用一对密钥:公钥(公开)和私钥(保密)。公钥加密,私钥解密。
- 过程:接收方生成密钥对 → 公开公钥 → 发送方用公钥加密 (RSA/ECC) → 传输 → 接收方用私钥解密。
- 特点:安全性极高,密钥管理简便;但计算开销大,速度较慢。
6. 核心总结与对比
加密方式对比表
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥使用 | 使用相同的密钥加密和解密 | 使用一对密钥(公钥和私钥) |
| 加密速度 | 较快,效率高 | 较慢,消耗计算资源大 |
| 安全性 | 较低,依赖密钥管理 | 高,私钥不泄露即安全 |
| 密钥交换 | 需安全的密钥交换方式 | 公钥公开,密钥交换较为安全 |
| 应用场景 | 大量数据加密(文件、磁盘) | 身份验证、数字签名、HTTPS 握手 |
典型应用场景汇总:
- 对称加密:适用于大规模数据加密,如文件系统、数据库加密。
- 非对称加密:广泛应用于 SSL/TLS 加密通信、数字证书验证和安全认证。