网络与部署 | 青训营笔记

140 阅读5分钟

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

用于记录网络与部署课程的部分笔记。

一、从需求到上线全流程

瀑布模型

image.png

敏捷开发

image.png 需求阶段->开发阶段->测试阶段->发布阶段->运维阶段

执行流程:DevOps

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

1、网络交互

(1)网络接入

路由

同网段:用中转设备(三层交换机/逻辑交换机)连接,或者可用虚拟定义同网段(SDN),获取对端MAC直接发包

跨网段:跨局域网的,要配网关路由。

动态路由:BGP/OSPF等协议(属于传输层协议),路由表在动态变化

路由不一定是对称的,是网状的

路由协议工作基本在IP层,路由本质是通过ARP协议获取MAC地址,改MAC地址,找到发包口,源MAC和目标MAC一直在变,目标的IP地址不变

ARP协议(找下一跳的MAC,不是请求目标地址)

逻辑的同网段才可以发ARP请求

免费ARP:新增服务器时,主动广播告知MAC地址,提前判断IP是否冲突

ARP代理:劫持ARP请求,伪造一层;虚拟网络/伪造MAC地址

IP协议

为什么要用IP,不用MAC:MAC是二层协议,同层协议很多,在MAC上面封装一层,统一用IP地址标识,可以统一多个二层协议,而不是只针对MAC IPv4不够用->NAT解决

NAT协议

多个内网映射到一个外网地址(家里路由器),NAT改IP+端口,注意不仅仅是源地址变换,源端口/校验和/SEQ等都会变化。解决多个内网客户端访问同一个目标地址+端口,维护一张表,记录端口使用情况

(2)网络传输

数据包

本质上是一段内存,里面存储的内存是有序的,一般是按照TCP/IP的多层协议去封装。拆包/封包都是按照协议去写内存/读内存。 image.png

DNS协议

过程:客户端发送网址的解析请求 -> 递归解析器请求根“.” -> 请求顶级域名“com -> 再请求“xxx.com”

UDP
  • 协议简单
  • 需要考虑可靠性的场景使用复杂(怎么避免分片、怎么知道丢包、怎么权衡传输效率和质量,怎么保证协议可靠)
TCP
  • 三次握手:确认传输的序列号/MSS/Option字段(取MSS最小值,还有TCP的时间戳),建立连接
  • TCP连接:是一个虚拟的概念,本质上两倍维持一段内存,记录连接状态,就是session
  • Sequence number:发送方这个packet的数据部分的第一位应该在整个data stream中所在的位置
  • ACK number:期望接收方下一次的sequence number的值,SYN/FIN会让下一次传输的seq+1,ACK不会
  • Timewait:确保连接正常关闭
HTTP/HTTP1.1
  • 为什么要使用HTTP:TCP负责的内容太多了,TCP编程代码开发效率慢,HTTP关注于业务本身,而不是关注协议具体的实现。HTTP是基于TCP,针对特定的场景做了优化,让用户更清晰、简洁。
  • HTTP1.1:长连接、部分传输、HOST、缓存
  • HTTPS:HTTPS的产生背景:加密/可靠/防劫持;SSL/TLS握手,非对称加密+对称加密

2、网络架构如何提升质量

(1)网络提速

HTTP2.0
  • 主要思想:多路复用,一个HTTP请求里并行地请求内容
  • 队头阻塞:某个包丢了,要等这个包发送成功,才能继续发其他包
QUIC/HTTP3.0
  • TCP写死了,不好改,所以用UDP实现
  • kernel实现要考虑在不同系统的实现,所以在userspace实现
  • 0RTT:除了初始化,其余连接不用RTT开销
  • 弱网优势:可避免TCP队头阻塞问题
数据中心
  • 多运营商接入:同运营商内部访问,避免跨运营商的流量
  • 有边缘机房/汇聚机房/中心机房 image.png
  • CDN路径优化:针对静态资源做缓存,边缘机房的建设,优先访问边缘机房,缓存命中视频/图片等静态内容;客户端最靠近的服务器(边缘机房)做缓存,先访问边缘机房看看有没有缓存,没有再去找汇聚机房,再去核心机房
  • DSA路径优化:针对动态API做缓存;通过查附近机房的延迟找到达目标机房的最优路径。分四层/七层动态加速。核心在于利用可控节点做路径探测和规划。

(2)网络稳定

容灾
  • 概念
    • 故障发生
    • 故障感知:容灾系统感知到故障发生
    • 自动切换:如何将故障节点/问题系统从整个容灾系统中去掉
    • 服务恢复:从故障中恢复
  • 具体案例
    • 机房专线故障:环路容灾,避免某条专线故障导致机房孤岛问题(专线是连接各个机房的网络物理路径)
    • 单机房接入节点故障:DNS容灾,摘除故障的节点-字节GTM系统。探测A不可用,切到B之前,要确保B可以承载A的流量,再切
    • 云控容灾:云端交互,服务器/云上下发命令到终端-字节TNC系统
    • cache容灾:源站不可用,降级到之前的缓存内容-字节TLB/ByteCDN等系统的容灾建设
  • 故障排查
    • 故障明确:沟通
    • 故障止损:先止损再排查,灾备预案的建设
    • 分段排查:客户端排查、服务端排查、中间链路排查
  • 方法
    • dig查DNS
    • ping/telnet/nmap查三四层连通性
    • traceroute排查中间链路
    • iptabels查客户端
    • tcpdump抓包