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

51 阅读9分钟

熟悉TCP/IP,计算机网络

刷抖音:域名解析/DNS、图片下载/HTTP、视频下载/HTTP、评论API/HTTP

这里的HTTP指的是泛HTTP,QUIC,HTTP1.1,HTTP2,HTTP3呐

刷抖音网络怎么交互?

刷抖音怎么又快又稳?

image-20230802195344993.png

1. 网络接入

1.1 路由

简单地说,主机A发送数据给主机B时,在网络上要经过一系列设备(包括终端,路由器等),在这一过程中寻找到一条从主机A到主机B的最佳路径并发送数据,就称为路由。

路由发包原理:

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

路由一定是对称的吗?不一定,是网状的,两台主机在通信时走的链路很有可能不相同。

路由工作在哪一层协议?网络层(ip地址),但也未必。路由的过程中会用到很多协议,不一定全部工作在网络层。比如OSPF协议(开放式最短路径优先,Open Shortest Path First,OSPF)就工作在传输层。

开放式最短路径优先(Open Shortest Path First,OSPF)是广泛使用的一种==动态路由协议==,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。但如果使用时不结合具体网络应用环境,不做好细致的规划,OSPF协议的使用效果会大打折扣,甚至引发故障。

路由是改ip地址吗?不是。路由是改mac地址,找到发包口。在报文发送过程中源ip地址和目标ip地址是不会改变的。那发送过程中怎么找到下一跳呢?是通过链路层修改mac地址,每经过一个设备,源mac和目的mac都会修改

动态路由BGP/OSPF等协议寻找。

1.2 ARP协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

逻辑同网段才能发送ARP:

  • 先找到下一跳,再发送ARP,不断迭代
  • 广播不能跨网段

ARP请求广播,ARP应答单播,回应的时候只给发送ARP的主机回复。

免费ARP?ARP代理?

  • 免费ARP:简单来说,当一个新的mac进入一个网段时,通过一个广播的ARP,告诉网段内其他节点自己的存在。
    • 该类型报文起到一个宣告作用,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
    • 可用于检测 IP 地址冲突。
    • 可用于更新其他主机的 ARP 缓存表。
  • ARP代理:类似于我们开vpn,存在一个代理,劫持本来的ARP,发往另一个地方,以达到某个目的。

1.3 IP协议

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

Mac地址不能代替IP地址吗?存在不适用mac地址的网络设备,通过ip协议进行了一次封装,进行了地址的统一。

IPv4不够用?IPv6、NAT。

1.4 NAT

查看家里设备的ip地址一般都是192.168.xxx.xxx,称为内部地址。而路由器存在一个外部ip地址,所有的内部用户通过这个ip地址向外部发送数据。

多个内网客户端访问同一个目标地址+端口,源端口恰好一样,是否冲突?NAT不仅仅改ip,而且改端口,源端口一样时,会在NAT设备上维护一张表,映射到不同的端口。

image-20230801155829601.png

2. 网络传输

2.1 数据包

数据从上到下层层封装,最后通过物理链路进行传输,传输至目标设备后,在从下至上解包

image-20230801161916710.png

2.2 DNS

将域名转换为IP地址

image-20230801162108069.png

2.3 UDP

image-20230801162125013.png

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

UDP用好很难:

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

    分片:在数据链路层可传送的帧的大小有限制,称为MTU,如果传输的数据超过了这个大小,就需要分片

  • 怎么知道没丢包?UDP不保证可靠交付,维护传输可靠性的工作在应用层完成。

  • 怎么权衡传输效率和质量?UDP的使用场景更强调实时性,可以接受一定程度的数据丢失,不允许较大的时延。延迟是衡量UDP传输质量的重要指标。

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

2.4 TCP

image-20230801162411082.png

TCP通过MSS来限制分片。

MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度

TCP在建立连接时,收发双方根据MTU计算出各自的MSS,通过三次握手把自己的MSS告知对方,互相确认彼此的MSS大小,取较小的MSS值作为双方在TCP层分段的最大payload。MSS位于TCP报文的可选段(option)。

三次握手示意图:

image-20230801162451377.png

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

  • 打个比方,一个分片的seq=1,大小为100,那么下个分片就是101

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

  • ACK通过期望收到的序列号提供一种确认机制
  • 这个传输packet加1我不是很理解什么意思。主要是理解这个传输中seq和ack是怎么变化的就好了我觉得,ack表示的就是一个确认,期望收到哪一个序列,发送方给他发送过去。如果没有按序受到,就会一直返回没按序受到的那个序列号。

TimeWait:需要等两倍的msl,以确保连接正常关闭,防止前一次的ack丢失。

理解TimeWait需要引入MSL 最长报文寿命的概念

TCP面试常见题:time_wait状态产生的原因,危害,如何避免

TCP丢包问题:TCP采用累积确认,发送一个报文超过一定时间接不到确认重新发送。

滑动窗口:解析TCP之滑动窗口(动画演示)这个解析的动画很直观

流量控制和拥塞控制:建议仔细阅读教材,都是比较基础的知识点。

【计算机网络】TCP的流量控制和拥塞控制

  • 流量控制主要通过滑动窗口实现,抑制发送端发送的速率,以便接收端来得及接收。
  • 拥塞控制是全局的过程,目的是让网络能够承受现有的负荷。慢开始和拥塞避免、快重传和快回复是拥塞控制的主要算法。

2.5 HTTP/HTTP1.1

HTTP依然是TCP多加了一层规矩,依然是TCP,为了让我们更加关注业务本身而不是实现细节。

HTTP1.1的优化:

  • 长连接:连接一直保持,不需要每次post/get请求都重新建立连接。
  • 部分传输
  • HOST
  • 缓存

HTTPS:一种加密协议,解密出来依然是HTTP

  • SSL/TLS握手:通过第三方的CA进行非对称加密!

image-20230801163051846.png

3. 网络提速

3.1 HTTP2.0

主要思想:多路复用,多图并发下载,串行和并行的区别,大大传输提高效率,在一个tcp链接上跑多个http。

image-20230801170601550.png

仍是单个tcp链接传输,stream1,2,3本身仍是串行发送,网络速度足够快时,在上层http眼里相当于并行传输。

丢包怎么办?队头阻塞,一旦丢失一个包,后面的包全部要等待,直到丢失的那个包重新发送,后面的包才可以继续发送。这种形式会大大影响速率。

3.2 QUIC/HTTP3.0

对HTTP2.0的多路复用进行了优化,解决了对头阻塞的问题:

  • TCP or UDP?TCP复杂度高,难以修改,选择基于UDP
  • Kernel or Userspace?选择在用户态(Userspace)
  • 0 RTT
  • 弱网优势

3.3 数据中心提速

建立分层次的数据中心:

  • 核心机房:存放核心数据。 数量比较少。
  • pop接入:和外网进行交互的出入口。
  • 边缘机房:更靠近用户而不是核心。边缘机房比较多,基本每个省市都有。

image-20230802192700624.png

运营商跨网质量比较差,可以让移动的用户访问移动机房,电信的用户访问电信的机房,通过ip解析来识别用户的运营商。这个是中国互联网的现状。

3.5 路径提速

静态资源路径优化(CDN)

  • 静态资源:大家刷到的都一样,像图片视频,不会随api的改变而改变。

  • CDN:缓存。先访问边缘机房,查看有没有对应数据的缓存,有就直接返回,没有就继续访问汇聚机房、核心机房。

动态API路径优化(DSA):通过探测隔壁机房的延时寻找最优路径。

4. 网络稳定

4.1 容灾

故障发生 -》故障感知 -》自动切换 -》 服务恢复

案例一:外网容灾,内网专线

image-20230802193752724.png

案例二:故障感知,自动切换

image-20230802193912781.png

案例三:云控,主动降级

image-20230802194046010.png

案例四:服务降级,显示cache文件

image-20230802194222403.png

4.2 故障排查

故障明确 -》 故障止损 -》 分段排查

故障明确:什么业务?什么接口?其他目标是否正常?

故障止损:先止损,再排查。如何止损?组件有没有容灾?系统有没有容灾?降级。

分段查询:客户端排查、服务端排查、中间链路排查

网络故障常用指令:

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

案例一:健康检查异常

image-20230802194932113.png

案例二:客户端个别用户异常

image-20230802194953360.png

案例三:

安徽电信报障某APP无法使用 -》检测后端服务正常,安徽电信流量突降 -》安徽电信客户端ping不通目标服务 -》电缆被挖断

image-20230802195018027.png

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

image-20230802195150005.png