你有没有好奇过,当你在浏览器输入 http://dongliyang.online
并按下回车时,电脑和网络背后发生了什么?从域名解析到数据包传输,网络的每一步都充满了技术细节。本文将带你在Windows 10上,通过开源工具和简单操作,深入探索访问网页的全过程,包括DNS解析、抓包分析、网卡传输和路由转发。无论你是计算机网络新手还是想加深理解,这篇博客都能帮你动手实践,揭开网络的神秘面纱!
为什么写这篇博客?
计算机网络是现代科技的核心,但教科书上的理论往往抽象。为了真正理解网络如何工作,实践是最好的老师。在这篇文章中,我们将模拟一次网页访问(http://dongliyang.online
),使用Windows 10内置和开源工具,观察每个环节:域名如何变成IP地址?数据包如何封装?网卡如何将数据转为信号?路由器如何转发?通过抓包和分析,你将直观看到网络的“内部运作”。
准备工作:工具和环境
我们将在Windows 10上完成所有实践,以下是需要准备的工具(大多免费或内置):
- 内置工具:
- nslookup:Windows自带的DNS查询工具。
- tracert:跟踪数据包的路由路径。
- ipconfig:查看网络配置(如IP、网关)。
- netstat:检查端口和进程。
- 开源/免费工具:
- Wireshark:强大的抓包工具,显示数据包的每层头部。
- dig:详细分析DNS查询(需安装BIND)。
- Scapy:Python库,用于自定义抓包和数据包操作(可选)。
- 环境:
- Windows 10(家庭版/专业版均可)。
- 家用Wi-Fi或有线网络(确保有管理权限)。
- 浏览器(推荐Chrome,访问非HTTPS站点如
http://dongliyang.online
以便分析)。
安装步骤:
- Wireshark:从 wireshark.org 下载Windows版,安装时勾选“Npcap”(抓包驱动)。
- dig:从 isc.org/bind 下载BIND,解压到
C:\BIND
,将C:\BIND\bin
添加到系统环境变量(右键“此电脑” > 属性 > 高级系统设置 > 环境变量 > Path)。 - Scapy(可选):安装Python 3(python.org),然后在命令提示符运行
pip install scapy
。 - 确保网络正常,打开命令提示符(
Win + R
>cmd
),运行ping dongliyang.online
确认连通性。
网络之旅:访问网页的全流程
假设你在Chrome浏览器输入 http://dongliyang.online
并回车,网络会经历以下步骤。我们将逐一实践,观察每个环节的细节。
步骤1:域名解析(DNS)——从域名到IP
发生了什么?
你输入 http://dongliyang.online
,浏览器首先需要将域名解析为IP地址(如 123.56.177.54)。这由DNS(域名系统)完成,过程如下:
- 检查本地DNS缓存(Windows存储近期解析结果)。
- 若无缓存,查询本地DNS服务器(通常是路由器或ISP提供,如
192.168.1.1
)。 - DNS服务器通过递归查询(根服务器 > 顶级域名
.com
> 权威服务器)返回IP。
如何观察?
-
用nslookup快速查询:
- 打开命令提示符(
Win + R
>cmd
)。 - 输入:
输出示例nslookup dongliyang.online
- 记录返回的IP和DNS服务器地址。
- 打开命令提示符(
-
用dig深入分析:
- 确保BIND已安装。
- 运行:
输出示例:dig dongliyang.online
- dig显示完整的查询路径(根、TLD、权威服务器),适合学习DNS层次结构。
-
检查DNS缓存:
- 运行:
查找ipconfig /displaydns
dongliyang.online
是否在缓存中(可以发现缓存中存在—)。 - 清空缓存以强制新查询:
再次运行ipconfig /flushdns
nslookup dongliyang.online
,观察全新解析。PS C:\Users\dongly666> ipconfig /flushdns Windows IP 配置 已成功刷新 DNS 解析缓存。 PS C:\Users\dongly666> nslookup dongliyang.online 服务器: dns.google Address: 8.8.8.8 非权威应答: 名称: dongliyang.online Address: 123.56.177.54
- 运行:
-
调整DNS服务器:
- 查看当前DNS:
查找“DNS服务器”字段(这里显示了v6和v4的)。ipconfig /all
- 可切换到公共DNS(如Google的
8.8.8.8
):- 打开网络设置(
设置 > 网络和Internet > 更改适配器选项
)。 - 右键网络连接 > 属性 > Internet协议版本4(TCP/IPv4)。
- 设置DNS为
8.8.8.8
和1.1.1.1
(Cloudflare)。 - 运行
nslookup dongliyang.online
,比较解析速度。
- 打开网络设置(
- 查看当前DNS:
小结:通过nslookup和dig,你可以看到域名如何变成IP地址。清空缓存和切换DNS帮助你理解缓存和递归查询的实际效果。
步骤2:抓包分析——解剖数据包的每层
发生了什么?
DNS解析后,浏览器发起HTTP请求,数据经过Windows网络协议栈封装:
- 应用层:HTTP请求(如
GET / HTTP/1.1
)。 - 传输层:TCP添加源端口(随机高位,如
49152
)和目标端口(80
)。 - 网络层:IP添加源IP(你的电脑,如
10.113.84.29
)和目标IP()。 - 链路层:以太网添加源MAC(网卡)和目标MAC(路由器)。
- 物理层:网卡将数据转为电信号(有线)或无线信号(Wi-Fi)。
抓包工具可以捕获这些数据包,显示每层头部及其来源。
如何观察?
-
安装和使用Wireshark:
- 打开Wireshark,选择网络接口(运行
ipconfig /all
确认Wi-Fi或以太网接口)。 - 设置过滤器:
- DNS:
dns
- HTTP:
http
- TCP三次握手:
tcp.flags.syn ==
1
- DNS:
- 在Chrome访问
http://dongliyang.online
(非HTTPS以便看到HTTP内容)。 - 观察数据包:
- DNS包:查询
dongliyang.online
,响应123.56.177.54
。 - TCP包:三次握手(SYN、SYN-ACK、ACK)。
- HTTP包:
GET / HTTP/1.1 Host: dongliyang.online
。
- DNS包:查询
- 右键HTTP包 > “Follow > TCP Stream”,查看完整请求和响应。
- 示例输出:
GET /c-oj/home/question HTTP/1.1 Host: dongliyang.online User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 HTTP/1.1 200 OK Server: nginx/1.21.6 Date: Thu, 15 May 2025 10:38:31 GMT Content-Type: text/html Content-Length: 428 Last-Modified: Fri, 11 Apr 2025 03:23:40 GMT Connection: keep-alive ETag: "67f88b3c-1ac" Accept-Ranges: bytes <!DOCTYPE html> <html lang=""> <head> <meta charset="UTF-8"> <link rel="icon" href="/favicon.ico"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Vite App</title> <script type="module" crossorigin src="/assets/index-B54ekEYH.js"></script> <link rel="stylesheet" crossorigin href="/assets/index-DG28WzI8.css"> </head> <body> <div id="app"></div> </body> </html> GET /dev-api/question/semiLogin/list?pageNum=1&pageSize=10&difficulty=&keyword= HTTP/1.1 Host: dongliyang.online User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Accept: application/json, text/plain, */* Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Referer: http://dongliyang.online/c-oj/home/question HTTP/1.1 200 OK Server: nginx/1.21.6 Date: Thu, 15 May 2025 10:38:31 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: keep-alive 2ab {"total":52,"rows":[{"questionId":"1067","title":"............","difficulty":1},{"questionId":"1070","title":"...........................","difficulty":1},{"questionId":"1071","title":"............","difficulty":1},{"questionId":"1072","title":"... N ..................","difficulty":1},{"questionId":"1025","title":".........","difficulty":1},{"questionId":"1045","title":"..................","difficulty":2},{"questionId":"1046","title":"Fibonacci","difficulty":2},{"questionId":"1047","title":"......","difficulty":2},{"questionId":"1000","title":"...............","difficulty":1},{"questionId":"1001","title":".........ASCII...","difficulty":1}],"code":1000,"msg":"............"} 0
- 打开Wireshark,选择网络接口(运行
-
识别头部来源:
- 链路层:MAC由网卡和路由器添加(Wireshark显示)。
- 网络层:IP由Windows网络栈添加。
- 传输层:端口由浏览器分配。
- 应用层:HTTP由浏览器生成。
- 检查应用:
- 运行:
查找源端口(如netstat -ano
49152
)的PID。 - 打开任务管理器(
Ctrl + Shift + Esc
),匹配PID确认进程(如chrome.exe
)。
- 运行:
-
保存和分析:
- 在Wireshark点击“File > Save As”,保存为
.pcap
文件。 - 使用“Statistics > Protocol Hierarchy”查看协议分布(如DNS、TCP、HTTP占比)。
- 在Wireshark点击“File > Save As”,保存为
-
高级实践:Scapy(可选):
- 安装Python和Scapy(
pip install scapy
)。 - 运行脚本捕获HTTP包:
from scapy.all import * packets = sniff(filter="host dongliyang.online", count=10) for packet in packets: packet.show()
- 检查字段,如
packet[IP].src
(源IP)。
- 安装Python和Scapy(
小结:Wireshark让你直观看到数据包的封装过程,每层头部的细节清晰可见。netstat帮助确认应用程序,Scapy适合深入协议分析。
步骤3:网卡传输——从数据到信号
发生了什么?
封装好的数据包由网卡(NIC)处理:
- 网卡接收以太网帧,转换为电信号(有线以太网)或无线信号(Wi-Fi)。
- 源MAC(网卡)和目标MAC(路由器)用于局域网通信。
- 如果目标是外部网络(如
dongliyang.online
),网卡将帧发送到默认网关(路由器)。
如何观察?
-
检查网卡信息:
- 运行:
输出示例:ipconfig /all
记录网卡的MAC地址、IP和网关。Physical Address: 64-79-F0-22-8E-D1 物理地址. . . . . . . . . . . . . : 64-79-F0-22-8E-D1 IPv4 Address: 10.113.84.29 IPv4 地址 . . . . . . . . . . . . : 10.113.84.29(首选) Default Gateway: 10.112.0.1 默认网关. . . . . . . . . . . . . : fe80::b244:14ff:fe70:2802%8 10.112.0.1
- 运行:
-
观察ARP协议:
- ARP(地址解析协议)将网关IP(
192.168.1.1
)转为MAC。 - 运行:
arp -a
查看网关的MAC(如10.112.0.1 b0-44-14-70-28-02 动态
b0-44-14-70-28-02
)。 - 在Wireshark过滤
arp
,运行:
捕获ARP请求(“Who has 192.168.1.1?”)和响应(“192.168.1.1 is at 00:16:17:88:99:AA”)。ping 192.168.1.1
- 验证Wireshark中的以太网帧是否包含网卡和路由器的MAC。
- ARP(地址解析协议)将网关IP(
-
确认网卡状态:
- 打开设备管理器(
Win + X
> 设备管理器)。 - 展开“网络适配器”,查看网卡型号(如“Intel Ethernet”)和驱动状态。
- 运行:
确认接口状态(如“已连接”)。netsh interface show interface
- 打开设备管理器(
小结:通过ipconfig和Wireshark,你可以看到网卡如何将数据包转为信号,ARP确保局域网通信正确。
步骤4:路由转发——数据包的旅程
发生了什么?
网卡将数据包发送到路由器后:
- 路由器剥离MAC头部,检查IP头部,查询路由表。
- 数据包经过多跳路由器(ISP、骨干网络),最终到达目标服务器(
123.56.177.54
)。 - 物理传输可能涉及电信号(铜缆)、光信号(光纤)或无线信号。
如何观察?
-
跟踪路由路径:
- 运行:
输出示例:tracert dongliyang.online
第一跳是你的路由器,后续是ISP和骨干路由器。----笔者有一篇文章就是这个,读者对这里感兴趣可以去看看。C:\Users\dongly666>tracert dongliyang.online 通过最多 30 个跃点跟踪 到 dongliyang.online [123.56.177.54] 的路由: 1 2 ms 2 ms 2 ms 10.112.0.1 2 2 ms 2 ms 1 ms 10.0.0.1 3 8 ms 4 ms 5 ms 117.146.58.65 4 * 5 ms * 221.181.58.233 5 * * * 请求超时。 6 * * * 请求超时。 7 * * * 请求超时。 8 53 ms 53 ms 55 ms 221.183.49.138 9 1406 ms 1988 ms 1016 ms 218.206.88.21 10 55 ms 55 ms 56 ms 111.13.123.145 11 * * * 请求超时。 12 * * * 请求超时。 13 * * * 请求超时。 14 * * * 请求超时。 15 * * * 请求超时。 16 * * * 请求超时。 17 54 ms 51 ms 51 ms 123.56.177.54 跟踪完成。
- 运行:
-
分析Wireshark中的IP头部:
- 打开Wireshark,过滤
http
,访问http://dongliyang.online
。 - 检查IP头部:
- 源IP:
10.113.84.29
(你的电脑)。 - 目标IP:123.56.177.54(服务器)。
- 源IP:
- 路由器转发时,MAC头部会变化(Wireshark只捕获本地MAC)。
- 打开Wireshark,过滤
-
检查路由器(笔者在校园内,并不方便):
- 访问路由器管理页面(浏览器输入
192.168.1.1
,输入用户名/密码)。 - 查看“WAN”或“路由表”设置,了解上行网络。
- 访问路由器管理页面(浏览器输入
小结:tracert展示数据包的旅程,Wireshark揭示IP层的转发逻辑,路由器页面提供网络上下文。
完整实验:模拟一次网页访问
让我们把所有步骤串起来,模拟一次完整的网页访问实验。
-
准备:
- 安装Wireshark、dig,确保网络正常。
- 清空DNS缓存:
ipconfig /flushdns
- 打开命令提示符、Wireshark和Chrome。
-
DNS解析:
- 运行:
记录IP(dig dongliyang.online
123.56.177.54
)。 - Wireshark过滤
dns
,访问http://dongliyang.online
,捕获查询/响应。
- 运行:
-
抓包分析:
- Wireshark过滤
http
,刷新网页。 - 观察:
- DNS:UDP 53,查询
dongliyang.online
。 - TCP:三次握手(SYN、SYN-ACK、ACK)。
- HTTP:
GET / HTTP/1.1
。
- DNS:UDP 53,查询
- 展开数据包,记录MAC(网卡/路由器)、IP、端口。
- 运行
netstat -ano
,确认浏览器的PID。
- Wireshark过滤
-
网卡传输:
- 运行
ipconfig /all
,记录网卡MAC和网关。 - Wireshark过滤
arp
,ping网关(ping 192.168.1.1
),验证MAC。 - 检查以太网帧,确认网卡的信号转换。
- 运行
-
路由转发:
- 运行:
记录每一跳(路由器、ISP)。tracert dongliyang.online
- Wireshark确认目标IP(
123.56.177.54
)。
- 运行:
实验结果:
- DNS返回
123.56.177.54
。 - 数据包包含:
- 链路层:网卡MAC到路由器MAC。
- 网络层:
10.113.84.29
到123.56.177.54
。 - 传输层:随机端口到
80
。 - 应用层:HTTP
GET
。
- 路由路径显示本地路由器(
192.168.1.1
)到服务器。
注意事项
- 权限:Wireshark需管理员权限(右键“以管理员身份运行”),确保Npcap正常安装。
- HTTPS限制:HTTPS(端口443)数据加密,无法直接看到HTTP内容。使用
http://dongliyiang.online
(非HTTPS)便于分析。 - 网络环境:在个人Wi-Fi或有线网络操作,避免公共网络的法律问题。
- 性能:抓包文件可能很大,过滤
dns
或http
减少数据量。
下一步:深入学习
完成这次实践后,你已经掌握了网络的基本运行机制!以下是进阶建议:
- 学习协议:深入研究TCP/IP模型,推荐《计算机网络:自顶向下方法》(机械工业出版社)。
- 高级工具:用Scapy编写自定义数据包脚本,模拟DNS或HTTP请求。
- 网络项目:搭建本地DNS服务器(如Unbound),观察缓存和查询。
- 资源:
- B站搜索“Wireshark教程”或“计算机网络”。
- CSDN、知乎搜索“Wireshark抓包”。
- Packet Pushers网站(packetpushers.net)提供开源工具教程。
总结
通过这次Windows 10上的网络实践,你从域名解析到路由转发,亲手触摸了网络的每个环节。Wireshark展示了数据包的“解剖图”,dig揭示了DNS的递归查询,tracert勾勒了数据包的旅程。这些工具和方法不仅让你理解网络原理,还为未来的学习和职业发展打下基础。
快去试试吧!在命令提示符敲下 nslookup dongliyang.online
,打开Wireshark捕获第一个数据包,感受网络的魅力!如果有任何问题,欢迎留言,我会尽力解答。