计算机网络
一、TCP和UDP区别
1. 核心区别
| 特性 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠传输(重传、校验、序号) | 不可靠,无确认机制 |
| 传输方式 | 字节流传输 | 报文段传输 |
| 拥塞 / 流量控制 | 有(滑动窗口、拥塞控制) | 无 |
| 首部开销 | 20 - 60 字节 | 8 字节 |
| 适用场景 | 可靠数据传输(文件、网页) | 实时传输(音视频、直播) |
2. 对应应用层协议
- TCP:HTTP/HTTPS、FTP、SMTP、POP3、Telnet
- UDP:DNS、DHCP、TFTP、SNMP、RTP(音视频)
3. UDP 的优缺点与适用场景
- 优点:传输速度快、首部开销小、实时性高;支持广播 / 组播
- 缺点:不可靠、无流量 / 拥塞控制;易丢包、乱序
- 适用场景:实时音视频通话、直播、DNS 查询、游戏数据传输
4. UDP 实现可靠传输的方式
需在应用层手动实现可靠机制:
- 序列号与确认应答(类似 TCP 的 ACK)
- 超时重传机制
- 校验和(检测数据完整性)
- 流量控制(滑动窗口)
- 典型协议:RUDP(可靠 UDP)、QUIC(基于 UDP 的可靠传输协议)
二、HTTP 与 HTTPS
1. 核心区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,不安全 | 加密传输(SSL/TLS),安全 |
| 端口 | 80 | 443 |
| 证书 | 不需要 | 需要 CA 颁发的数字证书 |
| 开销 | 低 | 高(加密解密过程) |
| 核心原理 | 基于 TCP 直接传输 | HTTP + SSL/TLS + TCP |
2. HTTP 工作原理
- 建立连接:客户端与服务器建立 TCP 连接(HTTP/1.1 默认长连接)
- 发送请求:客户端发送请求报文(请求行 + 请求头 + 请求体)
- 服务器处理:服务器解析请求,处理业务逻辑,生成响应报文
- 发送响应:服务器返回响应报文(状态行 + 响应头 + 响应体)
- 关闭连接:短连接模式下,响应后关闭 TCP 连接;长连接可复用
3. HTTP 状态码类型及含义
| 状态码类别 | 范围 | 含义 | 常见场景 |
|---|---|---|---|
| 1xx 信息性 | 100 - 101 | 服务器已接收请求,继续处理 | 100 Continue(客户端继续发送请求体) |
| 2xx 成功 | 200 - 206 | 请求成功处理 | 200 OK(请求成功)、204 No Content(无响应体) |
| 3xx 重定向 | 300 - 308 | 需要客户端进一步操作 | 301 永久重定向、302 临时重定向、304 缓存有效 |
| 4xx 客户端错误 | 400 - 417 | 请求有误,服务器无法处理 | 404 Not Found(资源不存在)、403 Forbidden(禁止访问) |
| 5xx 服务器错误 | 500 - 505 | 服务器处理请求时出错 | 500 Internal Server Error、503 Service Unavailable |
4. 301 与 302 的区别
301 Moved Permanently(永久重定向)
- 含义:资源永久迁移到新 URL
- 特点:浏览器会缓存重定向记录,后续请求直接访问新 URL;SEO 权重转移到新 URL
- 用途:网站域名更换、页面永久迁移
302 Found(临时重定向)
- 含义:资源临时迁移到新 URL
- 特点:浏览器不缓存,每次请求都先访问原 URL 再重定向;SEO 权重保留在原 URL
- 用途:临时维护、活动页面跳转
5. HTTP 缓存机制
分为强缓存和协商缓存,核心是减少重复请求,提升加载速度:
强缓存
:客户端直接从本地缓存读取资源,不请求服务器
- 控制字段:
Expires(HTTP/1.0,绝对时间)、Cache-Control(HTTP/1.1,相对时间,如max-age=3600)
- 控制字段:
协商缓存
:客户端先发送请求到服务器,验证缓存是否有效
- 控制字段:
Last-Modified/If-Modified-Since(基于修改时间)、ETag/If-None-Match(基于资源唯一标识) - 命中结果:返回 304 状态码,客户端使用本地缓存;未命中返回 200 和新资源
- 控制字段:
6. HTTP 长连接与短连接
短连接
:每次请求 - 响应后,立即关闭 TCP 连接;HTTP/1.0 默认模式
- 适用场景:少量请求、资源独立的场景
长连接
:一次 TCP 连接可复用,处理多次请求 - 响应;HTTP/1.1 默认
Connection: keep-alive- 适用场景:频繁请求、资源密集的场景(如网页加载多个图片)
核心区别:是否复用 TCP 连接,长连接减少三次握手 / 四次挥手的开销
7. HTTP 常见方法
| 方法 | 含义 | 常用场景 |
|---|---|---|
| GET | 获取资源 | 网页查询、参数拼接在 URL |
| POST | 提交资源(请求体传参) | 表单提交、文件上传 |
| PUT | 全量更新资源 | 替换目标资源的全部内容 |
| DELETE | 删除资源 | 删除指定资源 |
| HEAD | 获取响应头(无响应体) | 验证资源是否存在 |
| OPTIONS | 获取服务器支持的方法 | 跨域请求预检(CORS) |
三、OSI 参考模型与 TCP/IP 模型
1. OSI 参考模型(7 层)
| 层级 | 功能 | 典型协议 |
|---|---|---|
| 应用层 | 为应用程序提供网络服务 | HTTP、HTTPS、FTP、DNS、SMTP |
| 表示层 | 数据格式转换、加密解密 | JPEG、SSL/TLS、ASCII |
| 会话层 | 建立、管理和终止会话 | RPC、NetBIOS |
| 传输层 | 端到端的传输(可靠性、流量控制) | TCP、UDP |
| 网络层 | 分组转发、路由选择(跨网段) | IP、ICMP、ARP、OSPF |
| 数据链路层 | 帧的传输、差错检测(同一网段) | Ethernet(以太网)、PPP |
| 物理层 | 比特流传输(硬件接口、信号) | RJ45、光纤、WiFi |
2. 对应 TCP/IP 模型(4 层)
应用层(对应 OSI 应用 + 表示 + 会话层)→ 传输层 → 网际层(对应 OSI 网络层)→ 网络接口层(对应 OSI 数据链路 + 物理层)
四、URL 输入到页面展现的全过程
- URL 解析:浏览器解析 URL,拆分协议(HTTP/HTTPS)、域名、端口、路径等
- DNS 解析:将域名转换为 IP 地址(本地缓存→DNS 服务器递归 / 迭代查询)
- 建立连接:HTTP 基于 TCP 三次握手建立连接;HTTPS 需额外 SSL/TLS 握手
- 发送请求:浏览器构建请求报文,发送到服务器
- 服务器处理:服务器解析请求,处理业务逻辑,生成响应报文
- 服务器响应:服务器返回响应报文(HTML/CSS/JS 等资源)
- 页面渲染:浏览器解析 HTML 构建 DOM 树,解析 CSS 构建 CSSOM 树,合成渲染树,布局→绘制→合成
- 连接关闭:短连接模式下,四次挥手关闭 TCP 连接;长连接可复用
五、TCP 三次握手与四次挥手
1. 三次握手(建立可靠连接)
| 握手阶段 | 发送方 | 接收方 | 报文内容 | 目的 |
|---|---|---|---|---|
| 第一次握手 | 客户端 | 服务器 | SYN=1,seq=x | 客户端请求建立连接,同步初始序列号 x |
| 第二次握手 | 服务器 | 客户端 | SYN=1,ACK=1,seq=y,ack=x+1 | 服务器确认客户端的连接请求,同步自己的序列号 y |
| 第三次握手 | 客户端 | 服务器 | ACK=1,seq=x+1,ack=y+1 | 客户端确认服务器的连接请求,双方连接建立 |
三次握手的原因
- 确保双方收发能力正常(客户端→服务器→客户端双向验证)
- 同步双方的初始序列号(TCP 基于序列号实现可靠传输)
- 防止失效的连接请求(如延迟的 SYN 报文)被服务器接收
三次握手携带数据的规则
- 第一次握手(SYN 报文):不能携带数据,仅同步序列号
- 第二次握手(SYN+ACK 报文):可以携带少量数据(部分实现支持)
- 第三次握手(ACK 报文):可以携带数据,此时连接已建立
2. 四次挥手(关闭连接)
- 第一次挥手:客户端发送 FIN 报文(FIN=1,seq=u),请求关闭连接
- 第二次挥手:服务器发送 ACK 报文(ACK=1,ack=u+1),确认客户端的 FIN 请求
- 第三次挥手:服务器发送 FIN 报文(FIN=1,seq=v),请求关闭连接
- 第四次挥手:客户端发送 ACK 报文(ACK=1,ack=v+1),确认服务器的 FIN 请求
TIME-WAIT 状态等待 2MSL 的原因
- 确保最后一个 ACK 报文到达服务器:若服务器未收到 ACK,会重发 FIN,客户端在 2MSL 内可接收并重发 ACK
- 防止失效的报文干扰新连接:2MSL 是报文在网络中的最大生存时间,等待 2MSL 可确保旧连接的所有报文都从网络中消失
六、DNS 相关
1. DNS 解析过程(递归 + 迭代查询)
- 浏览器查询本地 DNS 缓存 → 操作系统缓存 → 本地 hosts 文件
- 若未命中,本地 DNS 服务器发起递归查询
- 本地 DNS 服务器向根 DNS 服务器发起迭代查询,根服务器返回顶级域服务器(如.com)地址
- 本地 DNS 服务器向顶级域服务器查询,返回权威 DNS 服务器地址
- 本地 DNS 服务器向权威 DNS 服务器查询,获取域名对应的 IP 地址
- 本地 DNS 服务器将 IP 地址返回给浏览器,并缓存结果
2. DNS 优化手段
- 缓存优化:增加本地缓存、DNS 服务器缓存的有效期
- DNS 预解析:浏览器提前解析页面中可能用到的域名(如
<link rel="dns-prefetch" href="xxx">) - 负载均衡:使用 DNS 轮询、GSLB(全局负载均衡)
- 就近接入:基于用户地理位置,返回最近的服务器 IP(CDN 常用)
- 协议优化:使用 DNS over HTTPS(DoH)、DNS over TLS(DoT)提升安全性
3. DNS 负载均衡实现原理
核心是同一域名映射多个 IP 地址:
- 权威 DNS 服务器为同一域名配置多个 A 记录(对应不同服务器 IP)
- 当用户查询域名时,DNS 服务器按轮询、权重、地理位置等策略,返回不同的 IP 地址
- 实现流量分发,提升服务可用性;典型应用:CDN、分布式服务
七、IP 地址与 MAC 地址
1. 核心区别
| 特性 | IP 地址 | MAC 地址 |
|---|---|---|
| 层级 | 网络层(逻辑地址) | 数据链路层(物理地址) |
| 分配方式 | 可手动配置 / 动态分配(DHCP) | 出厂固化在网卡中,全球唯一 |
| 作用范围 | 跨网段通信(路由转发依据) | 同一网段内通信(设备识别依据) |
| 长度 | IPv4 32 位(点分十进制)、IPv6 128 位 | 48 位(十六进制,如 00:1A:2B:3C:4D:5E) |
2. ARP 协议工作原理
ARP(地址解析协议):将 IP 地址转换为 MAC 地址
- 主机 A 需要发送数据给主机 B,已知 B 的 IP,未知 MAC
- 主机 A 发送ARP 广播报文(同一网段内所有设备接收),包含 A 的 IP/MAC 和 B 的 IP
- 主机 B 收到广播报文,识别自己的 IP,发送ARP 单播响应报文,包含 B 的 MAC 地址
- 主机 A 接收响应,缓存 B 的 IP-MAC 映射关系;后续通信直接使用 MAC 地址
3. ICMP 协议
定义:互联网控制报文协议,网络层协议,依赖 IP 协议传输
作用:用于在 IP 主机、路由器之间传递控制消息(如错误报告、状态查询)
实际应用
ping命令:基于 ICMP 的回显请求 / 应答报文,检测网络连通性traceroute命令:基于 ICMP 的超时报文,追踪数据包路由路径- 网络故障诊断:如目标不可达(ICMP Destination Unreachable)、超时(ICMP Time Exceeded)
4. IPv4 地址不足的解决方案
- NAT(网络地址转换):多个内网主机共享一个公网 IP 地址上网
- CIDR(无类别域间路由):将多个小网络合并为大网络,提高 IP 利用率
- IPv6:采用 128 位地址,彻底解决地址不足问题
- DHCP 动态分配:避免静态分配造成的 IP 浪费
八、TCP 可靠性机制
1. 保活计时器的作用
- 检测长时间空闲的 TCP 连接是否有效
- 若连接空闲超过阈值,发送保活探测报文;若对方无响应,多次探测后关闭连接
- 适用场景:服务器检测客户端是否异常断开(如 SSH 连接)
2. 滑动窗口协议
核心作用:实现流量控制和高效传输,允许发送方在未收到确认前,连续发送多个报文段
工作原理
- 发送方维护发送窗口:表示可连续发送的字节范围
- 接收方维护接收窗口:表示可接收的字节范围,通过 ACK 报文告知发送方
- 发送方根据接收窗口大小调整发送速率,避免接收方缓冲区溢出
3. 拥塞控制
定义:防止网络因过载而导致的吞吐量下降,是 TCP 全局的流量控制机制
TCP 拥塞控制的四个阶段
- 慢启动:拥塞窗口(cwnd)指数增长,直到达到慢启动阈值(ssthresh)
- 拥塞避免:cwnd 线性增长,避免网络拥塞
- 快速重传:收到 3 个重复 ACK,立即重传丢失的报文段,不等待超时
- 快速恢复:cwnd 减半,进入拥塞避免阶段
4. TCP 保证可靠传输的手段
- 序列号与确认应答:按序接收,丢失重传
- 超时重传:发送方超时未收到 ACK,重传报文段
- 滑动窗口:流量控制,避免缓冲区溢出
- 拥塞控制:适应网络状况,避免拥塞
- 校验和:检测报文段是否损坏
- 合理的分片与重组:根据 MTU(最大传输单元)分片,接收方重组
5. ARQ 协议理解
ARQ(自动重传请求)是可靠传输的核心协议,分为两种:
- 停止 - 等待 ARQ:发送方发送一个报文段后,等待确认再发送下一个;简单但效率低
- 连续 ARQ:发送方连续发送多个报文段,接收方批量确认;TCP 采用的是滑动窗口 + 连续 ARQ的组合
6. 流量控制
定义:控制发送方的发送速率,使接收方能够及时接收并处理数据(点对点的控制)
TCP 实现流量控制的方式
:通过
接收窗口(rwnd)
实现
- 接收方在 ACK 报文中携带 rwnd 大小(表示接收缓冲区剩余空间)
- 发送方的发送窗口 = min(拥塞窗口 cwnd,接收窗口 rwnd)
- 若 rwnd=0,发送方停止发送,定期发送探测报文询问 rwnd 是否更新
7. TCP 粘包与拆包
定义
- 粘包:多个报文段被合并成一个 TCP 报文发送,接收方无法区分边界
- 拆包:一个大报文段被拆分成多个 TCP 报文发送
粘包产生的原因
- 应用层发送数据过快,TCP 缓冲区堆积,合并发送
- 接收方接收不及时,缓冲区堆积多个报文段
- TCP 是字节流协议,无报文边界标识
解决方法:应用层添加边界标识(如固定长度、分隔符、头部长度字段)
8. 浏览器 TCP 连接数限制
- 浏览器对同一 Host(域名 + 端口) 的并发 TCP 连接数有限制,目的是避免服务器过载
- 不同浏览器限制不同,如 Chrome 默认6 个并发连接
- 超出限制的请求会排队,等待已有连接释放后再建立
九、常用网络命令
1. ping 命令(检测网络连通性)
- 语法:
ping [目标IP/域名] - 原理:发送 ICMP 回显请求报文,接收回显应答报文
- 示例:
ping www.baidu.com,若返回 "Reply from xxx" 表示连通;"Request timed out" 表示不通
2. traceroute 命令(追踪路由路径)
- 语法:
traceroute [目标IP/域名](Windows:tracert) - 原理:发送 TTL 递增的 UDP 报文,沿途路由器 TTL 减 1,超时返回 ICMP 超时报文,从而获取路由节点
- 示例:
traceroute www.baidu.com,输出数据包经过的所有路由器 IP
3. tcpdump/Wireshark(数据包分析)
tcpdump(命令行工具)
- 语法:
tcpdump [选项] [过滤规则] - 示例:
tcpdump port 80(捕获 80 端口的 HTTP 流量)、tcpdump host 192.168.1.1(捕获目标主机的流量)
- 语法:
Wireshark(图形化工具)
- 功能:实时捕获数据包,支持协议解析、过滤、统计
- 常用过滤规则:
http(HTTP 流量)、tcp.port == 443(HTTPS 流量)
4. netstat 命令(查看网络连接状态)
语法:
netstat [选项]常用选项
-t:显示 TCP 连接-u:显示 UDP 连接-n:以数字形式显示 IP 和端口-p:显示进程 ID 和名称(需 root 权限)
示例:
netstat -tunp,查看所有 TCP/UDP 连接的状态、IP、端口、进程
十、网络性能指标
- 带宽:网络链路的最大传输能力,单位:bps(比特 / 秒)、Mbps
- 吞吐量:实际传输的有效数据量,单位:Bps(字节 / 秒)、MBps;吞吐量 ≤ 带宽
- 延迟:数据包从发送到接收的总时间,包括传输延迟、处理延迟、排队延迟
- 丢包:数据包在传输过程中丢失的比例,丢包率过高会导致 TCP 重传,降低吞吐量
十一、HTTPS 安全机制
1. 数字证书
- 定义:由 CA(证书颁发机构)颁发的电子文件,用于验证服务器身份
- 内容:包含服务器公钥、域名、CA 签名、有效期等信息
- 作用:防止公钥被篡改,确保客户端连接的是真实的服务器
2. 对称加密与非对称加密
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 一个共享密钥(加密解密相同) | 一对密钥(公钥加密,私钥解密) |
| 加密速度 | 快 | 慢 |
| 安全性 | 依赖密钥的保密性 | 依赖私钥的保密性 |
| 典型算法 | AES、DES | RSA、ECC |
3. HTTPS 工作流程
TCP 三次握手:客户端与服务器建立 TCP 连接
SSL/TLS 握手
- 客户端发送支持的加密算法列表、随机数
- 服务器返回数字证书、随机数、选定的加密算法
- 客户端验证证书有效性,生成预主密钥,用服务器公钥加密后发送给服务器
- 服务器用私钥解密预主密钥,双方基于预主密钥和随机数生成对称密钥
加密传输:客户端和服务器使用对称密钥加密 HTTP 报文
四次挥手:关闭 TCP 连接
4. HTTPS 保证通信安全的手段
- 身份认证:通过数字证书验证服务器身份,防止中间人攻击
- 数据加密:使用对称加密传输数据,确保数据机密性
- 完整性校验:使用 MAC(消息认证码)检测数据是否被篡改
十二、Cookie 与 Session
1. 基本概念
- Cookie:服务器发送给客户端的小型文本文件,存储在客户端浏览器中,随请求自动携带
- Session:服务器端的会话存储,基于 Cookie 中的 SessionID 标识用户,存储用户的会话数据
2. 登录状态实现原理
- 用户提交账号密码,服务器验证通过
- 服务器创建 Session,存储用户信息(如用户 ID),生成唯一的SessionID
- 服务器将 SessionID 通过Set-Cookie响应头发送给客户端
- 客户端浏览器将 SessionID 存储为 Cookie
- 后续请求时,客户端自动携带 Cookie 中的 SessionID
- 服务器通过 SessionID 查找对应的 Session,确认用户登录状态
3. Cookie 与 Session 的区别
| 特性 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端浏览器 | 服务器端 |
| 存储大小 | 受限(一般 4KB) | 无限制(取决于服务器内存) |
| 安全性 | 较低(明文存储,易被篡改) | 较高(存储在服务器,不易被攻击) |
| 有效期 | 可设置长期有效(持久 Cookie) | 默认为会话级(浏览器关闭失效) |
| 依赖关系 | Session 依赖 Cookie 传递 SessionID | 不依赖 Cookie(可通过 URL 重写传递 SessionID) |
十三、常见 Web 安全攻击
1. SQL 注入
定义:攻击者将 SQL 语句注入到用户输入的参数中,欺骗服务器执行恶意 SQL
示例
:登录接口的 SQL 语句为
SELECT * FROM users WHERE username='$name' AND password='$pwd'- 攻击者输入用户名:
' OR 1=1 --,密码任意 - 拼接后的 SQL:
SELECT * FROM users WHERE username='' OR 1=1 --' AND password='xxx' - 结果:
1=1恒成立,--注释后面的内容,攻击者无需密码即可登录
- 攻击者输入用户名:
防御:参数化查询(预处理语句)、输入过滤、最小权限原则
2. XSS 攻击(跨站脚本攻击)
- 定义:攻击者将恶意脚本注入到网页中,当用户访问网页时,脚本在用户浏览器执行
- 类型:存储型 XSS(脚本存储在服务器)、反射型 XSS(脚本通过 URL 传递)、DOM 型 XSS(脚本通过 DOM 操作执行)
- 示例:评论区输入
<script>alert('XSS攻击')</script>,若服务器未过滤,其他用户查看评论时会弹出警告框 - 防御:输入过滤、输出转义(如
<转义为<)、CSP(内容安全策略)
3. DDoS 攻击(分布式拒绝服务攻击)
- 定义:攻击者控制大量僵尸主机,向目标服务器发送海量请求,耗尽服务器资源(带宽、CPU、内存),使合法用户无法访问
- 常见类型:SYN Flood(利用 TCP 三次握手)、UDP Flood、HTTP Flood
- 防御:CDN 加速、流量清洗、限制并发连接数、黑洞路由
十四、forward 与 redirect 的区别
| 特性 | forward(请求转发) | redirect(重定向) |
|---|---|---|
| 跳转方式 | 服务器内部跳转,客户端不知情 | 服务器返回 302 状态码,客户端重新发起请求 |
| URL 地址 | 浏览器地址栏不变 | 浏览器地址栏变为新 URL |
| 请求次数 | 一次请求 | 两次请求 |
| 数据共享 | 共享 request 和 response 对象 | 不共享(两次请求独立) |
| 跳转范围 | 只能跳转到当前应用内部的资源 | 可以跳转到任意外部资源 |
| 效率 | 高(无网络往返) | 低(需客户端重新请求) |