Douyin架构分析 | 豆包MarsCode AI刷题

3 阅读17分钟

抖音网络交互原理

抖音网络交互的基本过程

  1. 网络接入

    • 首先,手机要能上网才能玩抖音。这就好比你要出门去一个地方,得先找到路一样。网络接入有两部分,一个是连接到互联网,另一个是找到正确的路线,也就是路由。
  2. 网络传输

    • 当手机能上网了,它就可以和抖音的服务器互相传数据了。比如说你想看个视频,手机就得去服务器把视频拿过来。

网络接入 - 互联网

  1. 运营商网络

    • 手机可以通过中国联通或者中国电信的网络上网。这就好比出门可以选择走不同的路。联通和电信的网络都有自己的服务器(机房),也和美国的网络连接。手机可以通过 Wi - Fi 或者光纤连接到这些网络。就像可以坐公交车(Wi - Fi)或者坐地铁(光纤)去你想去的地方。
  2. 网络接入 - 路由

    • SDN(软件定义网络)

      • 那什么是 SDN 呢?简单说就是一种聪明的网络管理方法。当手机和服务器在同一个网段(就像住在同一个小区)要互相发东西(比如发个包裹)的时候,就靠 SDN 来指挥。它通过一些叫交换机和服务器的东西来安排数据怎么跑。
    • 路由的原理

      • 路由不一定是对称的,好比去一个地方的路和回来的路可能不一样。
      • 路由是在网络层协议工作的,这就像是在一个大的规则下工作。
      • 路由靠 IP 地址和 Mac 地址来实现。IP(Internet Protocol)地址是分配给网络上每台设备的数字标签,用于在互联网或局域网中唯一标识该设备。- 当数据在网络中传输时,IP 地址用于确定数据的源和目的地。就像寄信时需要收件人和寄件人的地址一样,IP 地址确保数据能够准确地从发送方到达接收方,- 网络中的路由器根据 IP 地址来决定数据的转发路径。路由器会查看数据包中的目的 IP 地址,并依据其路由表决定将数据包发送到下一个节点,最终将数据传送到正确的目的地。Mac(Media Access Control)地址是网络接口卡(NIC)的唯一标识符,它是由设备制造商分配的、固化在硬件中的地址。- 在局域网(LAN)环境中,当数据包在本地网络段内传输时,Mac 地址用于直接定位目标设备。例如,当一台计算机要发送数据给同一局域网内的另一台计算机时,它会使用目标设备的 Mac 地址来确保数据准确到达。- 路由器在处理数据包时,会根据目的 IP 地址来查找下一跳的路由信息,同时也会使用 Mac 地址在本地网络段内将数据包传递到下一个设备。在这个过程中,路由器会进行 IP 地址到 Mac 地址的转换(例如通过 ARP 协议),以确保数据包能够顺利地在网络中传输。
        • 动态路由协议是网络设备(如路由器)之间用于交换路由信息的协议。这些协议允许路由器自动学习网络拓扑结构的变化,并相应地更新其路由表。动态路由像 BGP、OSPF 这些,就像是不断更新的地图,告诉你怎么走最快。

网络传输

  1. 抖音数据交互

    • 手机和抖音服务器之间传数据是靠 HTTP 协议。这就像两个人说话得用同一种语言一样。比如说你要下载视频、图片,或者看评论,都得用这个协议。
    • 比如你想看一个视频,手机就会用视频下载 / HTTP 请求去抖音服务器那里把视频拿过来。就像你跟服务员说你要一盘菜,服务员就给你端过来一样。

网络打通了怎么视频怎么下载?

  • 当网络连接建立后,视频下载主要依赖于 HTTP 或 HTTPS 协议。用户在客户端(如浏览器或视频应用)点击下载按钮时,客户端会向视频所在的服务器发送一个 HTTP/HTTPS 请求。这个请求包含了客户端想要获取视频文件的信息。服务器收到请求后,会将视频文件按照一定的规则(如分段传输)发送给客户端,客户端再将接收到的视频数据存储在本地设备上,从而完成视频下载的过程。

网络传输 - 数据包

  • OSI 七层网络模型

    • 应用层(Application) :这是最接近用户的一层,为用户提供网络服务,如 HTTP、FTP 等协议就在这一层工作,负责处理用户的数据请求和响应。
    • 表示层(Presentation) :主要负责数据的格式转换、加密和解密等操作,确保不同系统之间能够正确地理解和处理数据。
    • 会话层(Session) :负责建立、管理和终止会话,控制不同应用程序之间的数据交换,例如在远程登录中保持连接的稳定。
    • 传输层(Transport) :提供端到端的通信服务,包括 TCP 和 UDP 协议。TCP 保证数据的可靠传输,而 UDP 则更注重传输效率。
    • 网络层(Network) :负责将数据从源节点传输到目标节点,主要通过 IP 协议实现寻址和路由选择,确保数据包能够在不同网络之间正确转发。
    • 数据链路层(Data Link) :将物理层传来的原始比特流组合成帧,并进行差错检测和纠正,同时通过 MAC 地址实现局域网内的寻址。
    • 物理层(Physical) :处理物理介质上的比特流传输,包括电缆、光纤、无线等物理介质的电气特性和机械特性。
  • TCP/IP 四层概念模型

    • 应用层:包含了 OSI 模型中的应用层、表示层和会话层的功能,是用户与网络交互的接口。
    • 传输层:与 OSI 模型中的传输层功能相同,负责端到端的数据传输。
    • 网络层:与 OSI 模型中的网络层功能相同,实现网络间的寻址和路由。
    • 网络访问层:包含了 OSI 模型中的数据链路层和物理层的功能,负责在物理介质上进行数据传输。
  • 对应网络协议

    • 在每一层都有相应的网络协议来实现其功能,例如在应用层有 HTTP、FTP、SMTP 等协议,在传输层有 TCP 和 UDP 协议,在网络层有 IP 协议,在数据链路层有以太网协议等。

网络传输 - 数据包发送

  • 客户端到服务器的 message 经过的完整路径

    • 用户空间(User space) :应用程序在这里运行,当用户发起数据请求(如发送消息)时,请求首先在用户空间产生。
    • 内核网络协议栈(Kernel space) :数据从用户空间进入内核空间,在这里经过 TCP/IP 协议栈的层层处理,包括封装、分段、添加头部信息等操作,以便在网络中传输。
    • 硬件(Hardware) :经过内核处理的数据最终通过网络接口卡(NIC)等硬件设备发送到网络中,在物理介质上以比特流的形式传输。
  • OSI 模型与 TCP/IP 模型的对应关系

    • 应用层(L7) :对应于 TCP/IP 模型中的应用层,是用户与网络服务交互的地方。
    • 表示层(L6) :主要负责数据的格式转换和加密等操作,确保数据在不同系统间的兼容性。
    • 会话层(L5) :负责管理会话,确保通信的有序性和可靠性。
    • 传输层(L4) :在这一层通过 TCP 或 UDP 协议实现端到端的数据传输,保证数据的可靠或高效传输。
    • 网络层(L3) :负责网络间的寻址和路由,通过 IP 协议将数据包从源地址发送到目的地址。
    • 数据链路层(L2) :将网络层传来的数据封装成帧,并通过 MAC 地址在局域网内进行传输。
    • 物理层(L1) :处理物理介质上的比特流传输,是网络通信的最底层基础。

网络传输 - 先请求 DNS

  • 客户端请求解析流程

    • 客户端发www.douyin.com的解析请求:当用户在浏览器中输入网址时,客户端首先需要知道该网址对应的 IP 地址,因此会向本地 DNS 解析器发送一个解析请求。
    • 递归解析器去问 ".", com. 去哪里解析:本地 DNS 解析器(递归解析器)收到请求后,它不知道www.douyin.com的 IP 地址,所以它会从根域名服务器(.)开始查询,询问.com 域名的顶级域名服务器在哪里。
    • 递归解析器去问 "com.", douyin.com去哪里解析:得到.com 顶级域名服务器的地址后,递归解析器会向.com 顶级域名服务器询问douyin.com的权威域名服务器地址。
    • douyin.com告诉递归解析:在找到douyin.com的权威域名服务器后,权威域名服务器会返回www.douyin.com对应的 IP 地址给递归解析器。
    • www.douyin.com解析到 xx:最后,递归解析器将得到的 IP 地址返回给客户端,这样客户端就知道了www.douyin.com对应的 IP 地址,可以进行后续的网络通信了。
  • DNS 解析涉及的角色

    • 递归解析器:它负责接收客户端的解析请求,并在整个 DNS 系统中进行递归查询,直到得到最终的 IP 地址并返回给客户端。
    • 顶级域服务器:如.com、.net 等顶级域名服务器,它们知道对应域名下的权威域名服务器地址,负责引导递归解析器找到正确的权威域名服务器。
    • 权威服务器:每个域名都有自己的权威域名服务器,权威服务器知道该域名下具体主机名(如www.douyin.com)对应的 IP 地址,负责提供准确的解析结果。

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

  • UDP 协议结构

    • 16 位源端口号:用于标识发送数据的应用程序端口,便于接收方回传数据。
    • 16 位目的端口号:标识接收数据的应用程序端口,确保数据能够正确地到达目标应用程序。
    • 16 位 UDP 长度:指 UDP 数据报的总长度,包括头部和数据部分。
    • 16 位 UDP 检验和:用于检验 UDP 数据报在传输过程中是否出现错误,保证数据的完整性。
    • 数据(若有) :UDP 可以携带用户数据,数据长度取决于 UDP 长度字段减去头部长度。
  • UDP 使用难点

    • 发包每次发多少?怎么避免分片? :UDP 没有像 TCP 那样的流量控制机制,发送方需要自行决定每次发送的数据量。如果数据量过大,可能会导致在网络层进行分片,增加网络传输的复杂性和丢包的风险。为了避免分片,发送方需要了解网络的最大传输单元(MTU),并将数据量控制在 MTU 以下。
    • 怎么知道没丢包? :UDP 是无连接的、不可靠的传输协议,它本身不提供确认机制来保证数据的可靠传输。在实际应用中,如果需要保证数据不丢失,应用程序需要自己实现确认和重传机制,例如在一些实时视频流应用中,通过在应用层添加序列号和确认机制来检测和处理丢包情况。
    • 怎么权衡传输效率和质量? :UDP 以牺牲可靠性来换取传输效率,适合对实时性要求高但对数据准确性要求相对较低的应用,如在线游戏、视频直播等。在这些应用中,需要在传输效率和数据质量之间进行权衡。例如,在视频直播中,可以适当容忍一定程度的数据丢失以保证视频的流畅播放,但如果丢失过多,又会影响观看体验,因此需要根据具体应用场景优化 UDP 的使用。

网络传输 - TCP 三次握手

  • TCP 连接的基本概念

    • 什么是 TCP 连接? :TCP 连接是一种面向连接的、可靠的传输协议。在进行数据传输之前,通信双方需要通过三次握手建立连接。TCP 连接为数据传输提供了诸如确认、重传、流量控制和拥塞控制等机制,确保数据能够准确、有序地从源端传输到目的端。
    • 拔了网线,连接会断吗? :当物理连接(如网线被拔掉)中断时,TCP 连接会受到影响。在这种情况下,网络设备(如路由器)无法将数据包发送到目标设备,导致 TCP 连接的一方会检测到网络故障。根据 TCP 的机制,它会尝试重传数据,如果多次重传失败,TCP 连接最终会被判定为中断,并通知应用程序连接已断开。
  • TCP 三次握手过程

    • 通过 Tcpdump + Wireshark 分析:Tcpdump 是一个命令行工具,用于捕获网络数据包,而 Wireshark 是一个图形化的网络分析工具。使用 Tcpdump 捕获 TCP 三次握手过程中的数据包,然后在 Wireshark 中进行分析,可以清晰地看到三次握手的具体过程。在第一次握手时,客户端向服务器发送一个 SYN(同步)包,请求建立连接;服务器收到 SYN 包后,回复一个 SYN + ACK(同步 + 确认)包,表示同意建立连接并确认收到客户端的请求;最后,客户端收到 SYN + ACK 包后,再向服务器发送一个 ACK 包,确认服务器的回复,至此,TCP 连接建立成功。

网络传输 - TCP 传输

  • TCP 传输数据的关键参数

    • sequence number(序列号) :表示发送方发送的数据在整个数据流中的位置,用于接收方对数据进行排序和确认。发送方每次发送数据时,都会增加序列号,接收方通过确认序列号来告知发送方哪些数据已经成功接收。
    • acknowledgement number(确认号) :表示接收方期望接收的下一个数据包的序列号。接收方通过发送确认号来告诉发送方自己已经正确接收了哪些数据,发送方根据确认号可以知道哪些数据需要重传。
  • TCP 传输中的问题与解决

    • 为什么老问你 Timewait? :Timewait 是 TCP 连接关闭过程中的一个状态。当客户端或服务器主动关闭连接时,会进入 Timewait 状态。这个状态的主要作用是确保最后一个 ACK 包能够被对方正确接收,防止因网络延迟等原因导致的数据包丢失。在 Timewait 状态下,连接会等待一段时间(通常为 2 倍的最大段生存期,即 2MSL),以确保网络中不会残留未处理的数据包。
    • 丢包怎么办? :TCP 通过重传机制来处理丢包问题。当发送方发送一个数据包后,会启动一个定时器。如果在定时器超时前没有收到接收方的确认,发送方会认为数据包丢失,然后重新发送该数据包。同时,TCP 还采用了拥塞控制机制,根据网络的拥塞情况动态调整发送窗口大小,避免过多的数据注入网络导致丢包。
    • 滑动窗口再结合基础概念去理解:滑动窗口是 TCP 实现流量控制和提高传输效率的重要机制。发送方和接收方通过协商窗口大小来控制数据的发送和接收。发送方根据接收方的窗口大小来决定可以发送多少数据,接收方通过调整窗口大小来告知发送方自己的接收能力。滑动窗口机制允许发送方在收到确认之前发送多个数据包,提高了数据传输的效率,同时通过窗口大小的调整实现了流量控制。
    • 流量控制 / 拥塞控制结合基础概念去理解:流量控制主要是通过滑动窗口机制来实现的,确保发送方不会因为发送数据过快而淹没接收方。拥塞控制则是为了避免网络拥塞,TCP 通过监测网络的拥塞程度,如通过检测丢包率和往返时间(RTT)等指标,来动态调整发送窗口大小。当网络拥塞时,TCP 会减小发送窗口,减少数据发送量;当网络状况好转时,再逐渐增加发送窗口,提高数据传输效率。

网络传输 - HTTP/HTTP1.1

  • HTTP 与 TCP 的关系

    • 为什么不直接用 TCP 通信呢? :虽然 TCP 提供了可靠的端到端数据传输,但它是一种底层的传输协议,只负责数据的可靠传输,并不关心数据的内容和格式。而 HTTP 是一种应用层协议,它在 TCP 之上构建,定义了客户端和服务器之间交互的请求和响应格式,用于传输网页、图片、视频等超文本数据。HTTP 使得用户能够通过统一的方式(如 URL)访问互联网上的各种资源,并且提供了诸如缓存、认证等功能,方便了网络应用的开发和使用。
    • 为什么互联网上那么多 HTTP 通信? :HTTP 是万维网(WWW)的基础协议,由于互联网上大部分的应用都与网页浏览、资源获取相关,因此 HTTP 被广泛使用。它简单、易用,并且具有良好的扩展性,能够适应不同类型的网络应用需求。例如,各种网站、在线服务、移动应用的后台数据交互等都大量使用 HTTP 协议。
  • HTTP1.1 的优化

    • 长连接:HTTP1.1 引入了长连接(Keep - Alive)机制,允许在一个 TCP 连接上进行多次 HTTP 请求和响应的交互,避免了每次请求都需要重新建立 TCP 连接的开销,提高了网络传输效率。
    • 部分传输:支持部分内容传输,当客户端只需要获取资源的一部分(如视频流中的某一段)时,服务器可以只发送这部分内容,减少了不必要的数据传输。
    • HOST:在 HTTP1.1 中增加了 HOST 字段,使得一个服务器可以在同一个 IP 地址上托管多个域名的网站,提高了服务器的资源利用率。
    • 缓存:HTTP1.1 对缓存机制进行了优化,通过更灵活的缓存控制头(如 Cache - Control),客户端和服务器可以更好地协商数据的缓存策略,减少重复的数据传输,提高网络性能。

网络传输 - HTTPS

  • HTTPS 的作用与原理

    • 传输中被插入小网站怎么办? :HTTPS 通过 SSL/TLS 加密协议对 HTTP 数据进行加密传输,确保数据在传输过程中的保密性和完整性。当客户端和服务器进行 HTTPS 通信时,会先进行 SSL/TLS 握手,协商加密算法和密钥,然后在加密通道中传输数据。这样,即使数据在传输过程中被截取,攻击者也无法获取其中的内容,从而防止了传输过程中被插入小网站等恶意行为。
    • HTTPS 解密出来依然是 HTTP:HTTPS 实际上是在 HTTP 的基础上增加了一层 SSL/TLS 加密层。在服务器端接收到 HTTPS 请求后,首先会进行解密操作,将加密的数据还原为 HTTP 请求,然后按照 HTTP 协议的规则处理请求,并将响应数据再次进行加密后发送给客户端。客户端接收到加密的响应后,进行解密操作,得到 HTTP 响应数据,呈现给用户。因此,从应用层的角度来看,HTTPS 只是在 HTTP 的基础上增加了安全保障。