抖音与互联网 | 青训营笔记

152 阅读8分钟

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

打开抖音,互联网会发生什么

相应软件

tcpdump

wireshark

计算机网络基础知识:zhuanlan.zhihu.com/p/67455336

1 刷抖音互联网是如何交互的

这个过程中用到的协议:

  • 域名解析DNS
  • 视频下载/HTTP
  • 图片下载/HTTP
  • 评论API/HTTP

- 网络接入

路由
什么是路由?简单地说,主机A发送数据给主机B时,在网络上要经过一系列设备(包括终端,路由器等),在这一过程中寻找到一条从主机A到主机B的最佳路径并发送数据,就称为路由
  • 路由发包:
    • 同网段:配置网段即可默认添加静态路由。
    • 跨网段:配置网关路由。
  • 路由一定是对称的吗?
    • 不一定。可以是网状的。

capture_20220522213346204.bmp

  • 路由工作在哪一层?
    • 网络层吗?也不一定。路由的过程中会用到很多协议,有些协议(如OSPF协议)就工作在传输层。
  • 路由更改的是IP地址吗?
    • 不是,目标IP地址一直都是不变的。路由更改的是MAC地址。通过链路层修改MAC地址,每经过一个设备,源MAC和目的MAC都会修改。
  • 动态路由
ARP协议

ARP(Address Resolution Protocol),地域解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。ARP协议的基本功能就是通过目标设备的IP地址查询目标设备的MAC地址,以保证通信正常进行。 更详细的内容可以参考:blog.csdn.net/qq_48391148…

ARP协议只能在一个网络或者一段链路中使用,而不能跨网段使用。 但是ARP协议可以逐段链路来获取。

  • 逻辑同网段才可以使用ARP协议
    • 可以通过逐段链路来获取
  • 通过广播方式进行请求,应答单播
  • 免费ARP
    • 免费 ARP(Gratuitous ARP)包是一种特殊的 ARP 请求,它并非期待得到 IP 对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP 请求,即请求自己的 IP 地址的 MAC 地址。
    • 作用:三个方面
      • 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
      • 可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。
      • 可用于更新其他主机的 ARP 缓存表。如果该主机更换了网卡,而其他主机的 ARP 缓存表仍然保留着原来的 MAC 地址。这时,可以发送免费的 ARP 数据包。其他主机收到该数据包后,将更新 ARP 缓存表,将原来的 MAC 地址替换为新的 MAC 地址。
  • ARP代理
    • 如果ARP请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理ARP功能的设备就可以回答该请求,这个过程称作代理ARP(ProxyARP)。
  • ARP本质上是查找下一跳的MAC,不是请求目标地址!
IP协议
  • 唯一标识,互联网通用。抖音客户端一个,抖音服务端一个。
  • 可以用MAC地址代替IP地址吗?
    • MAC协议是二层的,二层也有很多协议,很多设备不支持MAC地址,有一个向下兼容问题。
  • IPv4不够用,一般怎么解决?
    • IPv6
    • NAT
NAT

详细介绍:blog.csdn.net/Liangheng32…

  • 家里的路由器是怎么上网的?
    • 路由器存在一个外部IP地址,所有的用户通过这个IP地址向外部发送数据。
  • 多个内网客户端访问同一个目标地址+端口,源端口恰好一样,是否冲突?
    • NAT不仅仅会改变IP,也会改端口,当源端口一样时,会在NAT设备上维护一张表映射到不同的端口。

- 网络传输

数据包和数据包发送

capture_20220522221035195.bmp

数据由上至下一层层包装,通过物理层传到目标设备后由下至上解包。

请求DNS

capture_20220522221429200.bmp

  • 客户端发送www.douyin.com的解析请求
  • 递归解析器去问".",com去哪里解析
  • 递归解析器去问"com.",douyin.com去哪里解析
  • douyin.com告诉递归解析器解析到XXX
UDP
  • UDP本身相对简单,想发什么包,就分配一个UDP头,把payload里面塞数据就好。
  • UDP用好很难
    • 发包每次发多少?怎么避免分片?
      • 为什么要避免分片?分片要考虑重组,分片和重组要消耗CPU资源
    • 怎么知道没丢包?
    • 怎么权衡传输效率和质量? ……
TCP
  • 三次握手

capture_20220522224818276.bmp

capture_20220522224859008.bmp

  • 拔了网线,连接会断吗?
  • TCP有限状态机

capture_20220523122109716.bmp

  • time_wait产生原因、危害和如何避免TCP面试常见题:time_wait状态产生的原因,危害,如何避免_libaineu2004的博客-CSDN博客_time_wait
  • 滑动窗口
    • TCP利用滑动窗口实现流量控制的机制。
    • 滑动窗口的大小意味着接收方还有多大的缓冲区用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。
  • 拥塞控制
    • 为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd)  的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
    • TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
HTTP/HTTP1.1

其实HTTP只是多加了一层规矩。HTTP依然是TCP,只是这个规矩让用户更清晰/更简洁。

  • HTTP1.1的优化?
    • 长连接
    • 部分传输
    • HOST
    • 缓存
HTTPS
  • HTTPS解密出来仍然是HTTP
  • 混合加密算法
    • 对称加密算法
    • 非对称加密算法

2 网络架构如何给抖音提质

HTTP/HTTP2.0
  • HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语义兼容的基础上,进一步减少了网络的延迟。实现了低延迟高吞吐量。
  • HTTP2.0主要基于SPDY协议
  • SPDY是Speedy的昵音,意为“更快”。它是Google开发的基于TCP协议的应用层协议。目标是优化HTTP协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载时间并提高安全性。SPDY协议的核心思想是尽量减少TCP连接数。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。
  • SPDY强制SSL
多路复用/stream

capture_20220522234816040.bmp

  • 服务器可以对一个客户端的请求发送多个相应,如上图 仍然是单个TCP传输 ,stream1,2,3本身仍是串行发送,网络速度足够快时,在上层http眼里相当于并行传输
  • TCP的队头阻塞没有彻底解决,http2.0中,多个请求是跑在一个TCP管道中的,一旦丢包,TCP就要等待重传(丢失的包等待重新传输确认),从而阻塞该TCP连接中的所有请求
QUIC/HTTP3.0
  • 为解决HTTP2.0上述的TCP问题而生
  • QUIC不是四层协议
  • QUIC是一套基于UDP的传输协议
  • 选择在用户态(Userspace)
  • 0RTT
  • 弱网优势

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

网络提速

数据中心分布

capture_20220523001817174.bmp

  • 数据中心:服务器集合
  • 核心机房:存放核心数据
  • POP接入:和外网进行交互的出入口
  • 边缘机房:更靠近用户而不是核心
同运营商访问
  • 访问同运营商的机房
    • 针对中国互联网现状,三大运营商跨网的质量比较差
    • 解析 得到客户端IP,解析到对应运营商
静态资源(图片视频)路径优化(CDN)
  • 本质就是缓存 在边缘机房里做缓存
动态API(播放/评论接口)路径优化(DSA)
  • 在各机房做网络延时探测,把探测的数据做成一张表,再根据相关算法得到最优路径 capture_20220523133833090.bmp

网络稳定

容灾
  • 故障发生——故障感知——自动切换——服务恢复
故障排查
  • 故障明确——故障止损——分段排查
故障止损
  • 先止损再排查
    • 用户体验第一
    • 对公司影响是按照分钟甚至秒来计算
  • 如何止损
    • 组件没有容灾,但是系统有没有?
    • 降级
分段排查
  • 客户端排查
    • 客户端访问其他服务有没有问题
    • 其他客户端访问服务有没有问题
  • 服务端排查
    • 服务端监控/指标是否正常
    • 手动访问正常吗
    • 分组件排查
  • 中间链路排查
    • 中间网络设备有没有问题?(交换机/路由器/网关LB)
    • 旁路的DNS有没有问题
常见排查命令
  • dig查询DNS问题
  • ping/telnet/nmap查询三层/四层连通性
  • Traceroute排查中间链路
  • iptabels
  • tcpdump