资源描述
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报文分析
报文号
源IP
目IP
报文格式
类型
代码
标识
序列号
16
192.168.3.183
192.168.3.3
reply
0
0x0001
8
17
192.168.3.3
192.168.3.183
request
0
0x0001
9
08
192.168.3.183
192.168.3.3
reply
0
0x0001
4
09
192.168.3.3
192.168.3.183
request
0
0x0001
5
61
192.168.3.3
192.168.3.183
request
0
0x0001
31
62
192.168.3.183
192.168.3.3
reply
0
0x0001
31
【x为学号后两位】
试验捕捉报文数据截图:
报文16
报文17
报文x
报文x+1
分析在上表中哪个字段确保了回送请求报文和回送应答报文一一对应, 仔细体会Ping 命令作用。怎样确保请求报文和应答报文时一一对应?
答: 序号确保了请求报文和回复报文一一对应。Ping能够检验网络能否想通。
步骤4: 在 PC1 上运行 Wireshark 开始截获报文;
步骤5: 在PC1上实施Tracert命令, 向一个本网络中不存在主机发送数据报, 如: Tracert .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
IPV4
头长
20 bytes
服务类型
0
回复报文
总长度
60
标识
0x0001
标志
0x00
片偏移
0
生存周期
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 PC2IP地址
步骤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请求报文分片信息
分片序号
标识(Identification)
标志(Flag)
片偏移(Fragment
数据长度
5
0x67bb
0x00
0
0-1479
6
0x67bb
0x00
1480
1480-2959
7
0x67bb
0x00
2960
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
物理地址Physical Address
类型Type
备注
192.168.3.1
00-19-e0-b8-50-f0
动态
228.227.85.113
01-00-5e-63-55-71
静态
231.192.88.42
01-00-5e-40-58-2a
静态
步骤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请求报文
ARP应答报文
字段
报文信息及参数
字段
报文信息及参数
硬件类型
Ethernet(1)
硬件类型
Ethernet(1)
协议类型
IP(0x0800)
协议类型
IP(0x0800)
硬件地址长度
6
硬件地址长度
6
协议地址长度
4
协议地址长度
4
操作
Request(1)
操作
Reply(2)
源站物理地址
(10:78: d2:9d:9b:dc)
源站物理地址
(10:78: d2: 98:7b: 42)
源站IP地址
192.168.3.3
源站IP地址
192.168.3.183
目站物理地址
(10:78: d2: 98:7b: 42)
目站物理地址
(10:78: d2:9d:9b:dc)
目站IP地址
192.168.3.183
目站IP地址
192.168.3.3
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];
}
34};
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);
return ippacket;
}
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);
}
展开阅读全文