如何通过Wireshark抓包理解网络层

通信网络

648人已加入

描述

所用软件

Wireshark

网络层

操作一

熟悉 IP 包结构。

使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。

ping 10.160.4.161

路由器

 

 

展开数据详细信息区间,抓到的数据如下:

路由器

版本:IPV4
头部长度:20 bytes
总体长度:60
存活时间TTL:64s
协议:ICMP

操作一相关问题

为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
回答:
IP的头部长度可以使得接收端计算出报头在何处结束及从何处开始读数据。总长度的字段是因为接收端需要读数据,接收数据。

操作二

IP 包的分段与重组。
据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。

缺省的,ping 命令只会向对方发送 32 个字节的数据。使用 ping 39.156.69.79 -l 1000 命令指定要发送的数据长度为1000。此时使用 Wireshark 抓包(用 ip.addr ==39.156.69.79进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等。

ping 10.160.255.254 -l 2000 

路由器

路由器

 

 

展开数据详细信息区间,抓到的数据如下:

路由器

分段标志:Flags

MF、DF、未用。MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。DF=1表示路由器不能对该数据包分段,DF=0表示数据包可以被分段。

偏移量:Fragment Offset

1480

每个包的大小:

1480与528

操作二相关问题

分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?

回答:

直接丢弃再通知发送端进行重传。

由于在 IPv6中分段只能在源与目的地上执行,不能在路由器上进行。因此当数据包过大时,路由器就会直接丢弃该数据包包,并向发送端发回一个"分组太大"的ICMP差错报文,之后发送端就会使用较小长度的IP数据报重发数据。

操作三

考察 TTL 事件。

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

使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。

路由器

 

路由器

展开数据详细信息区间,抓到的数据如下:

路由器

TTL的改变:
路由器

Tracert 命令确定两台主机的路由主要是通过 IP 生存时间 (TTL) 字段和 ICMP 错误消息。 在工作环境中有多条链路出口时,可以通过该命令查询数据是经过的哪一条链路出口。

由于路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1,因此 Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。

操作三相关问题

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

回答:

微软 Windows 操作系统 ICMP 回显应答的 TTL 字段值为 128;TTL为返回值,跳数就为128-50=75跳。

编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分