刷抖音网络是怎么交互的

网络接入

互联网

img

路由

路由发包原理

  • 同网段:配置网段即可默认添加静态路由。获取对端MAC直接发包

    img

  • 跨网段:配置网关路由。获取网关MAC地址发包

    img

  • 动态路由:BGP/OSPF等,路由表在动态变化

  • 路由是网状的,不一定是对称的

    img

路由传递时,始末 IP 是不变的, 始末 MAC 地址是一直改变的

ARP协议

  • ARP广播/应答:协议原理
  • 免费ARP:主动广播告知MAC地址
  • ARP代理:虚拟网络/伪造MAC地址

ARP 的本质是查找下一跳的 MAC ,不是请求目标地址

IP 协议

Q:为什么不能用 MAC 代替 IP 地址?

MAC 协议是在第二层的,但是第二层还有很多其他的协议,为了兼容其他二层的协议就又封装了一层 IP

Q:IPv4不够用,除了IPv6还有什么方法

使用 NAT

NAT

img

NAT 是不是就改了改 IP 地址呢?

NAT 同时改了 IP + 端口

网络传输

数据包

img

本质上是一段内存,里面存储的内存是有序的,一般是按照TCP/IP的多层协议去封装。拆包/封包都是按照协议去写内存/读内存。

数据包发送

img

先请求 DNS

img

递归迭代解析

DNS 的传输协议 UDP

  • 协议简单

    想发什么包,就分配一个 UDP 的头,把 payload 里面塞数据发出去就好

  • 需要考虑可靠性的场景使用复杂

    每次发多少?怎么避免分片?

    怎么知道没丢包?

    怎么权衡传输效率和质量?

TCP 三次握手

什么是 TCP 连接?

拔了网线,连接会断吗?(靠心跳包探活)

你真的了解 TCP 三次握手吗?

三次握手:确认传输的序列号/MSS/Option字段,建立连接

TCP连接:是一个虚拟的概念,本质上两倍维持一段内存,记录连接状态,就是session

TCP 传输

TCP传输:理解sequence number/acknowledge number

丢包重传:理解丢包怎么感知并重传,理解快速重传发生在什么时候

滑动窗口:课后自学

流量控制:课后自学

HTTP/HTTP1.1

  • HTTP比TCP好在哪里:方便
  • HTTP1.1的优化:长连接是重点

HTTP 只是多加了一层规程,HTTP 依然是 TCP ,只是这个规则让用户更清晰

HTPP 和 TCP 的关系就和中文和军事专业语类似

HTTPS

加密/可靠/防劫持

SSL/TLS 握手

非对称加密/对称加密

刷抖音为什么又快又稳

(网络架构怎么给抖音提质)

网络提速

HTTP2.0

多路复用

img

怎么理解多路复用/stream?

麻烦的对头阻塞问题

QUIC/HTTP3.0

img

  • 为什么在用户态实现?内核的更新迭代频率较低,不好推广
  • 为什么用UDP?TCP的队头阻塞问题不好解决,推倒重来&复用所有操作系统基本都支持的底层协议

除了协议优化,还能不能做路径优化呢?

数据中心分布

img

同运营商访问

针对中国互联网现状,通过 IP 智能解析

静态资源(图片等)路径优化(CDN)

img

CDN静态缓存系统:边缘机房的建设,优先访问边缘机房,缓存命中视频/图片等静态内容

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

img

DSA动态加速系统:分四层/七层动态加速。核心在于利用可控节点做路径探测和规划。

网络稳定

容灾概念

img

网络容灾的具体案例一

img

机房专线故障:环路容灾,避免某条专线故障导致机房孤岛问题(专线是连接各个机房的网络物理路径)

网络容灾的具体案例二

img

单机房接入节点故障:DNS容灾,摘除故障的节点-字节GTM系统

网络容灾的具体案例三

img

云控容灾:云端交互,服务器/云上下发命令到终端-字节TNC系统

假如有一个机房不可用,指挥下游服务不使用该机房

网络容灾的具体案例四

img

cache 容灾:源站不可用,降级到之前的缓存内容-字节TLB/ByteCDN等系统的容灾建设

当发现后面不通的时候,先返回缓存的数据

故障明确

img

  • 什么业务?什么接口故障?
  • 故障提醒在哪里?
  • 访问其他目标是否正常?
  • 是否是修改导致的异常?

故障止损

先止损再排查

  • 用户体验第一
  • 对公司收入的影响是按分钟甚至秒来算的

如何止损

  • 组件没有容灾,但是系统有没有?
  • 降级(如抖音推荐接口坏了,改为随机推送视频)

分段排查

客户端排查

  • 客户端访问其他服务没问题吗?
  • 其他客户端访问目标服务没问题吗?

服务端排查

  • 服务端监控/指标都正常吗?
  • 手动访问一下正常吗?
  • 分组件排查

中间链路排查

  • 服务端跟客户端确保都没问题
  • 中间网络设备有没有问题?(交换机/路由器/网关LB)
  • 旁路的 DNS 有没有问题?

网络故障排查常用指令

  • dig 查询 DNS 问题
  • ping/telnet/nmap 查询三层/四层连通性
  • Traceroute 排查中间链路
  • iptabels
  • tcpdump

网络故障排查案例一

img

服务端配置异常(健康检查异常,即误摘掉了正常的服务器)

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

网络故障排查案例二

img

客户端某个例异常(客户端自己配置错误)

网络故障排查案例三

img

外部运营商故障

安徽电信报障 APP 无法使用->检测后端服务正常

安徽电信流量突降->安徽电信客户端 ping 不通目标服务->电缆被挖断

网络故障排查案例四

img

复杂故障的排查:需要抓包,具体问题具体分析

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

故障预防很重要

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