Ipv4协议收发实验.docx_第1页
Ipv4协议收发实验.docx_第2页
Ipv4协议收发实验.docx_第3页
Ipv4协议收发实验.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ipv4协议收发实验实验说明:由于tcp/ipv4协议已经集成在系统和网卡的驱动程序中,自己单独编写实现基于ipv4协议收发的实验,要求对系统及硬件的相关接口能够理解和应用。其中的工作量是很大的,在网上也没有相关可以利用的实现平台。只查到了基于NetRiver2000实验系统的tcp协议收发实验例程,该系统提供了操作系统和硬件底层的接口用来实现 函数的的编写及调用。这里,限于知识储备,我对相关的函数及ipv4数据包的格式,分组,封装实现及收发流程做了分析和研究,对tcp/ipv4的协议有了更好的理解。1.实验目的IPv4协议是互联网的核心协议,它保证了网络节点(包括网络设备和主机)在网络层能够按照标准协议互相通信。IPv4地址唯一标识了网络节点。在我们日常使用的计算机的主机协议栈中,IPv4协议必不可少,它能够接收网络中传送给本机的分组,同时也能根据上层协议的要求将报文封装为IPv4分组发送出去。本实验通过设计实现主机协议栈中的IPv4协议,让学生深入了解网络层协议的基本原理,学习IPv4协议基本的分组接收和发送流程。另外,通过本实验,学生可以初步接触互联网协议栈的结构和计算机网络实验系统,为后面进行更为深入复杂的实验奠定良好的基础。2.实验原理TCP协议簇本身4层:主机-网络层(接口层)、互连层、传输层、应用层。IP协议在第二层(OSI的第三层:网络层)TCP在第三层。(OSI的第四层:传输层)Ipv4数据包格式:3 实验要求在理解TCP/Ipv4协议数据格式及处理流程的基础上,根据计算机网络实验系统所提供的上下层接口函数和协议中分组收发的主要流程,设计实现一个简单的IPv4分组收发模块。要求实现的主要功能包括: 1)IPv4分组的基本接收处理; 2)IPv4分组的封装发送; 3)理解对IPv4协议中的选项和分片处理的原理4 .实验内容1) 实现IPv4分组的基本接收处理功能对于接收到的IPv4分组,检查目的地址是否为本地地址,并检查IPv4分组头部中其它字段的合法性。提交正确的分组给上层协议继续处理,丢弃错误的分组并说明错误类型。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_SendtoUp(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 & 0xf; int timetolive = (int)pBuffer8; int headerChecksum = ntohs(*(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) /检查TTL ip_DiscardPkt(pBuffer,STUD_IP_TEST_TTL_ERROR); return 1; /检查目的地址和本机地址是否相同 if (destinationAddress != getIpv4Address() & destinationAddress != 0xffffff) ip_DiscardPkt(pBuffer,STUD_IP_TEST_DESTINATION_ERROR); 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 = (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,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, &totallen, sizeof(unsigned short int); sendBuffer8 = ttl; sendBuffer9 = protocol; unsigned int src = htonl(srcAddr); unsigned int dis = htonl(dstAddr); memcpy(sendBuffer + 12, &src, sizeof(unsigned int); memcpy(sendBuffer + 16, &dis, sizeof(unsigned int); 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 short int)sum); memcpy(sendBuffer + 10, &localCheckSum, sizeof(unsigned short int); memcpy(sendBuffer + 20, pBuffer, len); /发送 ip_SendtoLower(sendBuffer,len+20); return 0;6. 总结与心得体会通过这次实验,我对TCP/IPV4协议的工作原理和处理流程有了很好的理解,学习了计算机之间的底层通信的实现。对Ipv4的地址分类应用,配置及网络传输也有进一步理解。对所学的知识得以总结和综合运用。参考资料:NetRiver2000网络实验系统 的tcp/ip协议实验部分【这里提供了编程的思路,其实也是需求分析和算法,这样实现起来就比较容易了】在两个计算机端系统通信的环境中,网络的拓扑可以简化为两台计算机直接相连,中间的具体连接方式可以抽象为一条简单的链路,如图所示。IPv4分组收发实验就是要在实验系统客户端的开发平台上,实现IPv4分组的接收和发送功能。客户端接收到测试服务器发送来的IPv4分组后,调用接收接口函数stud_ip_recv( )。学生需要在这个函数中实现IPv4分组接收处理的功能。接收处理完成后,调用接口函数ip_SendtoUp( ) 将需要上层协议进一步处理的信息提交给上层协议;或者调用函数ip_DiscardPkt( )丢弃有错误的分组并报告错误类型。在上层协议需要发送分组时,会调用发送接口函数stud_ip_Upsend( )。学生需要在这个函数中实现IPv4分组封装发送的功能。根据所传参数完成IPv4分组的封装,之后调用接口函数ip_SendtoLower( )把分组交给下层完成发送。 接收流程 :在接口函数stud_ip_recv( )中,需要完成下列处理步骤(仅供参考): 1) 检查接收到的IPv4分组头部的字段,包括版本号(Version)、头部长度(IP Head length)、生存时间(Time to live)以及头校验和(Header checksum)字段。对于出错的分组调用ip_DiscardPkt( )丢弃,并说明错误类型。2) 检查IPv4分组是否应该由本机接收。如果分组的目的地址是本机地址或广播地址,则说明此分组是发送给本机的;否则调用ip_DiscardPkt( )丢弃,并说明错误类型。3) 如果IPV4分组应该由本机接收,则提取得到上层协议类型,调用ip_SendtoUp( )接口函数,交给系统进行后续接收处理。1.2 发送流程 在接口函数st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论