241125学习日志——[ByteDance] 后端训练营 [04]

72 阅读7分钟

课前依赖:

  • Linux 操作系统
  • Wireshark 软件 (抓包软件)
  • Socket 网络编程开发环境

打开抖音互联网会发生什么?

  • 带你探索计算机网络
  1. 协议基础、为什么会产生这些协议

  2. 协议分析、互联网应用泛解

  3. 建立更新为:熟悉(精通/了解) TCP/IP 、计算机网络

1. 刷抖音网络是怎么交互的?- 网络接入

  • 网络接入
  • 网络传输

1.1 网络接入 - 互联网

“最后一公里” “last mile” - 最容易发生丢包等情况

1.2 网络接入 - 路由

掩码、子网、逻辑交换机、直连同网段...

SDN:网络虚拟化

往同网段如何发包/交互?

网关:

网关(Gateway)又称网间连接器协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层--应用层。

  • 路由并不一定是对称的
  • 路由是工作可以工作在传输层、IP层...
  • 路由不是修改IP地址,而是修改MAC地址,找到发包口

1.3 网络接入-ARP 协议

怎么找到下一跳的MAC:ARP 协议

  • 逻辑同网段才能发送 ARP
  • ARP 请求广播,ARP 应答单播
  • 跨网段:只会找到下一跳的 MAC 地址
  • 免费 ARP 地址:提高效率、提前判断 IP 错误
  • ARP 代理

1.4 网络接入 - IP 协议

双层协议

  • 唯一标识,互联网通用。抖音客户端一个。抖音服务端一个
  • Mac 地址不能代替 IP 地址吗
  • IPv4不够用,怎么解决

1.5 网络接入 - NAT

  • 家里路由器是怎样上网的?
  • 多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了?

1. 刷抖音网络是怎么交互的?- 网络传输

1.6 网络传输 - 数据包

课后作业:做一次抓包。

  • 数据包发送
  • 数据包接收

1.7 网络传输 - 先请求 DNS

解析请求...

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

UDP 本身相对简单,但用好较难

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

1.9 网络传输 - TCP 三次握手

什么是 TCP 连接?

传输控制协议(TCP,TransmissionControl Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义 [1]。

TCP旨在适应支持多网络应用的分层协议层次结构,互连的计算机通信网络中成对的应用程序进程之间能够依靠TCP提供可靠的通信服务来传输字节流。TCP支持双向数据流,应用程序也可以仅单向发送数据。在主机之间,TCP使用端口号标识应用程序服务并且可以多路传输数据流。

TCP 三次握手、四次挥手

  • 第一次握手: 客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。

  • 第二次握手: 服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。

  • 第三次握手: 客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

注意:我们上面写的ack和ACK,不是同一个概念:

  • 小写的ack代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1。
  • 大写的ACK,则是我们上面说的TCP首部的标志位,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1。

sequence number

acknowledge number

1.10 网络传输 - HTTP/HTTP1.1

HTTP 其实依然是 TCP。

HTTP 1.1 有哪些优化?

  • 长连接
  • 部分传输
  • HOST
  • 缓存
  • ......

1.11 网络传输 - HTTPS

SSL/TLS 握手

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

2. 网络架构如何给抖音提质 - 网络提速

  • 网络提速
  • 网络稳定

2.1 网络提速 - HTTP2.0

多图片并行下载

2.2 网络提速 - 多路复用/stream

  • 单个 TCP 连接传输
  • TCP 丢包

2.3 网络提速 - QUIC/HTTP3.0

  • TCP or UDP?
    • 必须是 UDP,推广方便
  • Kernal or Userspace
    • 基于内核的实现?不,基于用户态的实现
  • 0 RTT
  • 弱网优势
    • 解决阻塞问题

2.4 网络提速 - 数据中心分布

核心机房:存储安全信息 边缘机房:小运营商等机房

2.5 网络提速 - 同运营商访问

  • 移动访问联通的连接性会比较差

2.6 网络提速 - 静态资源(照片视频)路径优化(CDN)

核心机房 -> 汇聚机房 ->边缘机房

2.7 网络提速 - 动态 API (播放/评论接口)路径优化(DSA)

不同机房之间做延时探测等方法,找到最优路径

2. 网络架构如何给抖音提质 - 网络稳定

2.8 网络稳定 - 容灾概念

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

2.9 网络稳定 - 故障排查

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

2.10 网络稳定 - 故障明确

出现什么故障? ->沟通

  • 什么业务?什么接口故障?
  • 故障体现在哪里?
  • 访问其他目标是否正常?
  • 是否是修改导致的异常?

2.11 网络稳定 - 故障止损

先止损再排查:

  • 用户体验第一
  • 对公司收入的影响是按照分钟甚至秒来计算

如何止损?

  • 组件没有容灾,但是系统有没有?
  • 降级

2.12 网络稳定 - 分段排查

客户端排查

服务端排查

中间链路排查

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

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

2.14 网络稳定 - 故障预防很重要

  • 监控报警
  • 故障演练/预案
  • 故障降级/止损