大三上计算机网络实验报告。


文章目录

  • 一. Wireshark 基本使用
  • 二、数据链路层相关实验
  • 三、网络层
  • 四、传输层
  • 五、应用层
  • 总结



一. Wireshark 基本使用

  1. 选择指定网卡进行数据包捕获
    capture -> options
  2. wireshark推流过滤公式 wireshark过滤data_wireshark

  3. Wireshark 主要窗口区域
  4. wireshark推流过滤公式 wireshark过滤data_Wireshark_02

  5. 数据包的过滤
    过滤方法主要分为两种。一种是抓包前过滤,另一种是抓包后过滤也称显示过滤。
    a) 抓包前过滤
    Capture -> Capture Filters
  6. wireshark推流过滤公式 wireshark过滤data_字段_03

  7. b) 抓包后过滤(显示过滤):主要采用过滤栏动态设置条件。
    常用的过滤条件有:
    ① ip host 60.207.246.216 and icmp:捕获主机IP为60.207.246.216的ICMP数据包;
    ② src host 192.168.1.104:数据源主机的IP为192.168.1.104;
    ③ src port 80:数据源主机的端口为80;
    ④ ! broadcast:不抓取广播包;
    ⑤ http.request.method==“GET”:显示HTTP GET方法相关的包;
    ⑥ data contains “abcd”:过滤出data数据包中包含"abcd"内容的数据流。
  8. 跟踪数据流
    一个完整的数据流一般都是由很多个包组成的,可以通过跟踪数据量查看该流的完整数据流。还有这个数据流中包含的数据包。
    右键指定的包,点击follow,选择对应的数据流类型。
  9. wireshark推流过滤公式 wireshark过滤data_字段_04

    wireshark推流过滤公式 wireshark过滤data_字段_05


二、数据链路层相关实验

1. 实作一 熟悉 Ethernet 帧结构: 使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。

**Tip:** 帧结构类型分类:0x0800 IP、0x0806 ARP。

wireshark推流过滤公式 wireshark过滤data_wireshark推流过滤公式_06


问题1: Wireshark 展现的帧中没有校验字段?

:网卡在物理层获取数据后,首先会去除前导码,然后对帧进行CRC校验。如果校验不通过,则丢弃该帧;如果校验和正确,则进一步判断是接收帧还是转发帧。如果是接收,此时抓包工具Wireshark才能抓取数据。故此时的数据已经去除前导码和校验码。

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

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

wireshark推流过滤公式 wireshark过滤data_Wireshark_07


wireshark推流过滤公式 wireshark过滤data_Wireshark_08


:发出帧的目的MAC地址和返回帧的源MAC地址是 5a:2c:ba:bf:3d:00,该mac地址属于目的主机。

b) ping www.baidu.com,同时用 Wireshark 抓这些包,记录发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?

wireshark推流过滤公式 wireshark过滤data_Wireshark_09


wireshark推流过滤公式 wireshark过滤data_字段_10


:发出帧的目的MAC地址和返回帧的源MAC地址是 24:12:81:dd:9a:3a,该mac地址属于本机网关MAC地址。

wireshark推流过滤公式 wireshark过滤data_字段_11


wireshark推流过滤公式 wireshark过滤data_wireshark_12

c) ping www.cqjtu.edu.cn ,同时用 Wireshark 抓包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?

wireshark推流过滤公式 wireshark过滤data_wireshark_13


wireshark推流过滤公式 wireshark过滤data_wireshark_14


:发出帧的目的MAC地址和返回帧的源MAC地址是 24:12:81:dd:9a:3a,该mac地址同样属于本机网关MAC地址。

问题1: 通过实作二,你会发现:访问本子网的计算机时,dst.mac 就是目的主机的;访问非本子网的计算机时,dst.mac 是本机网关的。请问原因是什么?
:在同一通信子网中进行数据交换,无需路由功能,所以dst.mac 就是目的主机的物理地址;当在不同通信子网进行数据交换时,需要路由功能,即首先需要把数据包传给本机网关,由网关统一进行数据的传输和接收。

3. 实作三 掌握 ARP 解析过程

a) 为防止干扰,先使用 arp -d * 命令清空 arp 缓存
b) ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查 看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。

:请求的目的MAC地址为广播地址;请求响应的源MAC地址为目的主机的物理地址,目的MAC地址为本机的物理地址。

wireshark推流过滤公式 wireshark过滤data_wireshark推流过滤公式_15

wireshark推流过滤公式 wireshark过滤data_网络_16

c) 再次使用 arp -d * 命令清空 arp 缓存
d) 然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
:ARP请求的是本机网关物理地址,由下图可知,该请求是由本地网关回应的。

wireshark推流过滤公式 wireshark过滤data_Wireshark_17

wireshark推流过滤公式 wireshark过滤data_Wireshark_18

wireshark推流过滤公式 wireshark过滤data_wireshark推流过滤公式_19

Tip1:window 使用arp -d * 提示参数错误的解决办法。
① 运行:netsh i i show in // 找到正在使用的网卡idx号
② 解绑ARP:netsh -c i i delete neighbors 网卡idx号
该命令的效果等同与arp -d

问题1: 通过以上的实验,你应该会发现,ARP 请求都是使用广播方式发送的,如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。请问为什么?

:在同一通信子网中进行数据交换,无需路由功能,所以dst.mac 就是目的主机的物理地址;当在不同通信子网进行数据交换时,需要路由功能,即首先需要把数据包传给本机网关,由网关统一进行数据的传输和接收。


三、网络层

实作一 熟悉 IP 包结构

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

wireshark推流过滤公式 wireshark过滤data_字段_20

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

:设置头部长度字段是为了将IP包的头部部分与数据部分分隔开,能够更快的读取数据包的数据;设置总长度字段主要是针对数据包长度小于最短长度要求采用pad 域填充时,方便对方主机接收到该数据包去除多余填充部分,进行有效的数据提取。

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

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

ping 202.202.240.16 -l 2000 返回的一次响应数据分为三段: 观察可以发现,分成的三个数据包的标识字段相同。第一个和第二个包的Flags字段为0x20,表示还有其他包,第三个包的Flags字段为0x00,表示没有其他包。且第一个包的偏移字段为0,第二个包的偏移字段为1472,正好为第一个包的总长度减去IP包头部的20个字节,第三个包的偏移字段为1480,正好为第一个包和第二个包的总长度再减去各自的包头部长度。

wireshark推流过滤公式 wireshark过滤data_wireshark推流过滤公式_21


wireshark推流过滤公式 wireshark过滤data_字段_22


wireshark推流过滤公式 wireshark过滤data_wireshark_23

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

:IPV6称数据为负载,相较于IPV4,设置PayloadLength(负载长度)字段,16位字段长度使得负载由原来的1500个字节扩展到65535字节,已经能够满足一般的数据包大小了。超过这一字节数的负载,将该字段值置为“0”,使用扩展头逐个跳段(Hop-by-Hop)选项中的巨量负载(JumboPayload)选项。

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

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

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

:由主机发送不同TTL值的数据请求包,从1开始,当中间节点接收到数据包时,置TTL减一,查看目的ip地址,如果不为本机,则转发给下一个节点。同时检查TTL值,如果为零则发送超时信息返回主机。主机接收到超时信息则可依次确实中间节点顺序。值得注意的是:主机会发送三次相同的TTL值进行确认。如果主机三次发送同一TTL值的数据包,一定时间内都没有接收到超时消息时,则将TTL增一,继续发送,直到发送到目的地址。

wireshark推流过滤公式 wireshark过滤data_Wireshark_24

wireshark推流过滤公式 wireshark过滤data_Wireshark_25


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

:通常认为TTL的初始值为大于接收到数据包的TTL的最小被2整除的数。如果接受到TTL值为50的数据包,则大致可以确认起始的TTL值为64,中间经过了14跳。


四、传输层

实作一 熟悉 TCP 和 UDP 段结构

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

wireshark推流过滤公式 wireshark过滤data_Wireshark_26

wireshark推流过滤公式 wireshark过滤data_wireshark推流过滤公式_27

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

wireshark推流过滤公式 wireshark过滤data_wireshark_28

问题一: UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?

:通过IP地址的路由功能,找到目的主机后,源和目的端口号则用于确认主机间是哪两个进程进行通信。实作二 分析 TCP 建立和释放连接

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

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

wireshark推流过滤公式 wireshark过滤data_wireshark_29

:三次握手建立连接的包,它们几乎不包含其他数据,故它们包的size 较小。主要表现在标志位(Flag)的不同。对于第一次握手,它的ACK确认号为0,SYN同步号为1;对于第二次握手,它的ACK确认号为1,SYN同步号为1;对于第三次握手,它的ACK确认号为1,SYN同步号为0。2. 请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。

wireshark推流过滤公式 wireshark过滤data_网络_30

:四次挥手释放连接的包同样几乎不包含其他数据,故它们包的size较小。主要表现在标志位(Flag)上。将FIN结束位置1,用于释放连接,发送方告知接收方已无数据要发送或请求方不在请求数据。当接收方接受到该数据包后,将回复一个ACK=1的数据包用于表示收到断开连接请求。

问题1: 去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
:建立多个连接,用户可同时对多个进程进行通信。例如:可能主机的视频资源与文档资源由不同的进程进行管理,此时建立多个连接就可以加快获取目的主机资源数据的速度。

问题2: 我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
:第二次挥手与第三次挥手合并了。观察释放连接时的四次挥手数据包,发现第二次与第三次握手的标志位并不冲突,则可将两者合并,响应对方主机释放连接的请求的同时附加与请求释放连接的消息。


五、应用层

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

wireshark推流过滤公式 wireshark过滤data_wireshark推流过滤公式_31

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

wireshark推流过滤公式 wireshark过滤data_Wireshark_32

wireshark推流过滤公式 wireshark过滤data_wireshark_33

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

wireshark推流过滤公式 wireshark过滤data_网络_34

16位标识字段用于标记一对DNS查询和应答,以此区分一个DNS应答是哪个DNS查询的回应16位标志字段用于协商具体的通信方式和反馈通信状态。

wireshark推流过滤公式 wireshark过滤data_网络_35

  • QR:查询/应答标志。0表示这是一个查询报文,1表示这是一个应答报文
  • opcode,定义查询和应答的类型。0表示标准查询,1表示反向查询(由IP地址获得主机域名),2表示请求服务器状态

问题1: 你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
:DNS是一套分布式的域名服务系统。观察两次DNS解析,发现前者应答返回的是IPV4格式的地址,后者应答返回的是IPV6格式的地址,最终都在终端页面显示。可能是为了防止获取域名的过程收到攻击或干扰,通过不同路径解析对应的域名。

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

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

  3. ① post:数据以流的方式传输,不会在请求地址栏显示(故需要指定数据长度,没有限制数据大小)。是目前最常用的请求方式。
    ② get:数据拼接在请求地址栏,数据长度有限制,且存在安全隐患。
  4. 请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。
  5. wireshark推流过滤公式 wireshark过滤data_网络_37

  6. ① 1xx:表示收到请求。
    ② 2xx:成功,请求成功被接受。
    ③ 3xx:重定向。
    ④ 4xx:客户端错误。
    ⑤ 5xx:服务器错误。

问题1: 刷新 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
:第一次访问时,向服务器发送请求,收到状态码为200的响应。再次访问时,比较当前访问时间与上次访问返回200的时间差,如果未超时,则直接使用缓存,如果超时则向服务器发送新的请求。服务器收到请求后根据ETAG值判断请求的文件是否被修改,如果未被修改,则返回304,告知客户端直接使用缓存数据;如果发生了修改则返回200。


总结

通过WireShark抓包工具的使用,对计网的各级拓扑结构有了更深的理解。