在主题之前,我想先谈谈目前计算机的网络模型,主要谈谈 TCP/IP 模型:
-
应用层:产生最原始的数据,常见协议如 http、ftp、websocket、DNS、QUIC
-
传输层:传递应用层的数据给网络层,必要时进行切割,常见协议如 TCP、UDP
-
网络层:目标寻址,常见协议如 IP、ARP、ICMP
-
网络接入层:通过物理链路传输比特流到目标主机
接下来就正式进入主题了
1.查看浏览器缓存
没有缓存的话才会继续往下走,否则直接使用缓存的资源
2.解析URL和DNS解析
解析URL,如果应用层协议使用http,默认端口号是80
DNS解析:
-
第一步,先查询本地DNS缓存,如果没有这个域名对应的IP,再进行下一步
-
第二步,先询问本地的DNS服务器,交给本地的DNS服务器去解析这个域名,他会逐级找比较厉害的DNS服务器,最后找到域名对应的IP,比如对于www.baidu.com,他会先找.com,再找baidu.com,最后找到www.baidu.com
3.考虑TCP和TLS握手
对于一些重要的数据(不允许丢失),我们需要先建立TCP连接,他能保证我们的数据安全到达对方,否则可以考虑UDP传输
4.数据包装
网络模型每次往下一层,都会给数据包增加一个头部
-
应用层:HTTP头
-
传输层:TCP头,以及明文数据加密
-
网络层:IP头
-
数据接口层:MAC头
5.数据传输
数据包在网络里被多次转发,最终要到达目的地