title: 网络交互
categories: 青训营
1.网络是怎么交互的
1.2 路由
通过路由来接入服务器,通过配置默认路由或匹配详细路由确定路径\
- 路由不一定是对称的,来回的路由路径不一定是相同的
- 路由工作在传输层协议
- 路由不更改IP地址,而是更改MAC地址来确定下一跳,找到发包口
- 发包需要指定网卡
1.3ARP协议
通过ARP协议来找到下一跳的MAC
- 通过广播并接受响应来确定下一跳的MAC地址,注意只有逻辑同网段才能发送ARP
- ARP请求广播,ARP应答单播
- 添加设备时发送一个免费ARP,防止IP冲突
1.4 IP协议
- IP地址是唯一表示,互联网通用,客户端一个,服务端也只有一个
- IPv4不够用则通过IPv6解决
1.5 NAT
- 内部使用NAT服务器,在内网中再分配地址,客户端通过NAT接入外部网络
- NAT改变 IP地址和端口地址,避免多个内网客户端访问同一个目标地址和端口,而源端口一致导致冲突
2. 网络传输
2.1数据包
- 填充完数据包后需要进行封装,按层次封装,解包顺序和封装顺序相反
2.2 请求DNS
- 客户端发送网址的解析请求
- DNS服务器通过递归迭代来解析网址,有根域服务器,顶级域服务器和权威服务器
2.3 UDP
-
UDP本身相对简单
-
通过UDP自己实现一个协议较为困难,从根本上来讲要解决怎么保证协议可靠的问题
- 发包每次发多少?怎么避免分片
- 怎么知道是否丢包
- 怎么权衡传输效率和质量
2.4 TCP
- TCP通过三次握手建立连接,三次握手的目标是确定会话双方都可以正确发送和接受信息
- TCP传输:包括sequence number表示发送方发送的序列号,acknowledge number:是发送方期望接受方下一次发送的sequence number
- SYN/FIN传输不携带数据,但会使packet seq会加1,但ACK传输不会增加packet seq
- 通过seq num和ack num来确定消息被成功接收
- 滑动窗口,流量控制
2.5 HTTP1.1
相对于HTTP/1.0使用长连接和管道传输和缓存
2.6 HTTPS
HTTPS在HTTP基础上发展而来,通过在HTTP和TCP网络层之间加入SSL/TLS安全协议,解决了HTTP的三大风险
- 信息加密:将信息加密,解决窃听风险;
- 校验机制:验证报文是否被篡改,解决篡改风险
- 身份证书:验证通信双方身份,解决伪装风险
3.网络架构如何为抖音提速
3.1HTTP2.0
通过HTTP2.0来为服务提速,HTTP2.0使用多路复用来提高效率
- 在同一个TCP连接通道中存在多个stream,以串行的形式复用,从外表来看是并发请求资源
- 存在TCP队头阻塞问题
3.2 QUIC/HTTP3.0
HTTP/3.0将HTTP下层协议从TCP协议改为UDP协议,通过基于UDP的QUIC协议也可以实现类似TCP的可靠性传输
- 解决了TCP队头阻塞的问题
- 具有弱网优势,因为弱网环境丢包率高
3.3数据中心分布
数据分布在核心机房和边缘机房中
3.4 动态API
通过动态API进行路径优化(DSA)
4.网络架构如何为抖音提质
4.1 容灾
容灾包括故障发生,故障感知,自动切换和服务恢复
- 专线容灾,在两个机房之间通过专线连接进行容灾
- 外网容灾,通过互联网连接两个机房
- 全局容灾,在解析时若发现某个机房不可用,就自动排除该机房,感知故障后,在确定另一个机房可以承担负载后,将请求自动解析到另一个机房中
- 主动降级容灾,预装SDK,若发生故障实现降级容灾,避免客户端访问故障机房.若场景无法嵌入SDK,就无法使用这种容灾
4.2故障排查
出现了容灾系统无法解决的故障,就要排查故障并处理,步骤分为:故障明确,故障止损和分段排查
4.2.1 故障明确
- 出现什么故障,什么业务故障,什么接口故障等
- 故障体现在哪里
- 是否是修改导致的故障
4.2.2 故障止损
- 先止损再排查
- 有容灾就通过容灾止损,没有容灾就进行降级
4.2.3 分段排除
- 客户端排查
- 服务端排查
- 中间链路排查