介绍
抖音,是由字节跳动孵化的一款音乐创意短视频社交软件。如今,抖音已成为各年龄段人们手中消磨时间的applet,我们可以用它看推送的短视频、点赞评论收藏喜欢的视频、也可以发送自己的日常。这是一个非常好的社交平台,彰显了当今社会快节奏的生活状态,也显现出新一代年轻人的娱乐方向和生活态度。随着抖音applet的上线及更新,它推送出更多的贴纸以及功能供大家使用,更加便利且满足了大家的需求。
那么,对于我们开发者而言,抖音是如何被开发出来的、它的框架结构又是怎样的?今天我们就来探讨探讨,剖析其中的奥秘所在。
框架
我们从以下两个大方面进行剖析。
一、刷抖音网络是怎样交互的?
交互的实现分为网络接入 和网络传输两个部分。
网络接入
我们从互联网 、路由 、ARP协议 、IP协议 、NAT导入。
互联网
图片里面的是互联网的大框架图。
左边的是各个终端,包括PC、pad等,当下通常通过wifi、4G、5G网络进行接入;再通过有线网络接入各个运营商的网络,包括移动、电信等。接着再接入抖音。
中间的网络等基本不会出现错误,除非是丢包等,这个就属于故障了。
路由
同网段接入:
SDN网络虚拟化,跨了两个交换机,看起来像是跨网段的,但其实是同网段的。
- 同网段并不一定是接入一个同物理逻辑交换机的,有可能是软件定义网一个虚拟的同网段。
跨网段接入:
两个不同的服务器通过中间的路由进行连接。
- 路由不是对称的!!!
- 路由是工作在IP层协议的!!!
- 路由不是改IP地址的,是改Mac地址的!!!
ARP协议
逻辑同网段才可以发送ARP,之所以这样,是因为同网段情况下才可以找到请求的目标MAC。
- ARP本质上是查找下一跳的MAC,不是请求目标地址!
IP协议
- IP协议是唯一标识,在互联网中通用。抖音客户端一个且服务端一个。
- IP地址不能用MAC地址来代替。(对于这个点比较懵圈)
- IPv4不够用时,用IPv6进行扩充。
NAT
NAT上网原理: 家里的路由器本质上是NAT。
网络传输
我们从数据包 、请求DNS 、DNS的传输协议UDP 、TCP三次握手 、TCP传输 、SSL/TLS握手导入。
数据包
首先我们来了解一下数据包的导入代码,并且学习一下代码的格式。
js
struct pkt{
something
}
void send_one_pkt()
{
p = malloc(sizeof(pkt))
p = append(p, siezoef(l2))
p = append(p, siezoef(l3))
p = append(p, siezoef(l4))
send(p)
}
客户端发到服务器的完整路径👇 由图片可得出,message的经过有三个层次,分别是User space(用户空间)、Kernel space(内核空间)、Hardware(硬件)。而OSI模型和TCP/IP模型在三层次对应的层类型也有所区别。相对而言,TCP/IP的层次更为简洁。应用的客户端和应用的服务器端分别对应着源机器、目的机器,这两个属于硬件方面的内容。
请求DNS
客户端和服务端及客户端和递归解析器之间的联系👆 请求DNS的步骤如下:
- 客户端发解析请求*www.douyin.com*
- 递归解析器去问".",com.去哪里解析
- 递归解析器去问"com.",douyin.com去哪里解析
- douyin.com告诉递归解析应该解析到xxx
DNS的传输协议UDP
UDP本身相对简单,但想把它用好却很难,需要考虑很多方面的因素。
- 用好它的一个重要的点:想发什么包就分配一个UDP的头,把payload里面塞数据发出去就行!
TCP三次握手
-
TCP是OSI层中的传输层协议,用于通过传输和确保通过支持网络和Internet传递消息来在远程计算机之间创建连接。
-
拔了网线,TCP 连接会断开;如果重新再插上,TCP 连接会重新建立。
-
所谓的"三次握手":为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。
三次握手图解👇
TCP传输
典型的tcp协议要求每一个数据段发送之后都要有一个ack回复,然后才能发送下一个数据段,虽然这样能保证数据的可靠传输,但是效率呢?由于tcp是全双工通信,在等待一个数据段的ack恢复之前网络将会闲置,因此效率将会受到极大影响,因此协议提出滑动窗口子协议,专门负责数据的传输,滑动窗口子协议分为简单的停-等协议,后退N协议,以及选择重传协议三个子子协议,其实三个子子协议可以由一个例程表示,只是一个例程的三个不同情况,比如发送和接受窗口都为1时就是简单的停等协议。三个子子协议都很复杂,只有靠这种复杂的机制才换取了网络链路的高效利用。
SSL/TLS握手
对称加密(上)和非对称加密(下)👆
(๑•̀ㅂ•́)و✧这种加密确保用户的信息安全,有效阻隔了黑客盗窃信息的行为。
二、网络架构怎么给抖音提质?
提质分为网络提速 和网络稳定两个部分。
网络提速
我们从协议优化 和路径优化导入。
协议优化
启用HTTP2.0实现多图并发下载的功能,自然提速了网络👇
路径优化
以数据中心分布为例,多路径同时进行,提高网络的运行速度,增强用户的体验感。
网络稳定
-
维护网络稳定,首先我们需要有容灾概念,过程为故障发生、故障感知、自动切换、服务恢复。
-
在故障排查中:
-
- 明确出现的是什么故障,例如:是什么接口的故障、主要体现在哪里、是否是修改导致的异常等。
-
- 及时故障止损,需将用户的体验放在第一位。
-
- 进行分段排查,分为客户端排查、服务端排查、中间链路排查,一步步跟进。
👉网络故障排查常用命令:dig查询DNS问题、ping/telnet/nmap查询三层/四层连通性、Traceroute排查中间链路、iptabels、tcpdump。
总结
抖音的架构很奇妙。在这节课中我们了解了抖音applet的开发和架构,对我们进一步的学习提供了良好的思路。在抖音框架的基础上,我们更全面地了解到一个产品的开发进程以及优化方案,这是非常关键的一步。