一、打开抖音会发生什么?
1.1、刷视频时,客户端与服务器有哪些协议交互?
从应用层来说:DNS、HTTP(图片下载、视频下载、评论)
网络接入
- 互联网
- 路由
路由一定是对称的嘛?
不一定的。
路由工作在哪一层?
动态路由协议工作在传输层,一般是在IP层。
路由就是简单的修改IP地址嘛?
通过IP地址,一步步找下一跳的MAC地址,然后修改MAC地址,找到发包口。
- ARP协议
ARP协议,也称作地址解析协议,通过ARP协议找到目标IP的MAC地址。
机器会在局域网内发一个ARP广播请求,目标主机收到之后,回复一个ARP单播应答,里面携带自己的MAC地址。
注意:逻辑同网段才能发送ARP协议。
免费ARP:不用请求就告诉ARP地址。 :ear:
新加入一台机器:告诉别人自己的地址。
新增IP的时候发送:防止IP冲突
ARP代理:
劫持包,修改地址。
- IP协议
唯一标识,互联网通用。
为什么不能用MAC地址代替IP地址?
MAC地址是两层协议,工作在数据链路层,但是数据链路层不是只有这么一个协议,用MAC没办法统一这一层,所以在上一层统一,也就是使用IP协议。
IPv4地址不够用怎么办? 除了IPv6协议,还可以使用NAT
- NAT
局域网内用户使用192.168.,当需要访问外部网络的时候,通过NAT这个口去访问外部网络,相当于多个人共用一个IP地址。
多个内网客户端访问同一个目标地址+ 端口, 源端口恰好一样,是否会冲突?
不会,NAT会同时修改 IP地址 和 端口
网络传输
- 数据包
- DNS协议
DNS分为 递归请求, 迭代请求。
客户端发送 www.douyin.com的解析请求。DNS会递归的去问".com" 去哪里解析, 然后问"douyin.com"去哪里。
- UDP协议
| 16位源端口号 | 16位目的端口号 |
|---|---|
| 16位UDP长度 | 16位UDP校验和 |
| 数据(如果有) |
怎么保证UDP可靠传输?
需要考虑的东西很多,比如说每次发包发多少?怎么避免分片?怎么知道有没有丢包?怎么权衡传输效率和质量?
- TCP协议
拔了网线,TCP连接会断了嘛?
拔掉了,不一定会立刻断掉,因为TCP连接是一个状态,如果TCP有探活机制,即每隔一段时间查看连接是否还在,探活失败就会关闭连接。
三次握手:
重要概念:
sequence number:发送方发送数据的第一位在整个数据流的位置。acknowledge number 期望接收方下一次的sequence number是多少。
SYN/FIN的传输虽然没有data,但是会让下一次传输的seq加一,但是ACK的传输,不会让下一次的seq加一。
- TCP传输
为什么有Timewait
TCP丢包怎么办
滑动窗口、流量控制、拥塞控制
- HTTP/HTTP1.1
为什么不直接用TCP通信?
让开发者专注于业务开发,不用关注协议的具体实现。 其实HTTP只是多加了一层规矩,HTTP依然是TCP,只是这个规矩让用户更清晰。
HTTP1.1 有哪些优化?
- 长连接
- 部分传输
- 缓存
- ......
- HTTPS
传输中被插入小网站怎么办?
使用HTTPS协议,HTTPS只是加密的HTTP协议。
1.2、网络架构怎么给抖音提质
网络提速
- HTTP2.0
多图下载,基于多路复用技术。
但是队头Stream阻塞,HTTP2就没有那么好了。
- QUIC/HTTP3.0
传输层用的是UDP,做在用户态,解决TCP队头阻塞的问题。
- 数据中心分布(服务器机房分布)。同运营商访问。
- 静态资源路径优化。
网络稳定
网络故障排查常用命令:
dig查询DNS问题ping/telnet/nmap查询三层/四层连通性Traceroute排查中间链路iptablestcpdump
故障预防:
- 监控报警
- 故障演练/预案
- 故障降级/止损