计算机网络Wireshark 实验

目录

数据链路层

实作一 熟悉 Ethernet 帧结构

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

实作三 掌握 ARP 解析过程

网络层

实作一 熟悉 IP 包结构

实作二 IP 包的分段与重组

实作三 考察 TTL 事件

传输层

实作一 熟悉 TCP 和 UDP 段结构

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

应用层

实作一 了解 DNS 解析

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


数据链路层

实作一 熟悉 Ethernet 帧结构

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

计算机网络Wireshark 实验_第1张图片

 问题

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

回答

在Wireshark抓包之前,物理层网卡已经把前面几层加上去的一些东西去掉了,比如前导同步码、FCS等等,之后利用校验码CRC校验,正确的时候才会进行下一步的操作,这时才开始抓包,所以抓包软件抓到的是去掉前导同步码、FCS以外的数据,没有校验字段。

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

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

计算机网络Wireshark 实验_第2张图片

         这个Mac是同一子网下的主机Mac地址。

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

计算机网络Wireshark 实验_第3张图片

计算机网络Wireshark 实验_第4张图片

        Mac为本主机所在子网网关Mac地址。

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

计算机网络Wireshark 实验_第5张图片

        该MAC是本机所在子网网关的MAC地址

问题

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

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

请问原因是什么?

回答

究其原因,是在访问本子网以外的网络时,都是通过MAC地址将网关送到网关处,再通过IP地址将网关送出,然后再进行查找;所有接收到非子网的电脑返回的资料,都是先到网关,再由网关送到本机上,根据用途MAC。

实作三 掌握 ARP 解析过程

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

计算机网络Wireshark 实验_第6张图片

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

计算机网络Wireshark 实验_第7张图片

 计算机网络Wireshark 实验_第8张图片

会发出一个广播,回复的是网关 

问题

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

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

请问为什么?

回答

当本机接入本子网电脑时,数据包不需要离开本通讯子网,ARP解析也会在本子网内进行,因此获得ARP解析的是MAC物理地址,而MAC物理地址是对方的主机;
当本机访问的是非本子网的计算机时,也就是说此时有两个不同通信子网的主机之间需要通信,数据包需要离开本通信子网,这里就涉及到数据包在两个通信子网之间的传输,传输数据要离开本通信子网,ARP解析必然要经过网关,因此,本ARP解析得到的目的MAC物理地址就是本网关的物理地址(MAC物理地址是MAC物理地址),

网络层

实作一 熟悉 IP 包结构

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

计算机网络Wireshark 实验_第9张图片

问题

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

回答

头部长度是为了表示包的头部长度,可以让接收端计算出报头在什么地方结束,从什么地方开始读数据。总长度是为了接收方的网络层了解到传输的数据包含哪些内容,如果没有这个部分,数据链路层在传输的时候,是填充数据的,填充的部分相应的网络层是不会去掉的。

实作二 IP 包的分段与重组

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

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

计算机网络Wireshark 实验_第10张图片

 计算机网络Wireshark 实验_第11张图片

问题

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

回答

通知发送端重传前直接丢弃。因为在IPv6中分段只能执行源和目的地,路由器上无法执行。因此,当数据包过大时,路由器会将数据包直接丢弃,并将一个“太大分组”的ICMP错误报文发回发送端,之后再由长度较小的IP数据报在发送端重新发送数据。

实作三 考察 TTL 事件

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

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

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

计算机网络Wireshark 实验_第12张图片 TTL是每一次增加1,每一次都会发三次

 问题

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

回答

一般设置的TTL值为128 所以128-50=78跳

传输层

实作一 熟悉 TCP 和 UDP 段结构

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

计算机网络Wireshark 实验_第13张图片

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

计算机网络Wireshark 实验_第14张图片

问题

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

回答

传送层实现的是端到端的通信,即两个设备之间的进程通信,而进程通信需要双方确认,所以源端口号和目的端口号实现端到端的进程通信,无论选择哪种协议,在传送层都是有要求的。

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

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

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

 第一次 客户端发送 SYN 报文 到服务器,标志是SYN,Seq=0

计算机网络Wireshark 实验_第15张图片

第二次 ,服务器接收到 客户端的SYN 报文,回复 SYN + ACK 报文 标志是SYN和ACK ACK=syn+1=1 seq=0

计算机网络Wireshark 实验_第16张图片

 第三次 ,客户端接收到服务端的 SYN+ACK 报文后,回复 ACK报文

Seq=1 ack=接收到的seq+1=1 

计算机网络Wireshark 实验_第17张图片

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

 第一次挥手 FIN +ACK seq=98 ack=161

计算机网络Wireshark 实验_第18张图片

第二次挥手 ACK  seq=161 ack=99

计算机网络Wireshark 实验_第19张图片

第三次挥手 FIN +ACK  seq=161 ack=99

计算机网络Wireshark 实验_第20张图片

第四次挥手 ACK  seq=99 ack=162

计算机网络Wireshark 实验_第21张图片

问题

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

回答

因为这个连接属于短连接,是为了在不太频繁的业务场合,不让它长时间占用通道的情况下,实现多个用户的访问。

问题

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

回答

最后有四次数据交换,其中第二次和第三次都能合在一起,这样的话就只能抓到三个包了。

应用层

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

实作一 了解 DNS 解析

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

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

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

计算机网络Wireshark 实验_第22张图片

计算机网络Wireshark 实验_第23张图片


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的原因可能不止一个,DNS的解析过程首先要检查浏览器的DNS缓存中有没有这个URL的映射关系,如果有就回到IP上完成域名的解析;如果不是,操作系统会先检查自己本地的Hosts文件有没有这个URL的映射关系,有的话会回到IP上完成域名的解析;若仍不具备,计算机须向本地DNS服务器发起查询域名的请求;本地的DNS服务器拿到请求后,先在自己的Cache中查看是否存在该地址,如果存在则直接返回;如果不是这样,本地的DNS服务器就会从组态文件中读取13台根DNS服务器的地址,进而发起对其中一台的请求;直至获取对应IP。

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

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

计算机网络Wireshark 实验_第24张图片

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

计算机网络Wireshark 实验_第25张图片请求方法
1.OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务 器发送‘*’的请求来测试服务器的功能性
2.HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3.GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4.POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5.PUT
向指定资源位置上传其最新内容
6.DELETE
请求服务器删除Request-URL所标识的资源
7.TRACE
回显服务器收到的请求,主要用于测试或诊断
8.CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

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

常见的状态码:

100: 继续 客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。
102: 继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
200: 请求成功 处理方式:获得响应的内容,进行处理
201: 请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到
300: 该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301: 请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL
302: 请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL
304: 请求的资源未更新
400: 非法请求
404: 没有找到 处理方式:丢弃
500: 服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在的源代码出现错误时出现。
501: 服务器无法识别 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。

问题

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

回答

304应答者应征资源未更新,200应答者应征成功,应答内容已有。服务器回答304回答说明qige.io网站的页面已经被浏览器缓存,网站在刷新时直接从本地缓存中取出,说明请求内容并未发生变化,服务器回答304回答。

你可能感兴趣的:(wireshark,macos)