探索计算机网络(下) | 青训营笔记

130 阅读4分钟

这是我参与「第五届青训营 」笔记创作活动的第9天

一、本堂课重点内容

(续上一节)

  1. 网络架构怎么给抖音提质
  2. 总结

二、详细知识点介绍

2. 网络架构怎么给抖音提质

网络提速

网络稳定

2.1 网络提速

2.1.1 HTTP2.0

多图并发下载

image.png

2.1.2 怎么理解多路复用/stream

image.png

  • 单个TCP链接传输
  • 如果TCP丢包了怎么办?

2.1.3 QUIC/HTTP3.0

  • TCP or UDP?
  • Kernel or Userspace
  • 0 RTT
  • 弱网优势

image.png

除了协议优化,网络路径能不能优化?

2.1.4 数据中心分布

image.png

2.1.5 同运营商访问

image.png

2.1.6 静态资源(图片视频)路径优化(CDN)

image.png

2.1.7 动态API(播放/评论接口)路径优化(DSA)

image.png

刷的快,但是三天两天挂掉,谁刷抖音?

2.2 网络稳定

2.2.1 容灾概念

故障发生 —— 故障感知 —— 自动切换 —— 服务恢复

2.2.1.1 网络容灾的具体案例一

image.png

2.2.1.2 网络容灾的具体案例二

image.png

bytedance.com A 1.1.1.1 / bytedance.com A 2.2.2.2 ==> bytedance.com A 1.1.1.1 => 自动化

2.2.1.3 网络容灾的具体案例三

image.png

云到端 ==> 主动降级/容灾

场景局限性

2.2.1.4 网络容灾的具体案例四

image.png

Bug 导致全 crash ==> 前置兜底逻辑/ cache 文件

没有容灾的故障怎么查?

2.2.2 故障排查

故障明确 —— 故障止损 —— 分段排查

2.2.2.1 故障明确

出现什么故障?——> 沟通是前提

  • 什么业务?什么接口故障?
  • 故障体现在哪里?
  • 访问其他目标是否正常?
  • 是否是修改导致的异常?
2.2.2.2 故障止损
  • 先止损再排查
    • 用户体验第一
    • 对公司收入的影响是按照分钟甚至秒来计算
  • 如何止损
    • 组件没有容灾,但是系统有没有?
    • 降级
2.2.2.3 分段排查
  • 客户端排查
    • 客户端访问其他服务没问题吗?
    • 其他客户端访问目标服务没问题吗?
  • 服务端排查
    • 服务端监控/指标都正常吗?
    • 手动访问一下正常吗?
    • 分组件排查
  • 中间链路排查
    • 服务端跟客户端确保都没有问题
    • 中间网络设备有没有问题?(交换机/路由器/网关LB)
    • 旁路的 DNS 有没有问题
2.2.2.4 网络故障排查常用命令
  • dig 查询 DNS 问题
  • ping/telnet/nmap 查询三层/四层连通性
  • Traceroute 排查中间链路
  • iptabels
  • tcpdump
2.2.2.5 网络故障排查案例一

image.png

客户端异常 -> 服务端自测正常 -> 网关转发异常 -> 健康检查异常

2.2.2.6 网络故障排查案例二

image.png

个别用户报故障,生产环境大多是客户端的问题

2.2.2.7 网络故障排查案例三

image.png

安徽电信报障某APP无法使用 -> 检测后端服务正常,安徽电信流量突降 -> 安徽电信客户端 ping 不通目标服务 -> 电缆被挖断

2.2.2.8 网络故障排查案例四

image.png 某APP故障 -> 后端服务器反馈服务正常 -> 网络转发设备异常 -> 抓包 -> 路由不对称

2.2.3 故障预防很重要

  • 监控报警
  • 故障演练/预案
  • 故障降级/止损

2.2.4 总结

高质量刷抖音:

  • 路径提速
  • 数据中心提速
  • HTTP2.0 提速
  • QUIC提速
  • 网络容灾
  • 故障排查

image.png

3. 总结 & 课后作业

3.1 课后作业1

UDP socket 实现 ack,感知丢包重传

提示:

  1. 学会UDP socket编程
  2. 先从简单的 ack 学习,客户端等待 ack 再发包
  3. 什么时候客户端认为是丢包?
  4. 重传怎么考虑效率?
  5. 能不能不阻塞只穿丢掉的中间的段?

3.2 课后作业2

三台同网段内的服务器,模拟实现一个路由器

3.2.1 方法一:Linux 操作系统配置法

提示:

  1. 了解 Linux 的路由配置方式
  2. 确保是同网段直连可达的环境。在三台机器上另外配置 IP 网段和路由。
  3. 一台机器做客户端,一台机器做路由器,一台机器做服务端。
  4. 客户端配置到达服务器的下一跳指向路由器,路由器上配置到达服务端的路由

3.2.2 方法二:用户态socket编程实现简易route软件

提示:

  1. 收到指定的包后,做转发
  2. 注意修改报文的 MAC,不是修改 IP。
  3. 实现一个对称路由,这样可以实现TCP交互
  4. 可以通过 ping 来验证
  5. 可以支持 traceroute 吗?

三、参考文献