1 Star 0 Fork 0

Joise/computer-network-experiment-ii

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Wireshark 实验

Wireshark抓包教程

1、主界面

image-20211027082943380

2、捕获->选项,勾选电脑网卡。点击start,启动抓包。

image-20211027083223528

3、wireshark启动后,wireshark处于抓包状态中。

image-20211027083428513

4、在cmd执行ping www.baidu.com

image-20211027083621164

5、可以通过在过滤栏设置过滤条件进行数据包列表过滤

image-20211027084436975

数据链路层

实作一 熟悉 Ethernet 帧结构

image-20211027084741735

源Mac地址:3c:f0:11:ea:a5:1f

目的Mac地址:00:74:9c:9f:40:13

类型IPv4

源IP: 10.161.172.184

目的IP: 14.215.177.39

字段为:19

字节长度为:74bytes(592 bits)

问题:你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。

**答:**校验字段是在物理层进行校验传输是否出错的,wireshark抓的包是校验后的包,所以wireshark展现给我们的帧中没有校验字段。

实作二 了解子网内/外通信时的 MAC 地址

  1. ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?

    image-20211027090229786

    发送

    image-20211027091339967

    返回

    image-20211027091315288

    发出帧的目的 MAC 地址:00:74:9c:9f:40:13

    返回帧的源 MAC 地址:00:74:9c:9f:40:13

    MAC 地址是是旁边的计算机的

  2. 然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?

    image-20211027091446731

    发出

    image-20211027091606545

    返回

    image-20211027091640580

  3. 再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?

image-20211027091931538

发出

image-20211027092017980

返回

image-20211027092042991

问题

通过以上的实验,你应该会发现,

  1. 访问本子网的计算机时,目的 MAC 就是该主机的
  2. 访问非本子网的计算机时,目的 MAC 是网关的

请问原因是什么?

​ **答:**ARP代理,访问非子网计算机时是通过路由器转接的,MAC地址是接入路由器端口的地址,再通过路由器发给想要访问的计算机。

实作三 掌握 ARP 解析过程

  1. 为防止干扰,先使用 arp -d * 命令清空 arp 缓存

    image-20211110084424360

    1. 先运行:netsh i i show in 找到正在使用的网卡idx号

    2. 解绑ARP:netsh -c i i delete neighbors 11

    这里的11为网卡idx号

    命令的效果等同与arp -d

    image-20211110084525307

  2. ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。

    image-20211110083513838

    请求的目的mac

    image-20211110085308690

    回应的目的mac与回应的源mac

    image-20211110085433699

  3. 再次使用 arp -d * 命令清空 arp 缓存

    image-20211110085840345

  4. 然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。

image-20211110090055079

ARP 请求的是 Who has 10.160.255.254? Tell 10.161.172.184

回应的MAC地址

image-20211110091424980

问题

通过以上的实验,你应该会发现,

  1. ARP 请求都是使用广播方式发送的
  2. 如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。

请问为什么?

**答:**如果访问的是我所处的本子网的ip,ARP 缓存中没有该 IP,那么发送一个广播,在子网中找寻这个 IP。如果有,那么ARP解析协议将会直接得到该ip对应的Mac地址。

如果访问的是非本子网的ip,那么ARP解析将直接得到网关的mac地址。因为要想访问对方,在处于同一子网的条件下,应该知道对方的MAC地址,但是不处于同一子网,就需要对方所处子网网关的mac地址。

网络层

实作一 熟悉 IP 包结构

使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。

image-20211110094144610

版本:IPV4

服务类型:0x00

头部长度:20 bytes

总体长度:60

标识符:0x084f

存活时间TTL:128s

协议类:ICMP

头部校验数:0x0000

源地址:10.161.172.184

目的地址:172.67.143.53

问题

为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?

:为了在此基础上更加提高效率,有头部长度字段和总长度字段是为了方便上层将 IP 包中的数据提取出来,当数据长度超过1500B时就会被返回链路层进行分段,所以标明是为了更方便的读取数据。

实作二 IP 包的分段与重组

根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。

缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等

image-20211124084008464

image-20211124084023684

image-20211124084903228

Total Length : 1500 总长度1500

问题

分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?

答:丢掉然后通知发送端重新传送

实作三 考察 TTL 事件

在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。

在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。

请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。

image-20211124085610297

image-20211124085639166

本机发送的第一个包,TTL=1,只跳一次,这一跳是本网的网关。网关返回通知包过期,得到网关的地址。

image-20211124085719653

image-20211124085943549

以后的每一次发送的包的TTL+1,每次包过期,都可以获得返回包的源地址。

image-20211124090231360

问题

在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?

**答:**64 - 50 = 14 推断这个包从源点到你之间有14跳。

传输层

实作一 熟悉 TCP 和 UDP 段结构

  1. 用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。

    image-20211124090657903

    image-20211124090913100

    Source Port源端口:53845

    Destination Port目的端口:443

    sequence Number序列号:14587

    Acknowledgment Number确认号:55950

    Checksum校验和:ox7da6

  2. 用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。

image-20211124091529668

image-20211124091553756

Source Port源端口:54915

Destination Port目的端口:54915

Length长度:271

Checksum校验:0x3dc4

问题

由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?

**答:**传输层实现的是端到端的通信,需要源端口号与目的端口号实现两边的确认。

实作二 分析 TCP 建立和释放连接

  1. 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。

    image-20211211141221573

  2. 请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。

    image-20211211141344130

    SYN 同步序列号,用来发起一个TCP连接

  3. 请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。

    image-20211211141537625

TCP断开连接是通过发送FIN报文,来告诉对方数据已经发送完毕,可以释放连接了。

问题一

去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?

**答:**访问网页是有多个连接组成的。每个连接传送完数据后就会断开。断开连接,由于页面已经被缓存下来,页面仍然存在。若要重新进行发送数据,就要再次进行连接。作用:实现多个用户进行访问,对业务频率不高的场合,节省通道的使用。

问题二

我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?

**答:**因为第二次和第三次合并,如果对方没有数据发给本端,也会发送FIN给本端,用于关闭从对方到本端的连接,这时候就可能出现ACK和FIN合在一起的情况。

应用层

应用层的协议非常的多,我们只对 DNS 和 HTTP 进行相关的分析。

实作一 了解 DNS 解析

  1. 先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。

    image-20211211142435901

    image-20211211142517391

  2. 你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。

    image-20211211142620216

  3. 可了解一下 DNS 查询和应答的相关字段的含义

    答:

    16位的标志位 QR:查询/应答标志。0表示这是一个查询报文,1表示这是一个应答报文

    opcode,定义查询和应答的类型。0表示标准查询,1表示反向查询(由IP地址获得主机域名),2表示请求服务器状态

    AA,授权应答标志,仅由应答报文使用。1表示域名服务器是授权服务器

    TC,截断标志,仅当DNS报文使用UDP服务时使用。因为UDP数据报有长度限制,所以过长的DNS报文将被截断。1表示DNS报文超过512字节,并被截断

    RD,递归查询标志。1表示执行递归查询,即如果目标DNS服务器无法解析某个主机名,则它将向其他DNS服务器继续查询,如此递归,直到获得结果并把该结果返回给客户端。0表示执行迭代查询,即如果目标DNS服务器无法解析某个主机名,则它将自己知道的其他DNS服务器的IP地址返回给客户端,以供客户端参考

    RA,允许递归标志。仅由应答报文使用,1表示DNS服务器支持递归查询

    zero,这3位未用,必须设置为0 rcode,4位返回码,表示应答的状态。常用值有0(无错误)和3(域名不存在)

    应答字段 域名,类型,生命周期,数据长度,地址

问题

你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?

**答:**这与DNS的解析过程有关。

1、DNS解析过程是先从浏览器的DNS缓存中检查是否有这个网址的映射关、系,如果有,就返回IP,完成域名解析;

2、如果没有,操作系统会先检查自己本地的hosts文件是否有这个网址的映射关系,如果有,就返回IP,完成域名解析;

3、如果还没有,电脑就要向本地DNS服务器发起请求查询域名;本地DNS服务器拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话直接返回;

4、没有的话本地DNS服务器会从配置文件中读取13个根DNS服务器的地址,然后向其中一台发起请求;直到获得对应的IP为止。所以DNS解析的请求不止一个

实作二 了解 HTTP 的请求和应答

  1. 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。

    image-20211211144247949

  2. 请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。

    image-20211211144439609

    请求头(Request):

    Host:远程服务器的域名

    Connection:keep-alive 告诉服务器当前保持活跃

    User-agent:客户端的一些信息,浏览器信息 版本

    Accept:text/html application/xml 告诉服务器客户端浏览器这边可以出里什么数据; Accept-Encodeing:gzip 告诉服务器我能支持什么样的压缩格式

    返回头(response-header): cache-control:private/no-cache; 私有的不需要缓存/no-cache也不需要缓存 connection:keep-live; 服务器同意保持连接 content-Enconding:gzip;除去头的剩余部分压缩返回格式 content-length:内容长度 content-type:text/css;返回内容支持格式 Date: 时间 server:ngnix 服务器类型

  3. 请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。

image-20211211144845091

301 Moved Permanently 301重定向

200 成功处理了请求,一般情况下都是返回此状态码;

304 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

404 服务器找不到请求的网页。

问题

刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?

**答:**第一次访问时成功收到响应,就会返回200,浏览器第二次发送请求的时候,缓存还在浏览器中,如果资源没有修改,就可以不用传送给我,就答应304,304表示自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/joise_vip/computer-network-experiment-ii.git
git@gitee.com:joise_vip/computer-network-experiment-ii.git
joise_vip
computer-network-experiment-ii
computer-network-experiment-ii
master

搜索帮助