这是我参与「第三届青训营-后端场」笔记创作活动的的第7篇笔记。
以刷抖音时的底层互联网交互作为切入点,回顾计算机网络的相关知识,并结合实际生产环境去理解网络的优化方向和稳定性建设。
网络接入
路由发包原理:
- 同网段:配置网段即可默认添加静态路由。获取对端MAC直接发包
- 跨网段:配置网关路由。获取网关MAC地址发包
- 路由是网状的,不一定是对称的
- 路由改的是MAC地址
ARP 协议
- 逻辑同网段才能发送ARP
- ARP请求广播,应答单播
- 免费ARP:局域网内增加机器(IP)自动发送
- ARP代理:虚拟网络/伪造MAC地址
IP协议
- 互联网终端节点的唯一标识
NAT协议
- IP地址不够用的解决方法之一
- 不仅仅是源地址变换,源端口/校验和/SEQ等都会变化
网络传输
DNS协议
UDP协议
- 协议简单
- 需要考虑可靠性的场景使用复杂
TCP协议
- 三次握手
- TCP连接
- TCP传输:理解sequence number/acknowledge number
- 丢包重传
- 滑动窗口
- 流量控制/拥塞控制
HTTP协议
- HTTP比TCP好在哪里:方便
- HTTP1.1的优化:长连接是重点
HTTPS协议
- SSL/TLS握手:非对称加密/对称加密
网络提速
协议优化
HTTP2.0 多路复用
- 多路复用:依然有队头阻塞
QUIC/HTTP3.0
- 为什么在用户态实现?内核的更新迭代频率较低,不好推广
- 为什么用UDP?TCP的队头阻塞问题不好解决,推倒重来&复用所有操作系统基本都支持的底层协议
网络路径优化
数据中心建设
- 多运营商接入:同运营商内部访问,避免跨运营商的流量
- 有边缘机房/汇聚机房/中心机房 CDN静态缓存系统:边缘机房的建设,优先访问边缘机房,缓存命中视频/图片等静态内容
DSA动态加速系统:分四层/七层动态加速。核心在于利用可控节点做路径探测和规划。
网络稳定
网络容灾
故障发生 - 故障感知 - 自动切换 - 服务恢复
案例:
- 机房专线故障:环路容灾,避免某条专线故障导致机房孤岛问题(专线是连接各个机房的网络物理路径)
- 单机房接入节点故障:DNS容灾,摘除故障的节点
- 云控容灾:云端交互,服务器/云上下发命令到终端
- cache容灾:源站不可用,降级到之前的缓存内容
故障排查
故障明确 - 故障止损 - 分段排查
- 加强故障沟通
- 什么业务/接口故障
- 故障体现在哪里
- 访问其他目标是否正常
- 是否是修改导致的异常
- 故障止损要在第一时间做(灾备预案的建设)
- 分段排查
- 客户端排查:访问其他服务/其他客户端访问目标服务
- 服务端排查:监控/指标
- 中间链路排查:网络设备
- 常用的故障排查命令
- dig 查询 DNS 问题
- ping/telnet/nmap 查询三层/四层连通性
- traceroute 排查中间链路
- iptables
- tcpdump
案例
- 服务端配置异常(健康检查异常)
- 客户端某个例异常(客户端自己配置错误)
- 外部运营商故障