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

143 阅读5分钟

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

本节课程主要是以刷抖音时的底层互联网交互作为切入点,梳理了计算机网络的相关知识,并结合实际生产环境理解网络的优化方向和稳定性建设。主要包括四个部分:

  1. 网络接入协议
  2. 网络传输协议
  3. 网络优化
  4. 网络稳定

网络接入协议

网络接入涉及的相关内容有:互联网、路由、ARP协议、IP协议、NAT等。

路由

可以做同网段路由,也可以做跨网段路由。配置路由的命令是:

to 10.0.1.1/24 via 10.0.0.254 default via 10.0.0.254

路由不一定是对称的,路由的节点也可以是网状的。 路由工作协议层不一定只是在网络层,也可能工作于传输层,甚至向下四层。路由通过改变mac地址(源mac、目标mac),目标ip地址不变,找到发包口

ARP协议

如何找下一跳的mac地址?

ARP本章上是查找下一跳的mac地址,而不是目标mac地址。 只有逻辑同网段才能发送ARP。

ARP请求广播(不能跨网段),ARP应答单播

免费ARP:不需要发送请求广播就可以告诉mac地址。主要的应用一种是用于IP地址冲突检测,二是用于更新ARP地址缓存表中的原有记录。 网络中接入新的设备时,发送一条ARP消息,让其他设备更新mac表,添加新设备的mac地址。防止ip冲突(两台服务器配置了同一个ip)

IP协议

ip地址是互联网设备的唯一标识。

不使用mac地址代替ip地址的原因是:网络协议层是向下兼容的,二层网络除了mac地址还有其他协议地址。为了统一不同协议,所以在上层用ip地址统一。

ipv4不够用的解决方式:使用ivp6,nat。

NAT

NAT,网络地址转换:内网用户通过设备,修改源地址,内部ip地址可重复,连接到互联网的外部ip地址是唯一的,将不同地址影视到同一个地址,压缩ipv4地址的使用。

NAT是同时改变目标地址和端口,解决了多个内网客户端访问同一个 ip+port, 源端口恰好一样,会发生冲突的情况。

网络传输

请求DNS

  • 客户端发送解析域名的请求
  • 递归解析器(根、顶级、域名)

DNS的传输协议UDP

UDP本身相对简单:想发什么包,就分配一个UDP的header,payload中填写数据发送即可,如何保证协议可靠:

  • 发包每次发多少?怎么避免分片?MTU,IP分片
  • 怎么知道没丢包?
  • 怎么权衡传输效率和质量?

TCP三次握手

在已建立TCP连接后,把了网线,连接会中断吗?两者之间无强耦合关系。如果建立的TCP连接有探活功能,定期检查连接是否还保持着。如果没有收到ack包,则说明连接断开了。 通过mss判断是否分片

TCP传输

  • sequence number:表示发送方packet的数据部分的第一位在整个data stream的所在位置。
  • acknowledge number:表示期望接收方的下一次sequence number是多少。注意,虽然SYN/FIN传输无data,但是会让下一次传输的packet seq增加一;但是,ACK的传输,不会让下一次传输的packet seq加一。

TCP的有限状态机

  • 为什么老问你Timewait?2个msl。确认连接正常关闭,防止前一次ack丢失,可能会异常关闭连接。
  • 丢包怎么办?ACK重传的机制。
  • 滑动窗口再结合基础概念(seq,ack)去理解。
  • 流量控制/拥塞控制结合基础概念(seq,ack)去理解。

HTTP/HTTP1.1

为什么不直接用TCP通信?HTTP是分层协议,TCP本身负责的协议已经非常多了。HTTP更关注业务、代码逻辑,而不用考虑协议具体的实现,做好了交互的原则。

为什么互联网上有那么多HTTP通信? HTTP1.1有哪些优化?长连接,部分传输,HOTS,缓存

HTTPS

对HTTP加密,采用SSL/TLS 握手(对称加密和非对称加密)和CA。

网络提速

HTTP2.0

多路复用:在一个TCP连接上同时进行多个HTTP,TCP复用。

怎么理解多路复用/stream?

  • 单个TCP连接传输
  • 如果TCP丢包怎么办?队头阻塞

QUIC / HTTP3.0

  • UDP
  • Userspace(用户态)
  • 0 RTT
  • 弱网优势 优化HTTP2.0,解决队头阻塞的问题

数据中心分布

服务器部署的地方

  • 核心机房:核心数据、数据库
  • POP点接入:与外网、运营商交互
  • 边缘机房:更靠近用户的运营商机房

静态资源(图片视频)路径优化(CDN)

不随着api请求的改变而改变的资源。

核心思想: 缓存资源。先在“边缘机房”找资源,如果之前有其他客户端访问过就会缓存在边缘机房;如果没有,则再在“汇聚机房”、“核心机房”找。

动态api(播放/评论接口)路劲优化(DSA)

不同客户端调用api接口得到的资源不同。

核心思想: 根据各相邻机房的网络时延表,得到最短时延的路径

网络稳定

容灾概念

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

故障排查

  • 故障明确
  • 故障止损
  • 分段排查

网络故障排查常用命令

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