IPv4协议与ICMPv4协议实验报告

IPv4协议与ICMPv4协议实验报告

IPv4协议

一、观察分析IPv4分组各个字段

1.版本、首部长度

首先我们需要构造一个IPv4的数据包,我们直接使用ping命令去给百度发包,并用wireshark捕获这些收发数据包:

image-20230530204739770

显示过滤器选择:icmp。

image-20230530205011975

可以看到我们刚好捕获到了4个reply和4个request的数据包,与我们在cmd中发送和接收到的数据包数量一致。

分析数据包的 ip头 部分:

Version:4 (版本为IPv4)

Header Length:5 (ip头部长为5*4=20 bytes)

2.tracert结果下的TTL

首先在cmd中使用tracert命令:

image-20230530210108219

然后观察wireshark:

image-20230530212010399

可以发现由本机(ip为192.168.43.40)向百度依次发送了

3个TTL==1的request包

3个TTL==2的request包

3个TTL==3的request包

而每一个RTT值都对应了从各个路由器发来的TTL exceeded响应包。

由此可见,tracert跟踪的实现方式就是向目标ip依次发送TTL==1、2、3…的请求包,这样一来,路径上的每一个路由器都会收到一个TTL==0的包,于是每个路由器都需要返回一个TTL exceeded的数据包,也就是ICMP type==11的包,这样一来,本机就可以得到路径上所有路由器的ip地址。

3.协议

分析IPv4协议的结构:

image-20230530205011975

由图可见,这个IP数据包的头部长度为20个字节,我们对其进行分析:

第1字节(45):分别为版本和头部长度,4代表版本为IPv4,5代表头部长度为5*4=20 Bytes

第2字节(00):服务类型,00代表普通

第3,4字节(003c):数据包总长度,0x3c = 60 Bytes

第5,6字节(7e8f):标识,确定分段属于哪个数据包,这个分段的标识为0x7e8f

第7,8字节(0000):前3位为flag,标识数据包是否分段,是否还有更多分段。剩下13位为偏移,表示这个分段在数据包中的位置

第9字节(80):TTL=0x80=128

第10字节(01):协议。

0x01:ICMP

0x06:TCP

0x11:UDP

第11,12字节(0000):头部校验和,检测头部是否有数据错误

第13~16字节(c0a82b28):源ip地址,192.168.43.40

第17~20字节(279c420a):目标ip地址,39.156.66.10

4.ping -f 下的DF值

ping 的 -f 参数表示在数据包中设置 “不分段” 标记

image-20230531210148211

我们用wireshark捕获这个数据包:

image-20230531210245563

image-20230531210308922

可以看到 flag 字段被设为了010,这个1表示 DF=1,即 Don’t fragment,不分组

5.不同分组的标识

为了构造出有分组的数据包,我们使用 ping -l 3600 baidu.com 向百度发一个长度为3600的数据包,由于MTU限制为1500,所以这个数据包会被分组传输

image-20230531213747504

可以看到,一个数据包被分成了3个分组,我们分别查看第一个数据包的前两个分组与第二个数据包的前两个分组,以此来分析不同分组的标识字段。

image-20230531215827680

image-20230531215849034

image-20230531215909892

image-20230531215928829

可以观察到,来自同一个数据包的不同分组,他们的标识是一样的,也就是为了标记他们来自于同一个分组,后续新宿机接受到后就可以根据这些标识,把同一个数据包的不同分组组合起来。

二、观察IPv4数据报分片与重组

1.每个分片的标识标志片偏移

image-20230531215827680

这一个IP数据包分片的标识为0x681c ,表示这个分片是属于哪一个数据报的。

标志为 001,即MF=1,表示后面还有更多的分片

偏移为 0,表示这个分片是该数据包的第一个分片

2.分片后的总长度

image-20230531213747504

可以看到,每一个数据包有三个分片,长度分别为 1514, 1514, 682。

由于每一个分片都有各自的以太网头(14 Bytes),ip头(20 Bytes),再加上第一个分片还包含一个ICMP头(8 Bytes)

加上 3600 Bytes 的数据,一共是: 14*3+20*3+8+3600 = 3710

刚好等于 1514+1514+682 = 3710

3.分片载荷规律

根据前面的分析,我们发现分片的载荷规律为,先以网络允许通过的最大限度长度截取前面的分片,最后剩下的数据长度作为最后一个分片来进行封装

ICMPv4协议

1.观察ICMPv4目标目标不可达消息

我们使用 tracert baidu.com 命令,就得到了 Destination unreachable 的ICMP包,顺便也得到了 Time-to-live exceeded 包,如图:

image-20230531225251862

让我们观察目标不可达的ICMP数据包:

image-20230531225618733

可以看到这个ICMP头中:Type==3,Code==3

意思是端口不可达

还可以观察到,这个数据包的内容部分,还有一个IPv4的头部,以及8个字节的数据内容,这刚好对应了我们课程中学习到的,一个差错IP数据报所对应的ICMP差错报告数据包的结构。

2.观察ICMPv4超时消息

前面我们已经构造出了超时包,下面我们直接进行观察:

image-20230531230253081

可以看到,这个ICMP头的 Type==11,表示响应超时

后面跟的内容是超时的请求ip数据报,还可以看到它的ip头和ICMP头信息,数据部分是全0

3.观察ICMPv4回显请求及应答消息

通过 ping baidu.com 来构造ICMP请求和应答数据包

image-20230531230631085

这是一个请求数据包,可以看到 Type==8

image-20230531230714535

这是一个应答数据包,Type==0
全0

3.观察ICMPv4回显请求及应答消息

通过 ping baidu.com 来构造ICMP请求和应答数据包

在这里插入图片描述

这是一个请求数据包,可以看到 Type==8

在这里插入图片描述

这是一个应答数据包,Type==0

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值