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); }
2.传输层协议分析
2.A 数据包捕获分析部分
2.1 实验目的
理解TCP报文首部格式和字段的作用,TCP连接的建立和释放过程,TCP数据传输中编号与确认的作用。
2.2 实验内容
应用TCP应用程序传输文件,截取TCP报文,分析TCP报文首部信息,TCP连接的建立过程,TCP数据的编号和确认机制。
2.3 实验原理
TCP协议是传输控制协议的简称,工作在网络层协议之上,是面向连接的,可靠的,端到端的传输层协议。 1) TCP的报文格式
TCP报文段分为头部和数据两部分,如图1:
图1 TCP报文段的总体结构 TCP首部 TCP数据部分
TCP报文段首部又分为固定部分和选项部分,固定部分为20B,如图2所示,这些字段的组合实现了TCP的所有功能。
图2 TCP报文段的首部
0 15 31 源端口 目的端口 序号 确认号 U A P R S F 头部 R C S S Y I 长度保留 窗口 G K H T N N (4bit) 校验和 紧急指针 选项(长度可变) 填充