--- tags: [计算机网络, 网络协议, TCP/IP, HTTP, 网络安全, 运维] create time: 2026-05-17 22:00 --- # 计算机网络知识索引 ## 概述 计算机网络是现代软件工程的基石——从浏览器发出一个请求到服务器返回响应,中间经历了 DNS 解析、TCP 三次握手、TLS 握手、HTTP 报文传输等十几道工序。本知识库从零开始,沿着 **OSI / TCP-IP 模型**的层次逐层深入,同时覆盖工程实践中不可或缺的工具链和安全体系。 > [!QUESTION] 为什么学网络这么重要? > - 排查线上问题(连接超时、延迟飙升、SSL 错误)需要理解协议底层行为 > - API 设计、服务间通信选择(HTTP/gRPC/WebSocket/gRPC-TCP)依赖于对协议的深度理解 > - 高并发场景下的连接复用、零拷贝、epoll 等技术本质都是网络问题的解法 > - 安全审计、渗透防御需要掌握攻击面和各层漏洞原理 ## 文档统计 | 章节 | 文档数 | 文件路径前缀 | |------|--------|-------------| | 一、基础概念与分层模型 | 4 | `01-基础概念/` | | 二、链路层 | 5 | `02-链路层/` | | 三、网络层 | 8 | `03-网络层/` | | 四、传输层 | 6 | `04-传输层/` | | 五、应用层协议 | 6 | `05-应用层协议/` | | 六、Socket 编程 | 3 | `06-Socket编程/` | | 七、网络工具与诊断 | 2 | `07-网络工具与诊断/` | | 八、网络安全 | 4 | `08-网络安全/` | | 九、性能优化 | 2 | `09-性能优化/` | | 十、前沿与进阶 | 4 | `10-前沿与进阶/` | | **总计** | **44** | — | ## 知识体系 ### 一、基础概念与分层模型 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 1.1 | OSI 七层 vs TCP/IP 四层模型 | [[hhs/NETWORK/01-基础概念/01-OSI与TCP-IP模型对比]] | 两种模型的对比、每层职责映射、为什么现实中使用五层模型 | | 1.2 | 数据封装与解封装 | [[hhs/NETWORK/01-基础概念/02-数据封装与解封装]] | 发送端逐层加头 → 网线比特流 → 接收端逐层剥头 | | 1.3 | 寻址体系:MAC / IP / Port | [[hhs/NETWORK/01-基础概念/03-寻址体系MAC-IPTPort]] | 三层地址 vs 四层端口,`ip:port = 进程` 的经典比喻 | | 1.4 | 带宽、延迟、RTT、吞吐量 | [[hhs/NETWORK/01-基础概念/04-带宽延迟RTT与吞吐量]] | 核心性能指标定义与关系公式 `BDP = 带宽 × 延迟` | ```mermaid flowchart TD subgraph "应用层 L5" A["HTTP / DNS / SMTP / FTP"] end subgraph "传输层 L4" B["TCP — 可靠面向连接"] C["UDP — 无连接尽最大努力"] end subgraph "网络层 L3" D["IP (v4/v6) / ICMP / ARP / NAT"] end subgraph "链路层 L2" E["Ethernet / Wi-Fi / VLAN / ARP*"] end subgraph "物理层 L1" F["双绞线 / 光纤 / 无线电波"] end A --> B A --> C B --> D C --> D D --> E E --> F ``` > [!tip] 记住一句话 > 每一层只管自己的事,不知道上层在传什么内容,也不关心下层怎么搬。这就是 **分层解耦** 的威力。 ### 二、链路层 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 2.1 | Ethernet 帧结构 | [[hhs/NETWORK/02-链路层/01-Ethernet帧结构]] | MAC 地址、EtherType、Payload 长度、FCS 校验 | | 2.2 | CSMA/CD 与以太网退避 | [[hhs/NETWORK/02-链路层/02-CSMA-CD与以太网退避]] | 碰撞检测、二进制指数退避算法 | | 2.3 | MAC 地址与广播域 | [[hhs/NETWORK/02-链路层/03-MAC地址与广播域]] | 全球唯一性、OUI 查询、二层广播 vs 三层组播 | | 2.4 | Switch vs Hub vs Router | [[hhs/NETWORK/02-链路层/04-Switch与路由器]] | 冲突域隔离、MAC 表学习、VLAN 划分 | | 2.5 | VLAN 与 Trunk | [[hhs/NETWORK/02-链路层/05-VLAN与Trunk]] | 802.1Q 标签、不同 Switch 间的 VLAN 透传 | > [!question] ARP 为什么跨不了网段? > ARP 走的是 **二层广播**(目的 MAC `ff:ff:ff:ff:ff:ff`),路由器不转发广播包,因此跨网段必须靠网关做 **ARP 代理**或发起 **Gratuitous ARP**。 ### 三、网络层(核心) | # | 主题 | 链接 | 说明 | |---|------|------|------| | 3.1 | IPv4 首部与分段重组 | [[hhs/NETWORK/03-网络层/01-IPv4首部与分段重组]] | TTL、Identification、DF/MF 标志、MTU 概念 | | 3.2 | CIDR 与子网划分 | [[hhs/NETWORK/03-网络层/02-CIDR与子网划分]] | 无类编址、子网掩码计算、超网聚合 | | 3.3 | IPv6 地址与扩展头部 | [[hhs/NETWORK/03-网络层/03-IPv6地址与扩展头部]] | 简化首部、128位地址空间、SLAAC 自动配置 | | 3.4 | ARP 协议完整流程 | [[hhs/NETWORK/03-网络层/04-ARP协议完整流程]] | 免费 ARP(Gratuitous ARP)、ARP 缓存老化、ARP Spoofing 防护 | | 3.5 | ICMP 与 Ping / Traceroute | [[hhs/NETWORK/03-网络层/05-ICMP与Ping-Traceroute]] | Echo Request/Reply、TTL 超时机制实现路由追踪 | | 3.6 | 静态路由与默认网关 | [[hhs/NETWORK/03-网络层/06-静态路由与默认网关]] | route 命令、路由表优先级、多网卡策略路由 | | 3.7 | 动态路由协议 | [[hhs/NETWORK/03-网络层/07-动态路由协议OSPF-BGP]] | OSPF 区域内/区域间/LSA、BGP 选路规则 | | 3.8 | NAT 原理与应用 | [[hhs/NETWORK/03-网络层/08-NAT原理与应用]] | SNAT / DNAT / PAT(端口复用)、NAT 对 TCP 的影响、穿透技术(STUN/TURN/ICE) | ```mermaid sequenceDiagram participant Client as 客户端
192.168.1.100 participant GW as 网关/NAT
203.0.113.5:12345 participant Server as 服务端
93.184.216.34:80 Client->>GW: SYN 192.168.1.100:54321 → 93.184.216.34:80 Note over GW: SNAT: 源地址改写 GW->>Server: SYN 203.0.113.5:12345 → 93.184.216.34:80 Server-->>GW: SYN-ACK ack=1 Note over GW: DNAT: 端口反向映射 GW-->>Client: SYN-ACK ack=1 Client->>GW: ACK ack=2 GW->>Server: ACK ack=2 ``` > [!warning] NAT 的陷阱 > NAT 破坏了端到端原则——它在修改 IP 甚至端口,相当于在网络中间强行「翻译」数据包。某些协议(如 FTP 主动模式、P2P)在 NAT 后无法正常工作,需要 ALG 或打洞技术。 ### 四、传输层(重点) | # | 主题 | 链接 | 说明 | |---|------|------|------| | 4.1 | TCP 段结构与状态机 | [[hhs/NETWORK/04-传输层/01-TCP段结构与状态机]] | 34 字节最小首部、11 种状态、全图详解 | | 4.2 | 三次握手与四次挥手 | [[hhs/NETWORK/04-传输层/02-TCP三次握手与四次挥手]] | 为什么不能两次?TIME_WAIT 的意义和代价 | | 4.3 | 可靠传输机制 | [[hhs/NETWORK/04-传输层/03-TCP可靠传输机制]] | 序列号/确认号、重传策略、快重传/快恢复 | | 4.4 | 流量控制与拥塞控制 | [[hhs/NETWORK/04-传输层/04-TCP流量控制与拥塞控制]] | 滑动窗口、BBR vs Cubic 算法对比 | | 4.5 | TCP 粘包与拆包 | [[hhs/NETWORK/04-传输层/05-TCP粘包与拆包]] | 边界的成因、应用层解决方案(定长/分隔符/长度前缀)| | 4.6 | UDP 协议与 SCTP | [[hhs/NETWORK/04-传输层/06-UDP协议与SCTP]] | UDP 低延迟特性、SCTP 多流独立有序 | ```mermaid stateDiagram-v2 [*] --> CLOSED CLOSED --> LISTEN: Accept / Connect LISTEN --> SYN_RCVD: Accept SYN_RCVD --> ESTABLISHED: 3-Way Handshake Complete ESTABLISHED --> FIN_WAIT_1: Application closes ESTABLISHED --> CLOSE_WAIT: Remote close CLOSE_WAIT --> LAST_ACK: Local close FIN_WAIT_1 --> FIN_WAIT_2: Local ACK received FIN_WAIT_1 --> CLOSING: Simultaneous close FIN_WAIT_2 --> TIME_WAIT: Remote close CLOSING --> TIME_WAIT: Remote ACK TIME_WAIT --> CLOSED: 2MSL timeout LAST_ACK --> CLOSED: Final ACK received note right of TIME_WAIT 等待 2 * MSL 确保最后一个 ACK 到达 防止旧连接的重复报文干扰新连接 end note ``` > [!question] 为什么 TCP 挥手需要 TIME_WAIT? > 如果服务端直接关闭,客户端的 ACK 丢失会导致 RST。TIME_WAIT(2MSL)给时间让 ACK 重试,同时也让旧连接的报文在网络中自然消亡。但这意味着高并发服务器的 TIME_WAIT 堆积是常态而非异常。 ### 五、应用层协议 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 5.1 | HTTP/1.1 完全指南 | [[hhs/NETWORK/05-应用层协议/01-HTTP-1-1完全指南]] | Method/Status/Header/Payload、Keep-Alive、管道化缺陷 | | 5.2 | HTTP/2 多路复用 | [[hhs/NETWORK/05-应用层协议/02-HTTP-2多路复用]] | 二进制分帧、Header 压缩(HPACK)、Server Push、Stream Priority | | 5.3 | HTTP/3 与 QUIC | [[hhs/NETWORK/05-应用层协议/03-HTTP-3与QUIC]] | 基于 UDP、内置拥塞控制、0-RTT 握手、Head-of-Line 消除 | | 5.4 | HTTPS 与 TLS 握手 | [[hhs/NETWORK/05-应用层协议/04-HTTPS与TLS握手]] | 对称+非对称混合加密、证书链验证、Cipher Suite 协商 | | 5.5 | DNS / DHCP / WebSocket | [[hhs/NETWORK/05-应用层协议/05-DNS与DHCP与WebSocket]] | 递归 vs 权威查询、DORA 四步、握手升级 | | 5.6 | SSH 与邮件协议 | [[hhs/NETWORK/05-应用层协议/06-SSH与邮件协议]] | 密钥交换、公钥认证、端口转发、SMTP/IMAP/POP3 三大协议对比 | ```mermaid sequenceDiagram participant B as Browser participant S as Server participant CA as CA/证书机构 B->>S: TCP 三次握手 B->>S: ClientHello (cipher suites, extensions) S->>B: ServerHello + Certificate (含公钥) CA-->>B: 证书验签通过 (可选 OCSP/Stapling) B->>S: ClientKeyExchange + Finished S->>B: ServerFinished Note over B,S: TLS 握手完成 ✨ 后续通信全部加密 B->>S: HTTP Request (TLS 保护下) S->>B: HTTP Response (TLS 保护下) ``` > [!tip] HTTPS 为什么叫「双重握手」? > TCP 三次握手建通道 → TLS 握手协商加密参数并验证书 → 之后才是真正的 HTTP 请求。完整的 HTTPS 页面加载至少需要 2~3 个 RTT。 ### 六、Socket 编程 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 6.1 | Socket API 与 backlog | [[hhs/NETWORK/06-Socket编程/01-SocketAPI与backlog详解]] | socket/bind/listen/accept 映射到 TCP 状态,backlog 双队列机制 (SYN Queue + Accept Queue) | | 6.2 | I/O 多路复用:select → poll → epoll | [[hhs/NETWORK/06-Socket编程/02-epoll深度解析ETvsLT]] | 三阶段进化,ET vs LT 模式深度对比,最小可用 epoll 框架 | | 6.3 | 零拷贝技术与 Go netpoller | [[hhs/NETWORK/06-Socket编程/03-零拷贝与GoNetpoller]] | sendfile/sendmmsg/io_uring,Go M:N 调度模型,net/http.Server 超时配置 | ```mermaid flowchart LR App["应用程序"] -->|"accept()"| FD["file descriptor"] FD -->|"register"| EPOLL["epoll instance
红黑树 + 就绪链表"] EPOLL -->|"wait"| App FD -.->|"内核回调加入就绪链表"| EPOLL style EPOLL fill:#DDA0DD,color:#000 ``` > [!tip] Go 的优势 > Go 不需要像 C 那样手动维护 epoll + callback 地狱。每个连接挂起一个 goroutine(栈 2KB 起步),CPU 和内存效率极高。这被称为 **"C10K problem solved by goroutines"**。 ### 七、网络工具与诊断 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 7.1 | 连通性与状态探测 | [[hhs/NETWORK/07-网络工具与诊断/01-连通性与状态探测工具]] | ping 指标解读、nc/telnet 端口测试、ss 连接状态快照(含全状态速查表)、traceroute | | 7.2 | 抓包、HTTP 与 DNS 诊断 | [[hhs/NETWORK/07-网络工具与诊断/02-抓包HTTPDNS诊断工具]] | tcpdump BPF 表达式精选、curl 计时分解、dig 查询模式、iptables 规则排查 | > [!tip] 排错黄金思路 > `ping`(通不通?)→ `telnet port`(端口通不通?)→ `tcpdump`(报文到了没?)→ `ss`(本地连接状态如何?)→ `traceroute`(哪一跳丢了?)→ 读应用日志 ### 八、网络安全 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 8.1 | DDoS 与 MitM 防御 | [[hhs/NETWORK/08-网络安全/01-DDoS与MITM防御]] | L3/L4/D7 攻击矩阵,Linux 内置防御命令,ARP 欺骗 MITM 全流程,DNS 劫持检测,Slowloris | | 8.2 | SSRF 与 DNS 安全 | [[hhs/NETWORK/08-网络安全/02-SSRF与DNS安全]] | Go SSRF 完整防御代码(含 DNS Rebinding),NAT 穿透 (STUN/TURN/ICE),DNSSEC / DoH / DoT | | 8.3 | CSRF / XSS / XXE 防御 | [[hhs/NETWORK/08-网络安全/03-CSRFxss与XXE防御]] | 三巨头对比表,SameSite Cookie,CSP,html/template 自动转义,CORS vs CSRF | | 8.4 | JWT 认证与 TLS 安全 | [[hhs/NETWORK/08-网络安全/04-JWT认证与TLS安全]] | JWT 六大漏洞+修复,Refresh Token 模式,OAuth 2.0 vs OIDC,Cipher Suite 选择,OCSP Stapling,mTLS | ### 九、网络性能优化 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 9.1 | TCP 内核调优与连接复用 | [[hhs/NETWORK/09-性能优化/01-TCP内核调优与连接复用]] | sysctl 二十余参数生产级配置,BBR 启用,TCP Buffer BDP 适配,HTTP/gRPC/Nginx Keep-Alive 全栈方案 | | 9.2 | CDN、负载均衡与 Go Server 调优 | [[hhs/NETWORK/09-性能优化/02-CDN负载均衡与GoServer调优]] | Cache-Control 速查,L4 vs L7 LB 选型决策树,Nginx upstream 策略,Go http.Server 终极配置 | ### 十、前沿与进阶 | # | 主题 | 链接 | 说明 | |---|------|------|------| | 10.1 | QUIC 协议深度解析 | [[hhs/NETWORK/10-前沿与进阶/01-QUIC协议深度解析]] | Connection ID NAT 迁移,Stream 独立性消除队头阻塞,0-RTT + 重放攻击风险,QPACK vs HPACK | | 10.2 | eBPF 与 Service Mesh | [[hhs/NETWORK/10-前沿与进阶/02-eBPF与ServiceMesh]] | XDP/TC/kprobe 三层次架构,bpftrace/bcc/cilium-hubble 实战,Istio sidecar + VirtualService 路由 | | 10.3 | WireGuard VPN 原理与实践 | [[hhs/NETWORK/10-前沿与进阶/03-WireGuardVPN原理与实践]] | Curve25519 + ChaCha20-Poly1305 AEAD,三重加密手风琴握手,运维命令全解,性能对比实测 | | 10.4 | SDN / SRv6 与 Go 网络编程最佳实践 | [[hhs/NETWORK/10-前沿与进阶/04-SDNSRv6与网络编程最佳实践]] | Segment Routing over IPv6 包结构,OpenFlow/P4 可编程数据平面,Go 高性能 Server 模板 | ## 学习路径建议 ```mermaid flowchart LR BASE["一、基础概念
OSI/TCP-IP/地址"] --> LINK["二、链路层
Ethernet/ARP/Switch"] LINK --> NET["三、网络层
IPv4/IPv6/Routing/NAT"] NET --> TRANSP["四、传输层
TCP/UDP/状态机/拥塞控制"] TRANSP --> APP["五、应用层
HTTP/DNS/TLS/WebSocket"] TRANSP --> SOCKETS["六、Socket编程
epoll/零拷贝"] APP --> TOOLS["七、网络工具
tcpdump/curl/dig"] TOOLS --> SEC["八、网络安全"] SEC --> PERF["九、性能优化"] PERF --> FRONTIER["十、前沿进阶"] style BASE fill:#DDA0DD style TRANSP fill:#FFD700 style APP fill:#98FB98 style PERF fill:#FFA07A style FRONTIER fill:#B0C4DE ``` ## 关联笔记 - [[hhs/gRPC/README]] — gRPC 底层的 HTTP/2 + Protobuf 与网络层强相关 - [[hhs/Redis/README]] — Redis 客户端的网络连接池与持久化 TCP 通信 - [[hhs/GORM/README]] — Web 框架底层依赖 HTTP 协议栈