这是我参与「第五届青训营 」笔记创作活动的第8天
一、背景
通过本门课程可以收获如下:
- 从事其他方向研发 —— 从事网络相关研发
- 简历更新(熟悉TCP/IP、计算机网络)
- 协议分析(自学)—— 互联网应用泛解
- 协议基础/为什么会产生这些协议
二、本堂课重点内容介绍
- 刷抖音网络是怎么交互的?
- 刷抖音为什么又快又稳
- 总结回顾
三、详细知识点介绍
1. 刷抖音网络是怎么交互的
网络接入
网络传输
1.1 网络接入
1.1.1 互联网
1.1.2 路由
往同网段如何发包/交互?
- 路由一定是对称的吗?
- 路由是工作在哪一层协议?
- 那路由是改的 IP 地址吗? 路由是改 MAC,找到发包口
怎么找到下一跳MAC?
1.1.3 ARP 协议
- 逻辑同网段才能发送 ARP
- ARP请求广播,ARP 应答单播
- 免费 ARP? ARP 代理?
ARP本质上是查找下一跳的 MAC,不是请求目标地址!
1.1.4 IP 协议
- 唯一标识,互联网通用。抖音客户端一个,抖音服务端一个
- Mac 地址不能代替 IP 地址吗?
- IPv4 不够用,一般怎么解决?
1.1.5 NAT
- 家里路由器是怎样上网的?
- 多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了?
网络打通了,视频怎么下载?
1.2 网络传输
1.2.1 数据包发送
1.2.2 先请求 DNS
- 客户端发www.douyin.com的解析请求
- 递归解析器去问".",com.去那里解析
- 递归解析器去问"com.",douyin.com去哪里解析
- douyin.com告诉递归接
www.douyin.com 解析到 xxx
1.2.3 DNS 的传输协议 UDP
- UDP 本身相对简单
总结:想发什么包,就分配一个 UDP 的头,把 payload 里面塞数据发出去就好!
-
UDP用好很难
- 发包每次发多少?怎么避免分片?
- 怎么知道没丢包?
- 怎么权衡传输效率和质量?
- ....
总结:怎么保证协议可靠?
1.2.4 TCP 三次握手
- 什么是 TCP 连接?
拔了网线,连接会断吗?
-
你真的了解 TCP 三次握手吗?
- Tcpdump + Wireshark
1.2.5 TCP传输
- sequence number: 表示的是我方(发送方)这边,这个 packet 的数据部分的第一位应该在整个 data stream 中所在的位置。
- acknowledge number: 表示的是期望的对方(接收方)的下一次 sequence number 是多少。注意,SYN/FIN 的传输虽然没有 data,但是会让下一次传输的 packet seq 增加一,但是,ACK 的传输,不会让下一次的传输 packet 加一。
提问:
- 为什么老问你Timewait?
- 丢包怎么办?
- 滑动窗口再结合基础概念去理解
- 流量控制/拥塞控制结合基础概念去理解
1.2.6 HTTP/HTTP1.1
- 为什么不直接用 TCP 通信呢?
- 为什么互联网上那么多 HTTP 通信?
其实 HTTP 只是多加了一层规矩。HTTP 依然是 TCP,只是这个规矩让用户更清晰/更简洁。
HTTP1.1 有哪些优化?
- 长连接
- 部分传输
- HOST
- 缓存
- ....
1.2.7 HTTPS
- 传输中被插入小网站怎么办?
- HTTPS 解密出来依然是 HTTP
1.2.8 SSL/TLS 握手
对称加密和非对称加密
确保没有劫持,也确保私钥不泄密
1.3 总结
网络连接协议 ——> 网络传输协议 ——> 愉快的刷抖音