计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc

上传人:本田雅阁 文档编号:2748986 上传时间:2019-05-10 格式:DOC 页数:366 大小:17.92MB
返回 下载 相关 举报
计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc_第1页
第1页 / 共366页
计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc_第2页
第2页 / 共366页
计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc_第3页
第3页 / 共366页
计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc_第4页
第4页 / 共366页
计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc_第5页
第5页 / 共366页
点击查看更多>>
资源描述

《计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc》由会员分享,可在线阅读,更多相关《计算机网络实验教学系统实验教程IPv4网络协议篇-1109.doc(366页珍藏版)》请在三一文库上搜索。

1、计算机网络实验教学系统实验教程(IPv4网络协议篇)蒋一川 王陈章 郭东伟 曲明涛李巍 王迎祥 李达 王南南 编著Experimental Teaching Systemfor Computer Network吉林中软吉大信息技术有限公司目 录第1部分 IPv4协议实验实验1 IEEE802标准和以太网2实验2 地址解析协议(ARP)19实验3 网际协议(IP)37实验4 Internet控制报文协议(ICMP)67实验5 Internet组管理协议(IGMP)77实验6 用户数据报协议(UDP)89实验7 传输控制协议(TCP)114实验8 TCP协议的高级特性126实验9 简单网络管理协议

2、(SNMP)139实验10 动态主机配置协议(DHCP)157实验11 域名服务(DNS)165实验12 网络地址转换(NAT)180实验13 超文本传输协议(HTTP)185实验14 远程登录与文件传送协议(TELNET与FTP)192实验15 电子邮件协议(SMTP、POP3和IMAP)212实验16 NetBIOS应用及SMB/CIFS协议225实验17 路由信息协议(RIP)232实验18 开放式最短路径优先协议(OSPF)245实验19 开放式最短路径优先协议(OSPF)258实验20 代理267实验21 IPv4综合实验273第2部分 私有协议通信实验22 协议生成器与触发器276

3、实验23 模拟RARP协议286实验24 自定义协议通信295第3部分 网络攻防与故障实验25 ARP地址欺骗310实验26 ICMP重定向315实验27 TCP与UDP端口扫描321实验28 路由欺骗325实验29 冲突与网络广播风暴328实验30 路由环与网络回路330附录附录A 网络结构333附录B Outlook Express的使用方法336附录C Windows 2003下SNMP服务的安装337附录D 协议编辑器使用说明339附录E 协议分析器使用说明349附录F 工具使用说明353参考文献358359第1部分 IPv4协议实验IPv4是网际协议(Internet Protoco

4、l,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议。IPv4协议在计算机网络的发展过程中起到了十分重要的作用。1981年Jon Postel在RFC791中定义了IP,从那时起,IPv4协议几乎没什么改变的生存了下来。1983年TCP/IP协议被ARPAnet采用,直至发展到后来的互联网。那时只有几百台计算机互相联网。到1989年联网计算机数量突破10万台,并且同年出现了1.5Mbit/s的骨干网。现在互联网已经成为人们工作、生活和学习不可或缺的部分。学习好IPv4协议以及相关协议族就为以后的工作和学习打下了坚实的基础。实验30 路由环与网络回路实验1 IEEE802标准

5、和以太网【实验目的】1. 掌握以太网的报文格式2. 掌握MAC地址的作用3. 掌握MAC广播地址的作用4. 掌握LLC帧报文格式5. 掌握协议编辑器和协议分析器的使用方法6. 掌握协议栈发送和接收以太网数据帧的过程【学时分配】4学时【实验环境】该实验采用网络结构一【实验原理】一. OSI模型和TCP/IP协议族1. OSI简介国际标准化组织(ISO)成立于1947年,它是个多国团体,专门就一些国际标准达成世界范围的一致。网络方面的ISO标准就是OSI(开放系统互连)模型。它是在20世纪70年代后期问世的。在不需要改变底层硬件或软件逻辑的情况下,OSI模型使两个不同的系统能够较容易地通信。OSI

6、模型并不是协议,它是个灵活的、稳健的和可互操作的模型,用来设计网络体系结构,它使得所有类型的计算机系统可以通信。OSI模型包括7个层次,每一层都定义了通过网络传送信息的一些过程,如下图所示。掌握了OSI模型的基本概念后,就有了学习数据通信较牢固的基础。图1-1 OSI模型2. OSI模型中的层次(1)物理层 物理层协调在物理媒体中传送比特流所需的各种功能。物理层涉及到接口和传输媒体的机械的和电气的规约。它还定义了这些物理设备和接口在传输过程中所必须完成的任务。(2)数据链路层数据链路层把物理层(即原始的传输设施)转换为可靠的链路。(3)网络层网络层负责把数据包从源点交付到终点,这可能要跨越多个

7、网络。数据链路层是监督在同一个链路上的两个相邻节点之间数据包的交付,而网络层则确保每一个数据包能够从它的源点到达终点。如果两个节点连接到同一条链路上,那么通常就不需要网络层。但是,如果两个节点连接在不同的网络上,而这些网络是由一些连接的设备连接起来的,那么通常是需要网络层来完成从源点到终点的交付。(4)传输层传输层负责把报文进行端到端的交付。网络层虽然负责单个数据包的端到端交付,但它并不考虑这些数据包之间的关系。传输层要确保整个报文原封不动地按序到达,负责从源点到终点这一级的差错控制和流量控制。(5)会话层会话层是网络的对话控制器。它建立并维持通信系统之间的交换,并使这些通信系统同步。会话层完

8、成以下任务: 对话控制:会话层允许两个节点进行对话状态控制。它允许两个进程之间的通信按半双工或全双工的方式进行。 同步:会话层允许进程将若干个同步点插入到数据流中,以完成传输的同步。(6)表示层表示层负责两个系统所交换的信息的语法和语义。表示层完成以下任务: 转换:在两个系统中的进程所交换的信息的形式通常都是字符串,数字等等。这些信息在传输之前必须变为比特流。由于不同的计算机使用不同的编码系统,所以表示层负责在这些不同的编码方法之间提供互操作性。 加密:为了携带敏感信息,一个系统必须确保能够进行保密。加密就是发送端把原始信息转换为另一种形式,然后再把这种形式的报文发送出去。 压缩:数据压缩减少

9、了信息中所包含的比特数。在传输多媒体信息时,数据压缩是特别重要的。(7)应用层应用层使用户(不管是人还是软件)接入网络,给用户提供了接口,也提供了对多种服务的支持。3. TCP/IP协议族TCP/IP协议族是在OSI模型出现之前出现的。因此TCP/IP协议族的层次无法准确地和OSI模型对应起来。TCP/IP协议族由5层组成:物理层、数据链路层、网络层、传输层和应用层。前四层与OSI的前四层相对应,提供物理标准、网络接口、网际互连、以及传输功能。然而OSI的高三层在TCP/IP中则叫做应用层。如下图所示:图1-2 TCP/IP 和OSI模型TCP/IP是由一些交互的模块组成的分层次的协议,每个模

10、块提供特定的功能。TCP/IP协议族中的各层包含了一些相对独立的协议,可以根据系统的需要把这些协议混合和配套使用。在传输层中,TCP/IP定义了3个协议:传输控制协议(TCP)、用户数据报协议(UDP)和流控制协议(SCTP)。在网络层中,TCP/IP定义的主要协议是网际协议(IP)。二. IEEE802参考模型1980年2月IEEE(电气和电子工程师协会)成立了802局域网标准委员会,开始了有关局域网标准化的工作。IEEE 802局域网参考模型中只定义了物理层和数据链路层,在模型中较高层次,IEEE 802参照OSI模型,尽可能与其相符合。IEEE标准模型与OSI模型的比较如下图所示:图1-

11、3 IEEE标准模型与OSI模型比较在OSI模型中,物理层的任务是为上一层提供一个物理连接,以透明的方式传送比特流。而在IEEE802局域网参考模型中,物理层被分为上下两个子层,分别为: 下面的子层是对电缆介质的说明; 上面的子层是介质访问单元(MAU)。电缆可以是各种介质,如双绞线,同轴电缆等。MAU的主要作用是信息编码、信号发送和介质处理等。在OSI模型中,数据链路层的任务是把物理层转化成可靠的链路,使物理层对上层(网络层)看起来好像是不产生差错的。而IEEE 802标准的数据链路层被分为两个子层: 下面的子层是媒体访问控制子层(MAC); 上面的子层是逻辑链路控制子层(LLC)。LLC子

12、层的功能是实现有效的数据传输,负责数据链路层的流量控制和差错控制。MAC子层的功能是保证物理功能和逻辑功能的连续性,还把从LLC子层收到的数据组装成帧,并把帧交给物理层进行编码。三. 以太网简介IEEE 802.3所支持的局域网标准最早是由Xerox开发的,后来通过Digital公司、Intel公司和Xerox公司联合扩展为以太网标准,符合以太网标准的局域网络称为以太网。1. 以太网的分类数据速率为10Mbps的以太网称为标准以太网,数据速率为 100Mbps的以太网称为快速以太网,数据速率为1000Mbps的以太网称为千兆以太网。目前10G以太网的标准也已正式制定。2. 以太网的物理地址以太

13、网上的每一个主机都有自己的网络接口卡(NIC )。网络接口卡通常安装在主机内部,并为主机提供一个6字节的物理地址,如:44-45-53-54-00-00。在遵循IEEE802标准的以太网络中,将这个物理地址称作“MAC地址”。MAC地址是惟一的,任意两个不同的网络接口卡都具有不同的MAC地址。MAC地址中的某些位具有特殊的意义,如下图所示:图 1-4 以太网的物理地址I/G比特位表示Individual/Group,当I/G位为0时,地址字段表示单个站地址(单播),为1时表示组地址,用来进行多播。G/L比特位表示Global/Local,当G/L位为1时是全球管理,保证在全球没有相同的地址,当

14、为0时是本地管理,这时用户可任意分配网络上的地址。以太网MAC地址可分为三类:单播地址、广播地址和多播地址。单播地址(unicast)是一对一的,该地址是特定主机的MAC地址;广播地址(broadcast):广播地址是一对全体的,该地址为全1,指明数据帧是发送给所有主机的。多播地址(multicast):多播地址是一对多的,指明数据帧是发送给一部分主机的。四. 以太网访问模式当多个节点被连接到一条链路上时,叫做多点链路或广播链路。这时就需要一个协议来协调链路的访问,使得同一时刻只有一个节点访问链路。如果发生同一时刻多个节点使用链路的情况,则称为链路发生了冲突。带有冲突检测的载波侦听多路访问(C

15、SMA/CD)是这样一种方案。发送主机在传输过程中仍继续监听信道,以检测是否存在冲突。如果发生冲突,信道上可以检测到超过发送主机本身发送的载波信号的幅度,由此判断出冲突的存在。一旦检测到冲突,就立即停止发送,并向总线上发一串阻塞信号,用以通知总线上其它各有关主机。这样,通道容量就不致因白白传送已受损的帧而浪费,可以提高总线的利用率。以太网使用CSMA/CD作为其访问模式。五. 以太网的帧格式1. 以太网的MAC帧格式以太网的MAC帧格式有两种标准,一种是DIX Ethernet V2标准,另一种是IEEE的802.3标准。但两种帧格式可以在同一以太网络共存。两种帧格式都具有7个域:前导码、帧首

16、定界符、目的MAC地址、源MAC地址、协议类型或数据长度、数据、帧校验序列。如下图所示:前导码(7字节)帧首定界符(1字节)目的MAC地址(6字节)源MAC地址(6字节)协议类型或数据长度(2字节)数据帧校验序列(4字节)图1-5 以太网的MAC帧格式两种格式的帧可以依据协议类型或数据长度字段的值进行区分。如果此帧是DIX Ethernet V2标准格式帧,则协议类型或数据长度字段的值大于1536;如果此帧是IEEE 802.3标准格式的帧,则协议类型或数据长度字段的值小于1518。对DIX Ethernet V2 帧来说,此字段的值代表了高层协议的类型;对IEEE 802.3帧来说,它的高层

17、协议一定是LLC,此字段的值代表了数据的长度。在以太网的MAC帧格式中,各个字段的含义如下: 前导码:这是以太网MAC帧的第一个域,包含了7个字节的二进制“1”和“0”间隔的代码,即“1010101010”共56 位,提示接收方一个数据帧即将到来,同时使接收系统建立起同步时钟。 帧首定界符:帧首定界符标记了帧的开始。它是一个字节的“10101011”二进制序列,帧首定界符通知接收方后面所有的内容都是数据,以便接收方对数据帧进行定位。 目的MAC地址:目的MAC地址为6个字节,标记了数据帧下一个主机的物理地址。如果数据包的目的地址必须从一个网络穿越到另一个网络,那么目的MAC地址所包含的是连接当

18、前网络和下一个网络的路由器地址。当数据包到达目标网络后,目的MAC地址域换成目的主机的地址。 源MAC地址:源MAC地址也是6个字节。它包含了最后一个转发此帧的设备的物理地址。该设备可以是发送此数据帧的主机,也可以是最近接收和转发此数据帧的路由器。 协议类型或数据长度:如果该字段的值小于1518,它用于定义后面数据字段的长度;如果字段的值大于1536,它定义一个封装在帧中的数据包的类型。 数据:它的长度范围是从46到1500字节之间。46是以太网MAC帧所封装的高层协议数据的最小长度。如果高层协议的数据包小于46字节,则填充到46字节。 帧校验序列:最后一个域是帧校验序列,以太网采用32位冗余

19、校验(CRC)。校验范围是除了前导码、帧首定界符和帧校验序列外的所有内容。2. LLC帧格式LLC的帧格式如下图所示:DSAPSSAP控制LLC数据图1-6 LLC帧格式其中,DSAP(目的服务访问点)和SSAP(源服务访问点)是LLC所使用的地址,用来标识接收和发送数据的计算机上的用户实体。DSAP的第一个比特是用来指明帧是为单地址还是组地址,0表示单地址,1表示组地址。SSAP的第一个比特用来指明帧是命令帧还是响应帧。0表示命令帧,1表示响应帧。LLC定义了三种帧:信息帧(I-帧)、监控帧(S-帧)和无编号帧(U-帧)。帧的类型可从控制字段识别。对于信息帧和监控帧,控制字段为2字节长,而对

20、于无编号帧,控制字段为1字节长。下图表示了LLC三类帧的控制字段的比较。1位7位1位7位0N(S)P/FN(R)I-帧的控制字段1位1位2位4位1位7位10SSXP/FN(R)S-帧的控制字段11MMP/FMMMU-帧的控制字段图1-7 LLC 三类帧的控制字段 N(S):发送序号。 N(R):接收序号。 SS:监控功能位,00表示准备接收(RR);10表示未准备接收(RNR);01表示拒绝(REJ)。 M :修正功能位。 X:保留,设置为0。 P/F:Poll/final 位。命令LLC PDU传输/响应LLC PDU传输。3. LLC-PDU与相邻层的PDU之间的关系IEEE 802标准为

21、LLC和MAC子层的帧格式作了详细规定。下图描述了网络层PDU、LLC子层PDU和MAC子层PDU的关系。图 1-8 LLC-PDU与相邻层的PDU之间的关系LLC帧(即LLC-PDU)与媒体无关,而MAC(即MAC-PDU)则与局域网的媒体访问方式有很大关系,不同的局域网有不同的MAC帧格式。4. LLC地址与MAC地址在MAC帧的帧首中,有目的MAC地址和源MAC地址,它们都是6字节长。在LLC帧的帧首中,则设有DSAP和SSAP,该地址是逻辑地址,表示的是数据链路层的不同访问服务点。LLC地址与MAC地址是两个不同的概念,在局域网中,一个主机上的多个服务访问点可以利用同一条数据链路。从这

22、一点可以看出,LLC子层带有OSI网络层的某些功能。六. 协议栈实现代码解析本实验将通过对netproto_eth_student.h和netproto_eth_student.c两个文件进行编码,完成协议栈中以太网数据帧接收和发送的实现。netproto_eth_student.h文件中定义了以太网数据帧中“协议类型与数据长度”字段值以及以太网数据帧的负载内容、负载长度,关键代码如下所示:#define PAYLOAD_DATA Hello, World!#define PAYLOAD_LEN sizeof(PAYLOAD_DATA)#define MAX_PAYLOAD_LEN 1024#

23、define TYPE_LENGTH 5893这段代码定义了3个宏,他们代表的含义如下表所示:表1-1 netproto_eth_student.h中定义的宏宏值描述PAYLOAD_DATAHello, World!定义以太网负载数据PAYLOAD_LENsizeof(PAYLOAD_DATA)定义以太网负载数据长度TYPE_LENGTH5893定义以太网帧中的“协议类型或数据长度”字段的值在实验的编码过程中,应该使用这些宏对相应的变量进行赋值。学生也可以根据自己的需求修改这些宏定义的值。netproto_eth_student.c文件是协议栈中以太网数据帧的实现部分,其中定义了2个函数。下面

24、分别介绍这些协议栈的实现部分。函数netp_eth_output_student的功能是编辑并发送一个Ethernet V2数据帧。这个函数的编码工作需要由学生完成。当有数据到达本机网络接口时,函数netp_eth_input_student将被调用,并传递给这个函数原始数据。该函数的返回值为push_to_lwip的枚举类型值,push_to_lwip的定义如下:enum push_to_lwip NETP_PUSH_TO_LWIP, / 数据处理完成后,交给lwIP继续处理 NETP_NO_PUSH_LIWP / 数据处理完成后,不交给lwIP继续处理,本层处理完毕以后 数据包被丢弃;返回

25、NETP_PUSH_TO_LWIP表示这个数据帧应该提交给协议栈上层继续处理,而返回NETP_NO_PUSH_LIWP则表示不需要提交给协议栈上层处理,本层处理完毕后,这个数据帧将被丢弃。需要根据正确的逻辑关系返回适当的值,使协议栈正常工作。在编码过程中可能会遇到一些结构体、宏和函数,下表是对他们进行和介绍:表1-2 实验涉及的结构体和函数结构体/函数声明或定义描述struct netp_eth_headerstruct netp_eth_header struct netp_eth_addr dest_address; struct netp_eth_addr sour_address; u

26、16_t type;以太网数据帧头结构struct netp_eth_addrstruct netp_eth_addr u8_t addrETH_ADDRESS_LEN;以太网地址ETH_HEADER_LEN#define ETH_HEADER_LEN 14以太网帧头长度PAYLOAD_DATA#define PAYLOAD_DATA Hello, World!以太网负载内容PAYLOAD_LEN#define PAYLOAD_LEN sizeof(PAYLOAD_DATA)以太网负载长度MAX_PAYLOAD_LEN#define MAX_PAYLOAD_LEN 1024最大负载长度TYPE

27、_LENGTH#define TYPE_LENGTH 5893协议类型与数据长度字段值netp_set_eth_addrvoid netp_set_eth_addr( struct netp_eth_addr *p_addr, u8_t v1, u8_t v2, u8_t v3, u8_t v4, u8_t v5, u8_t v6);设置以太网数据帧MAC地址netp_current_hw_addrint netp_current_hw_addr( u8_t* hardware_address);获取正在使用的网络适配器的物理地址netp_packet_sendInt netp_packet_

28、send( void* buffer, int len);发送一个数据帧htonsu16_t htons(u16_t n);将16位数值由主机字节序转换为网络字节序netp_is_eth_addr_broadcastint netp_is_eth_addr_broadcast( struct netp_eth_addr *mac_address);判断一个MAC地址是否为广播地址netp_eth_addr_cmpint netp_eth_addr_cmp( struct netp_eth_addr *mac_address1, struct netp_eth_addr *mac_address

29、2);判断两个MAC地址是否相同七. 各模块推荐流程1. Ethernet V2数据帧发送流程编码实现Ethernet V2数据帧发送推荐使用如下流程:图1-9 Ethernet V2数据帧发送推荐流程2. Ethernet V2数据帧处理流程编码实现处理Ethernet V2输入数据帧推荐使用如下流程:图1-10 处理Ethernet V2输入数据帧推荐流程【实验步骤】练习1 领略真实的MAC帧各主机打开协议分析器,进入相应的网络结构并验证网络拓扑的正确性,如果通过拓扑验证,关闭协议分析器继续进行实验,如果没有通过拓扑验证,请检查网络连接。本练习将主机A和B作为一组,主机C和D作为一组,主机

30、E和F作为一组。现仅以主机A、B所在组为例,其它组的操作参考主机A、B所在组的操作。1. 主机B启动协议分析器,新建捕获窗口进行数据捕获并设置过滤条件(提取ICMP协议)。2. 主机A ping 主机B,察看主机B协议分析器捕获的数据包,分析MAC帧格式。3. 将主机B的过滤器恢复为默认状态。练习2 理解MAC地址的作用本练习每台主机为一组。现仅以主机A所在组为例,其它组的操作参考主机A所在组的操作。1. 主机B、D、E、F启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(源MAC地址为主机A的MAC地址)。2. 主机A ping 主机C。3. 主机B、D、E、F上停止捕获数据,在捕获的

31、数据中查找主机A所发送的ICMP数据帧,并分析该帧内容。 记录实验结果表1-3实验结果本机MAC地址源MAC地址目的MAC地址是否收到,为什么主机B主机D主机E主机F思考问题:1. 为什么有的主机会收到ICMP数据包而有的主机收不到ICMP数据包?2. 根据实验理解集线器(共享设备)和交换机(交换设备)的区别?3. 说明共享设备的不安全性。练习3 编辑并发送MAC广播帧本练习将主机A、B、C、D、E、F作为一组进行实验。1. 主机E启动协议编辑器。2. 主机E编辑一个MAC帧:目的MAC地址:FFFFFF-FFFFFF源MAC地址:主机E的MAC地址协议类型或数据长度:大于0x0600数据字段

32、:编辑长度在461500字节之间的数据3. 主机A、B、C、D、F启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(源MAC地址为主机E的MAC地址)。4. 主机E发送已编辑好的数据帧。5. 主机A、B、C、D、F停止捕获数据,察看捕获到的数据中是否含有主机E所发送的数据帧。 结合练习三的实验结果,简述FFFFFF-FFFFFF作为目的MAC地址的作用。思考问题:1. 主机A、B、C、D、F是否可以收到主机E的广播帧?2. 说明MAC广播帧的范围?练习4 编辑并发送LLC帧本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。现仅以主机A、B所在组为例,其它组的操作参考主机

33、A、B所在组的操作。1. 主机A启动协议编辑器,并编写一个LLC帧。目的MAC地址:主机B的MAC地址源MAC地址:主机A的MAC地址协议类型和数据长度:001F控制字段:填写02(注:回车后变成0200,该帧变为信息帧,控制字段的长度变为2字节)用户定义数据/数据字段:AAAAAAABBBBBBBCCCCCCCDDDDDD(注:长度为27个字节)2. 主机B启动协议分析器并开始捕获数据。3. 主机A发送编辑好的LLC帧。4. 主机B停止捕获数据,在捕获到的数据中查找主机A所发送的LLC帧,分析该帧内容。 记录实验结果表1-4 实验结果帧类型发送序号N(S)接受序号N(R) 简述“协议类型和数

34、据长度”字段的两种含义。5. 将第1步中主机A已编辑好的数据帧修改为“无编号帧”(前两个比特位为1),用户定义数据/数据字段修改为AAAAAAABBBBBBBCCCCCCCDDDDDDD(注:长度为28个字节),重做第2、3、4步。思考问题:1. 如何编辑LLC无编号帧和LLC数据帧。2. 在协议分析端捕获到该帧,帧的长度是多少?由此理解以太网的最短帧长度。3. 为什么IEEE802标准将数据链路层分割为MAC子层和LLC子层?4. 为什么以太网有最短帧长度的要求?练习5 发送Ethernet V2数据帧功能的实现本练习将主机A、B、C、D、E、F作为一组进行实验。在实验中,主机A将新接口的I

35、P地址设置为172.16.1.11、主机B使用处于连接状态的物理接口,将新接口的IP设置为172.16.1.12、主机C将新接口的IP地址设置为172.16.1.13、主机D使用处于连接状态的物理接口,将新接口的IP地址设置为172.16.1.14、主机E使用处于连接状态的物理接口,将新接口的IP地址设置为172.16.1.15、主机F将新接口的IP地址设置为172.16.1.16。所有主机使用子网掩码255.255.255.0,默认网关设置为0.0.0.0。1. 所有主机编码实现发送Ehternet V2数据帧(1)各主机打开netproto_eth_student.c文件,在函数netp_

36、arp_output_student内编写实现代码。(2)参考实验原理Ethernet V2数据帧发送推荐流程图给出的流程,分析已经存在的代码。已经存在的代码定义了一个以太网数据帧头部结构和一个能容纳以太网帧头和负载的发送缓冲区send_buff,另外还实现了将以太网帧头结构和负载拷贝到发送缓冲区的过程。(3)构造、填充以太网数据帧头构造并填充一个以太网数据帧头。目的MAC地址设置为广播地址即FF-FF-FF-FF-FF-FF,可以使用netp_set_eth_addr函数设置MAC地址。源MAC地址设置为本接口的MAC地址,可以使用netp_current_hw_addr函数获取本接口的MA

37、C地址。协议类型或数据长度字段值应设置为0x0806,表示上层协议为arp协议,可以使用MAC_PROTO_ARP宏。(4)判断是否为合法的Ethernet V2数据帧根据实验原理关于MAC帧格式的介绍,判断要发送的数据帧是不是合法的Ethernet V2数据帧,即“协议类型或数据长度”字段值是否大于1536。(5)使用发送函数netp_packet_send发送数据帧。2. 当完成代码编写后,所有主机打开协议分析器,开始捕获数据。3. 所有主机调试并运行程序。4. 各主机停止数据捕获,观察实验现象。 捕获到的数据帧,“协议类型或数据长度”字段值是什么?5. 参考代码如下:/* * brief

38、 编辑并发送一个Ethernet V2数据帧 * * 由学生完成这个函数,发送一个Ethernet V2数据帧。主线程将会调用这个函数。 */voidnetp_eth_output_student() / 创建以太网帧头结构并申请发送缓冲区 struct netp_eth_header eth_header; u8_t send_buffETH_HEADER_LEN+PAYLOAD_LEN; / 构造以太网帧头,目的MAC地址为广播地址、源MAC地址为本接口MAC地址 / 协议类型为TYPE_LENGTH所定义的类型值 netp_set_eth_addr(ð_header.dest_ad

39、dress, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF); netp_current_hw_addr(&(eth_header.sour_address); eth_header.type = htons(TYPE_LENGTH); / 判断是否为合法的Ethernet V2数据帧 if (ntohs(eth_header.type) = 1536) printf(Ethernet v2 数据帧的协议类型或数据长度字段值要求大于1536,发送失败!n); return; / 将以太网帧头结构和负载拷贝到发送缓冲区中 memcpy(send_buff, ð_he

40、ader, sizeof(struct netp_eth_header); memcpy(send_buff+ETH_HEADER_LEN, PAYLOAD_DATA, PAYLOAD_LEN); / 使用发送函数(netp_packet_send)发送数据帧 if (!netp_packet_send(send_buff,sizeof(send_buff) printf(发送MAC数据帧 - 成功!n); else printf(发送MAC数据帧 - 失败!n); 练习6 处理Ethernet V2输入数据帧功能的实现本练习将主机A、B、C、D、E、F作为一组进行实验。该练习需要在前一个练习

41、的基础上进行。在实验中,主机A将新接口的IP地址设置为172.16.1.11、主机B使用处于连接状态的物理接口,将新接口的IP设置为172.16.1.12、主机C将新接口的IP地址设置为172.16.1.13、主机D使用处于连接状态的物理接口,将新接口的IP地址设置为172.16.1.14、主机E使用处于连接状态的物理接口,将新接口的IP地址设置为172.16.1.15、主机F将新接口的IP地址设置为172.16.1.16。所有主机使用子网掩码255.255.255.0,默认网关设置为0.0.0.0。1. 所有主机编码实现处理Ethernet V2输入数据帧功能(1)各主机打开netproto

42、_eth_student.c文件,在函数netp_eth_input_student内编写实现代码,参考实验原理处理Ethernet V2输入数据帧推荐流程图给出的流程,思考代码编写方案。首先分析netproto_eth_student.c文件中已经给出的代码。已经存在的代码定义了一个以太网数据帧头部结构和以太网数据帧地址结构,实现了从输入缓冲区中拷贝以太网帧头结构,获取本接口MAC地址的过程。最后的几行代码填充了负载缓冲区,显示其内容。(2)提取“协议类型或数据长度”字段值为TYPE_LENGTH的数据帧通过判断以太网帧中的“协议类型或数据长度”字段值是否为TYPE_LENGTH(自定义上层

43、协议)来过滤以太网数据帧。如果接收到的数据包不满足条件,则应该返回NETP_PUSH_TO_LWIP交给协议栈处理。(3)提取“目的MAC地址”字段值为本接口地址或广播地址的数据帧通过判断以太网帧中的“目的MAC地址”字段值是否为本接口MAC地址或广播地址(目的MAC地址为全1)来过滤不是发送给本接口的数据帧。如果接收到的数据包不满足条件,则应该返回NETP_PUSH_TO_LWIP交给协议栈处理。2. 所有主机调试并运行程序将netproto_eth_student.h文件中PAYLOAD_DATA定义的内容修改为自己要发送的负载信息,例如“I am host A”。 你收到的负载内容是什么

44、?3. 参考代码如下:/* * brief 当有数据帧到达时,将调用这个函数 * * param packet 指向接收到的数据 * param packet_len 数据帧的长度 * * return 一个put_to_lwip类型的返回值。返回NETP_PUT_LWIP表示处理数据后将数据帧交给上层协议栈继续处理 * 返回NETP_NO_PUT_LIWP表示不将数据帧交给上层协议栈处理。 */enum push_to_lwipnetp_eth_input_student(void *packet, int packet_len) / 创建以太网帧头结构和以太网数据帧地址结构 struct

45、netp_eth_header eth_header; struct netp_eth_addr my_mac_address; char payload_buffMAX_PAYLOAD_LEN = 0; / 赋值以太网帧头、本机MAC地址 memcpy(ð_header, packet, ETH_HEADER_LEN); netp_current_hw_addr(&my_mac_address); / 判断“协议类型与数据长度”值是否为TYPE_LENGTH if (TYPE_LENGTH != ntohs(eth_header.type) return NETP_PUSH_TO_LWIP; / 判断目的MAC地址是否为本接口地址或者为广播地址 if (!(netp_is_eth_addr_broadcast(str

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1