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

333 阅读7分钟

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

截屏2022-05-19 23.35.16.png

截屏2022-05-19 23.36.14.png

刷抖音网络是怎么交互的?

  • 网络接入
  • 网络传输

网络接入-互联网

截屏2022-05-19 23.37.05.png

网络接入-路由

截屏2022-05-19 23.41.10.png

往同网段如何发包/交互?

路由一定是对称的吗?

截屏2022-05-20 10.51.43.png

截屏2022-05-20 10.51.58.png

路由是工作在哪一层协议?

IP层,但是并不准确

那路由是改的IP地址吗?

不是,改的是Mac地址,做到发包口

截屏2022-05-20 10.52.53.png

动态路由BGP/OSPE等

怎么找到下一跳的MAC?

网络接入—ARP协议

  • 逻辑同网段才能发送ARP
  • ARP请求广播,ARP应答单播

截屏2022-05-20 10.53.43.png

跨网段是找下一跳再找ARP

ARP简介

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

1.MAC地址作用?是什么?

MAC地址就像身份证一样,用来证明身份的,长度为48bit,由12位的16进制数表示。

2.MAC地址分类

  • 1,物理MAC地址:全球唯一的硬件地址,这种MAC地址标识了唯一的以太网的一的一个终端。

  • 2,广播MAC地址:(全F)用来表示局域网(LAN)上的所有终端设备。

  • 3,组播MAC地址:第8位bit为1的MAC地址为组播MAC地址,用来表示LAN上的的一组终端。

3,MAC地址表是什么?作用?

mac地址表记录了交换机学习到的其他设备的mac与接口的对应关系,以及接口所属的vlan等信息。设备在转发报文时,根据报文的目的MAC地址查询MAC地址表,如果查到了,则根据表项的出接口转发该报文,如果没查到,设备将采取广播方式在所属vlan内除接收接口外的所有接口转发该报文。

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

网络接入-IP协议

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

MAC地址不能代替IP地址吗?

IP地址将二层的协议做了一个统一

IPv4不够用,一般怎么解决的?

NAT

网络接入-NAT

截屏2022-05-20 10.55.37.png

家里路由器是怎样上网的?

多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了?

NAT是IP+端口一起改变的,当有存在的连接的时候,端口选择另一个就行了

网络传输 - 数据包

截屏2022-05-20 10.56.16.png

网络传输 - 数据包发送

截屏2022-05-20 10.56.37.png

网络传输 - 先请求DNS

截屏2022-05-20 10.57.02.png

截屏2022-05-20 10.57.19.png

网络传输 - DNS的传输协议 UDP

UDP本身相对简单

截屏2022-05-20 10.57.43.png

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

UDP用好很难

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

  • MTU传输有限制,所以需要分片。因为影响效率,一旦分片要考虑重组;分片会消耗CPU计算资源,重组也会消耗计算机重组资源

怎么知道没丢包?

  • UDP里没有可靠的协议,丢包了也不知道

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

  • 用UDP去传输的话,就是怎么保证协议可靠

总结:怎么保证协议可靠?

网络传输 - TCP三次握手

TCP是什么?

  • TCP,全称传输控制协议(transmission Control Protocol)是位于传输层的重要协议,它最要的特点:面向连接 ,可靠面向字节流

什么是TCP连接?

拔了网线,连接会断吗?

  • 在一定场景会断开,但在一定场景又不会断开。主要看有没有TCP的保护

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

  • ①首先 Client 端发送连接请求报文

  • ②Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。

  • ③Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了

用川航举例子

  • ①四川8633请求建立连接(SYN),并且发送出序号。

  • ②服务端接受到信号,即有确认号(ACK),此时并同样返回请求序号Seq

  • ③客户端接受到信号,即有确认号(ACK),连接已经建立。

截屏2022-05-20 10.59.59.png

网络传输 - TCP传输

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

acknowledge number:表示的是期望的对方(接收方)的下一次sequence number是多少。注意:SYN/FIN的传输虽然没有data,但是会让下一次传输的packet seq增加一,但是,ACK的传输,不会让下一次的传输packet加一

截屏2022-05-20 11.00.45.png

截屏2022-05-20 11.01.04.png

为什么老问你Timewait?

  • timewait会占用客户端端口,会很拖累网络进程。

丢包怎么办?

  • ack机制,滑动窗口再结合基础概念去理解,流量控制/拥塞控制结合基础概念去理解

网络传输 - HTTP/HTTP1.1

为什么不直接用TCP通信呢?

  • TCP通信的东西已经够多了,HTTP本身还是TCP,但是它针对了不同的场景,做了一些优化,理解更加专业,不会有歧义

截屏2022-05-20 11.02.00.png

为什么互联网上那么多HTTP通信?

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

网络传输 - HTTPS

传输中被插入小网站怎么办?

  • HTTPS解密出来依然是HTTP

截屏2022-05-20 11.02.42.png

网络传输 - SSL/TLS握手

截屏2022-05-20 11.03.02.png

截屏2022-05-20 11.03.22.png

总结

截屏2022-05-20 11.03.45.png

网络架构怎么给抖音提质

  • 网络提速

  • 网络稳定

网络提速 - HTTP2.0

截屏2022-05-20 11.09.14.png

截屏2022-05-20 11.09.28.png

网络提速 - 怎么理解多路复用/stream?

截屏2022-05-20 11.09.47.png

单个TCP链接传输

如果TCP丢包怎么办?

  • 队头阻塞:一个丢包,结果就为了发送这一个包一直在重新发送,后面的包一直在等待

网络提速 - QUIC/HTTP3.0

截屏2022-05-20 11.10.43.png

TCP or UDP?

  • 改TCP复杂,不好改。UDP推广方便,好改

Kernel or Userspace

0 RTT

  • QUIC天然支持HTTPS协议,弱网传输优势:可以解决队头阻塞

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

网络提速-数据中心分布

截屏2022-05-20 11.11.22.png

核心机房:存储核心数据,数量少于POP接入

POP接入:和运营商、外网做交互,数量多,更增加和互联网交互的入口

边缘机房:更靠近用户,不是核心,专门针对小运营商

网络提速 - 同运营商访问

截屏2022-05-20 11.12.58.png

移动服务器不能访问电信服务器,稳定性差

网络提速-静态资源(图片视频)路径优化(CDN)

截屏2022-05-20 11.13.40.png

先在边缘机房访问搜索访问记录,有就直接下载,没有就汇聚机房;还找不到就去核心机房搜索。

CDN本质是静态缓存。

网络提速 - 动态API(播放/评论接口)路径优化(DSA)

最快方式:

截屏2022-05-20 11.23.22.png

算法寻找最优路径:DSA

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

网络稳定 - 容灾概念

截屏2022-05-20 11.23.58.png

故障发生

故障感知:系统感知到故障,或者客服反馈

自动切换:故障的节点或有问题的系统从容灾系统中去掉

服务恢复:自动回复

网络容灾的具体案例一

截屏2022-05-20 11.25.01.png

无专线可能会绕路连接,但是有专线则直达

网络容灾的具体案例二

截屏2022-05-20 11.25.48.png

网络稳定-故障明确

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

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

网络稳定-故障止损

先止损再排查

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

如何止损

  • 组件没有容灾,但是系统有没有?
  • 降级

网络稳定-分段排查

客户端排查

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

服务端排查

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

中间链路排查

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

网络稳定-网络故障排查常用命令

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

网络故障排查案例一

截屏2022-05-20 11.28.52.png

网络故障排查案例二

截屏2022-05-20 11.29.07.png

网络故障排查案例三

截屏2022-05-20 11.29.24.png

网络故障排查案例四

截屏2022-05-20 11.29.39.png

网络稳定-故障预防很重要

  • 监控报警

  • 故障演练/预案

  • 故障降级/止损

总结

截屏2022-05-20 11.30.12.png