Ipv4协议收发实验

上传人:飞*** 文档编号:54002343 上传时间:2018-09-07 格式:PDF 页数:5 大小:73.25KB
返回 下载 相关 举报
Ipv4协议收发实验_第1页
第1页 / 共5页
Ipv4协议收发实验_第2页
第2页 / 共5页
Ipv4协议收发实验_第3页
第3页 / 共5页
Ipv4协议收发实验_第4页
第4页 / 共5页
Ipv4协议收发实验_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Ipv4协议收发实验》由会员分享,可在线阅读,更多相关《Ipv4协议收发实验(5页珍藏版)》请在金锄头文库上搜索。

1、Ipv4 协议收发实验实验说明: 由于 tcp/ipv4协议已经集成在系统和网卡的驱动程序中,自己单独编写实现基 于 ipv4 协议收发的实验,要求对系统及硬件的相关接口能够理解和应用。其中 的工作量是很大的,在网上也没有相关可以利用的实现平台。只查到了基于 NetRiver2000 实验系统的 tcp 协议收发实验例程,该系统提供了操作系统和硬 件底层的接口用来实现函数的的编写及调用。这里,限于知识储备,我对相关 的函数及 ipv4 数据包的格式,分组,封装实现及收发流程做了分析和研究,对 tcp/ipv4的协议有了更好的理解。 1. 实验目的 IPv4协议是互联网的核心协议,它保证了网络节

2、点(包括网络设备和主机) 在网络层能够按照标准协议互相通信。IPv4地址唯一标识了网络节点。 在我们日 常使用的计算机的主机协议栈中,IPv4协议必不可少, 它能够接收网络中传送给 本机的分组,同时也能根据上层协议的要求将报文封装为IPv4分组发送出去。 本实验通过设计实现主机协议栈中的IPv4协议,让学生深入了解网络层协议 的基本原理,学习 IPv4协议基本的分组接收和发送流程。 另外,通过本实验,学生可以初步接触互联网协议栈的结构和计算机网络实 验系统,为后面进行更为深入复杂的实验奠定良好的基础。2. 实验原理TCP协议簇本身 4层:主机 -网络层(接口层)、互连层、传输层、应用层。IP协

3、议在第二层( OSI的第三层:网络层) TCP 在第三层。( OSI的第四层:传输层) Ipv4 数据包格式:3 实验要求在理解 TCP/Ipv4协议数据格式及处理流程的基础上, 根据计算机网络实验系统所 提供的上下层接口函数和协议中分组收发的主要流程,设计实现一个简单的 IPv4 分组收发模块。要求实现的主要功能包括: 1)IPv4分组的基本接收处理; 2)IPv4分组的封装发送; 3)理解对 IPv4协议中的选项和分片处理的原理4 . 实验内容 1) 实现IPv4分组的基本接收处理功能 对于接收到的 IPv4分组,检查目的地址是否为本地地址,并检查IPv4分组头 部中其它字段的合法性。 提

4、交正确的分组给上层协议继续处理,丢弃错误的分组 并说明错误类型。 2) 实现IPv4分组的封装发送 根据上层协议所提供的参数,封装IPv4分组,调用系统提供的发送接口函数 将分组发送出去。5接口函数 / system support #include “sysInclude.h“ / 这是Rivernet2000 系统软件提供的库函数 extern void ip_DiscardPkt(char* pBuffer,int type); /丢弃包 extern void ip_SendtoLower(char*pBuffer,int length); /交给下层 extern void ip_S

5、endtoUp(char *pBuffer,int length); /交给上层 extern unsigned int getIpv4Address(); / implemented by students int stud_ip_recv(char *pBuffer,unsigned short length) / 自己实现的本机 Ipv4数据 包接收函数 / 获取ip头信息 int version = pBuffer0 4; int headlength = pBuffer0 int timetolive = (int)pBuffer8; int headerChecksum = nto

6、hs(*(short unsigned int*)(pBuffer+10); int destinationAddress = ntohl(*(unsigned int*)(pBuffer+16); if (version != 4) /检查version ip_DiscardPkt(pBuffer,STUD_IP_TEST_VERSION_ERROR); return 1; if (headlength 5) /检查IHL ip_DiscardPkt(pBuffer,STUD_IP_TEST_HEADLEN_ERROR); return 1; if (timetolive = 0) / 检查

7、TTL ip_DiscardPkt(pBuffer,STUD_IP_TEST_TTL_ERROR); return 1; / 检查目的地址和本机地址是否相同 if (destinationAddress != getIpv4Address() return 1; int sum = 0; unsigned short int localCheckSum = 0; unsigned short int field; int offset; for(int i = 1;i = headlength*2; i+) /计算校验和 offset = (i-1)*2; if(i != 6) field =

8、 (pBufferoffset)8; field += pBufferoffset+1; sum += field; sum %= 65535; localCheckSum = 0xffff - (unsigned short int)sum; if(localCheckSum != headerChecksum) / 检验校验和 ip_DiscardPkt(pBuffer,STUD_IP_TEST_CHECKSUM_ERROR); return 1; ip_SendtoUp(pBuffer,length); return 0; int stud_ip_Upsend(char *pBuffer

9、,unsigned short len,unsigned int srcAddr, unsigned int dstAddr,byte protocol,byte ttl) char *sendBuffer = new char(len + 20); memset(sendBuffer, 0, len+20); / 填入各种 IP头信息sendBuffer0 = 0x45; unsigned short int totallen = htons(len + 20); memcpy(sendBuffer + 2, sendBuffer8 = ttl; sendBuffer9 = protocol

10、; unsigned int src = htonl(srcAddr); unsigned int dis = htonl(dstAddr); memcpy(sendBuffer + 12, memcpy(sendBuffer + 16, int sum = 0; unsigned short int localCheckSum = 0; for(int i = 0;i 10;i +) sum = sum + (sendBufferi*28) + (sendBufferi*2+1); sum %= 65535; localCheckSum = htons(0xffff - (unsigned

11、short int)sum); memcpy(sendBuffer + 10, memcpy(sendBuffer + 20, pBuffer, len); / 发送 ip_SendtoLower(sendBuffer,len+20); return 0; 6. 总结与心得体会 通过这次实验,我对 TCP/IPV4协议的工作原理和处理流程有了很好的理解, 学习了计算机之间的底层通信的实现。对Ipv4 的地址分类应用, 配置及网络传输 也有进一步理解。对所学的知识得以总结和综合运用。参考资料: NetRiver2000 网络实验系统的tcp/ip协议实验部分 【这里提供了编程的思路,其实也是需求

12、分析和算法,这样实现起来就比较容 易了】 在两个计算机端系统通信的环境中,网络的拓扑可以简化为两台计算机直接 相连,中间的具体连接方式可以抽象为一条简单的链路,如图所示。 IPv4分组收 发实验就是要在实验系统客户端的开发平台上,实现IPv4分组的接收和发送功能。客户端接收到测试服务器发送来的IPv4分组后,调用接收接口函数 stud_ip_recv( )。学生需要在这个函数中实现IPv4分组接收处理的功能。接收 处理完成后,调用接口函数ip_SendtoUp( ) 将需要上层协议进一步处理的信息 提交给上层协议; 或者调用函数 ip_DiscardPkt( ) 丢弃有错误的分组并报告错误 类

13、型。在上层协议需要发送分组时,会调用发送接口函数stud_ip_Upsend( )。学生需 要在这个函数中实现 IPv4分组封装发送的功能。 根据所传参数完成 IPv4分组的封 装,之后调用接口函数 ip_SendtoLower( )把分组交给下层完成发送。接收流程: 在接口函数 stud_ip_recv( )中,需要完成下列处理步骤(仅供参考): 1) 检查接收到的 IPv4分组头部的字段, 包括版本号(Version )、 头部长度(IP Head length )、生存时间( Time to live )以及头校验和( Header checksum)字段。 对于出错的分组调用 ip_D

14、iscardPkt( )丢弃,并说明错误类型。 2) 检查IPv4分组是否应该由本机接收。如果分组的目的地址是本机地址或广播 地址,则说明此分组是发送给本机的;否则调用ip_DiscardPkt( ) 丢弃,并说明 错误类型。 3) 如 果 IPV4分 组 应 该 由 本 机 接 收 , 则 提 取 得 到 上 层 协 议 类 型 , 调 用 ip_SendtoUp( )接口函数,交给系统进行后续接收处理。1.2 发送流程 在接口函数 stud_ip_Upsend( )中,需要完成下列处理步骤(仅供参考): 1) 根据所传参数 (如数据大小) ,来确定分配的存储空间的大小并申请分组的存储 空间。 2) 按照IPv4协议标准填写 IPv4分组头部各字段,标识符(Identification)字 段可以使用一个随机数来填写。(注意:部分字段内容需要转换成网络字节序) 3) 完成IPv4分组的封装后, 调用ip_SendtoLower( ) 接口函数完成后续的发送处 理工作,最终将分组发送到网络中。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号