这是我参与「第三届青训营 -后端场」笔记创作活动的的第7篇笔记
一、 本堂课重点内容
1. 刷抖音网络是如何交互的
2. 刷抖音为什么又快又稳
二、 详细知识点介绍
2.1 网络接入-互联网
2.2 路由
路由位于网络层,路由不更改IP地址,是改的Mac,找到发包口
路由不一定是对称的:目前绝大多数的路由器都是非对称型NAT(Cone NAT),所以P2P技术才能正常使用。 对称/非对称的区别主要在于:网关设备在实现NAT时,对于内网某主机的若干个UDP连接请求,网关设备对应地在外网上所建立的UDP端口数量。对称NAT是一个请求对应一个端口,非对称NAT是多个请求对应一个端口(象锥形,所以叫Cone NAT)。
2.3 网络接入
ARP协议:
逻辑同网段才能发送ARP
ARP请求广播,ARP应答单播
ARP本质上是查找下一跳的MAC,不是请求目标地址!
IP协议:
唯一标识,互联网通用。抖音客户端一个,抖音服务端一个。
Mac地址不能代替IP地址吗?因为MAC地址有唯一性,是分散的计算机地址,所以更不适合代替IP地址使用
IPv4不够用,一般怎么解决的?
使用 NAT 机制:把 IP 分为 外网 IP 和 内网 IP,用一个 外网 IP 代替 N 个内网 IP。就好比网上购物,收货地址填写学校,而学校里有很多人,每个人用姓名和手机号区分。
而进入内网IP后则是使用端口号区分。
2.4 网络传输
2.4.1数据包发送:
2.4.2先请求DNS
客户端发www.douyin.com的解析请求
递归解析器去问.”,com.去哪里解析
递归解析器去问"com.”,douyin.com去哪里解析
douyin..com告诉递归解,解析到xxx
2.4.3 DNS的传输协议UDP
UDP本身相对简单,想发什么包就分配一个UDP的头,把payload里面塞数据发出去就好。
2.4.4 TCP三次握手
sequence number:表示的是我方(发送方)这边,这个packet的数据部分的第一位应
该在整个data stream中所在的位置。
acknowledge number:表示的是期望的对方(接收方)的下次sequence number是多少。
注意,SYN/FIN的传输虽然没有data,但是会让下一次传输的packet seq.增加一,但
是,ACK的传输,不会让下一次的传输packet加一。
2.4.5 TCP传输
典型的TCP协议要求每一个数据段发送之后都要有一个ACK回复,然后才能发送下一个数据段,这样能保证数据的可靠传输,但是TCP是全双工通信,在等待一个数据段的ACK恢复之前网络将会闲置,因此效率将会受到极大影响,因此协议提出了滑动窗口协议,专门负责数据的传输,滑动窗口子协议分为简单的停-等协议,后退N协议,以及选择重传协议三个子子协议,其实三个子子协议可以由一个例程表示,只是一个例程的三个不同情况,比如发送和接受窗口都为1时就是最简单的停等协议,三个子子协议都很复杂,只有靠这种复杂的机制才换取了网络链路的高效利用
2.4.6 HTTP/HTTP1
为什么不直接用TCP通信呢?
其实HTTP只是多加了一层规矩。HTTP依然是TCP,只是这个规矩让用户更清晰/更简洁。
HTTP1.1哪些优化?
1.使用长对话模式:之前每次请求响应都需要建立TCP/IP连接,资源消耗较大,使用长对话可以一次连接多次请求响应
2.管道传输:之前http1.0发送一个请求后必须等待结果才能发送第二个请求,而http1.0在发送完请求后可以接着发送第二次请求,最后只要把响应的结果按顺序对应即可。
2.4.7 SSL-TLS握手
形象比喻:
我们假设A与B通信,A是SSL客户端,B是SSL服务器端,加密后的消息放在方括号[]里,以突出明文消息的区别。双方的处理动作的说明用圆括号()括起。
A:我想和你安全的通话,我这里的对称加密算法有DES,RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。
B:我们用DES-RSA-SHA这对组合好了。
这是我的证书,里面有我的名字和公钥,你拿去验证一下我的身份(把证书发给A)。
目前没有别的可说的了。
A:(查看证书上B的名字是否无误,并通过手头早已有的CA的证书验证了B的证书的真实性,如果其中一项有误,发出警告并断开连接,这一步保证了B的公钥的真实性)
(产生一份秘密消息,这份秘密消息处理后将用作加密密钥,加密初始化向量(IV)和hmac的密钥。将这份秘密消息-协议中称为per_master_secret-用B的公钥加密,封装成称作ClientKeyExchange的消息。由于用了B的公钥,保证了第三方无法窃听)
我生成了一份秘密消息,并用你的公钥加密了,给你(把ClientKeyExchange发给B)
注意,下面我就要用加密的办法给你发消息了!
(将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥)
[我说完了]
B:(用自己的私钥将ClientKeyExchange中的秘密消息解密出来,然后将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥,这时双方已经安全的协商出一套加密办法了)
注意,我也要开始用加密的办法给你发消息了!
[我说完了]
A: [我的秘密是…]
B: [其它人不会听到的…]
2.5 网络架构怎么给抖音提质
2.5.1 网络提速-HTTP2.0
http2性能提升的核心就在于二进制分帧层。HTTP2采用的是二进制协议,它采用二进制格式传输数据而不是文本格式。2.0把响应划分为两个帧,HEADERS和DATA,也就是说一条HTTP响应划分成两个帧来传输,并且采用二进制编码。多路复用允许同时通过单一的 HTTP2.0 连接发起多重的请求 - 响应消息。HTTP2让所有的通信都在一个TCP连接上完成,真正的实现了请求的并发。
2.5.2 QUIC/HTTP3.0
QUIC:QUIC很好地解决了当今传输层和应用层面临的各种需求,包括处理更多的连接,安全性,和低延迟。QUIC融合了包括TCP,TLS,HTTP/2等协议的特性,但基于UDP传输。QUIC的一个主要目标就是减少连接延迟,当客户端第一次连接服务器时,QUIC只需要1RTT(Round-Trip Time)的延迟就可以建立可靠安全的连接,相对于TCP+TLS的1-3次RTT要更加快捷。之后客户端可以在本地缓存加密的认证信息,再次与服务器建立连接时可以实现0-RTT的连接建立延迟。QUIC同时复用了HTTP/2协议的多路复用功能(Multiplexing),但由于QUIC基于UDP所以避免了HTTP/2的队头阻塞(Head-of-Line Blocking)问题。因为QUIC基于UDP,运行在用户域而不是系统内核,使得QUIC协议可以快速的更新和部署,从而很好地解决了TCP协议部署及更新的困难
2.5.3 数据中心分布
2.5.4 同运营商访问
2.5.5 静态资源(图片视频)路径优化(CDN)
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
2.5.6 路径优化(DSA)
2.6 网络稳定
2.6.1容灾概念:通过一些技术手段的部署,达到出现"意外"的时候,业务不会中断或者中断后会自动恢复(注意要自动,而且恢复时间很短)。
2.6.2故障明确:
什么业务?什么接口故障?
故障体现在哪里?
访问其他目标是否正常?
是否是修改导致的异常?
2.6.3 分段排查:
客户端排查:客户端访问其他服务没问题吗?其他客户瑞方问目标服务没问题吗?
服务端排查:服务端监控指标都正常吗?手动方问一下正常吗?分组件排查
中间链路排查:服务端跟客户端确保都没问题。中间网络设备有没有问题?(交换机/路由器/网关LB)。旁路的DNS有没有问题?
2.6.4 网络故障排查常用命令
dig查询DNS问题
ping/telnet/nmap查询三层/四层连通性
Traceroute排查中间链路
iptabels
tcpdump
2.6.5案例:
案例一:
客户端异常->服务端自测正常->网关转发异常->健康检查异常
案例二:
个别用户报故障,生产环境大多是客户端的问题
案例三:
安徽电信报障某APP无法使用->检测后端服务正常,安徽电信流量突降->安徽电信客户端ping不通目标服务->电缆被挖断
案例四:
某APP故障->后瑞服务器反馈服务正常->网络转发设备异常->抓包->路由不对称
2.6.6 故障预防
监控报警
故障演练预案
故障降级/止损
三、 课后个人总结
本堂课主要介绍了实际项目实现的相关技术流程。以及故障排查和对于意外的预防
四、 引用参考
[1]zhuanlan.zhihu.com/p/379580156