这是我参与「第三届青训营 -后端场」笔记创作活动的第7篇笔记
基础协议
网络交互
跨网段传输过程中
每次经过一个路由,只会更换MAC地址
ARP协议寻找下一个MAC地址,逻辑上就是向同网段中发一个广播包,寻找IP地址为XXX的主机,如果IP地址为XXX,该主机则会回应自己的MAC地址
免费ARP,如果在同网段中新增了一个机器,就会向所有机器发送请求,告知自己的存在
ARP代理,发送ARP请求时,有一个代理机器会将这个ARP请求主动解析,返回一个下一跳的MAC地址
MAC地址本身是二层的网络协议,为了保持旧设备的兼容性,又向上封装了一层三层的网络协议也就是IP协议,IP协议可以抹除二层网络协议的差异,保证了兼容性
为了解决IPv4的局限性,引入了NET。在NET外为外网,具有唯一的IPv4标识,在NET内为内网,具有全新的IP网络管理口。内网中想要访问外网时,外网获取到的为NET的IP号和端口号,这个端口号对应着内网中的一个IP和端口
数据包的发送与接收
DNS:
首先客户端发出的是一个递归请求,然后递归DNS解析器会接收这个递归请求,然后再依次进行迭代请求
UDP发送视频的可靠通讯实现:
丢包、分片
重发机制
权衡传输效率和质量
TCP的探活
TCP的MSS协商
SEQ,发送方发送数据包的第一个位置
ACK,收到数据包的下一个位置
HTTP1.1
TCP相当于一个协议,应用层才是适用于应用适用的场景
HTTP1.1长连接
HTTPS加密
对称加密与非对称加密
非对称加密适用的场景就是将服务器端的公钥加密,公钥是使用的CA的私钥加密并保存到服务器端,当客户收到加密的公钥,使用CA的公钥解密出服务器端的公钥
网络
网络提速
多路复用
当刷一个作品的时候,会同时请求多个视频列表,同时加载
在一个TCP连接上,跑多个HTTP,真正意义上的TCP复用
同一个TCP上有多个stream通道
TCP的队头阻塞
当有一个包有丢包,就会一直重传
QUIC协议/HTTP3.0
基于UDP实现,由于TCP本身不是特别完善,要是基于TCP进行修改,创建一个新的协议的话,用户生态不够完善。所以不如基于UDP来实现,创建一个新的应用层协议
基于Kernel实现,后续更新复杂,不如使用Userspace实现
优化SSL
最重要的优化在于HTTP2.0的多路复用的优化,解决了队头阻塞的问题
网络提速网络路径
网络路径优化算法:
CDN、P2P、DSA(互联网选路优化)
CDN(静态缓存)多级缓存:当能从边缘机房可以找到该资源,就直接从边缘机房中获取,从而减轻核心机房的网络负担
DSA(动态API):基于连接时延的动态路径选择
网络稳定
通过各种手段,比如自动化的手段或者是客户上报感知各种故障
自动切换坏掉的节点
容灾的各种手段:
外网容灾,如果专线不可用的时候,可以使用外网容灾
调度容灾,自动将不可用的机房IP从DNS中去除。GTM主动探测不可用的机房,并自动故障转移
云调度SDK,如果某些域名不可用的时候,自动切换到可用的域名
通过降级,如果客户端出现bug,某些资源无法访问的时候,可以通过查缓存将已经缓存过的数据返回回去
网络故障排查
明确故障,找到故障发生的地点
明确故障之后先止损再排查
比如推荐的接口不可使用的话,可以使用降级,也就是不使用推荐的接口,直接随机推荐视频
故障排查:可以通过4层网络模型对故障排查
客户端排查、组件排查、中间链路排查
如果都查不到的时候才去debug
案例:
哨兵等故障检测中间设备的误判断,将正常服务器摘掉
个别用户的故障,客户端配置故障
个别区域用户故障,可能是电缆故障
APP故障,网络路由不对称导致的网络设备转发异常,根本原因是在于包转发过程中,在回包的过程中,默认会将源MAC和目标MAC做一个对换导致的问题