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

212 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第10篇笔记, 本次课主要讲了计算机网络相关知识,包括网络接入,传输等。

一、刷抖音网络是怎么交互的

网络接入--互联网

  • 同网段不一定是在同一个物理交换机下,也有可能是用SDN做的虚拟网络

  • 同网段如何发包、交互

    • overlay?

网络接入--路由

路由一定是对称的吗

不是?

  • 用户A到用户H有很多路可以到达,所以不一定是对称的

路由是工作在那一层的

总体上是IP层,但是动态路由协议本身是传输层的协议。

路由是改的IP地址吗

不是改IP地址,是改MAC地址,IP地址始终不变,路由是为了找中间的路

  • 为什么要指定网卡

    • 不指定网卡不知道发包的位置

怎么找到下一层的MAC

ARP协议

网络接入-ARP协议

  • 发送广播,目标来响应
  • 逻辑同网段才能直接发送ARP
  • ARP请求广播,ARP应答单播
  • 免费ARP,ARP代理?
    • 局域网里面要新加机器,其他机器往新加的机器发包,效率比较慢,这里会使用免费ARP发包,告诉其他机器这里新增了机器

网络接入--IP协议

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

  • Mac地址不能代替IP地址吗?

    • MAC协议是二层的,有很多遗留的设备不支持MAC协议,要做一个向下兼容,统一起来
  • IPv4不够用,一般怎么解决的?
    • IPv6

网络接入--NAT

  • 家里路由器怎么上网(本质上就是NAT)

    • 内部用户通过NAT设备,改上网的源地址
    • 家里设备上网,都是使用路由器的IP上网
  • 多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了?

    • NAT不仅改IP,也改端口

网络传输--数据包

  • 练习:抓包

网络传输--数据发送

网络传输--先请求DNS

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

  • UDP协议本身相对简单

  • UDP用好很难

网络传输--TCP传输

ACK : 期望下一次接收到的序列号

TCP现有的状态机

  • 为什么要是问Timewait

  • 丢包怎么办

  • 滑动窗口的概念

  • 流量控制,拥塞控制

网络传输-HTTP1.1

为什么不用TCP通信

  • TCP做的东西已经够多了,HTTP只需要关注业务本身,不需要关注协议怎么实现
  • 其实HTTP只是多加了一层规矩,HTTP本质依然是TCP,只是让人更容易理解

网络传输-HTTPS

  • 非对称加密
  • 确保没有劫持,也确保私钥不泄密

二、网络架构怎么给抖音提质

网络提速-HTTP2.0

  • 多路复用:多个图一起请求,一起响应

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

  • 单个TCP连接阻塞
  • 如果TCP丢包怎么办
    • TCP队头阻塞,重传这个包,后面的包都要等待,等重传成功了,后面的才能继续
    • TCP优化:有一个option,只需要提供ACK序列号,只需要重传丢掉的,但是没有本质上解决这个问题

网络提速-QUIC/HTTP3.0

  • TCP or UDP?

    • TCP不可插拔,牵一发而动全身,使用UDP
  • Kernel or Userspace

    • 如果基于Kernel,考虑不同的操作系统是不是都要实现一遍?推广起来很复杂
    • 因此选择Userspace
  • 0 RTT
  • 弱网优势

除了协议优化,能不能做路径优化

网络提速-数据中心分布

  • 核心机房
  • 边缘机房

网络提速-同运营商访问

  • 跨运营商访问丢包情况多

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

网络提速-动态API(路径优化)

  • 找到最优路径

网络稳定--容灾

具体案例一

  • 专线:内部机房,没走外网
  • 专线不可用走外网

具体案例二:调度容灾

  • 把不可用的去掉
  • 流量切换之前,要先计算机房B的容量是不是够用,够用的话才会切

具体案例二:调度容灾

云到端-> 主动降级/容灾

  • 控制访问地址,主动降级
  • 局限性:在web页面访问时时用不了这个,因为这个是针对sdk设计的,无法控制web页面 访问情况

网络容灾案例四

  • bug导致app全部crash, 写一个cache做逻辑兜底

没有容灾的故障怎么查

网络稳定--故障排查

网络稳定--故障明确

网络稳定--故障止损

网络稳定--分段排查

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

总结

\

课后作业1

课后作业2

QA

  • socket和http的区别

    • socket不是一种协议,而是一个用法
    • 在特定场景下,socket是http的一种实现方式
  • 为什么ipv6没有普及,现在办网还是ipv4+nat

    • 现在改造是有风险的,都是走双栈