了解 Wireshark 的基本使用:
1、选择对哪块网卡进行数据包捕获
2、开始/停止捕获
3、了解 Wireshark 主要窗口区域
4、设置数据包的过滤
5、跟踪数据流
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
目的MAC、源MAC、类型
1.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
目的MAC是主机的
2.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
目的MAC是网关的
3.再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
目的MAC是网关的
通过以上实验发现:
不出入子网不需要经过网关,所以MAC是主机的
网关是出入本子网和其他子网需要到达的地方,所以目的MAC是网关的
1.为防止干扰,先使用 arp -d * 命令清空 arp 缓存
2.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
3.再次使用 arp -d * 命令清空 arp 缓存
4.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
版本:IPV4;头部长度:20 bytes
总体长度:60;存活时间TTL:128s
根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等
分段标志:Flags
偏移量:Fragment Offset
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
主机发送的数据生存周期呈递增变化
1.用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
2.用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
1.打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
2.请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
第一次握手:客户端发送的TCP报文中将[SYN]设为标志位,段序号Seq=0;
第二次握手:服务器返回的TCP报文中将[SYN,ACK]设为标志位;段序号Seq=0;确认号Ack=1(“第一次握手”所发送段序号Seq+1);
第三次握手:客户端向服务器端发送的TCP报文中将[ACK]设为标志位;段序号Seq=1(“第二次握手”中服务器端确认号Ack的值);确认号Ack=1(“第二次握手”中服务器所发送段序号Seq+1)。
3.请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
第一次挥手:服务器端发送的请求释放连接报文以[FIN,ACK]作为标志位,其中报文序号Seq=904;确认号Ack=7307;
第二次挥手:客户端发送[ACK]作为标志位;其中报文序号Seq=7307;确认号Ack=905;
第三次挥手:客户端发出确认接收和断开连接报文以[FIN,ACK]作为标志位;其中报文序号Seq=7307;确认号Ack=905;
有两次挥手合并了,FIN报文用在本端没有数据发送给对方时,关闭从本端到对端的连接。但是并不影响从对方到本端的连接,也就是说本端仍然可以接收对方的数据。即发送通道关闭,接收通道正常。
如果对方收到本端FIN报文时,对方的接收通道就会关闭。此时,如果对方也没有数据发给本端,那么对方也会发送FIN给本端,用于关闭从对方到本端的连接,这时候就可能出现ACK和FIN合在一起的情况。
如果对方仍然有数据发送,那么就等数据发完,再发FIN来关闭连接,这时候就是四次挥手了。
1.先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
2.你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
3.可了解一下 DNS 查询和应答的相关字段的含义
DNS应答字段含义:
1)QR:查询/应答标志。0表示这是一个查询报文,1表示这是一个应答报文
2)opcode,定义查询和应答的类型。0表示标准查询,1表示反向查询(由IP地址获得主机域名),2表示请求服务器状态
3)AA,授权应答标志,仅由应答报文使用。1表示域名服务器是授权服务器
4)TC,截断标志,仅当DNS报文使用UDP服务时使用。因为UDP数据报有长度限制,所以过长的DNS报文将被截断。1表示DNS报文超过512字节,并被截断
5)RD,递归查询标志。1表示执行递归查询,即如果目标DNS服务器无法解析某个主机名,则它将向其他DNS服务器继续查询,如此递归,直到获得结果并把该结果返回给客户端。0表示执行迭代查询,即如果目标DNS服务器无法解析某个主机名,则它将自己知道的其他DNS服务器的IP地址返回给客户端,以供客户端参考
6)RA,允许递归标志。仅由应答报文使用,1表示DNS服务器支持递归查询
7)zero,这3位未用,必须设置为0
8)rcode,4位返回码,表示应答的状态。常用值有0(无错误)和3(域名不存在)清除缓存
1.打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
2.请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。
GET:获取资源,可理解为读取或下载数据
HEAD:获取资源的元信息
POST:向资源提交数据,相当于写入或上传数据
PUT:类似 POST
DELETE:删除资源
CONNECT:建立特殊的连接隧道
OPTIONS:列出可对资源实行的方法
TRACE:追踪请求-响应的传输路径
3.请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。
200(成功) 服务器已成功处理了请求。
304(未修改)自从上次请求后,请求的网页未修改过。
404(未找到)服务器找不到请求的网页。例如,对于服务器上不存在的网页经常会返回此代码。
完成计算机网络的wirshark抓包实验,让我对计算机网络的数据链路层、网络层、传输层、应用层有了一的了解,同时,也是对老师课上讲的理论知识的一种实践,学习到了计算机网络的分层以及每层之间的相关联系,但是通过计算机网络的接触,也让我知道,我们还需要学习的还有很多,计算机网络还有很长的路要走,任需继续努力。