这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
刷抖音网络是怎么交互的?
- 网络接入
- 网络传输
网络接入-互联网
网络接入-路由
往同网段如何发包/交互?
路由一定是对称的吗?
路由是工作在哪一层协议?
IP层,但是并不准确
那路由是改的IP地址吗?
不是,改的是Mac地址,做到发包口
动态路由BGP/OSPE等
怎么找到下一跳的MAC?
网络接入—ARP协议
- 逻辑同网段才能发送ARP
- ARP请求广播,ARP应答单播
跨网段是找下一跳再找ARP
ARP简介
地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。
1.MAC地址作用?是什么?
MAC地址就像身份证一样,用来证明身份的,长度为48bit,由12位的16进制数表示。
2.MAC地址分类
-
1,物理MAC地址:全球唯一的硬件地址,这种MAC地址标识了唯一的以太网的一的一个终端。
-
2,广播MAC地址:(全F)用来表示局域网(LAN)上的所有终端设备。
-
3,组播MAC地址:第8位bit为1的MAC地址为组播MAC地址,用来表示LAN上的的一组终端。
3,MAC地址表是什么?作用?
mac地址表记录了交换机学习到的其他设备的mac与接口的对应关系,以及接口所属的vlan等信息。设备在转发报文时,根据报文的目的MAC地址查询MAC地址表,如果查到了,则根据表项的出接口转发该报文,如果没查到,设备将采取广播方式在所属vlan内除接收接口外的所有接口转发该报文。
ARP本质上是查找下一跳的MAC,不是请求目标地址
网络接入-IP协议
唯一标识,互联网通用,抖音客户端一个,抖音服务端一个
MAC地址不能代替IP地址吗?
IP地址将二层的协议做了一个统一
IPv4不够用,一般怎么解决的?
NAT
网络接入-NAT
家里路由器是怎样上网的?
多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了?
NAT是IP+端口一起改变的,当有存在的连接的时候,端口选择另一个就行了
网络传输 - 数据包
网络传输 - 数据包发送
网络传输 - 先请求DNS
网络传输 - DNS的传输协议 UDP
UDP本身相对简单
总结:想发什么包,就分配一个UDP的头,把payload里面塞数据发出去就好
UDP用好很难
发包每次发多少?怎么避免分片?
- MTU传输有限制,所以需要分片。因为影响效率,一旦分片要考虑重组;分片会消耗CPU计算资源,重组也会消耗计算机重组资源
怎么知道没丢包?
- UDP里没有可靠的协议,丢包了也不知道
怎么权衡传输效率和质量?
- 用UDP去传输的话,就是怎么保证协议可靠
总结:怎么保证协议可靠?
网络传输 - TCP三次握手
TCP是什么?
- TCP,全称传输控制协议(transmission Control Protocol)是位于传输层的重要协议,它最要的特点:面向连接 ,可靠,面向字节流。
什么是TCP连接?
拔了网线,连接会断吗?
- 在一定场景会断开,但在一定场景又不会断开。主要看有没有TCP的保护
你真的了解TCP三次握手吗?
-
①首先 Client 端发送连接请求报文
-
②Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。
-
③Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了
用川航举例子
-
①四川8633请求建立连接(SYN),并且发送出序号。
-
②服务端接受到信号,即有确认号(ACK),此时并同样返回请求序号Seq
-
③客户端接受到信号,即有确认号(ACK),连接已经建立。
网络传输 - TCP传输
sequence number:表示的是我方(发送方)这边,这个packet的数据部分的第一位应该在整个data stream中所在的位置。
acknowledge number:表示的是期望的对方(接收方)的下一次sequence number是多少。注意:SYN/FIN的传输虽然没有data,但是会让下一次传输的packet seq增加一,但是,ACK的传输,不会让下一次的传输packet加一
为什么老问你Timewait?
- timewait会占用客户端端口,会很拖累网络进程。
丢包怎么办?
- ack机制,滑动窗口再结合基础概念去理解,流量控制/拥塞控制结合基础概念去理解
网络传输 - HTTP/HTTP1.1
为什么不直接用TCP通信呢?
- TCP通信的东西已经够多了,HTTP本身还是TCP,但是它针对了不同的场景,做了一些优化,理解更加专业,不会有歧义
为什么互联网上那么多HTTP通信?
- 其实HTTP只是多加了一层规矩。HTTP依然是TCP,只是这个规矩让用户更加清晰/简洁。
网络传输 - HTTPS
传输中被插入小网站怎么办?
- HTTPS解密出来依然是HTTP
网络传输 - SSL/TLS握手
总结
网络架构怎么给抖音提质
-
网络提速
-
网络稳定
网络提速 - HTTP2.0
网络提速 - 怎么理解多路复用/stream?
单个TCP链接传输
如果TCP丢包怎么办?
- 队头阻塞:一个丢包,结果就为了发送这一个包一直在重新发送,后面的包一直在等待
网络提速 - QUIC/HTTP3.0
TCP or UDP?
- 改TCP复杂,不好改。UDP推广方便,好改
Kernel or Userspace
0 RTT
- QUIC天然支持HTTPS协议,弱网传输优势:可以解决队头阻塞
除了协议优化,网络路径能不能优化?
网络提速-数据中心分布
核心机房:存储核心数据,数量少于POP接入
POP接入:和运营商、外网做交互,数量多,更增加和互联网交互的入口
边缘机房:更靠近用户,不是核心,专门针对小运营商
网络提速 - 同运营商访问
移动服务器不能访问电信服务器,稳定性差
网络提速-静态资源(图片视频)路径优化(CDN)
先在边缘机房访问搜索访问记录,有就直接下载,没有就汇聚机房;还找不到就去核心机房搜索。
CDN本质是静态缓存。
网络提速 - 动态API(播放/评论接口)路径优化(DSA)
最快方式:
算法寻找最优路径:DSA
刷的快,但是三天两天挂掉,谁刷抖音?
网络稳定 - 容灾概念
故障发生
故障感知:系统感知到故障,或者客服反馈
自动切换:故障的节点或有问题的系统从容灾系统中去掉
服务恢复:自动回复
网络容灾的具体案例一
无专线可能会绕路连接,但是有专线则直达
网络容灾的具体案例二
网络稳定-故障明确
出现什么故障?-> 沟通是前提
- 什么业务?什么接口故障?
- 故障体现在哪里?
- 访问其他目标是否正常?
- 是否是修改导致的异常?
网络稳定-故障止损
先止损再排查
- 用户体验第一
- 对公司收入的影响是按照分钟甚至秒来计算
如何止损
- 组件没有容灾,但是系统有没有?
- 降级
网络稳定-分段排查
客户端排查
- 客户端访问其他服务没问题吗?
- 前提客户端访问目标服务没问题吗?
服务端排查
- 服务端监控/指标都正常吗?
- 手动访问一下正常吗?
- 分组件排查
中间链路排查
- 服务端跟客户端确保都没问题
- 中间网络设备有没有问题?(交换机/路由器/网关LB)
- 旁路的DNS有没有问题?
网络稳定-网络故障排查常用命令
- dig查询DNS问题
- ping/telnet/nmap查询三层/四层连通性
- Traceroute排查中间链路
- iptables
- tcpdump
网络故障排查案例一
网络故障排查案例二
网络故障排查案例三
网络故障排查案例四
网络稳定-故障预防很重要
-
监控报警
-
故障演练/预案
-
故障降级/止损