计算机网络知识体系


一、 计算机网络体系结构

1. OSI 七层模型

2. TCP/IP 四层模型

3. 五层结构


二、 网络综合

1. 浏览器地址栏输入 URL 到显示主页过程

  1. DNS 解析:浏览器发起一个 DNS 请求到 DNS 服务器,将域名解析为服务器的 IP 地址。
  2. TCP 连接:浏览器通过解析得到的 IP 地址与服务器建立 TCP 连接(通常是通过 443 端口进行 SSL 加密的 HTTPS 连接)。这一步涉及到 TCP 的三次握手过程,确保双方都准备好进行数据传输。
  3. 发送 HTTP 请求:浏览器构建 HTTP 请求消息,包括请求行(如 GET / HTTP/1.1)、请求头(包含用户代理、接受的内容类型等信息)和请求体(如果有),将请求发送到服务器。
  4. 服务器处理请求:服务器接收到 HTTP 请求后,根据请求的资源路径,经过后端处理(可能包括数据库查询等),生成 HTTP 响应消息。响应消息包括状态行(如 HTTP/1.1 200 OK)、响应头(内容类型、缓存控制等信息)和响应体(请求的资源内容)。
  5. 浏览器接收 HTTP 响应:浏览器接收到服务器返回的 HTTP 响应数据,开始解析响应体中的 HTML 内容;然后构建 DOM 树、解析 CSS 和 JavaScript 文件等,最终渲染页面。
  6. 断开连接:进行 TCP 四次挥手,连接结束。

2. DNS 解析过程

  1. 浏览器检查缓存中是否有域名对应的 IP 地址,有就直接返回。
  2. 检查本地 DNS 缓存是否有该域名的记录,没有就向根域名服务器发送请求。
  3. 根域名服务器将请求指向更具体的服务,返回顶级域名服务器地址。
  4. 顶级域名服务器再将请求指向权限域名服务器,返回对应的 IP 地址。
  5. 浏览器使用获得的 IP 地址发起 HTTP 请求到目标服务器。

三、 TCP 协议

1. 三次握手

为什么不是两次或四次握手?

2. 四次挥手

通信双方均可主动断开连接,假设客户端主动发起:

  1. 第一次挥手:客户端发送释放连接报文($\text{FIN} = 1, \text{seq} = u$),进入 FIN_WAIT_1 状态。
  2. 第二次挥手:服务端收到后发送确认报文($\text{ACK} = 1, \text{ack} = u + 1, \text{seq} = v$),进入 CLOSE_WAIT 状态。客户端收到后进入 FIN_WAIT_2 状态。
  3. 第三次挥手:服务端处理完数据后,发送释放连接报文($\text{FIN} = 1, \text{ACK} = 1, \text{seq} = w, \text{ack} = u + 1$),进入 LAST_ACK 状态。
  4. 第四次挥手:客户端收到关闭请求后发送确认($\text{ACK} = 1, \text{seq} = u + 1, \text{ack} = w + 1$),进入 TIME_WAIT 状态。经过 $2\text{MSL}$(两个最大报文段生命周期)后进入 CLOSED 状态。服务端收到 ACK 后立即进入 CLOSED 状态。

常见问题探讨:

3. TCP 如何保证可靠性

4. TCP 流量控制

5. TCP 拥塞控制

常用算法:

  1. 慢启动(Slow Start)
    • 刚建立连接时,先探测网络。每收到一个 ACK,$\text{cwnd} = \text{cwnd} + 1$(单位 MSS),每轮次按指数增长。
    • 当 $\text{cwnd} > \text{ssthresh}$(慢启动阈值,初始通常为 65535 字节)时,转入拥塞避免阶段。
  2. 拥塞避免(Congestion Avoidance)
    • 每收到一个 ACK 时,$\text{cwnd} = \text{cwnd} + \frac{1}{\text{cwnd}}$;每经过一个往返时间 RTT,$\text{cwnd} = \text{cwnd} + 1$。按线性上升,避免网络快速拥塞。
  3. 拥塞发生(Congestion Occurrence)
    • RTO 超时重传:$\text{ssthresh} = \frac{\text{cwnd}}{2}$,$\text{cwnd}$ 重置为 1,重新进入慢启动。
    • 快速重传:收到 3 个连续重复的 ACK 时触发。$\text{cwnd} = \frac{\text{cwnd}}{2}$,$\text{ssthresh} = \text{cwnd}$,进入快速恢复阶段。
  4. 快速恢复(Fast Recovery)
    • $\text{cwnd} = \text{ssthresh} + 3$;
    • 重传丢失的数据包;
    • 若再收到重复 ACK,则 $\text{cwnd} = \text{cwnd} + 1$;
    • 若收到新数据的 ACK,恢复 $\text{cwnd} = \text{ssthresh}$,重新进入拥塞避免算法。

6. TCP 重传机制


四、 UDP 协议

1. TCP 与 UDP 的区别

特性 TCP UDP
连接性 面向连接 无连接
可靠性 可靠传输(无差错、不丢失) 不可靠传输(尽力而为)
传输形式 字节流 报文 / 数据段
传输效率 较慢
首部开销 20 ~ 60 字节 仅 8 字节
应用场景 文件传输、邮件(FTP, SMTP, HTTP) 即时通讯、音视频通话

2. UDP 如何保证消息不丢失

虽然 UDP 本身不可靠,但可以通过应用层补足:


五、 IP 协议与 ARP 协议

1. IP 协议作用

2. ARP 协议工作过程

  1. ARP 请求:主机 A 查询本地 ARP 缓存。若无目标 IP 的 MAC 地址,则在局域网内广播发送 ARP 请求包。
  2. ARP 应答:网络内所有主机收到广播,仅目标主机 B 匹配 IP,并以单播形式回复自己的 MAC 地址,同时缓存主机 A 的 IP-MAC 映射。
  3. 更新 ARP 缓存:主机 A 收到应答后,将主机 B 的映射写入本地 ARP 缓存表。

六、 HTTP / HTTPS 协议

1. GET 与 POST 的区别

2. HTTP 报文结构

【请求报文】              【响应报文】
请求行 (Method/URL/Ver)   状态行 (Ver/Status/Reason)
请求头部 (Headers)        响应头部 (Headers)
空行                      空行
消息正文 (Body, 可选)      消息正文 (Body, 可选)

3. HTTPS 工作流程

  1. 客户端请求:建立 TCP 连接后发起 HTTPS 请求。
  2. 服务器响应证书:返回数字证书(含服务器公钥及 CA 信息)。
  3. 验证证书与生成对称密钥:客户端校验证书合法性,若合法则生成一个随机对称密钥,并用服务器公钥加密后发送。
  4. 服务器解密:服务器用私钥解密得到对称密钥。
  5. 对称加密通信:后续通信全由该对称密钥加密传输;连接关闭后密钥销毁。

4. Cookie 与 Session

Cookie 与 Session 的区别:

  1. 存储位置:Cookie 在客户端;Session 在服务端。
  2. 数据类型:Cookie 仅支持 ASCII 字符串;Session 可存储任意数据类型。
  3. 有效期:Cookie 可长期有效(如“记住密码”);Session 随会话结束或超时失效。
  4. 安全性:Cookie 易被截获;Session 存储于服务器,安全性更高。
  5. 存储容量:单 Cookie 上限约 $4\text{KB}$;Session 容量远高于 Cookie。

5. HTTP 状态码

本站内容除特别声明外,均遵循 CC BY-NC-SA 4.0 协议