打开抖音互联网会发生什么| 青训营笔记

168 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。

刷抖音中使用的网络协议(应用层)

  • DNS: 域名解析

  • 泛HTTP: 图片下载、视频下载、评论API

网络接入

互联网

  • 服务器/机房与中国电信等运营商建立连接,运营商再通过海底光缆同美国网络连接。

  • 同网段发包/交互: 更改目标IP的MAC

  • 跨网段发包/交互: 中间通过交换设备连接,配置一个路由

路由

  • 路由不一定是对称的,往返某一节点的路径可能不一致,绝大多是都是对称型路由

  • 路由工作在网络层(IP层)的说法并不准确,有的路由协议本身可能并不工作在网络层。比如OSPF协议,就不是一个简单的工作中网络层的协议,它属于传输层。很多协议可能需要做很多层的交互。从总体角度来看,说路由工作在网络层没有问题。

  • 路由不是去改IP地址,改的是目标MAC地址,找到发包口。每过一个设备,就需要将源MAC改为之前那个设备的MAC,源IP地址和目标IP地址应该一直是不变的。

ARP协议

  • 同逻辑网段才能发送ARP。跨网段不能直接发送ARP,需要不断找下一跳,一种到同逻辑网段。

  • 广播是不能跨网段的。

  • ARP查询是发送一个请求广播,目标设备发送一个ARP应答单播。

IP协议

唯一标识,互联网通用。抖音客户端一个,抖音服务端一个。

NET

NET是IP+端口一起改变的,解决多个内网客户端访问同一个目标地址+端口,而源端口一样的问题。

网络传输

数据包发送

image.png

先请求DNS

客户端发送网址的解析请求,递归解析器解析

UDP

  • UDP功能太过简单,想发什么包就i分配一个UDP的头,把payload里面塞数据发出去就好。

  • UDP想要用好很难,不能确保协议可靠。

TCP

三次握手:

确认传输的序列号/MSS/Option字段,建立连接。

TCP连接

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

TCP传输

sequence number(Seq):表示发送方这个packet的数据部分的第一位应该在整个data stream中的位置

acknowledge number(Ack):表示期望接收方的下一次sequence number是多少

ps: SYN/FIN的传输虽然没有data,但是会让下一次传输的的packet seq增加1,但是ACK的传输不会让下一次的传输packet加1.

timewait需要等两个msl(每个分节最长生命期),原因是为了确保连接正常关闭,防止前一次的ACK丢失。

丢包解决办法:利用ACK的机制

HTTP/HTTP1.1

TCP负责的内容太多了,如果用TCP开发效率太低。相比较TCP,HTTP是多加了一层规矩,HTTP依然还是TCP,只是这个规矩让用户更清晰更简洁。

HTTPS

HTTPS为了防止传输中被窃听和劫持使用了加密,解密出来后依然是HTTP。

SSL/TLS握手

先进行非对称加密,再进行对称加密

网络架构如何给抖音提质

网络提速

HTTP2.0

多路复用,并行访问

image.png

多路复用时,TCP如果发生丢包便会导致队头阻塞,全部重传。

QUIC/HTTP3.0

  • 用UDP的原因是TCP的队头阻塞问题不好解决,推倒重来代价太大。

  • 在用户态实现的原因是内核的更新迭代频率较低,不好推广

在弱网环境下有很大的优势 image.png

数据中心分布

有边缘机房/汇聚机房/中心机房

同运营商访问

电信解析电信服务器,移动解析移动服务器

跨网质量较差

路径优化(CDN)--静态资源

对于视频图片类资源,进行缓存。

按照边缘机房->汇聚机房->核心机房的顺序依次查找。

路径优化(DSA)--动态资源

对于动态API(播放/评论接口),优化路径。

对网络延时进行探测,探测的数据做成一张表,通过特定算法求得最优路径。

网络稳定

容灾

思路上:故障发送—>故障感知->自动切换->服务恢复

  • 环路容灾:内部机房使用专线和外网同时连接,外网容灾。

  • DNS容灾:摘除故障节点,并对即将使用的机房进行容量判断。

  • 云控容灾:服务器/云上下发命令到终端。

  • cache容灾:源站不可用,降级到之前的缓存内容

故障排查

思路上:故障明确->故障止损->分段排除

网络故障排除常用命令

  • dig查询DNS问题

  • ping/telnet/nmap查询三层/四层连通性

  • Traceroute排查中间链路

  • iptabels查客户端

  • tcpdump抓包