计算机网络面试核心要点深度解析与实战场景

计算机网络面试核心要点深度解析与实战场景
1. TCP/IP协议栈核心机制与面试高频问题TCP/IP协议栈是计算机网络面试中必问的核心知识点我当年准备面试时花了整整两周时间啃这块硬骨头。先说一个实际案例有次面试官让我解释为什么TCP建立连接需要三次握手而断开连接却要四次挥手这个问题看似简单但能考察候选人对协议设计的深层理解。1.1 三次握手的精妙设计三次握手的过程就像古代两国建交的仪式第一次握手SYN相当于A国派使者送出玉玺第二次握手SYNACK是B国送回玉玺并附上自己的国玺第三次握手ACK则是A国确认收到国玺。这个设计解决了三个关键问题序列号同步双方通过交换初始序列号ISN来确保数据有序传输。比如客户端发送SYN包携带seq100服务端回应时ack101这就建立了明确的序号对应关系。防止历史连接干扰假设旧的SYN包因网络延迟后到达服务端会返回SYNACK客户端通过对比序列号发现不匹配立即发送RST终止连接。这就是为什么不能简化为两次握手。资源分配时机服务端在第三次握手完成后再分配连接资源避免了SYN Flood攻击导致的资源耗尽。我曾用Python模拟过攻击场景# SYN Flood攻击模拟代码 import socket target_ip 192.168.1.1 target_port 80 while True: s socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect_ex((target_ip, target_port)) # 故意不完成握手1.2 四次挥手的必要性断开连接时TCP需要分别关闭两个独立的数据通道。就像两个人通话结束时的道别客户端发送FIN表示说完话第一次挥手服务端先回复ACK确认收到第二次挥手等服务端说完话再发送FIN第三次挥手客户端最后确认第四次挥手这里的关键在于TCP的全双工特性——两个方向的数据传输是独立的。当客户端发送FIN时只是关闭了客户端→服务端的数据通道服务端可能还有数据要发送。1.3 流量控制与拥塞控制流量控制就像调节水龙头大小通过滑动窗口机制实现。接收方在ACK包中通告自己的接收窗口rwnd比如ACK seq101, ack201, rwnd3000表示我已收到200字节还能再收3000字节。拥塞控制则是应对网络拥堵的智能算法包含四个核心阶段慢启动窗口从1开始指数增长拥塞避免达到阈值后线性增长快重传收到3个重复ACK立即重传快恢复重传后不重置窗口大小2. HTTP/HTTPS协议深度解析2.1 HTTP协议演进史HTTP/1.1的管道化pipelining特性允许连续发送多个请求但仍有队头阻塞问题。就像超市收银台前排队的顾客前一个人卡住后面都得等着。HTTP/2通过二进制分帧和流的多路复用彻底解决了这个问题HEADERS帧流ID1 -- GET /index.html DATA帧流ID1 -- html... HEADERS帧流ID3 -- GET /style.css不同流的帧可以交错发送互不阻塞。2.2 HTTPS握手过程详解HTTPS的TLS握手就像秘密会面的确认流程客户端发送Client Hello支持的加密套件随机数A服务端返回Server Hello选择的加密套件随机数B证书客户端验证证书生成预主密钥Premaster Secret并用证书公钥加密双方通过随机数A、B和预主密钥生成会话密钥这里有个关键点前两次握手是明文传输的因此TLS 1.3通过预共享密钥PSK将握手缩短到1-RTT甚至0-RTT。2.3 状态管理机制对比Cookie和Session的区别就像会员卡和后台记录Cookie存储在客户端有大小限制4KB可能被篡改Session存储在服务端更安全但会增加服务器负载现代JWTJSON Web Token采用签名机制结合了两者优点Header.Payload.Signature eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c3. 网络安全防护实战3.1 常见攻击与防御SYN Flood攻击就像恶意的电话骚扰攻击者不断拨号但不说话占用接线员资源。防御方案包括SYN Cookie技术服务端不保存半连接状态而是通过加密算法生成序列号# SYN Cookie生成算法示例 def syn_cookie(src_ip, src_port, dst_ip, dst_port, secret): hash HMAC(secret, [src_ip, src_port, dst_ip, dst_port]) return (hash[0:4] 0x7fffffff) # 保留31位避免溢出连接速率限制如Linux的iptables规则iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT3.2 CSRF与XSS防御CSRF攻击示意图恶意网站 → 用户浏览器 → 银行网站携带用户cookie防御措施同源检测验证Referer头Token验证表单中嵌入随机TokenSameSite Cookie属性限制第三方Cookie使用XSS防御则需要输入输出双重过滤// 使用DOMPurify库过滤HTML const clean DOMPurify.sanitize(userInput);4. 网络性能优化策略4.1 TCP优化参数Linux系统调优示例# 增大TCP窗口大小 echo net.ipv4.tcp_window_scaling 1 /etc/sysctl.conf # 启用快速打开TFO echo net.ipv4.tcp_fastopen 3 /etc/sysctl.conf sysctl -p4.2 HTTP/2服务端推送Nginx配置示例server { listen 443 ssl http2; location / { http2_push /style.css; http2_push /app.js; } }4.3 CDN加速原理CDN节点选择算法通过DNS解析获取边缘节点IP基于Anycast技术路由到最近节点实时监控节点负载进行动态调度5. 典型面试场景模拟5.1 问题解释TIME_WAIT状态回答要点持续时间2MSL默认60秒存在意义确保最后一个ACK到达对端让网络中残留包失效生产问题高并发短连接可能导致端口耗尽解决方案# 启用TIME_WAIT重用 echo 1 /proc/sys/net/ipv4/tcp_tw_reuse5.2 问题HTTPS如何避免中间人攻击回答框架证书链验证信任锚密钥交换算法ECDHE签名机制RSA/ECDSAHSTS头强制HTTPSStrict-Transport-Security: max-age63072000; includeSubDomains5.3 问题TCP和UDP如何选择决策树需要可靠传输 → 是 → TCP 低延迟优先 → 是 → UDP 需要多播 → 是 → UDP实际案例对比视频会议UDPQUIC如WebRTC文件传输TCP重传机制DNS查询UDP超时重试