这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记。
课程收益
熟悉TCP/IP、计算机网络!!!
1. 刷抖音网络是怎么交互的?
1.1 网络接入
路由
往同网段如何发包/交互?
路由一定是对称的吗? (不一定)
路由是工作在哪一层的协议?(网络/IP层)
路由是改的IP地址吗?(找下一跳,改MAC地址,目标IP地址一直是不变的)
路由是改MAC,找到发包口
伪代码:
void send_one_pkt(){
rt = find_rt(dst) //包含主机出口网卡&Nexthop
...
l2->dst_mac = rt->next_hop->mac //怎么获取路由的mac?
p = append(p,l2)
...
send(p, rt->port) //发包需要指定网卡,为什么?
//这个port指的网卡的port
//kernel里面发包是以网卡为单位的
//网卡概念
}
ARP(Address Resolution Protocol)地址解析协议
根据IP地址获取物理地址的一个TCP/IP协议
- 逻辑同网段才能发送ARP
- ARP请求广播,ARP应答单播
- 免费ARP?ARP代理
IP协议
- 唯一标识,互联网通用
- MAC地址不能代替IP地址吗? 答:难记、不同协议的地址需要统一
- IPv4不够用,一般怎么解决? 答:NAT:IP+端口一起 修改的,防止冲突。自己维护一张记录表
1.2 网络传输
数据包
wireshark抓包,查看数据
数据包发送
先请求DNS
客户端发送www.douyin.com的解析请求,递归解析器去解析,自顶向下 DNS传输协议UDP:
TCP三次握手
拔了网线,连接会断吗?(一定情况下,会断开)
MSS(最大报文段长度)是如何在TCP三次握手里面确认的?
Tcpdump+Wireshark
ack number:期望对方的下一次seq number是多少。
TCP的有限状态机 !!
- 为什么老问你Timewait?
- 丢包怎么办?(ack的机制)
- 滑动窗口
- 流量控制/拥塞控制
HTTP/HTTP1.1
HTTP只是多加了一层规矩。HTTP依然是TCP
HTTP1.1的优化:
- 长连接
- 部分传输
- HOST
- 缓存
HTTPS
HTTPS解密出来依然是HTTP
SSL/TLS握手
- SSL:(Secure Socket Layer,安全套接字层)
- TLS:(Transport Layer Security, 传输层安全)
2. 刷抖音为什么又快又稳?---网络结构怎么给抖音提质
2.1 网络提速
HTTP 2.0
eg. 多图并发下载
怎么理解多路复用/stream?
- 单个TCP链接传输
- 如果TCP丢包怎么办?(对头阻塞)
Quick/HTTP 3.0
对HTTP 2.0的多路复用做了优化,解决对头阻塞问题。
- 0 RTT:通信双方发起通信连接时,第一个数据包便可以携带有效的业务数据
- 最大优势:弱网传输
除了协议优化,网络路径能不能优化?
- 数据中心分布
- 核心机房
- POP接入
- 边缘机房
- 同运营商访问
- 静态资源(视频图片)路径优化(CDN) Content Delivery Network:即内容分发网络
- 动态API(播放/评论接口)路径优化(DSA)
差分搜索算法 DSA
抖音三天两天挂掉,怎么提升稳定性?
2.2 网络稳定
2.2.1 容灾概念
故障发送-故障感知-自动切换-服务恢复
一系列企业级容灾案例
2.2.2 故障排查
- 故障明确
- 故障止损
- 分段排查