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

93 阅读6分钟

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

前情提要

网络接入协议/概念

  • MAC地址:二层数据链路层是面向无连接的,转发的是数据帧,在转发的过程中不知道目的是谁,所以通过Mac地址确定目的地址进行传递;Mac地址是又称为物理地址、硬件地址,用来定义网络设备的位置,由48bit(6个字节),一般以12个16进制的形式表现,前24位是是组织唯一标识符,代表不同的厂家,后24位是厂家分配的标识。
  • 路由协议:常见的有RIP协议-路由信息协议;OSPF协议-开放最短路径优先协议;ISIS协议-中间系统到中间系统协议;BGP协议-边界网关协议。
  • ARP协议:ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
  • IP协议:IP作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计算机。
  • NAT:一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。一定程度上,能够有效的解决公网地址不足的问题。

网络传输协议

  • DNS:域名解析协议,将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。
  • UDP:用户数据包协议,是一种面向无连接的传输层通信协议
  • TCP:传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议
  • HTTP:超文本传输协议,
  • HTTPS:基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
  • HTTP2.0:在HTTP1.x的基础上添加了新特性,如二进制压缩,多路复用,头部压缩,等等
  • QUIC:基于UDP的传输层协议,提供像TCP一样的可靠性

一、刷抖音网络是怎么交互的

网络接入

互联网

image.png

路由

  • 路由不一定是对称的
  • 路由可以说是工作在ip层
  • 路由是改MAC地址,找到下一跳

ARP协议

  • 逻辑同网段才能发送ARP
  • ARP请求广播,ARP应答单播
  • 设备主动使用自己的ip地 址目的ip地址发送ARP请求叫做免费ARP

作用:

  1. 把实时的ip和mac变更消息第一时间通告到全网,及时的更新全网的ARP表项
  2. 免费ARP用于做地址冲突检测
  3. 用于其他三层设备及时的更新自己的ARP表项
  4. 用于交换机及时更新自己的mac地址表项(VRRP特定场景)
  5. 服务器集群,将服务器上的应用做成一个逻辑主机,集群成员之间依靠免费ARP来维持心跳,每个集群的成员都会周期性的发送免费ARP(注:服务器集群是应用层的提取)

IP协议

  • 唯一标识,互联网通用
  • 有了Mac地址为什么还要IP地址

Mac是一个二层协议,由于历史遗留问题已经有很多协议了,IP地址对不同的二层协议进行统一

  • IPv4不够用->IPv6、NAT

NAT 将不同内部多个相同的IP地址映射到一个地址给外部进行联网,大大减少了IPv4的使用

网络传输

image.png

  1. DNS

image.png

  1. UDP

image.png

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

  1. TCP

image.png

  1. HTTP/HTTP1.1
  • 为什么不直接使用TCP通信?tcp已经做了够多的事情了,http已经做好了相关交互的操作,让开发者关注代码逻辑本身,http只是在tcp上加了一层规矩。
  • HTTP1.1:长连接、部分传输、HOST、缓存...
  1. HTTPS 解密出来依然是HTTP,只是在其上进行了加密

  2. SSL/TLS握手 对称加密与非对称加密 确保没有劫持,也确保私钥不泄密 image.png

二、刷抖音为什么又快又稳

网络提速

HTTP2.0

  • 头部压缩:客户端和服务器两端都会建立和维护字典,用长度较小的索引号表示重复的字符串,再用 Huffman 编码压缩数据,可达到 50%~90% 的高压缩率
  • 二进制帧:将 HTTP/1 的文本格式改成二进制格式传输数据,极大提高了 HTTP 传输效率,而且二进制数据使用位运算能高效解析。
  • 多路复用(并发传输):HTTP/1.1 的实现是基于请求-响应模型的。同一个连接中,HTTP 完成一个事务,才能处理下一个事务,也就是说在发出请求等待响应的过程中,是没办法做其他事情的,如果响应迟迟不来,那么后续的请求是无法发送的,也造成了队头阻塞的问题。HTTP/2通过 Stream 这个设计,多个 Stream 复用一条 TCP 连接,达到并发的效果,解决了 HTTP/1.1 队头阻塞的问题,提高了 HTTP 传输的吞吐量。
  • 服务器主动推送:HTTP/1.1 不支持服务器主动推送资源给客户端,都是由客户端向服务器发起请求后,才能获取到服务器响应的资源。在 HTTP/2 中,客户端在访问 HTML 时,服务器可以直接主动推送 CSS 文件,减少了消息传递的次数。 HTTP3.0/QUIC

HTTP3.0将TCP传输换成了UDP协议,工作在用户态,基于 UDP 协议在「应用层」实现了 QUIC 协议,它具有类似 TCP 的连接管理、拥塞窗口、流量控制的网络特性,相当于将不可靠传输的 UDP 协议变成“可靠”的了,所以不用担心数据包丢失的问题

  • 解决了队头阻塞问题
  • 0 RTT
  • 弱网优势:归根结底是解决了队头阻塞的问题

其他提速方法:

  • 数据中心分布:按照核心机房、POP点接入、边缘机房来划分数据存储的分布位置,合理的数据分布可以有效的提高网络速度。
  • 同运营商访问:按照用户的客户端运营商类型来给用户接入相应的服务器,因为不同运营商网络之间传输效率会比同运营商之间低。
  • 静态资源路径优化(CDN):在边缘机房里先做一层缓存,对一些热门静态资源做缓存。
  • 动态API路径优化(DSA):在不同机房之间做路径优化,通过网络延迟探测优先挑选延迟最低之间机房来进行服务。

网络稳定

场景

  1. 在内部机房之间进行专线连接而不走外网,如果专线不可用,走外网容灾
  2. 调度容灾:在某个机房服务挂了过后,将服务转移到可用机房上,但同时需要探测感知其他机房可以承受宕机机房转移过来的流量。
  3. 客户端主动降级

没有容灾的故障怎么查?

首先明确故障的产生,先进行止损,再分段进行排查,客户端、服务端、中间链路排查。

故障预防

故障预防十分重要,要在故障发生之前进行监控报警,对可能发生的故障进行演练预案,在故障发生的时候进行降级和止损。