这是我参与「第三届青训营 -后端场」笔记创作活动的的第 3 篇笔记。
本节课程主要是以刷抖音时的底层互联网交互作为切入点,梳理了计算机网络的相关知识,并结合实际生产环境理解网络的优化方向和稳定性建设。主要包括四个部分:
- 网络接入协议
- 网络传输协议
- 网络优化
- 网络稳定
网络接入协议
网络接入涉及的相关内容有:互联网、路由、ARP协议、IP协议、NAT等。
路由
可以做同网段路由,也可以做跨网段路由。配置路由的命令是:
to 10.0.1.1/24 via 10.0.0.254 default via 10.0.0.254
路由不一定是对称的,路由的节点也可以是网状的。 路由工作协议层不一定只是在网络层,也可能工作于传输层,甚至向下四层。路由通过改变mac地址(源mac、目标mac),目标ip地址不变,找到发包口
ARP协议
如何找下一跳的mac地址?
ARP本章上是查找下一跳的mac地址,而不是目标mac地址。 只有逻辑同网段才能发送ARP。
ARP请求广播(不能跨网段),ARP应答单播
免费ARP:不需要发送请求广播就可以告诉mac地址。主要的应用一种是用于IP地址冲突检测,二是用于更新ARP地址缓存表中的原有记录。 网络中接入新的设备时,发送一条ARP消息,让其他设备更新mac表,添加新设备的mac地址。防止ip冲突(两台服务器配置了同一个ip)
IP协议
ip地址是互联网设备的唯一标识。
不使用mac地址代替ip地址的原因是:网络协议层是向下兼容的,二层网络除了mac地址还有其他协议地址。为了统一不同协议,所以在上层用ip地址统一。
ipv4不够用的解决方式:使用ivp6,nat。
NAT
NAT,网络地址转换:内网用户通过设备,修改源地址,内部ip地址可重复,连接到互联网的外部ip地址是唯一的,将不同地址影视到同一个地址,压缩ipv4地址的使用。
NAT是同时改变目标地址和端口,解决了多个内网客户端访问同一个 ip+port, 源端口恰好一样,会发生冲突的情况。
网络传输
请求DNS
- 客户端发送解析域名的请求
- 递归解析器(根、顶级、域名)
DNS的传输协议UDP
UDP本身相对简单:想发什么包,就分配一个UDP的header,payload中填写数据发送即可,如何保证协议可靠:
- 发包每次发多少?怎么避免分片?MTU,IP分片
- 怎么知道没丢包?
- 怎么权衡传输效率和质量?
TCP三次握手
在已建立TCP连接后,把了网线,连接会中断吗?两者之间无强耦合关系。如果建立的TCP连接有探活功能,定期检查连接是否还保持着。如果没有收到ack包,则说明连接断开了。 通过mss判断是否分片
TCP传输
- sequence number:表示发送方packet的数据部分的第一位在整个data stream的所在位置。
- acknowledge number:表示期望接收方的下一次sequence number是多少。注意,虽然SYN/FIN传输无data,但是会让下一次传输的packet seq增加一;但是,ACK的传输,不会让下一次传输的packet seq加一。
TCP的有限状态机
- 为什么老问你Timewait?2个msl。确认连接正常关闭,防止前一次ack丢失,可能会异常关闭连接。
- 丢包怎么办?ACK重传的机制。
- 滑动窗口再结合基础概念(seq,ack)去理解。
- 流量控制/拥塞控制结合基础概念(seq,ack)去理解。
HTTP/HTTP1.1
为什么不直接用TCP通信?HTTP是分层协议,TCP本身负责的协议已经非常多了。HTTP更关注业务、代码逻辑,而不用考虑协议具体的实现,做好了交互的原则。
为什么互联网上有那么多HTTP通信? HTTP1.1有哪些优化?长连接,部分传输,HOTS,缓存
HTTPS
对HTTP加密,采用SSL/TLS 握手(对称加密和非对称加密)和CA。
网络提速
HTTP2.0
多路复用:在一个TCP连接上同时进行多个HTTP,TCP复用。
怎么理解多路复用/stream?
- 单个TCP连接传输
- 如果TCP丢包怎么办?队头阻塞
QUIC / HTTP3.0
- UDP
- Userspace(用户态)
- 0 RTT
- 弱网优势 优化HTTP2.0,解决队头阻塞的问题
数据中心分布
服务器部署的地方
- 核心机房:核心数据、数据库
- POP点接入:与外网、运营商交互
- 边缘机房:更靠近用户的运营商机房
静态资源(图片视频)路径优化(CDN)
不随着api请求的改变而改变的资源。
核心思想: 缓存资源。先在“边缘机房”找资源,如果之前有其他客户端访问过就会缓存在边缘机房;如果没有,则再在“汇聚机房”、“核心机房”找。
动态api(播放/评论接口)路劲优化(DSA)
不同客户端调用api接口得到的资源不同。
核心思想: 根据各相邻机房的网络时延表,得到最短时延的路径
网络稳定
容灾概念
- 故障发生
- 故障感知
- 自动切换
- 服务恢复
故障排查
- 故障明确
- 故障止损
- 分段排查
网络故障排查常用命令
- dig查询DNS问题
- ping/telnet/nmap查询三层/四层连通性
- traceroute排查中间链路
- iptables - tcpdump