网络基础速查
覆盖:TCP 连接管理、cookie/session、分层模型、内网 IP 与穿透方案。偏面试速答 + 排障背景知识。
一、三次握手(建立连接)
客户端 服务器
│ ── SYN=1, seq=x ──────────→ │ 客户端进入 SYN_SENT
│ ←─ SYN=1, ACK=1, │ 服务器进入 SYN_RCVD
│ seq=y, ack=x+1 ──────── │
│ ── ACK=1, ack=y+1 ────────→ │ 双方进入 ESTABLISHED为什么是三次不是两次? 防止失效的(网络中滞留的旧)连接请求报文被服务端接收后单方面建立连接,浪费资源并产生错误;两次握手无法确认「客户端能收到服务端的包」。
为什么不是四次? 三次已足够同步双方序号并协商参数,四次徒增开销。
二、四次挥手(释放连接)
客户端 服务器
│ ── FIN=1 ─────────────────→ │ 客户端进入 FIN_WAIT_1
│ ←─ ACK=1 ───────────────── │ 服务器进入 CLOSE_WAIT,客户端进入 FIN_WAIT_2
│ ←─ FIN=1, ACK=1 ────────── │ 服务器进入 LAST_ACK
│ ── ACK=1 ─────────────────→ │ 客户端进入 TIME_WAIT(等 2MSL 后关闭)为什么挥手要四次? 关闭是双向独立的:收到 FIN 只代表对方不再发数据,己方可能还有数据没发完,所以 ACK 和己方的 FIN 分开发。
TIME_WAIT 等 2MSL 干什么? 保证最后一个 ACK 若丢失,还能重传;同时让本连接的旧报文在网络中自然消亡。
三、cookie vs session
| 维度 | cookie | session |
|---|---|---|
| 存储位置 | 客户端浏览器 | 服务器 |
| 安全性 | 低(可被分析、伪造) | 相对高(基于 cookie/URL 重写实现) |
| 服务器压力 | 无 | 占服务器资源,量大需考虑 |
| 容量限制 | 单个 ≤4KB,单站点约 20 个 | 无硬性限制 |
| 数据类型 | 仅字符串 | 任意类型 |
| 跨域 | 可设 domain 支持 | 不支持 |
四、网络分层模型
| OSI 七层 | TCP/IP 四层 | 典型协议 |
|---|---|---|
| 应用层 / 表示层 / 会话层 | 应用层 | HTTP、DNS、SMTP |
| 传输层 | 传输层 | TCP、UDP |
| 网络层 | 网络层 | IP、ICMP |
| 数据链路层 / 物理层 | 网络接口层 | Ethernet、ARP |
五、应用架构模式速答
- C/S:客户端装专用软件,传输高效、数据管控强;维护升级麻烦
- B/S:浏览器即客户端,跨平台、易升级;受限于浏览器能力与网络
- P2P:去中心化,节点互为客户端/服务器,扩展性强;安全性与节点可靠性难保障
六、内网 IP 与内网穿透
内网 IP 段(背下来)
| 类别 | 网段 | 范围 |
|---|---|---|
| A 类 | 10.0.0.0/8 | 10.0.0.0 ~ 10.255.255.255 |
| B 类 | 172.16.0.0/12 | 172.16.0.0 ~ 172.31.255.255 |
| C 类 | 192.168.0.0/16 | 192.168.0.0 ~ 192.168.255.255 |
查出口公网 IP:curl cip.cc
为什么公网无法直接访问内网服务?
NAT 只在内网主机主动外连时建立映射;外部直接请求 公网IP:端口 时,NAT 路由器不知道该转发给内网哪台机器。
四种穿透方案
| 方案 | 原理 | 适用 |
|---|---|---|
| 端口映射 | 路由器上手工配置 公网端口→内网IP:端口 | 有路由器管理权(家庭/自建机房) |
| 反向代理(frp 等) | 公网服务器做代理,内网主机主动连上去维持隧道 | 最常用,微信回调等本地联调场景 |
| VPN | 加密隧道把外部设备「拉进」内网 | 企业远程办公,安全性最高,部署重 |
| NAT 穿透(打洞) | UDP/TCP Hole Punching,利用 NAT 临时端口建立 P2P 直连 | P2P 应用(BitTorrent 等),无需中转流量 |
打洞要点:UDP 打洞靠双方先互发包让 NAT 开洞;TCP 打洞靠双方同时发 SYN,成功后 NAT 形同交换机直接转发。TCP 打洞只能点对点、建连慢,但成功率高于 UDP。