一、数据链路层
实作一 熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。 这是因为有时校验和会由网卡计算,这时Wireshark抓到本机发送的数据包的校验和都是错误的,所以Wireshark默认关闭了帧的校验字段显示。
实作二 了解子网内/外通信时的 MAC 地址
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地址进行通信,但如果访问非同一子网的计算机时则需要先通过网关进行转发找到该计算机,所以目的MAC是网关的。 很明显自己的物理地址是source,那么对方的物理地址就是Destination中的信息。
发出帧的目的MAC地址为Address: RuijieNe_9f:40:13 (00:74:9c:9f:40:13),接受帧的目的MAC地址为Address: IntelCor_8c:79:36(dc:71:96:8c:79:36)。
实作三 掌握 ARP 解析过程
- 为防止干扰,先使用
arp -d * 命令清空 arp 缓存 ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。- 再次使用
arp -d * 命令清空 arp 缓存 - 然后
ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。 这是因为访问本子网IP会通过ARP解析出IP的MAC地址;如果访问的是非本子网的IP时APR 只能解析得到网关的MAC地址,再由网关将数据给发送出去。 arp为广播方式。 分别为Destination的MAC地址和本机的MAC地址。 分别为Destination的网关地址和本机的MAC地址。
二、网络层
实作一 熟悉 IP 包结构
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL 、协议类型等字段。
通过头部长度字段和总长度字段可以让网络层直接定位IP包中的头部和数据部分,极大的方便了对数据的提取。
实作二 IP 包的分段与重组
根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等
当IPV6中的路由器遇到数据包过大时,路由器会直接丢弃该数据包同时向发送端发回一个"分组太大"的ICMP报文,之后发送端就会使用较小的IP数据包重发。
实作三 考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet 上传输多少跳(hops ),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
若TTL设置为64的话,从这个包到源点一共有16跳;若TTL设置成128的话,从这个包到源点一共有80跳。
三、传输层
实作一 熟悉 TCP 和 UDP 段结构
- 用
Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。 - 用
Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
源端口和目的端口用来提交给应用层的不同程序进程的依据。
实作二 分析 TCP 建立和释放连接
- 打开浏览器访问
qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream ),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。 - 请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
- 请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
1 2 第一次握手时,客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接;
第二次握手时,服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;
第三次握手时,服务端发送一个SYN=0,ACK=1的数据包给客户端端,告诉它连接已被确认,TCP连接建立,开始通讯。 3 完成三次握手后,就建立了TCP连接,之后就可以正常的进行数据发送和接收。 当完成数据发送后,双方要结束对话,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭,故需要经过四次挥手完成TCP的断开。 首先找到四次挥手报文,标志就是 FIN 从图上可以看出,断开连接时首先由一方发出FIN报文,然后另一方接收并回ACK报文;并且它也会发送一个FIN报文表示断开连接,最开始发送的一方也接收并发ACK报文,TCP连接断开。 第一次挥手: 第二次挥手: 第三次挥手和第四次挥手与前两次基本一致:
多个连接是为了更快的传输数据,为用户提供更好的服务。 这是因为一方发送断开连接确认ACK的同时也向另一方发送断开连接的请求。
四、应用层
应用层的协议非常的多,我们只对 DNS 和 HTTP 进行相关的分析。
实作一 了解 DNS 解析
- 先使用
ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。 - 你应该可以看到当前计算机使用
UDP ,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。 - 可了解一下
DNS 查询和应答的相关字段的含义 1 2
这是因为同一个站点有多个计算机同时运行为我们用户提供服务,因此同一站点会存在多个IP地址。
实作二 了解 HTTP 的请求和应答
- 打开浏览器访问
qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream ),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。 - 请在你捕获的包中找到
HTTP 请求包,查看请求使用的什么命令,如:GET, POST 。并仔细了解请求的头部有哪些字段及其意义。 - 请在你捕获的包中找到
HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。 1 2 这里可以看出在HTTP头部使用的是GET命令向服务器发起请求。 3 比如这里就是200。
客户端发出请求时,服务端会检查客户端是否存在该文件,如果客户端不存在该文件,则发送该文件并返回200;如果客户端存在该文件并且该文件在规定期限内没有被修改(Inode,MTime和Size),则服务端只返回一个304,并不返回资源内容,客户端将会使用之前的缓存文件。
|