Wireshark实验(计算机网络实验2)
实验
数据链路层实现——熟悉的帧结构
使用任意一款抓包,熟悉帧结构,如目的MAC、源MAC、类型、字段等。
①打开并选择正确的网络接口,例如下图中我选择的是WLAN。
②打开cmd窗口,输入以下命令,同时使用它来抓包。
ping www.baidu.com
③抓包成功,但数据列表中可能有很多IP地址包,检查起来比较麻烦。您可以输入目标地址进行搜索。
ip.addr == 14.215.177.38 and icmp
ping后回复IP为14.215.177.38,所以查到的地址就是对应的地址。
具体情况如下:
从数据包详细信息中可以看到:
源Mac地址:34:e1:2d:xx:xx(具体信息未显示)
目标Mac地址:00:74:9c:xx:xx(具体信息未显示)
类型 IPv4()
场帧为:19
帧的字节长度为:(592位)
问题:您会发现向我们显示的框架中没有检查字段。请理解原因。
答:抓包之前,已经对物理层网卡进行了验证。只有正确后才会进行下一步。当我们使用该方法抓包时,我们抓到的是经过验证的数据包,所以我们看到的帧是没有校验字段的。
实现2:了解子网内外通信时的MAC地址
1. ping 旁边的计算机(同一子网),同时捕获这些数据包,并记录发出帧的目的 MAC 地址和返回帧的源 MAC 地址。
不难发现他只显示请求超时,可能是以下几种情况:
①对方已经关机,或者网络上根本不存在该地址;
② 对方与你不在同一网段,通过路由无法找到对方,但有时对方确实存在。当然,如果不存在,则会返回超时消息;
③对方确实存在,但设置了ICMP包过滤(如防火墙设置)。
2. .io(或本子网外的主机),捕获这些数据包(可以通过icmp过滤),并记录发出帧的目的MAC地址和返回帧的源MAC地址。
① ping 棋歌教学网站,输入命令。
ping qige.io
②用于抓包并使用icmp过滤查看Mac地址。
Ping(或该子网之外的主机),同时捕获这些数据包,并记录传出帧的目的 MAC 地址和返回帧的源 MAC 地址。
在此插入图片描述
✎问题:通过以上实验,你会发现:
当访问该子网上的计算机时,目标MAC属于该主机。
访问该子网外的计算机时,目的MAC属于网关。
✎原因是什么?
答:ARP代理,访问非子网计算机时,是通过路由器进行转发的。 MAC地址是连接路由器的端口的地址,然后通过路由器发送到相应的计算机。实现三:掌握ARP解析流程
1. 为防止干扰,请先使用arp -d *命令清除arp缓存。
arp -d *
2. ping 旁边的计算机(同一子网),捕获这些数据包(可用arp过滤),检查ARP请求的格式和请求内容,并注意请求的目的MAC地址。再次检查请求的响应,注意响应的源MAC和目的MAC地址。
如果显示,则可以观察到 Mac 地址:
根据搜索信息,虽然我和同学在同一个子网,但是IP不是静态IP,ping会导致连接超时等情况。
3、再次使用arp -d *命令清除arp缓存。
4. 然后 ping Qige.io(或该子网之外的主机),并捕获这些数据包(可以使用 arp 过滤)。检查 ARP 请求是什么,并注意谁响应该请求。
ping qige.io
通过上面的实验,我们发现ARP请求是采用广播方式发送的。
✎问题:
如果访问的是该子网的IP,则ARP解析会直接获取该IP对应的MAC;如果访问的是本子网以外的IP,那么ARP解析就是获取网关的MAC。为什么?
答:ARP代理,访问非子网IP时,是通过路由器访问的。然后路由器发送该信息。目标IP收到请求后,通过路由器端口IP返回,这样ARP解析就会得到网关的MAC地址。
网络层实现——熟悉IP数据包结构
1、使用任意命令抓包(可进行IP过滤),熟悉IP数据包的结构,如:版本、报头长度、总长度、TTL、协议类型等字段。
我们可以ping一下百度,然后用它来抓包,就可以观察到相关数据。这里我用.io来观察。
✎问题:为了提高效率,我们应该使IP头尽可能精简。但在如此珍贵的 IP 标头中,您会发现标头长度字段和总长度字段。请问为什么?
答:传输时方便识别IP总长度,节省时间。当长度超过1500B时,会返回到链路层进行分段,从而提高效率。
实现两个IP数据包的分割和重组
根据规定,IP数据包的最大大小为64K字节。然而,由于帧的限制,当IP数据包的数据超过1500字节时,它会被发送方的数据链路层分段,然后在接收方的网络层重新组装。
默认情况下,ping命令只向对方发送32字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令来指定要发送的数据长度。这时,使用抓包(使用 ip.addr == 202.202.240.16 进行过滤)来了解 IP 数据包是如何分片的,例如分片标志、偏移量以及每个数据包的大小。
ping 202.202.240.16 -l 2000
✎ 问题
分段和重组是一个消耗资源的操作,尤其是当分段是由传输路径上的节点(即路由器)完成时,因此IPv6不再允许分段。那么在IPv6中,路由器遇到大数据包该怎么办呢?
答:当遇到大数据包时,会转发到能够支持该数据报的出站链路。
练习 3:检查 TTL 事件
IP 标头中有一个 TTL 字段,用于限制数据包可以传输的跳数。一般设置为64、128等。
在验证实验部分我们使用命令进行路由追踪。其原理是主动设置IP数据包的TTL值,从1开始逐渐增加,直到到达最终的目的主机。
使用命令进行跟踪。这时,利用抓包(利用icmp过滤)来分析每个发送的数据包的TTL如何变化,从而了解路由追踪的原理。
tracert www.baidu.com
捕获数据包并观察每个数据包的TTL,即生存时间。
✎ 问题
在IPv4中,虽然TTL被定义为生存时间,但实际上我们都是根据跳数/节点数来设置它的。如果您收到一个 TTL 值为 50 的数据包,您可以推断出从源到您有多少跳?
答:TTL为50,可以推断该数据包从源到我有50跳。
传输层实现——熟悉TCP和UDP段结构
1、使用任何数据包捕获(可用tcp过滤),并熟悉TCP报文段的结构,如:源端口、目标端口、序列号、确认号、各种标志等字段。
2. 使用任何数据包捕获(可用udp过滤)并熟悉UDP段的结构,例如源端口、目标端口、长度等。
✎ 问题
从上面可以看出,UDP的报头比TCP简单很多,但是都有源端口号和目的端口号。源端口号和目标端口号有何用途?
答:我们知道一个进程对应一个端口,端口是用来唯一标识进程的。在传输层,源端口标识发起通信的进程,目的端口标识接收通信的进程。收到的消息根据端口号发送到目的进程。
实现二分析TCP连接的建立和释放
1.打开浏览器访问qige.io网站,使用抓包(可以使用tcp过滤然后使用TCP),不要立即停止。捕获,页面显示后等待一段时间捕获释放连接的数据包。
2. 请在你抓到的数据包中找出建立连接的三向握手数据包,并解释为什么用它们来建立连接,以及它们有什么特点。
SYN同步序列号,用于发起TCP连接
3. 请在你捕获的数据包中找出四次挥手释放连接的数据包,并解释它们为什么用来释放连接以及它们有什么特点。
TCP断开连接是通过发送FIN报文告诉对方数据已经发送完毕,可以释放连接了。
分析:你可以看到我只挥了三次,那是因为第二次和第三次合并了。如果对方没有数据要发送给本端,那么对方也会向本端发送FIN,关闭对方到本端的连接。此时,ACK和FIN可以结合起来。
✎问题1
去掉TCP,即不跟踪一个TCP流,你可能会看到我们在访问qige.io时建立了多个连接。请想一下为什么会有多个连接?功能是什么?
答:有时抓包经过rtsp过滤后,会出现多个tcp连接。然后找到正确的连接并使用tcp功能。
✎问题2
我们上面提到需要四次挥手才能释放连接,有时您可能只捕获三次挥手。原因是什么?
答:因为第二次和第三次合并,如果对方没有数据发送给本端,也会向本端发送FIN,关闭对方到本端的连接。此时,ACK和FIN可以结合起来。情况。
应用层
应用层有很多协议。我们只分析 DNS 和 HTTP。
实施一:了解DNS解析
1、首先使用/命令清除缓存,然后使用qige.io命令解析,使用任意抓包(dns过滤可用)。
2、可以看到当前计算机使用UDP向默认的DNS服务器53端口发送查询请求,DNS服务器53端口返回结果。
3.您可以了解DNS查询和响应中相关字段的含义。
DNS是一个分布式域名服务系统。每个DNS服务器都存储了大量的机器名和IP地址映射,并且是动态更新的。许多网络客户端程序使用DNS协议向DNS服务器查询目标主机的IP地址。
16位标识字段用于标记一对DNS查询和响应,以区分DNS响应是哪条DNS查询。
16位标志字段用于协商具体的通信方式并反馈通信状态。
1.QR:查询/响应标记。 0 表示这是一条查询消息,1 表示这是一条响应消息。
2.、定义查询和响应的类型。 0代表标准查询,1代表反向查询(从IP地址获取主机域名),2代表请求服务器状态。
AA,授权响应标志,仅用于响应消息。 1表示域名服务器为授权服务器。
3.TC,截断标志,仅在DNS报文使用UDP服务时使用。由于 UDP 数据报有长度限制,太长的 DNS 消息将被截断。 1 表示 DNS 消息超过 512 字节并被截断。
4.RD,递归查询标志。 1表示执行递归查询,即如果目标DNS服务器无法解析某个主机名,则会继续递归查询其他DNS服务器,以此类推,直到获得结果并返回给客户端。 0表示进行迭代查询,即如果目标DNS服务器无法解析某个主机名,则将其所知的其他DNS服务器的IP地址返回给客户端,供客户端参考。
5.RA,允许递归标志。仅用于响应消息,1表示DNS服务器支持递归查询。
6.zero,这3位未使用,必须设置为0。
7.rcode,4位返回码,表示响应的状态。常见值为0(无错误)和3(域名不存在)。
✎ 问题
您可能会发现我们对同一站点发出多个 DNS 解析请求。想想原因?
答:对于部署在服务器上的应用程序,无需修改任何代码就可以实现不同机器上的应用程序访问。一个网站有很多台计算机,每台计算机都运行相同的服务器软件。当然,这些计算机的IP地址不同,但是它们的域名是相同的。访问该网站的人会获得一台计算机的 IP 地址,而另一位访问者会获得另一台计算机的 IP 地址。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。