从零开始探索计算机网络:Windows 10上的实践之旅

你有没有好奇过,当你在浏览器输入 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 以便分析)。

安装步骤

  1. Wireshark:从 wireshark.org 下载Windows版,安装时勾选“Npcap”(抓包驱动)。
  2. dig:从 isc.org/bind 下载BIND,解压到 C:\BIND,将 C:\BIND\bin 添加到系统环境变量(右键“此电脑” > 属性 > 高级系统设置 > 环境变量 > Path)。
  3. Scapy(可选):安装Python 3(python.org),然后在命令提示符运行 pip install scapy
  4. 确保网络正常,打开命令提示符(Win + R > cmd),运行 ping dongliyang.online 确认连通性。

网络之旅:访问网页的全流程

假设你在Chrome浏览器输入 http://dongliyang.online 并回车,网络会经历以下步骤。我们将逐一实践,观察每个环节的细节。

步骤1:域名解析(DNS)——从域名到IP

发生了什么?

你输入 http://dongliyang.online,浏览器首先需要将域名解析为IP地址(如 123.56.177.54)。这由DNS(域名系统)完成,过程如下:

  1. 检查本地DNS缓存(Windows存储近期解析结果)。
  2. 若无缓存,查询本地DNS服务器(通常是路由器或ISP提供,如 192.168.1.1)。
  3. DNS服务器通过递归查询(根服务器 > 顶级域名.com > 权威服务器)返回IP。

如何观察?

  1. 用nslookup快速查询

    • 打开命令提示符(Win + R > cmd)。
    • 输入:
      nslookup dongliyang.online
      
      输出示例
    • 记录返回的IP和DNS服务器地址。
  2. 用dig深入分析

    • 确保BIND已安装。
    • 运行:
      dig dongliyang.online
      输出示例
    • dig显示完整的查询路径(根、TLD、权威服务器),适合学习DNS层次结构。
  3. 检查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
      
  4. 调整DNS服务器

    • 查看当前DNS:
      ipconfig /all
      
      查找“DNS服务器”字段(这里显示了v6和v4的)。                                                            
    • 可切换到公共DNS(如Google的 8.8.8.8):
      1. 打开网络设置(设置 > 网络和Internet > 更改适配器选项)。
      2. 右键网络连接 > 属性 > Internet协议版本4(TCP/IPv4)。
      3. 设置DNS为 8.8.8.81.1.1.1(Cloudflare)。
      4. 运行 nslookup dongliyang.online,比较解析速度。

小结:通过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)。

抓包工具可以捕获这些数据包,显示每层头部及其来源。

如何观察?

  1. 安装和使用Wireshark

    • 打开Wireshark,选择网络接口(运行 ipconfig /all 确认Wi-Fi或以太网接口)。
    • 设置过滤器:
      • DNS:dns
      • HTTP:http
      • TCP三次握手:tcp.flags.syn == 
    • 在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
    • 右键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
      
      
  2. 识别头部来源

    • 链路层:MAC由网卡和路由器添加(Wireshark显示)。
    • 网络层:IP由Windows网络栈添加。
    • 传输层:端口由浏览器分配。
    • 应用层:HTTP由浏览器生成。
    • 检查应用:
      • 运行:
        netstat -ano
        
        查找源端口(如 49152)的PID。
      • 打开任务管理器(Ctrl + Shift + Esc),匹配PID确认进程(如 chrome.exe)。
  3. 保存和分析

    • 在Wireshark点击“File > Save As”,保存为 .pcap 文件。
    • 使用“Statistics > Protocol Hierarchy”查看协议分布(如DNS、TCP、HTTP占比)。
  4. 高级实践: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)。

小结:Wireshark让你直观看到数据包的封装过程,每层头部的细节清晰可见。netstat帮助确认应用程序,Scapy适合深入协议分析。

步骤3:网卡传输——从数据到信号

发生了什么?

封装好的数据包由网卡(NIC)处理:

  • 网卡接收以太网帧,转换为电信号(有线以太网)或无线信号(Wi-Fi)。
  • 源MAC(网卡)和目标MAC(路由器)用于局域网通信。
  • 如果目标是外部网络(如 dongliyang.online),网卡将帧发送到默认网关(路由器)。

如何观察?

  1. 检查网卡信息

    • 运行:
      ipconfig /all
      
      输出示例
      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
      记录网卡的MAC地址、IP和网关。
  2. 观察ARP协议

    • ARP(地址解析协议)将网关IP(192.168.1.1)转为MAC。
    • 运行:
      arp -a
      
        10.112.0.1            b0-44-14-70-28-02     动态
      查看网关的MAC(如 b0-44-14-70-28-02)。
    • 在Wireshark过滤 arp,运行:
      ping 192.168.1.1
      
      捕获ARP请求(“Who has 192.168.1.1?”)和响应(“192.168.1.1 is at 00:16:17:88:99:AA”)。
    • 验证Wireshark中的以太网帧是否包含网卡和路由器的MAC。
  3. 确认网卡状态

    • 打开设备管理器(Win + X > 设备管理器)。
    • 展开“网络适配器”,查看网卡型号(如“Intel Ethernet”)和驱动状态。
    • 运行:
      netsh interface show interface
      
      确认接口状态(如“已连接”)。

小结:通过ipconfig和Wireshark,你可以看到网卡如何将数据包转为信号,ARP确保局域网通信正确。

步骤4:路由转发——数据包的旅程

发生了什么?

网卡将数据包发送到路由器后:

  • 路由器剥离MAC头部,检查IP头部,查询路由表。
  • 数据包经过多跳路由器(ISP、骨干网络),最终到达目标服务器(123.56.177.54)。
  • 物理传输可能涉及电信号(铜缆)、光信号(光纤)或无线信号。

如何观察?

  1. 跟踪路由路径

    • 运行:
      tracert dongliyang.online
      输出示例
      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
       
      跟踪完成。
      第一跳是你的路由器,后续是ISP和骨干路由器。----笔者有一篇文章就是这个,读者对这里感兴趣可以去看看。
  2. 分析Wireshark中的IP头部

    • 打开Wireshark,过滤 http,访问 http://dongliyang.online
    • 检查IP头部:
      • 源IP:10.113.84.29(你的电脑)。
      • 目标IP:123.56.177.54(服务器)。
    • 路由器转发时,MAC头部会变化(Wireshark只捕获本地MAC)。
  3. 检查路由器(笔者在校园内,并不方便)

    • 访问路由器管理页面(浏览器输入 192.168.1.1,输入用户名/密码)。
    • 查看“WAN”或“路由表”设置,了解上行网络。

小结:tracert展示数据包的旅程,Wireshark揭示IP层的转发逻辑,路由器页面提供网络上下文。

完整实验:模拟一次网页访问

让我们把所有步骤串起来,模拟一次完整的网页访问实验。

  1. 准备

    • 安装Wireshark、dig,确保网络正常。
    • 清空DNS缓存:
      ipconfig /flushdns
      
    • 打开命令提示符、Wireshark和Chrome。
  2. DNS解析

    • 运行:
      dig dongliyang.online
      
      记录IP(123.56.177.54)。
    • Wireshark过滤 dns,访问 http://dongliyang.online,捕获查询/响应。
  3. 抓包分析

    • Wireshark过滤 http,刷新网页。
    • 观察:
      • DNS:UDP 53,查询 dongliyang.online
      • TCP:三次握手(SYN、SYN-ACK、ACK)。
      • HTTP:GET / HTTP/1.1
    • 展开数据包,记录MAC(网卡/路由器)、IP、端口。
    • 运行 netstat -ano,确认浏览器的PID。
  4. 网卡传输

    • 运行 ipconfig /all,记录网卡MAC和网关。
    • Wireshark过滤 arp,ping网关(ping 192.168.1.1),验证MAC。
    • 检查以太网帧,确认网卡的信号转换。
  5. 路由转发

    • 运行:
      tracert dongliyang.online
      记录每一跳(路由器、ISP)。
    • Wireshark确认目标IP(123.56.177.54)。

实验结果

  • DNS返回 123.56.177.54
  • 数据包包含:
    • 链路层:网卡MAC到路由器MAC。
    • 网络层:10.113.84.29123.56.177.54
    • 传输层:随机端口到 80
    • 应用层:HTTP GET
  • 路由路径显示本地路由器(192.168.1.1)到服务器。

注意事项

  • 权限:Wireshark需管理员权限(右键“以管理员身份运行”),确保Npcap正常安装。
  • HTTPS限制:HTTPS(端口443)数据加密,无法直接看到HTTP内容。使用 http://dongliyiang.online(非HTTPS)便于分析。
  • 网络环境:在个人Wi-Fi或有线网络操作,避免公共网络的法律问题。
  • 性能:抓包文件可能很大,过滤 dnshttp 减少数据量。

下一步:深入学习

完成这次实践后,你已经掌握了网络的基本运行机制!以下是进阶建议:

  • 学习协议:深入研究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捕获第一个数据包,感受网络的魅力!如果有任何问题,欢迎留言,我会尽力解答。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值