Bootstrap

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

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!!
第一弹:Cpp零基础学习【30 DAYS 从0到1】
第二弹:Cpp刷题文档【LeetCode】
第三弹:Go开发入门【字节后端青训营】
第四弹:Cpp简单项目开发【黑马Rookie】
第五弹:数据结构绪论【数据结构与算法】
第六弹:Go工程实践【字节后端青训营】
第七弹:高质量编程和性能调优【字节后端青训营】
第八弹:Linux 基础知识【书生大模型训练营】
第九弹:Python 基础知识【书生大模型训练营】
第十弹:Git 基础知识【书生大模型训练营】
第十一弹:玩转HF/魔搭/魔乐社区【书生大模型训练营】
第十二弹:书生大模型全链路开源体系【书生大模型训练营】
第十三弹:玩转书生「多模态对话」与「AI搜索」产品【书生大模型训练营】
第十四弹:浦语提示词工程实践【书生大模型训练营】
第十五弹:HTTP 框架修炼之道【字节后端青训营】
第十六弹:打开抖音会发生什么【字节后端青训营】

课前依赖:

  • 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 网络稳定 - 故障预防很重要

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

碎碎念:计算机网络相关课程我甚至没有接触过,和科班的差距在这一刻被放大,但我是有办法的,美本的很多学校有蛮多相关课程,得找个时间补上。

;