数据包的奇幻旅程:从浏览器到服务器
引言 前几篇我们学习了OSI七层模型和TCP/IP四层模型,理解了网络分层的概念。但这些都是抽象的理论。 现在我们要做的是:跟踪一个真实的数据包,看看它如何从你的浏览器,一步步到达目标服务器。 这就像跟踪一封信从投递到收信的完整过程,让我们看看网络世界中数据包的"快递之旅"。 场景设定 假设你在浏览器地址栏输入:http://www.example.com/index.html 并按下回车。 让我们跟随数据包的旅程,看看背后发生了什么! 准备工作:DNS域名解析 在真正发送HTTP请求之前,浏览器需要先知道 www.example.com 的IP地址。 DNS查询过程 1. 浏览器检查缓存 ├─ 浏览器DNS缓存 ├─ 操作系统DNS缓存 └─ hosts文件 2. 如果缓存没有,向DNS服务器查询 ├─ 本地DNS服务器(运营商提供,如8.8.8.8) ├─ 根DNS服务器 ├─ .com顶级域名服务器 └─ example.com权威DNS服务器 3. 获得IP地址:93.184.216.34 DNS查询是一个UDP请求(应用层协议),过程如下: 应用层:DNS查询请求 ↓ 传输层:UDP协议,端口53 ↓ 网络层:IP协议,目标8.8.8.8(Google DNS) ↓ 链路层:以太网帧 ↓ 发送到DNS服务器 DNS响应: 93.184.216.34 现在浏览器知道了目标IP地址,可以发送HTTP请求了! 第1站:应用层 - 浏览器生成HTTP请求 浏览器生成一个HTTP GET请求: GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Accept: text/html,application/xhtml+xml Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Connection: keep-alive 关键信息: 请求方法:GET 请求路径:/index.html 协议版本:HTTP/1.1 Host头:www.example.com(虚拟主机标识) User-Agent:浏览器标识 Connection:keep-alive(保持连接) 此时的数据:只有HTTP请求本身,还没有任何网络信息。 ...