网络层协议分析实验报告

更新时间:2024-05-07 08:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、网络层协议分析

1.A 数据包捕获分析部分 1.A.1、实验目的

1)、了解 ICMP 协议报文类型及作用。

2)、理解IP协议报文类型和格式。 3)、分析 ARP 协议的报文格式,理解 ARP 协议的解析过程。

1.A.2、实验内容介绍

1)、ICMP协议分析实验

执行 ping 和 tracert 命令,分别截获报文,分析截获的 ICMP 报文类型和 ICMP 报文格式,理解 ICMP 协议的作用。

2)、IP协议分析实验

使用 Ping 命令在两台计算机之间发送数据报,用 Wireshark 截获数据报,分析 IP 数据报的格式,理解 IP V4 地址的编址方法,加深对 IP 协议的理解。

3)、IP 数据报分片实验

我们已经从前边的实验中看到,IP 报文要交给数据链路层封装后才能发送。理想情况下,每个 IP 报文正好能放在同一个物理帧中发送。但在实际应用中,每种网络技术所支持的最大帧长各不相同。例如:以太网的帧中最多可容纳 1500 字节的数据,这个上限被称为物理网络的最大传输单元(MTU,MaxiumTransfer Unit)。

TCP/IP 协议在发送 IP 数据报文时,一般选择一个合适的初始长度。当这个报文要从一个 MTU 大的子网发送到一个 MTU 小的网络时,IP 协议就把这个报文的数据部分分割成能被目的子网所容纳的较小数据分片,组成较小的报文发送。每个较小的报文被称为一个分片(Fragment)。每个分片都有一个 IP 报文头,分片后的数据报的 IP 报头和原始 IP 报头除分片偏移、MF 标志位和校验字段不同外,其他都一样。

重组是分片的逆过程,分片只有到达目的主机时才进行重组。当目的主机收到 IP 报文时,根据其片偏移和标志 MF 位判断其是否一个分片。若 MF 为 0,片偏移为 0,则表明它是一个完整的报文;否则,则表明它是一个分片。当一个报文的全部分片都到达目的主机时,IP 就根据报头中的标识符和片偏移将它们重新组成一个完整的报文交给上层协议处理。

4)、ARP协议分析实验

本次实验使用的Windows自带的Arp命令,提供了显示和修改地址解析协议所使用的地址映射表的功能。

Arp 命令的格式要求如下:

ARP -s inet_addr eth_addr [if_addr] ARP -d inet_addr [if_addr] ARP -a [inet_addr] [-N if_addr]

其中:

-s:在 ARP 缓存中添加表项:将 IP 地址 inet_addr 和物理地址 ether_addr 关联,物理地址由以连字符分隔的 6 个十六进制数给定,使用点分十进制标记指定 IP 地址,添加项是永久性的;

-d:删除由 inet_addr 指定的表项; -a:显示当前 ARP 表,如果指定了 inet_addr 则只显示指定计算机的 IP 和物理地址; inet_addr:以点分十进制标记指定 IP 地址; -N:显示由 if_addr 指定的 ARP 表项;

if_addr:指定需要选择或修改其地址映射表接口的 IP 地址; ether_addr:指定物理地址;

1.A.3、实验步骤

1)、ICMP协议分析

步骤1:分别在 PC1 和 PC2 上运行 Wireshark,开始截获报文,为了只截获和实验内容有

关的报文,将 Wireshark 的 Captrue Filter 设置为“No Broadcast and no Multicast”;

步骤2:在 PC1 以 PC2 为目标主机,在命令行窗口执行 Ping 命令;请写出执行的命令: [ping 192.168.3.183 ] 步骤3:停止截获报文,将截获的结果保存为“ICMP-1-学号”,分析截获的结果,回答下列

问题:

1)您截获几个 ICMP 报文?分别属于那种类型?

答: 66个 33个请求报文33个回复报文

2)分析截获的 ICMP 报文,查看表 1.A.1 中要求的字段值,填入表中。

表 1.A.1 ICMP报文分析 报文号 16 17 08 09 61 62 源IP 192.168.3.183 192.168.3.3 192.168.3.183 192.168.3.3 192.168.3.3 192.168.3.183 目的IP 192.168.3.3 192.168.3.183 192.168.3.3 192.168.3.183 192.168.3.183 192.168.3.3 报文格式 类型 reply request reply request request reply 代码 0 0 0 0 0 0 标识 0x0001 0x0001 0x0001 0x0001 0x0001 0x0001 序列号 8 9 4 5 31 31 【x为学号后两位】 实验捕获的报文数据截图:

报文16

报文17

报文x

报文x+1

分析在上表中哪个字段保证了回送请求报文和回送应答报文的一一对应,仔细体会Ping 命令的作用。如何保证请求报文和应答报文时一一对应的?

答: 序号保证了请求报文和回复报文的一一对应。Ping可以检验网络能否想通。

步骤4:在 PC1 上运行 Wireshark 开始截获报文;

步骤5:在PC1上执行Tracert命令,向一个本网络中不存在的主机发送数据报,如:Tracert

www.http://www.njliaohua.com/;

步骤6:停止截获报文,将截获的结果保存为“ICMP-2-学号”,分析截获的报文,回答下列

问题:

截获了报文中哪几种 ICMP 报文?其类型码和代码各为多少?

答: 两种请求报文和回复报文。 目标主机不可达 Type: 3 (Destination unreachable) Code: 1 (Host unreachable)

在截获的报文中,超时报告报文的源地址是多少?这个源地址指定设备和 PC1 有何关系?

答: 192.168.3.3 这个地址是PC1 的网关地址。 通过对两次截获的 ICMP 报文进行综合分析,仔细体会 ICMP 协议在网络中的作用。 答:ICMP报文有两种:差错报告报文和询问报文。其中差错报告报文用来报告差错类型,询问报文用与寻找目标主机应用有ping、tracert,时间戳可以用来计算RTT时间。

2)、IP协议分析

步骤1:截获 PC1 上 ping PC2 的报文,结果保存为“IP-学号”;

步骤4:取序号为学号的数据报,分析 IP 协议的报文格式,完成下列各题:- 1)分析 IP 数据报头的格式,完成表 5.2;

表 5.2 IP协议 字段 版本 头长 服务类型 总长度 标识 标志 片偏移 报文信息 4 20 bytes 0 60 0x0001 0x00 0 说明 IPV4 回复报文 生存周期 协议 校验和 源地址 目的地址 64 Icmp 0x7e97 192.168.3.3 192.168.3.183 实验捕获的报文数据截图(突出显示分析的报文):

1) 查看该数据报的源 IP 地址和目的 IP 地址,他们分别是哪类地址?体会 IP 地址的编址方法。

答:均为 C类地址。1--126为A类地址,128-191为B类地址,192---223为C类地址。

3)、IP数据报分片实验

步骤1:在 PC1、PC2 两台计算机上运行 Wireshark,为了只截获和实验有关的数据报,设

置 Wireshark 的截获条件为对方主机的 IP 地址,开始截获报文;

步骤2:在 PC1 上执行如下 Ping 命令,向主机 PC2 发送 4500B 的数据报文:

Ping –l 4500 –n 6 PC2的IP地址

步骤3:停止截获报文,分析截获的报文,回答下列问题:

1)以太网的 MTU 是多少?

答: 1500,以太网中规定MTU为1500B 2)对截获的报文分析,将属于同一ICMP 请求报文的分片找出来,主机 PC1 向主机 PC2发送的 ICMP 请求报文分成了几个分片? 答:4个

3)若要让主机PC1向主机PC2发送的数据分为 3 个分片,则 Ping 命令中的报文长度应为多大?为什么?

答:1480*3=4440B,因为MTU为1500,要使报文最长,则其首部应最小即20字节,

故报文长度最长为1480*3=4440

4)将第二个 ICMP 请求报文的分片信息填入表 5.3:

表 5.3 ICMP请求报文分片信息 分片序号 5 6 7 标识(Identification) 0x67bb 0x67bb 0x67bb 标志(Flag) 0x00 0x00 0x00 片偏移(Fragment 0 1480 2960 数据长度 0-1479 1480-2959 4440-4507 4)、ARP协议分析实验

步骤1:在 PC1、PC2 两台计算机上执行如下命令,清除 ARP 缓存: 答: ARP -d

步骤2:在 PC1、PC2 两台计算机上执行如下命令,查看高速缓存中的 ARP 地址映射表的内容:

答: ARP -a

步骤3:在 PC1 和 PC2 上运行 Wireshark 截获报文,为了截获和实验内容有关的报文,Wireshark 的 Captrue Filter 设置为默认方式;

步骤4:在主机 PC1 上执行 Ping 命令向 PC2 发送数据报; 步骤5:执行完毕,保存截获的报文并命名为 “ARP-1-学号”;

步骤6:在 PC1、PC2 两台计算机上再次执行 ARP –a 命令,查看高速缓存中的 ARP 地址映射表的内容:

1)这次看到的内容和步骤 2的内容相同吗?结合两次看到的结果,理解 ARP 高速缓存的作用。

答:内容结果不相同。ARP高速缓存是动态的,每当发送一个指定地点的数据报且高速缓存中不存在当前项目时,ARP便会自动添加该项目。计算机进行路由选择时首先在ARP

高速缓存中查找,如果没有找到,再通过广播请求消息来查找。

把这次看到到的高速缓存中的 ARP 地址映射表写出来或给出截图。 接口IP地址 IP地址Internet Address 192.168.3.1 228.227.85.113 231.192.88.42

物理地址Physical Address 00-19-e0-b8-50-f0 01-00-5e-63-55-71 01-00-5e-40-58-2a 类型Type 动态 静态 静态 备注

步骤7:重复步骤 4—5,将此结果保存为 “ARP-2-学号”;

步骤8:打开 arp-1-学号,完成以下各题:

1))在截获的报文中由几个 ARP 报文?在以太帧中,ARP 协议类型的代码值是什么?

答: 4个,在以太帧中,ARP 协议类型的代码值是IP(0x0800)

a) 分析 arp-1 中 ARP 报文的结构,完成表 5.4。

表 5.4 ARP报文分析 ARP请求报文 字段 硬件类型 协议类型 硬件地址长度 协议地址长度 操作 报文信息及参数 Ethernet(1) IP(0x0800) 6 4 Request(1) ARP应答报文 字段 硬件类型 协议类型 硬件地址长度 协议地址长度 操作 报文信息及参数 Ethernet(1) IP(0x0800) 6 4 Reply(2) 源站物理地址 源站IP地址 目的站物理地址 目的站IP地址 (10:78:d2:9d:9b:dc) 192.168.3.3 192.168.3.183 源站物理地址 源站IP地址 目的站IP地址 (10:78:d2:98:7b:42) 192.168.3.183 (10:78:d2:9d:9b:dc) 192.168.3.3 (10:78:d2:98:7b:42) 目的站物理地址 1.B 编程构造IP数据包部分

使用C语言构造IP数据包程序。

1) IPv4基本定长首部结构体定义 struct iphdr { ip verlen ; u_char ip_tos; u_short ip_len; short ip_id; short ip_fragoff; u_char ip_ttl; u_char ip_prpto; short ip_cksum; IPadder ip_src; IPaddr ip_dst; U_char ip_data[1]; } 4};

2)构造IP报文 unsigned char * Build_IP_Packet(unsigned int d_ip, unsigned int s_ip, unsigned char proto_type, const unsigned char *buf, int len, unsigned char * ippacket, int *iplen) {{*iplen=sizeof(struct iphdr)+len; Unsigned char *dbuf=ippacket+sizeof(strct iphdr); Strct iphdr *iph=(strct pihdr *)ippacket; Memcpy(dbuf,buf,len); Iph->version=4; Iph->ih1=5; Iph->tos=0; Iph->toto_len=htons(*iplen); Iph->id=htons(0x65d2); Iph->frag_off=htons(0); Iph->tt1=64; Iph->daddr=d_ip; Iph->saddr=s_ip; Iph->protocol=proto_type; Iph->check=0; Iph->check=checksum(unsigned short *)ippacket sizeof(strct iphdr); returnippacket; } 3)IP校验和计算 //TCPIP协议中的校验和计算 unsigned short checksum(unsigned short *ptr, int nbytes) {unsigned long cksum=0; while(nbytes >1) { cksum+=* ptr ++; nbytes -=sizeof(USHORT); } if(nbytes) { cksum+=*(UCHAR *) ptr; } //将32位数转换成16 while (cksum>>16) cksum=(cksum>>16)+(cksum & 0xffff); return (USHORT) (*cksum); }

本文来源:https://www.bwwdw.com/article/y65g.html

Top