熟悉TCP/IP,计算机网络
刷抖音:域名解析/DNS、图片下载/HTTP、视频下载/HTTP、评论API/HTTP
这里的HTTP指的是泛HTTP,QUIC,HTTP1.1,HTTP2,HTTP3呐
刷抖音网络怎么交互?
刷抖音怎么又快又稳?
1. 网络接入
1.1 路由
简单地说,主机A发送数据给主机B时,在网络上要经过一系列设备(包括终端,路由器等),在这一过程中寻找到一条从主机A到主机B的最佳路径并发送数据,就称为路由。
路由发包原理:
- 同网段:配置网段可默认添加静态路由,获取对端MAC直接发包。
- 跨网段:配置网关路由,获取网关MAC地址发包。
路由一定是对称的吗?不一定,是网状的,两台主机在通信时走的链路很有可能不相同。
路由工作在哪一层协议?网络层(ip地址),但也未必。路由的过程中会用到很多协议,不一定全部工作在网络层。比如OSPF协议(开放式最短路径优先,Open Shortest Path First,OSPF)就工作在传输层。
开放式最短路径优先(Open Shortest Path First,OSPF)是广泛使用的一种==动态路由协议==,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。但如果使用时不结合具体网络应用环境,不做好细致的规划,OSPF协议的使用效果会大打折扣,甚至引发故障。
路由是改ip地址吗?不是。路由是改mac地址,找到发包口。在报文发送过程中源ip地址和目标ip地址是不会改变的。那发送过程中怎么找到下一跳呢?是通过链路层修改mac地址,每经过一个设备,源mac和目的mac都会修改。
动态路由BGP/OSPF等协议寻找。
1.2 ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
逻辑同网段才能发送ARP:
- 先找到下一跳,再发送ARP,不断迭代
- 广播不能跨网段
ARP请求广播,ARP应答单播,回应的时候只给发送ARP的主机回复。
免费ARP?ARP代理?
- 免费ARP:简单来说,当一个新的mac进入一个网段时,通过一个广播的ARP,告诉网段内其他节点自己的存在。
- 该类型报文起到一个宣告作用,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
- 可用于检测 IP 地址冲突。
- 可用于更新其他主机的 ARP 缓存表。
- ARP代理:类似于我们开vpn,存在一个代理,劫持本来的ARP,发往另一个地方,以达到某个目的。
1.3 IP协议
唯一标识,互联网通用。抖音客户端一个,服务端一个。
Mac地址不能代替IP地址吗?存在不适用mac地址的网络设备,通过ip协议进行了一次封装,进行了地址的统一。
IPv4不够用?IPv6、NAT。
1.4 NAT
查看家里设备的ip地址一般都是192.168.xxx.xxx,称为内部地址。而路由器存在一个外部ip地址,所有的内部用户通过这个ip地址向外部发送数据。
多个内网客户端访问同一个目标地址+端口,源端口恰好一样,是否冲突?NAT不仅仅改ip,而且改端口,源端口一样时,会在NAT设备上维护一张表,映射到不同的端口。
2. 网络传输
2.1 数据包
数据从上到下层层封装,最后通过物理链路进行传输,传输至目标设备后,在从下至上解包
2.2 DNS
将域名转换为IP地址
2.3 UDP
想发什么包,就分配一个UDP的头,把payload里面塞数据发出去就好了
UDP用好很难:
-
发包每次发多少?怎么避免分片?
分片:在数据链路层可传送的帧的大小有限制,称为MTU,如果传输的数据超过了这个大小,就需要分片
-
怎么知道没丢包?UDP不保证可靠交付,维护传输可靠性的工作在应用层完成。
-
怎么权衡传输效率和质量?UDP的使用场景更强调实时性,可以接受一定程度的数据丢失,不允许较大的时延。延迟是衡量UDP传输质量的重要指标。
总结:怎么保证协议可靠?
2.4 TCP
TCP通过MSS来限制分片。
MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度
TCP在建立连接时,收发双方根据MTU计算出各自的MSS,通过三次握手把自己的MSS告知对方,互相确认彼此的MSS大小,取较小的MSS值作为双方在TCP层分段的最大payload。MSS位于TCP报文的可选段(option)。
三次握手示意图:
sequence number(序列号):表示的是我方(发送方)这边,这个packet的数据部分的第一位应该在整个datastream中所在的位置。
- 打个比方,一个分片的seq=1,大小为100,那么下个分片就是101
acknowledge number:表示的是期望对方(接收方)的下一次sequence number是多少。注意,SYN/FIN的传输虽然没有data,但是会让下一次传输的packet seq增加1,但是,ACK的传输,不会让下一次的传输packet加1。
- ACK通过期望收到的序列号提供一种确认机制
- 这个传输packet加1我不是很理解什么意思。主要是理解这个传输中seq和ack是怎么变化的就好了我觉得,ack表示的就是一个确认,期望收到哪一个序列,发送方给他发送过去。如果没有按序受到,就会一直返回没按序受到的那个序列号。
TimeWait:需要等两倍的msl,以确保连接正常关闭,防止前一次的ack丢失。
理解TimeWait需要引入MSL 最长报文寿命的概念
TCP丢包问题:TCP采用累积确认,发送一个报文超过一定时间接不到确认重新发送。
滑动窗口:解析TCP之滑动窗口(动画演示)这个解析的动画很直观
流量控制和拥塞控制:建议仔细阅读教材,都是比较基础的知识点。
【计算机网络】TCP的流量控制和拥塞控制
- 流量控制主要通过滑动窗口实现,抑制发送端发送的速率,以便接收端来得及接收。
- 拥塞控制是全局的过程,目的是让网络能够承受现有的负荷。慢开始和拥塞避免、快重传和快回复是拥塞控制的主要算法。
2.5 HTTP/HTTP1.1
HTTP依然是TCP多加了一层规矩,依然是TCP,为了让我们更加关注业务本身而不是实现细节。
HTTP1.1的优化:
- 长连接:连接一直保持,不需要每次post/get请求都重新建立连接。
- 部分传输
- HOST
- 缓存
HTTPS:一种加密协议,解密出来依然是HTTP
- SSL/TLS握手:通过第三方的CA进行非对称加密!
3. 网络提速
3.1 HTTP2.0
主要思想:多路复用,多图并发下载,串行和并行的区别,大大传输提高效率,在一个tcp链接上跑多个http。
仍是单个tcp链接传输,stream1,2,3本身仍是串行发送,网络速度足够快时,在上层http眼里相当于并行传输。
丢包怎么办?队头阻塞,一旦丢失一个包,后面的包全部要等待,直到丢失的那个包重新发送,后面的包才可以继续发送。这种形式会大大影响速率。
3.2 QUIC/HTTP3.0
对HTTP2.0的多路复用进行了优化,解决了对头阻塞的问题:
- TCP or UDP?TCP复杂度高,难以修改,选择基于UDP
- Kernel or Userspace?选择在用户态(Userspace)
- 0 RTT
- 弱网优势
3.3 数据中心提速
建立分层次的数据中心:
- 核心机房:存放核心数据。 数量比较少。
- pop接入:和外网进行交互的出入口。
- 边缘机房:更靠近用户而不是核心。边缘机房比较多,基本每个省市都有。
运营商跨网质量比较差,可以让移动的用户访问移动机房,电信的用户访问电信的机房,通过ip解析来识别用户的运营商。这个是中国互联网的现状。
3.5 路径提速
静态资源路径优化(CDN)
-
静态资源:大家刷到的都一样,像图片视频,不会随api的改变而改变。
-
CDN:缓存。先访问边缘机房,查看有没有对应数据的缓存,有就直接返回,没有就继续访问汇聚机房、核心机房。
动态API路径优化(DSA):通过探测隔壁机房的延时寻找最优路径。
4. 网络稳定
4.1 容灾
故障发生 -》故障感知 -》自动切换 -》 服务恢复
案例一:外网容灾,内网专线
案例二:故障感知,自动切换
案例三:云控,主动降级
案例四:服务降级,显示cache文件
4.2 故障排查
故障明确 -》 故障止损 -》 分段排查
故障明确:什么业务?什么接口?其他目标是否正常?
故障止损:先止损,再排查。如何止损?组件有没有容灾?系统有没有容灾?降级。
分段查询:客户端排查、服务端排查、中间链路排查
网络故障常用指令:
- dig查询DNS问题
- ping/telnet/nmap查询三层/四层连接
- Traceroute排查中间链路
- iptables
- tcpdump
案例一:健康检查异常
案例二:客户端个别用户异常
案例三:
安徽电信报障某APP无法使用 -》检测后端服务正常,安徽电信流量突降 -》安徽电信客户端ping不通目标服务 -》电缆被挖断
案例四:某APP故障 -》后端服务器反馈服务正常 -》网络转发设备异常 -》抓包 -》路由不对称