打开抖音互联网会发生什么| 青训营笔记

137 阅读10分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

网络接入

ARP协议

逻辑同网段才能发送ARP

ARP请求是广播,ARP应答是单播

发送ARP一定是一级一级的发送的,先找到下一跳,然后发送ARP,找打mac地址,再往下。

免费ARP

实际生产环境用得多

不用请求,就能告诉IP地址。

比如新加机器,没有查询ARP没有缓存,查询比较慢

ARP代理


为什么Mac地址不能代替IP地址?

要向下兼容,mac协议是两层的

NAT协议

家里路由器是怎么上网的?

多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了?

NAT是不是就改一个IP地址呢?

既改了IP,也改了端口

网络打通后,视频怎么下载?

网络传输

数据包

网络分层模型

OSI七层网络模型TCP/IP四层概念模型对应网络协议
应用层应用层HTTP,TFTP,FTP,SMTP,WAIS
表示层Telnet,Rlogin,SNMP,Gopher
会话层SMTP,DNS
传输层传输层TCP,UDP
网络层网络层IP,ICMP,ARP,RARP,AKP,UUCP
数据链路层数据链路层FDDI,Ethernet,Arpanet,PPP
物理层IEEE 802.1A

一层一层按层封装

数据包的发送

先请求DNS

递归解析

根服务器-顶级域服务器-权威服务器

DNS的传输协议UDP

UDP用好很难

发包每次发多少?怎么避免分片?

MTU传输有限制,所以要分片。

分片影响效率,要重组,消耗CPU资源。

怎么知道没有丢包?

怎么权衡传输效率和质量

总结:怎么保证传输可靠?

TCP三次握手

拔了网线,连接会断吗?

不会,本质上是一个状态,心跳包,心跳饱和,TCP有探活,在一定场景下会断,一定场景下不断。

\

TCP三次握手做了哪些事情

用什么字段可以尽量避免分片?

MSS

MSS是在什么场景下去确认的?

TCP三次握手时确认的

三次握手的时候是怎么确认MSS的呢?

有一个TCP OPTION字段,server端也会有,在双方最小的MSS取,时间戳

TCP传输

sequence number 表示发送方,这个packet的数据部分的第一位应该在整个data stream中所在的位置

ackonwledge number 表示「期望」接收方的下一次sequence number是多少

注意:SYN/FIN的传输虽然没有data,但是会让下一次传输的packet seq增加1;ACK传输不会+1

TCP中ACK 为什么每次要 + 1呢?

从定义来看,不是说ACK每次+1,而是ACK每次「期望」sequence number要+1

看第二个红框,因为packet的数据包长度为725,所以期望返回的Seq为726,即ACK为726.

TCP的有限状态机

为什么老问Timewait?

丢包怎么办?

滑动窗口

流量控制/拥塞控制

HTTP/HTTP1.1

为什么不直接用TCP去通信?

HTTP知识多加了一层规矩,HTTP依然是TCP,这个规矩让用户更清晰,更简洁。

TCP负责的内容太多,如果用TCP去通信,编程起来很麻烦,要考虑的东西太多。

HTTP让我们关注代码本身,不用关注交互的实现。

HTTP1.1 哪些优化?

  • 长连接(最主要)
  • 部分缓存
  • Host
  • 缓存

HTTPS

传输中被插入下网站怎么办?

SSL/TLS 握手

用一层加密算法,不够安全

对对称加密再加密一次,即为非对称加密。

设计第三方CA,确保没有劫持,也确保私钥不泄密。

网络架构怎么给抖音提质?

网络提速

HTTP 2.0

最主要思想:多路复用

怎么理解多路复用/stream?

如果stream1丢了一个包,怎么办?

TCP队头阻塞(灾难性)

OPTION有优化,但本质上没有解决。Sact?option

HTTP3.0 QUIC协议

Google提出的

TCP or UDP?

TCP协议栈栈在linux服务器上不可插拔,TCP拥塞算法可以插拔,不好改。

所以使用UDP去做。

Kernel or Userspace

Kernel要考虑的东西太多了,所以做在Userspace

0 RTT

天然支持HTTPS,非对称加密会耗费几个RTT去传输,google这里做了优化,类似于session共享。除了初始化要握手,后面就不用了。

弱网优势

QUIC协议最大的优势。

弱网环境下,容易丢包,引发队头阻塞问题。针对做的优化都没用了,如果有QUIC,就可以解决对头阻塞的问题。

\

网络稳定

除了协议优化,网络路径能不能优化?

数据中心分布

先需要了解一下大公司的数据中心分布

核心机房:存储核心数据,用户敏感数据

POP接入:运营商、外网做交互的小机房,数量较多

边缘机房:更靠近用户的机房,特别多

同运营商访问

中国特色,不同运营商的访问丢包率比较高。

解析域名,走客户端ip,如果是中国移动,就移动客户端接入,电信就电信客户端接入。

CDN静态资源(图片视频)路径优化

静态资源:不会随着API的改变而改变,可以做缓存

边缘机房做缓存,如果没有找汇聚机房,汇聚机房没有找核心机房。

CDN: 内容分发网络

基本思路: 尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

目的: 控制时延。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。

使用CDN最重要的原因:加速访问。

服务模式:

简单地说,CDN是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而「内容管理」和全局的「网络流量管理」(Traffic Management)是CDN的核心所在。

通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。

QA:

1.CDN加速是对网站所在服务器加速,还是对其域名加速?

CDN是只对网站的某一个具体的域名加速。如果同一个网站有多个域名,则访客访问加入CDN的域名获得加速效果,访问未加入CDN的域名,或者直接访问IP地址,则无法获得CDN效果。

2.CDN和镜像站点比较有何优势?

*CDN对网站的访客完全透明,不需要访客手动选择要访问的镜像站点,保证了网站对访客的友好性。
**CDN对每个节点都有可用性检查,不合格的节点会第一时间剔出,从而保证了极高的可用率,而镜像站点无法实现这一点。
*CDN部署简单,对原站基本不做任何改动即可生效。

3.CDN和双线机房相比有何优势?

*常见的双线机房只能解决网通和电信互相访问慢的问题,其它ISP(譬如教育网,移动网,铁通)互通的问题还是没得到解决。
*而CDN是访问者就近取数据,而CDN的节点遍布各ISP,从而保证了网站到任意ISP的访问速度。另外CDN因为其流量分流到各节点的原理,天然获得抵抗网络攻击的能力。

4.CDN使用后,原来的网站是否需要做修改,做什么修改?

一般而言,网站无需任何修改即可使用CDN获得加速效果。只是对需要判断访客IP程序,才需要做少量修改。

5.为什么我的网站更新后,通过CDN后看到网页还是旧网页,如何解决?

*由于CDN采用各节点缓存的机制,网站的静态网页和图片修改后,如果CDN缓存没有做相应更新,则看到的还是旧的网页。
**为了解决这个问题,CDN管理面板中提供了URL推送服务,来通知CDN各节点刷新自己的缓存。
**在URL推送地址栏中,输入具体的网址或者图片地址,则各节点中的缓存内容即被统一删除,并且当即生效。
*如果需要推送的网址和图片太多,可以选择目录推送,输入 **www.kkk.com/news **即可以对网站下news目录下所有网页和图片进行了刷新。

6.能不能让CDN不缓存某些即时性要求很高的网页和图片?

只需要使用动态页面,asp,php,jsp等动态技术做成的页面不被CDN缓存,无需每次都要刷新。或者采用一个网站两个域名,一个启用CDN,另外一个域名不用CDN,对即时性要求高的页面和图片放在不用CDN的域名下。

7.网站新增了不少网页和图片,这些需要使用URL推送吗?

后来增加的网页和图片,不需要使用URL推送,因为它们本来就不存在缓存中。

8.网站用CDN后,有些地区反映无法访问了,怎么办?

*CDN启用后,访客不能访问网站有很多种可能,可能是CDN的问题,也可能是源站点出现故障或者源站点被关闭,还可能是访客自己所在的网络出现问题,甚至我们实际故障排除中,还出现过客户自己计算机中毒,导致无法访问网站。
*客户报告故障时,可随时联系我们24小时技术部进行处理。

动态API(播放/评论接口)路径优化(DSA)

空间拓扑问题。有一个路径优化算法,通过一定的数据,机房与机房之间的延时,找到最优数据

\

怎么避免抖音挂掉?

容灾概念

故障发生 -> 故障感知 -> 自动切换 -> 服务恢复

反馈/监控/客服上报

自动切换:把故障系统,从系统中去掉

什么时候用不了云控?

云控宕机、用户不让执行某些命令(授权),用web提供服务不好做云控容灾服务

故障排查

没有容灾的故障怎么排查?

故障明确 -> 故障止损 -> 分段排查

故障明确

什么业务?什么故障接口?

故障体现在哪里?

访问其他目标是否正常?

是否是修改导致的异常?多情况讨论。回退是否能恢复?

故障止损

「先止损再排查」:

  • 用户体验第一
  • 对公司收入的影响是按照分钟甚至秒来计算

如何止损?

  • 组件有没有容灾,但是系统有没有?
  • 降级

分段排查

客户端排查:

  • 客户端访问其他服务没问题吗?
  • 其他客户端访问目标服务没问题吗?

服务端排查:

  • 服务端监控/指标正常吗?
  • 手动访问一下正常吗?
  • 分组件排查

中间链路排查:

  • 服务端和客户端都确保没有问题?
  • 中间网络设备有没有问题?(交换机/路由器/网关LB)
  • 旁路的DNS有没有问题?

常见网络故障排查命令

  • dig查询DNS问题
  • ping/telnet/nmap查询三层/四层连通性 (接口排查)
  • Traceroute排查中间链路 (丢包?)
  • iptables (查客户端,防火墙挡了?)钩子里实现包的过滤传输
  • tcpdump (抓包)

QA

为什么不用FTP?

FTP和SSH一起用的,别人有了SSH22端口,安全很有问题。

\