一、实验目的
1、分析IP协议与IP数据报;
2、分析ICMP协议。
二、实验环境
与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE或其他浏览器。
三、预备知识
四、实验步骤
1、IP协议分析
(1)在命令提示符中,利用ipconfig -all查看自己主机的ip及MAC地址,查看自己的网关ip地址并记录。(物理地址 : C8-D9-D2-19-FC-4E,IPv4 地址: 10.0.132.12,默认网关: 10.0.132.254)
(2)运行wireshark抓包分析工具,在命令提示符输入”ping 网关地址”,命令运行结束后,停止抓包。在wireshark过滤栏中,设置过滤条件过滤从网关ip地址到本机ip地址的数据包,查看捕获数据包的ip协议分组结构,截图并记录下表。
版本 | 首部长度 | 区分服务 | 总长度 | ||||
4 | 20bit(5) | 0x00(0) | 60 | ||||
标识 | 标记 | 片偏移 | |||||
0x000085ca(34250) | 0x00 | 0 | |||||
生存时间 | 协议 | 首部校验和 | |||||
255 | 01(ICMP) | 0x000018ec[validation disabled] | |||||
源地址 | 目的地址 | ||||||
10.0.132.254 | 10.0.132.12 |
(3)根据捕获的数据包信息思考并回答以下问题:
- 首部长度是如何计算的?总长度是如何计算的?
IP首部固定部分有20字节,除非含有选项部分。故最小长度为20字节。首部长度是指IP首部占32bit字的数目,包括选项(如果有)。首部长度本身为4bit字段,能表示的二进制最大数为1111,换算成十进制为15,即首部最长为15个32bit长度,即最大长度60字节。
- 生存时间取值是多少?表示什么含义?找到从202.115.32.43发送给本机ip的数据包,查看ip报头中的生存时间取值,与上表中的生存时间取值相比有什么变化?说明了什么?
生存时间(TTL)是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。
- 协议字段表示什么?本实验中协议字段为什么是这个取值?
1.版本:即图中的“Version 4”,表示IP 的版本号,4比特
2.首部长度:即图中的“Header length”的这段,表示IP数据包头长度,4比特,IP数据包头最短为20字节,但是其长度可变,具体长度取决于可选项字段的长度。
3.优先级与服务类型:即图中“DIfferentiated services field”这段,用于表示数据包的优先级和服务类型,8比特。通过在数据包中划分一定的优先级,用于实现Qos(服务质量)的要求
4.总长度:即图中 的“Total length”这段,用以指示整个IP数据包的长度,16比特。最长为65535字节,包括包头和数据。
5.标识符:即图中的“Identification”这段,表示IP数据包的标识符,16比特。当IP对上层数据进行分片时,它将给所有的分片分配一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误的重组。标识符字段用于标识一个数据包,以便接收节点可以重组被分片的数据包。
6.标志:即图中的“Flags”,标志字段,3比特,标志和分片一起被用来传递信息。例如,当数据包从一个以太网发送到另一个以太网时,指示对当前的包不能进行分片或者一个包被分片后指示在一系列的分片中最后一个分片是否已发出。
7.段偏移量:即图中的“fragment offset”,该字段用于表示段偏移量,13比特。段偏移量中包含的信息是在一个分片序列中如何将各分片重新连接起来。
8.TTL:即图中的“time to live”,该字段用于表示IP 数据包的生命周期,8比特。该字段包含的信息是防止一个数据包在网络中无限循环的转发下去。
TTL值对应于一个数据包通过路由器的数目。一个数据包没经过一个路由器,TTL将减去1.当TTL值为0时,数据包将被丢弃。
9.协议号:即图中的“Protocol”,协议字段,8比特。该字段用以指示在IP 数据包中封装的是哪个协议,是TCP 还是UDP,tcp的协议号是6,UDP的协议号是17 ,这里我们看到的是TCP 协议号是6。
10.首部校验和:即图中的“Header checksum status”,该字段用于表示校验和,16比特。校验和是16位的错误检测字段。目的主机和网络中的每个网关都要重新计算包头的校验和,就如同源主机所做的一样。如果数据没有被改动过,两个计算结果应该是一样的。
- 启动抓包,“ping 本网络广播地址”,停止抓包。截图并回答:ping命令是否有回应?从哪一台主机产生的回应?。
请求超时
- 启动抓包,“ping 127.0.0.1”,通过设置过滤器,尝试找到目的地址为127.0.0.1的数据包。截图并回答:是否能找到?为什么?
不能找到
因为默认情况下,Wireshark无法捕获127.0.0.1的报文
- 启动抓包,“ping 192.168.31.1 –l 3000”,通过设置过滤器,找到本主机发出的第一个3000字节的3个数据包分片,截图并记录下表。
分片1 | 分片2 | 分片3 | |
总长度 | 1500 | 1500 | 68 |
标识 | 0x00003d07 | 0x00003d07 | 0x00003d07 |
MF标志 | Set | Set | Not set |
DF标志 | Not set | Not set | Not set |
片偏移 | 0 | 1480 | 2960 |
根据捕获的数据包信息回答以下问题:
- 原始数据包是如何被划分成不同大小分片的?本机的MTU可能是多少?
分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达目的站时,才可进行重新组装,且它是由目的端的IP层来完成的。分片之后的数据报根据需要也可以再次进行分片。IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片。在IP头里面,16位识别号唯一记录了一个IP包的ID,具有同一个ID的IP分片将会重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表中间的3位标志则标志着该分片后面是否还有新的分片。这三个标志就组成了IP分片的所有信息,接受方就可以利用这些信息对IP数据进行重新组织。
1500
- 不同分片的标识字段取值是否一致?为什么?
是
IP软件在存储器中维持一个计数器,每产生一个数据包,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据包不存在按序接收的问题。当数据包由于长度超过网络的MTU而必须分片时,同一个数据包被分成多个片,这些片的标识都一样,也就是数据包这个标识字段的值就被复制到所有的数据包分片的标识字段中。相同的标识字段的值使分片后的各数据包片最后能正确地重装成为原来的数据包。
- 不同分片的MF和DF标志位取值有何不同?为什么?
DF=0表示可以分片,MF = 1表示后面还有分片,MF = 0表示后面没有分片
- 每个分片的片偏移分别是多少?片偏移的含义是什么?
0 1480 2960
2、ICMP协议的分组结构
(1)查看上述抓包结果中的第3个分片的ICMP数据包,填写下表:
类型 | 代码 | 检验和 | 标识符 | 序号 | 数据长度 |
IPv4 | 0 | 0xcfbd[correct] | 1-256 | 17-4352 | 68 |
回答以下问题:
- 该ICMP报文属于哪种类型?
查询报文
- 重新设置过滤条件,找到ICMP echo reply报文,其类型号是多少?
8
- 3000字节的数据分成了3片,每个分片中都有IP头部信息吗?为什么?
有 ip头部信息出现在每个ip报文数据报中,用于指定ip通信的远端ip地址,目的端ip地址,指导ip分片和重组,以及部分的通信行为。
- 3000字节的数据分成了3片,每个分片中都有ICMP头部信息吗?为什么?
有 ICMP是在IP数据报的内部被传输的,紧跟着IP报文的首部,如果IP首部有可选部分,则紧跟着可选部分
- 启动抓包,在命令提示符中输入“ping baidu.com -i 4”(节点数最多为4),运行结束后停止抓包,设置过滤器,显示ICMP报文,截图并回答:
- 观察TTL exceeded报文,该ICMP报文的类型号和代码分别是多少,代表的含义是什么?
类型号8 代码0
- 观察TTL exceeded报文的ICMP数据部分,请问该数据部分包括了哪些部分?为什么这样?
源端口抑制报文路由器在处理报文时会有一个缓存队列。如果超过了最大缓存队列,将无法处理,从而丢弃报文,并向源发送一个ICMP源冷却报文(Type为4),告诉对方不在接收报文了。
超时报文
网络传输IP数据报的过程中,如果IP数据报的TTL值逐渐递减为0时,需要丢弃数据报,这时候路由器需要向源发送方发送ICMP超时报文(Type为11),code为0,表示传输过程中超时了.
参数错误报文(Parameter Problem Message)
当路由器或主机处理数据报文时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文(Type为12).当错误为0时,报文中的Pointer指出错误的字节位置
改变路由重定向(Redirect Message)
当路由收到IP数据报,发现数据报的目的地址在路由表中没有,他就会发ICMP重定向报文(Type为5)个源发送方,告诉它发送的地址不在
回送请求和回答
Type为8是请求回显报文(Echo);Type(0)是回显应答报文。请求回显包或回显应答报文属于查询报文,Ping就是用这种报文进行查询和应答的。
时间戳请求和回答
时间戳报文时用来记录收发以及传输时间的报文Originate Timestamp记录的是发送方发送报文的时刻。Receive Timestamp记录的是接收方收到的报文的时刻;Transmit Timestamp表示回显这最后发送报文的时刻。