一、刷抖音网络是怎么交互的?
1、网络接入
(1)路由
- 路由一定是对称的吗?
不一定 - 路由是哪一层协议?
网络层 - 路由是改的IP地址吗?
路由是改Mac,找到发包口
怎么找到下一跳的MAC地址?
(2)ARP协议
ARP协议本质是查找下一跳的MAC,不是请求目标地址!
- 逻辑同网段才能发送ARP;
- ARP请求广播,ARP应答单播
(3)IP协议
- 唯一标识,互联网通用。抖音客户端一个,抖音服务端一个;
- Mac地址不能代替IP地址吗;
- IPv4不够用,一般怎么解决的
(4)NAT
- 家里路由器是怎样上网的?
- 多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了?
网络打通了怎么视频怎么下载
(5)数据包
- OSI七层网络模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
- TCP/IP四层概念模型:应用层、传输层、网络层、数据链路层
(6)数据包发送
(7)先请求DNS
- 客户端发
www.douyin.com
的解析请求 - DNS解析器去问".",com.去哪里解析
- DNS解析器去问"com.",douyin.com去哪里解析
- douyin.com告诉递归解www.douyin.com解析到xxx
(8)DNS的传输协议UDP
(9)TCP三次握手
- 第一次握手:客户端发送带有
SYN
标志的数据包到服务端,客户端进入syn_sent
状态; - 第二次握手:服务端发送带有
SYN\ACK
标志的数据包到客户端,服务端进入syn_rcvd
状态; - 第三次握手:客户端发送带有
ACK
标志的数据包到服务端,连接就进入Established
状态
为什么需要三次握手?
为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力。
为什么两次不行?
①防止已失效的请求报文又传送到了服务端,建立了多余的连接,浪费资源;
②两次握手只能保证单向连接是畅通的。(为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。三次握手的过程即是通信双方,相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤;如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认)。
(10)TCP传输
典型的tcp协议要求每一个数据段发送之后都要有一个ack回复, 然后才能发送下一个数据段。虽然这样能保证数据的可靠传输,但是效率呢?
由于tcp是全双工通信,在等待一个数据段的ack恢复之前网络将会闲置,因此效率将会受到极大影响。
因此协议提出了滑动窗口子协议,专门负责数据的传输,滑动窗口子协议分为简单的停等协议,后退N协议,以及选择重传协议三个子协议,其实三个子协议可以由一个例程表示,只是一个例程的三个不同情况, 比如发送和接收窗口都为1时就是简单的停等协议。三个子协议都很复杂,只有靠这种复杂的机制才换取了网络链路的高效利用。
(11)HTTP/HTTP1.1
HTTP依然是TCP,但这个规矩让用户更清晰、更简洁。
HTTP1.1有哪些优化?
- 长连接:减少了建立和关闭连接的消耗和延迟;
- 缓存:添加更多的缓存控制策略(如:
Entity tag
,If-Match
); - HOST:支持
Host
头域,不再以IP
为请求方标志; - 网络连接的优化:支持断点续传;
- 错误状态码增多:新增了24个错误状态响应码