- Wireshark 实验
- 一、数据链路层
- 1.1 实作一熟悉 Ethernet 帧结构
- 1.1.1 实验目的
- 1.1.2 实验内容
- 1.1.3 问题
- 1.2 实作二 了解子网内/外通信时的 MAC 地址
- 1.2.1 实验目的
- 1.2.2 实验内容
- 1.2.3 问题
- 1.3 实作三 掌握 ARP 解析过程
- 1.3.1 实验目的
- 1.3.2 实验内容
- 1.3.3 问题
- 二、网络层
- 2. 1 实作一 熟悉 IP 包结构
- 2.1.1 实验目的
- 2.1.2 实验内容
- 2.1.3 问题
- 2.2 实作二 IP 包的分段与重组
- 2.2.1 实验目的
- 2.2.2 实验内容
- 2.2.3 问题
- 2.3 实作三 考察 TTL 事件
- 2.3.1 实验目的
- 2.3.2 实验内容
- 2.3.3 问题
- 三、传输层
- 3.1 实作一 熟悉 TCP 和 UDP 段结构
- 3.1.1 实验目的
- 3.1.2 实验内容
- 3.1.3 问题
- 3.2 实作二 分析 TCP 建立和释放连接
- 3.2.1 实验目的
- 3.2.2 实验内容
- 3.2.3 问题
- 四、应用层
- 4.1 实作一 了解 DNS 解析
- 4.1.1 实验目的
- 4.1.2 实验内容
- 4.1.3 问题
- 4.2 实作二 了解 HTTP 的请求和应答
- 4.2.1 实验目的
- 4.2.2 实验内容
- 4.2.3 问题
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等
1.1.2 实验内容1.1.3 问题数据链路层将网络层的包封装成帧,在首部添加14个字节,在尾部添加4个字节。
- 首部包括6个字节的目的MAC,6个字节的源MAC以及2个字节的类型
- 尾部为4个字节的帧检验序列
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因
1.2 实作二 了解子网内/外通信时的 MAC 地址 1.2.1 实验目的Wireshark 在抓包时会自动过滤校验字段
- ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
- 然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
- 再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
目的MAC:00:74:9c:9f:40:13 此MAC为子网网关MAC
源MAC:38:00:25:c6:bd:e9 此MAC为本机MAC
目的MAC:00:74:9c:9f:40:13 此地址为子网网关MAC
源MAC:38:00:25:c6:bd:e9 此MAC为本机MAC
1.2.3 问题目的MAC:00:74:9c:9f:40:13 此地址为子网网关MAC
源MAC:38:00:25:c6:bd:e9 此MAC为本机MAC
通过以上的实验,你会发现:
- 访问本子网的计算机时,目的 MAC 就是该主机的
- 访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
1.3 实作三 掌握 ARP 解析过程 1.3.1 实验目的处于同一个子网内时不用经过网关,而不处于同一子网时需要借助网关将数据帧发出去
- 为防止干扰,先使用 arp -d * 命令清空 arp 缓存
- ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
- 再次使用 arp -d * 命令清空 arp 缓存
- 然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应
目的MAC:ff:ff:ff:ff:ff:ff
回应的源MAC为旁边计算机的MAC,目的MAC为本机MAC
1.3.3 问题向子网网关请求目的ip的MAC地址,网关回应目的ip的MAC地址
通过以上的实验,你应该会发现,
- ARP 请求都是使用广播方式发送的
- 如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。
请问为什么?
二、网络层 2. 1 实作一 熟悉 IP 包结构 2.1.1 实验目的访问本子网的计算机,由于此时的两计算机是直接通信,不需要网关进行连接,当访问外部计算机的时候,信息传输需要经过网关,才能与外部网络相连,需要网关帮助获取目的ip的MAC地址
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段
2.1.2 实验内容 2.1.3 问题为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
2.2 实作二 IP 包的分段与重组 2.2.1 实验目的IP头部包括最多40字节的可选择字段,需要通过头部长度字段和总长度字段让上层将 IP 包中的数据提取出来
根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等
2.2.2 实验内容2.2.3 问题由图可知,IP包被分为两段,长度分别为 1514 和 562 字节,其中第一个包标志位中DF位为0,表示可以分片,MF位为1,表示不是原始数据报的最后一个片,且片偏移量为0;第一个包标志位中DF位为0,表示可以分片,MF位为0,表示是原始数据报的最后一个片,且片偏移量为1480
分段与重组是一个耗费资源的 *** 作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
2.3 实作三 考察 TTL 事件 2.3.1 实验目的在IPV6中如果数据包过大路由器会进行丢弃
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
2.3.2 实验内容2.3.3 问题由图可以看出,TTL是从1开始增加,每次增加1,当TTL增加到13时到达目的IP,而后停止后续追踪
在 IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
三、传输层 3.1 实作一 熟悉 TCP 和 UDP 段结构 3.1.1 实验目的14跳
- 用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
- 用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
TCP结构:各2B的源端口和目的端口;4B的序号;4B的确认号;4位的数据偏移;6位的保留字段;各占1位的紧急位URG,确认位ACK,推送位PSH,复位位RST,同部位SYN,终止位Fin;2B的窗口;2B的校验和;2B的紧急指针以及长度可变的选项和填充字段
3.1.3 问题UDP结构:各2B的源端口和目的端口;2B的UDP数据包长度;2B的校验和
由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
3.2 实作二 分析 TCP 建立和释放连接 3.2.1 实验目的实现端对端传输;用于两台主机之间两个端口之间的通信
- 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包
- 请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征
- 请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征
建立连接:第一次握手时SYN位置为1,选择初始序号seq;第二次握手时SYN和ACK位置为1,确认号ack为上次握手seq+1,表示收到确认希望请求seq+1的数据,同时自己选择一个初始序号seq;第三次握手时将SYN位置为0,确认号ack为上次seq+1,序号seq为上次ack。当SYN位置为1时表示这是一个连接请求或者链接接受报文
3.2.3 问题释放连接:第一次挥手时将FIN位置为1,序号seq为上一次传送的数据最后一个字节的序号+1,;第二次挥手时将FIN位置为1,ack为第一次挥手的seq+1,seq为上一次传送的数据最后一个字节的序号+1;第三次挥手若服务器没有想客户机发送的数据就将将FIN位置为1,ack为上次已发送的确认号,seq为此段报文的序号;第四次挥手为客户机收到连接释放发出确认,ack为上次序号seq+1,seq为上次确认号
- 去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io 时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?
- 我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?
四、应用层 4.1 实作一 了解 DNS 解析 4.1.1 实验目的
- 作用是加快我们的访问速度
- 由于第二次和第三次挥手都由服务器发送,所以服务器可能将两次挥手整合成一次进行发送
- 先使用ipconfig /flushdns命令清除缓存,再使用nslookup qige.io命令进行解析,同时用Wireshark 任意抓包(可用 dns 过滤)
- 你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果
- 可了解一下 DNS 查询和应答的相关字段的含义
4.1.3 问题由第40条信息可以看出本机向DNS服务器请求qige.io的ip,DNS服务器在拿到结果后返回给本机
你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
4.2 实作二 了解 HTTP 的请求和应答 4.2.1 实验目的同一个网站可能挂载在多个服务器上,用以响应客户的请求,通常我们访问的都是最近的
- 打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获
- 请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义
- 请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义
4.2.3 问题如图所示,该请求为GET请求,HTTP/1.1为版本,Host为目的IP,User-Agent为用户代理,
响应状态码为200表示请求报文成功;304为客户端已经执行了GET,但文件未变化;404为没有发现文件、查询或URl
刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
如果响应状态码为304,表明请求的数据没有发生改变,这样浏览器在加载页面时就会从本地缓存中读取,而非重新请求数据,加快了我们的访问速度
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)