计算机网络相关
前言
XXX
知识点概括
以下是关于 计算机网络 的知识点总结,涵盖 TCP/IP 协议栈、HTTP/HTTPS、网络层、应用层 等核心知识点:
一、基础概念
OSI 七层模型与 TCP/IP 四层模型的区别?
- OSI:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
- TCP/IP:网络接口层、网络层(IP)、传输层(TCP/UDP)、应用层(HTTP/FTP/DNS)。
- 核心差异:OSI 模型理论性强,TCP/IP 是实际应用标准。
TCP 与 UDP 的区别?
TCP UDP 面向连接,可靠传输(三次握手) 无连接,不可靠传输 流量控制、拥塞控制、重传机制 无控制,传输速度快 数据有序 数据无序 头部开销大(20-60字节) 头部开销小(8字节) 适用场景:文件传输、网页浏览 适用场景:视频流、实时游戏、DNS 什么是三次握手与四次挥手?
- 三次握手(建立连接):
- 客户端发送
SYN=1, seq=x
。 - 服务端回复
SYN=1, ACK=1, seq=y, ack=x+1
。 - 客户端发送
ACK=1, seq=x+1, ack=y+1
。
- 客户端发送
- 四次挥手(关闭连接):
- 客户端发送
FIN=1, seq=u
。 - 服务端回复
ACK=1, seq=v, ack=u+1
。 - 服务端发送
FIN=1, seq=w, ack=u+1
。 - 客户端回复
ACK=1, seq=u+1, ack=w+1
。
- 客户端发送
- 三次握手(建立连接):
【续】关于三次握手和四次挥手
三次握手和四次挥手是TCP协议中用于建立和终止可靠连接的核心机制,以下是详细总结:
示意图:
一、三次握手(建立连接)
目的:确保客户端与服务器双方均具备发送和接收数据的能力,并同步初始序列号(ISN),防止历史重复连接干扰。
过程:
SYN(客户端→服务器)
- 客户端发送
SYN=1
报文(同步请求),携带初始序列号seq=x
。 - 客户端状态:
SYN_SENT
。
- 客户端发送
SYN-ACK(服务器→客户端)
- 服务器收到SYN后,回复
SYN=1, ACK=1
报文,确认号ack=x+1
,并携带自身初始序列号seq=y
。 - 服务器状态:
SYN_RCVD
。
- 服务器收到SYN后,回复
ACK(客户端→服务器)
- 客户端确认服务器的SYN,发送
ACK=1
报文,确认号ack=y+1
。 - 双方状态:进入
ESTABLISHED
,连接建立完成。
- 客户端确认服务器的SYN,发送
为什么是三次?
- 避免失效的SYN请求被重复发送(如网络延迟导致旧SYN到达),造成资源浪费。
- 两次握手可能因丢包导致服务器单向等待,三次确保双方收发能力已验证。
二、四次挥手(终止连接)
目的:双方确认数据收发完毕,安全关闭连接。由于TCP全双工特性,需独立关闭两个方向的数据流。
过程:
FIN(主动关闭方→被动方)
- 主动方(如客户端)发送
FIN=1
报文,携带序列号seq=u
。 - 主动方状态:
FIN_WAIT_1
。
- 主动方(如客户端)发送
ACK(被动方→主动方)
- 被动方(如服务器)回复
ACK=1
,确认号ack=u+1
,进入CLOSE_WAIT
状态。 - 主动方状态:收到ACK后变为
FIN_WAIT_2
,等待被动方的FIN。
- 被动方(如服务器)回复
FIN(被动方→主动方)
- 被动方处理完剩余数据后,发送
FIN=1
报文,携带序列号seq=v
,进入LAST_ACK
状态。
- 被动方处理完剩余数据后,发送
ACK(主动方→被动方)
- 主动方回复
ACK=1
,确认号ack=v+1
,进入TIME_WAIT
状态,等待2MSL(最大报文生存时间)后关闭。 - 被动方:收到ACK后立即关闭,状态变为
CLOSED
。
- 主动方回复
为什么是四次?
- 被动方收到FIN后可能仍有数据需发送,需先ACK确认,再独立发送FIN。
- 特殊场景:若被动方无剩余数据,可将FIN与ACK合并为一次发送(即三次挥手),但TCP规范仍以四次为标准。
关键点
- TIME_WAIT的作用:
确保最后一个ACK到达被动方。若ACK丢失,被动方会重传FIN,主动方可再次响应,避免新连接被旧报文干扰。 - 资源释放:
主动方在TIME_WAIT
期间占用端口,可通过SO_REUSEADDR
选项复用端口。 - 状态转换:
理解各状态(如CLOSE_WAIT
、TIME_WAIT
)有助于排查连接异常问题。
二、HTTP/HTTPS
HTTP 1.0/1.1/2.0/3.0 的区别?
- HTTP 1.1:持久连接(Keep-Alive)、管道化、Host 头强制。
- HTTP 2.0:二进制分帧、多路复用、头部压缩、服务器推送。
- HTTP 3.0:基于 QUIC 协议(UDP + TLS 1.3),解决队头阻塞。
HTTPS 的工作原理?
HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,通过SSL/TLS协议对通信数据进行加密和身份验证,确保数据传输的机密性、完整性和身份真实性。其核心工作原理如下:
一、核心目标
- 加密数据:防止窃听(如中间人攻击)。
- 验证身份:确保客户端访问的是目标服务器(防止伪造服务器)。
- 数据完整性:防止数据被篡改。
二、核心流程
HTTPS在HTTP与TCP之间增加TLS/SSL加密层,整体流程分为两阶段:
- TCP三次握手(建立基础连接)。
- TLS握手(协商加密参数并验证身份)。
- 加密数据传输(基于协商的密钥加密HTTP数据)。
三、TLS握手详解(以RSA密钥交换为例)
- 步骤1:Client Hello(客户端→服务器)
- 发送支持的TLS版本、加密套件列表(如AES、RSA)、客户端随机数(Client Random)。
- 步骤2:Server Hello(服务器→客户端)
- 选择并返回双方支持的TLS版本、加密套件、服务器随机数(Server Random)。
- 发送数字证书(包含服务器公钥、域名、CA信息等)。
- 步骤3:证书验证(客户端操作)
- 客户端验证证书:
- 有效性:是否过期、域名是否匹配。
- 可信性:是否由受信任的CA(如Let’s Encrypt)签发,通过CA公钥验证证书签名。
- 吊销状态:检查证书吊销列表(CRL)或通过OCSP协议实时查询。
- 客户端验证证书:
- 步骤4:密钥交换(Pre-Master Secret生成)
- 客户端生成Pre-Master Secret(预主密钥),用服务器公钥加密后发送给服务器。
- 服务器用私钥解密获得Pre-Master Secret。
- 步骤5:生成会话密钥
- 客户端和服务器根据Client Random、Server Random、Pre-Master Secret,通过相同算法生成Master Secret,最终派生出对称加密密钥(如AES密钥)。
- 步骤6:完成握手
- 双方发送加密的Finished报文,验证握手过程是否被篡改。
四、加密数据传输
- 后续HTTP数据使用对称加密密钥加密(如AES-GCM),确保高效传输。
- 每次会话使用不同的密钥(前向保密特性,如ECDHE密钥交换),即使长期密钥泄露,历史通信仍安全。
五、关键技术与概念
- 非对称加密(密钥交换)
- 用途:安全传输Pre-Master Secret(如RSA、ECDHE)。
- 原理:公钥加密,私钥解密,解决密钥分发问题。
- 对称加密(数据传输)
- 用途:加密实际业务数据(如AES、ChaCha20)。
- 优势:计算效率高,适合大数据量加密。
- 数字证书与CA
- 证书内容:服务器公钥、域名、签发机构(CA)、有效期等。
- CA验证链:客户端信任根CA → 中间CA → 服务器证书,形成信任链。
- 完整性保护
- HMAC或AEAD加密模式(如AES-GCM)确保数据未被篡改。
六、流程简化示例
1 | 客户端 服务器 |
七、性能优化
- 会话恢复(Session Resumption)
- 通过Session ID或Session Ticket复用之前协商的密钥,减少握手延迟。
- TLS 1.3改进
- 握手步骤简化为1-RTT(一次往返),支持0-RTT(零往返)快速重连。
- OCSP Stapling
- 服务器主动提供证书有效性证明,避免客户端查询CA的延迟。
八、常见问题
Q1:为什么需要混合加密(非对称+对称)?
- 非对称加密计算开销大,仅用于交换密钥;对称加密效率高,适合数据加密。
Q2:证书被篡改怎么办?
- 证书包含CA的数字签名,篡改后签名验证失败,客户端会终止连接。
Q3:HTTPS一定安全吗?
- 依赖配置正确性(如禁用弱加密套件、使用TLS 1.2+),否则可能被攻击(如POODLE、Heartbleed)。
九、总结
HTTPS通过TLS协议实现:
- 身份认证(数字证书验证服务器身份)。
- 密钥交换(非对称加密安全传输密钥)。
- 数据加密与完整性(对称加密保护数据)。
这一机制有效防御了中间人攻击、数据窃听和篡改,成为现代Web安全的基石。
HTTP 常见状态码
200 OK
:请求成功。301 Moved Permanently
:永久重定向。302 Found
:临时重定向。400 Bad Request
:请求语法错误。401 Unauthorized
:未认证。403 Forbidden
:无权限。404 Not Found
:资源不存在。500 Internal Server Error
:服务器内部错误。502 Bad Gateway
:网关错误。
Cookie 和 Session 的区别?
- Cookie:客户端存储,不安全,大小受限(4KB)。
- Session:服务端存储,安全,依赖 Session ID(通过 Cookie 传递)。
三、网络层与传输层
IP 地址的分类及子网掩码的作用?
- 分类:A 类(0.0.0.0~127.255.255.255)、B 类、C 类、D 类(组播)、E 类(保留)。
- 子网掩码:划分网络号和主机号(如
255.255.255.0
表示前 24 位为网络号)。
ARP 协议的作用?
- 将 IP 地址解析为 MAC 地址(通过广播 ARP 请求,目标主机单播回复)。
ICMP 协议的作用?
- 用于网络诊断(如
ping
使用 ICMP Echo 请求/应答,traceroute
使用 TTL 超时机制)。
- 用于网络诊断(如
TCP 的拥塞控制算法?
- 慢启动:初始拥塞窗口指数增长。
- 拥塞避免:窗口线性增长。
- 快速重传:收到 3 个重复 ACK 立即重传。
- 快速恢复:调整窗口大小,避免回到慢启动。
四、应用层协议
DNS 解析过程?
- 浏览器缓存 → 系统 hosts 文件 → 本地 DNS 服务器 → 根 DNS → 顶级域 DNS → 权威 DNS。
- 返回 IP 地址后建立连接。
WebSocket 与 HTTP 的区别?
- HTTP:短连接,单向通信(客户端请求-服务端响应)。
- WebSocket:长连接,全双工通信(适合实时聊天、游戏)。
CDN 的工作原理?
- 将内容缓存到边缘节点,用户访问最近的节点,减少延迟和带宽压力。
五、网络安全
CSRF 攻击与防御?
- 攻击:诱导用户点击链接,伪造用户身份执行操作。
- 防御:使用 CSRF Token、验证 Referer、设置 SameSite Cookie。
XSS 攻击与防御?
- 攻击:注入恶意脚本到页面,窃取用户数据。
- 防御:对用户输入转义(如
<
转为<
)、设置 HTTP Only Cookie。
SYN 洪水攻击原理及防御?
- 原理:发送大量 SYN 报文耗尽服务端资源。
- 防御:SYN Cookie、限制并发连接数、防火墙过滤。
六、进阶问题
TCP 粘包/拆包问题及解决方案?
- 原因:TCP 是字节流协议,无消息边界。
- 解决:固定消息长度、分隔符、自定义协议(如消息头声明长度)。
什么是 NAT?如何实现内网穿透?
- NAT(网络地址转换):将内网 IP 映射为公网 IP。
- 穿透方式:STUN 协议、TURN 中继服务器、UPnP 端口映射。
QUIC 协议的优势?
- 基于 UDP,实现 0-RTT 建连、多路复用、前向纠错(FEC),解决 TCP 队头阻塞。
七、场景题
浏览器输入 URL 后发生了什么?
- DNS 解析域名 → 2. 建立 TCP 连接 → 3. 发送 HTTP 请求 → 4. 服务端处理请求 → 5. 返回响应 → 6. 浏览器解析渲染 → 7. 关闭连接。
TCP 为什么需要四次挥手?
- 服务端收到 FIN 后可能仍有数据要发送,因此先回复 ACK,待数据发送完毕再发送 FIN。
HTTPS 如何防止中间人攻击?
- 通过 CA 颁发的数字证书验证服务端身份,确保公钥不被篡改。