打开抖音互联网会发生什么
环境配置
操作系统
继续使用WSL2,WSL2的安装
抓包软件
-
tcpdump:使用
sudo apt-get install tcpdump命令,提示该软件已经安装过了。 -
wireshark:也可以直接通过
sudo apt-get install wireshark进行安装-
如果提示无法定位wireshark,需要使用
sudo apt-get update对apt进行更新 -
更新后即可安装
-
选择Yes
-
等待安装完毕。安装完毕后,为了方便用户直接使用,我们把用户名添加到wireshark组中。使用命令
sudo vim /etc/group!保存退出
-
1. 刷抖音网络是怎么交互的?
刷抖音的过程用到了哪些协议?
- 域名解析DNS
- 图片下载/HTTP
- 视频下载/HTTP
- 评论API/HTTP
1.2 网络接入-路由
简单地说,主机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都会修改。
- 不是。路由是改mac,找到发包口。在报文发送过程中源ip地址和目标ip地址是不会改变的。那发送过程中怎么找到下一跳呢?是通过链路层修改mac地址,每经过一个设备,源mac和目的mac都会修改。
void send_one_pkt()
{//根据dst找路由,一般是出口的ip
rt-find(dst)//包含主机出口网口&Nexthop
...
//修改mac地址
l2->dst_mac=rt->next_hop->mac//怎么获取路由的mac
p=append(p,l2)
...
send(p,rt->port)//发包需要指定网卡
//因为发包是以网卡为单位的,
}
动态路由BGP/OSPF等协议寻找
1.3 网络接入-ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
-
逻辑同网段才能发送ARP
- 先找到下一跳,再发送ARP,不断迭代
- 广播不能跨网段
-
ARP请求广播,ARP应答单播
- 回应的时候只给发送ARP的主机回复
-
免费ARP?ARP代理?
- 免费ARP:简单来说,当一个新的mac进入一个网段时,通过一个广播的ARP,告诉网段内其他节点自己的存在
免费 ARP(Gratuitous ARP)包是一种特殊的 ARP 请求,它并非期待得到 IP 对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP 请求,即请求自己的 IP 地址的 MAC 地址。
免费 ARP 数据包有以下 3 个作用:
- 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
- 可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。
- 可用于更新其他主机的 ARP 缓存表。如果该主机更换了网卡,而其他主机的 ARP 缓存表仍然保留着原来的 MAC 地址。这时,可以发送免费的 ARP 数据包。其他主机收到该数据包后,将更新 ARP 缓存表,将原来的 MAC 地址替换为新的 MAC 地址。
-
- ARP代理:类似于我们开vpn,存在一个代理,劫持本来的ARP,发往另一个地方,以达到某个目的
1.4 网络接入-IP协议
-
唯一标识,互联网通用。抖音客户端一个,服务端一个。
-
Mac地址不能代替IP地址吗?
- 存在不适用mac地址的网络设备,通过ip协议进行了一次封装,进行了地址的统一
-
IPv4不够用,怎么解决?:
- IPv6
- NAT
1.5 网络接入-NAT
-
家里的路由器,查看家里设备的ip地址一般都是192.168.xxx.xxx,称为内部地址。而路由器存在一个外部ip地址,所有的内部用户通过这个ip地址向外部发送数据
-
多个内网客户端访问同一个目标地址+端口,源端口恰好一样,是否冲突?
- NAT不仅仅改ip,而且改端口,源端口一样时,会在NAT设备上维护一张表,映射到不同的端口
- NAT不仅仅改ip,而且改端口,源端口一样时,会在NAT设备上维护一张表,映射到不同的端口
1.6 网络传输-数据包
数据从上到下层层封装,最后通过物理链路进行传输,传输至目标设备后,在从下至上解包
1.7 网络传输-DNS
相对易懂的一个协议,将域名转换为IP地址 DNS解析
1.8 网络传输-UDP
UDP头 想发什么包,就分配一个UDP的头,吧payload里面塞数据发出去就好了
- 发包每次发多少?怎么避免分片
分片:在数据链路层可传送的帧的大小有限制,称为MTU,如果传输的数据超过了这个大小,就需要分片
-
怎么知道没丢包?
- UDP不保证可靠交付,维护传输可靠性的工作在应用层完成
-
怎么权衡传输效率和质量?
- UDP的使用场景比起可靠性更强调实时性,可以接受一定程度的数据丢失,不允许较大的时延。延迟是衡量UDP传输质量的重要指标
1.9 网络传输-TCP
- 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加一
- ACK通过期望收到的序列号提供一种确认机制
- 这个传输packet加一我不是很理解什么意思。主要是理解这个传输中seq和ack是怎么变化的就好了我觉得,ack表示的就是一个确认,期望收到哪一个序列,发送方给他发送过去。如果没有按序受到,就会一直返回没按序受到的那个序列号。
-
TimeWait
- 需要等两倍的msl,以确保连接正常关闭,防止前一次的ack丢失
理解TimeWait需要引入MSL 最长报文寿命的概念
-
TCP丢包问题:
- TCP采用累积确认,发送一个报文超过一定时间接不到确认重新发送
-
滑动窗口:解析TCP之滑动窗口(动画演示)这个解析的动画很直观
-
流量控制和拥塞控制:建议仔细阅读教材,都是比较基础的知识点。【计算机网络】TCP的流量控制和拥塞控制
- 流量控制主要通过滑动窗口实现,抑制发送端发送的速率,以便接收端来得及接收
- 拥塞控制是全局的过程,目的是让网络能够承受现有的负荷。慢开始和拥塞避免、快重传和快回复是拥塞控制的主要算法
1.10 网络传输-HTTP/HTTP1.1
-
HTTP依然是多加了一层规矩,依然是TCP。为了让我们更加关注业务本身而不是实现细节。
-
HTTP1.1的优化
- 长连接:连接一直保持,不需要每次post/get请求都重新建立连接
- 部分传输
- HOST
- 缓存
-
HTTPS:一种加密协议,解密出来依然是HTTP
- SSL/TLS握手:通过第三方的CA进行非对称加密!
2. 网络架构怎么给抖音提质
2.1 网络提速 HTTP2.0
主要思想:多路复用,多图并发下载,串行和并行的区别,大大传输提高效率,在一个tcp链接上跑多个http
2.2 stream
仍是单个tcp链接传输,stream1,2,3本身仍是串行发送,网络速度足够快时,在上层http眼里相当于并行传输
丢包怎么办:对头阻塞:一旦丢失一个包,后面的包全部要等待,知道我丢失的那一个包重新发送,后面的包才可以继续发送。这种形式会大大影响速率
2.3 QUIC/HTTP3.0
对HTTP2.0的多路复用进行了优化,解决了对头阻塞的问题
- TCP or UDP ?:TCP复杂度高,难以修改,选择基于UDP
- Kernel or Userspace:选择在用户态(Userspace)
- 0RTT
- 弱网优势
2.4 数据中心分布
数据中心:服务器集合的一个地方 核心机房:存放核心数据 pop接入:和外网进行交互的出入口 边缘机房:更靠近用户而不是核心
2.5 同运营商访问
运营商跨网质量比较差,可以让移动的用户访问移动机房,电信的用户访问电信的机房,通过ip解析来识别用户的运营商
2.6 静态资源(图片视频)路径优化(CDN)
- 静态资源:大家刷到的都一样,像图片视频,不会随api的改变而改变
- CDN:缓存。先访问边缘机房,查看有没有对应数据的缓存,有就直接返回,没有就继续访问汇聚机房、核心机房。CDN简介
2.7 动态API(播放/评论)接口路径优化(DSA)
通过探测隔壁机房的延时寻找最优路径