计算机网络
OSI/TCP-IP、HTTP、DNS、Socket。
计算机网络
这一课你将能做到
- 对应 OSI 七层与 TCP/IP 四层模型,说出每一层解决什么问题、有哪些代表协议
- 描述 TCP 三次握手、四次挥手与可靠传输的基本机制,区分 TCP 与 UDP
- 说清一次 HTTPS 请求从 DNS 解析到 TLS 握手再到 HTTP 响应的完整链路
为什么要学
分布式系统的本质是「通过网络协作的多台计算机」。判题平台里几乎每个动作都在走网络:浏览器用 HTTPS 调后端接口,后端用 JDBC 连 MySQL、用 RESP 协议连 Redis,微服务之间走 HTTP/gRPC,判题结果通过 WebSocket 实时推给用户。
网络知识直接决定排查问题的能力:接口超时是连不上还是对端慢?DNS 偶尔解析失败怎么办?为什么 HTTPS 多一次往返?TIME_WAIT 太多端口耗尽怎么处理?只会 @GetMapping 无法回答这些问题。本课建立分层模型与三个关键协议(TCP、TLS、HTTP)的直觉。
先建立图像
分层模型对照(数据自上而下逐层加「信封」)
OSI 七层 TCP/IP 四层 代表协议/设备 典型问题
7 应用层 应用层 HTTP/HTTPS, DNS 状态码、接口语义
6 表示层 TLS, JSON, gzip 编码、加密
5 会话层 WebSocket
4 传输层 传输层 TCP / UDP 端口、可靠/快速
3 网络层 网际层 IP, ICMP 寻址、路由、ping
2 数据链路层 网络接口层 以太网, ARP, MAC 局域网内投递
1 物理层 网线/光纤/比特流
一次请求的旅程
浏览器
│ 1.DNS: 域名 → IP(递归查询:缓存→本地DNS→根→顶级→权威)
│ 2.TCP 三次握手建立连接
│ 3.TLS 握手:协商算法、交换证书与密钥(非对称加密换出对称密钥)
│ 4.HTTP 请求/响应(后续都用对称密钥加密)
▼
Nginx/负载均衡 ──▶ Spring Boot ──▶ MySQL/Redis
跟着做
步骤 1:亲手观察网络分层与连接
# 从下到上观察
ipconfig / ifconfig # 看本机 IP、MAC(网络接口层/网际层信息)
ping judge.example.cn # ICMP:测 IP 层连通性与延迟
nslookup judge.example.cn # DNS:看域名解析到哪个 IP
tracert judge.example.cn # Windows / traceroute:看经过哪些路由跳数
# 观察传输层连接(Linux/macOS)
netstat -an | grep ESTABLISHED # 或 ss -tan:看 TCP 连接状态
curl -v https://judge.example.cn/api/problems # -v 把 DNS、TCP、TLS、HTTP 全过程打出来
curl -v 是最值得养成的习惯:它依次打印解析到的 IP、TCP 连接建立、TLS 证书校验与加密套件协商、HTTP 请求头和响应状态码。一个命令看完整张分层图。
步骤 2:理解 TCP 三次握手与可靠传输
三次握手(建立连接,确认双方收发能力都正常)
客户端 服务端
── SYN, seq=x ───────▶ 我想连,我的序号是 x
◀── SYN+ACK, seq=y,
ack=x+1 ───────── 我收到了,也想连,确认你
── ACK, ack=y+1 ────▶ 确认你,连接建立
为什么不是两次?要防止一个迟到的旧连接请求突然到达,
白白让服务端建立连接并等待资源。
可靠传输四件套
序号 + 确认ACK:每个字节有序号,没收到确认就重传
超时重传: 计时器到期未确认 → 重发
滑动窗口: 批量发送而不是发一个等一个,流量控制
拥塞控制: 慢启动/拥塞避免,探测网络容量,避免灌爆网络
TCP vs UDP:TCP 面向连接、可靠、有序,代价是握手开销和头部较大(网页、文件、数据库连接都用它);UDP 无连接、不保证可靠但延迟低、头部小(DNS 查询、视频通话、游戏同步、QUIC/HTTP3 在 UDP 上自建可靠性)。判题平台的实时状态推送用 WebSocket(基于 TCP),对延迟敏感的判题心跳可考虑 UDP 但要自己补确认。