Wireshark实验

简介

Wireshark是一个可以捕获和分析数据包的软件;
其工作原理是:当启动了wireshark,那么wireshark就会通过操作系统将经过网卡的数据包的数据包拷贝一份发给自己。

工作流程:
捕获:wireshark将网卡调整为混杂模式,该模式下捕获网络中传输的二进制数据。
转换:wireshark将捕获到的二进制数据转换为我们容易理解的形式,同时也会将捕获到的数据包按照顺序进行组装。
分析:最后wireshark将会对捕获到的数据包进行分析。这些分析包括识别数据包所使用的协议类型、源地址、目的地址、
源端口和目的端口等。wireshark有时也会根据自带的协议解析器来深入地分析数据包的内容。

在这里插入图片描述


数据链路层

实作一

熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
查看自己的网卡信息,在捕获->选项里面选择WLAN
在这里插入图片描述
在这里插入图片描述
点击“开始”开始抓包
在这里插入图片描述
左下角数据详细区间中 Ethernet 帧结构:
Frame: 物理层的数据帧
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 网络层IP包头部信息
Transmission Control Protocol: 传输层T的数据段头部信
Hypertext Transfer Protocol: 应用层的信息
在这里插入图片描述
问题:你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
回答:当校验和由网卡计算时,这时wireshark所捕获到的计算机发送的数据包的校验和是错误的,此时会默认关闭WireShark自己的校验。

实作二

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

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

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

用ip.addr == 104.18.41.82滤出所需查看的包
在这里插入图片描述
在这里插入图片描述
这个 MAC 地址是计算机所在子网的网关地址

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

实作三

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

再次使用 arp -d * 命令清空 arp 缓存
然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ARP的请求是:Who has 192.168.110.195? Tell 192.168.110.1
回复的为本机的MAC地址

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

回答:ARP代理,访问非子网IP时是通过路由器访问的,路由器再把发出去,目标IP收到请求后,再通过路由器端口IP返回去,那么ARP解析将会得到网关的MAC。

网络层

实作一

使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
在这里插入图片描述
问题:为提高效率,我们应该让 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 包如何进行分段,如:分段标志、偏移量以及每个包的大小等

使用 ping qige.io -l 500 发送500个字节给172.67.143.53
在这里插入图片描述
在这里插入图片描述IP包总长度为528个字节,分片偏移为0

问题:分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
回答:IPv6 中,如果路由器遇到了一个大数据包会直接丢弃,然后通知发送端重新传输。

实作三

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

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

请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
在这里插入图片描述
第一跳:
在这里插入图片描述
第八跳:
在这里插入图片描述
Tracert 先发送 TTL 为 1 的回应数据包,TTL逐渐增加1直到到达目的主机。

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

传输层

实作一

熟悉 TCP 和 UDP 段结构
用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题:由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
回答:源端口是指发送数据包的一方的端口,目的端口是指接受数据包的一方的端口,端口可以用来识别发送方和接收方,便于实现程序之间的通信。

实作二

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

请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
在这里插入图片描述
三次握手:
1、第一次握手计算机发送的TCP报文中以[SYN]作为标志位,Seq=0;
2、第二次握手服务器返回的TCP报文中以[SYN,ACK]作为标志位;Seq=0;Ack=1(第一次握手中Seq的值+1);
3、第三次握手计算机再向服务器端发送的TCP报文中以[ACK]作为标志位;Seq=1;Ack=1。

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

应用层

实作一

了解 DNS 解析
先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
在这里插入图片描述

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

可了解一下 DNS 查询和应答的相关字段的含义
在这里插入图片描述(图片来源于网络 )

16位标识字段用于标记一对DNS查询和应答,以此区分一个DNS应答是哪个DNS查询的回应
16位标志字段用于协商具体的通信方式和反馈通信状态。DNS报文头部的16位标志字段的细节如图
在这里插入图片描述(图片来源于网络)我参考的文章

问题:你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
回答:一直重复请求并不断的判断,直到获得对应的IP为止

实作二

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

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

部分请求头字段的具体含义(来源于网络)

Accept:浏览器可接受的MIME类型。 Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP1.1(HTTP
1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。 Content-Length:表示请求消息正文的长度。 Cookie:设置cookie,这是最重要的请求头信息之一
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 Host:初始URL中的主机和端口。
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU

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

应答代码为:200
在这里插入图片描述

(来源于网络)
响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作 4xx:客户端错误,请求包含语法错误或者请求无法实现
5xx:服务器错误,服务器不能实现一种明显无效的请求

部分状态代码、状态信息的含义

100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 200 OK
一切正常,对GET和POST请求的应答文档跟在后面。 201 Created 服务器已经创建了文档,Location头给出了它的URL。
204 No Content 没有新文档,浏览器应该继续显示原来的文档。 301 Moved Permanently
客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。 302 Moved Temporatily
类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。 400 Bad Request 请求出现语法错误。 401
Unauthorized
客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。
403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。 404 Not
Found 无法找到指定位置的资源。这也是一个常用的应答 500 Internal Server Error
服务器遇到了意料不到的情况,不能完成客户的请求。 501 Not Implemented
服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。 502 Bad Gateway
服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
(我参考的文章)

问题:刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
回答:
在这里插入图片描述
(没有很明白这部分,看了网上的解释 我参考的文章
因为浏览器要判断文件有无修改,和cache结果是否一致。这要经过以下几个状态:
1.初始状态
第一次访问时,向服务器发送请求,成功收到响应,返回200,浏览器下载资源文件,并记录下response header和返回时间。
2.再次请求相同资源
再次访问相同资源时,本地先判断是否需要发送请求给服务端:比较当前时间和上一次返回200时的时间差,如果未超过过期时间,则命中强缓存,读取本地缓存资源。如果过期了,则向服务器发送header带有If-None-Match和If-Modified-Since的请求
3.服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回200;
4.如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回304;不一致则返回新的last-modified和文件并返回200;

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值