Ipv4协议收发实验.docx

上传人:cn****1 文档编号:558677740 上传时间:2022-12-25 格式:DOCX 页数:5 大小:38.72KB
返回 下载 相关 举报
Ipv4协议收发实验.docx_第1页
第1页 / 共5页
Ipv4协议收发实验.docx_第2页
第2页 / 共5页
Ipv4协议收发实验.docx_第3页
第3页 / 共5页
Ipv4协议收发实验.docx_第4页
第4页 / 共5页
Ipv4协议收发实验.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

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

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

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

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

4、上层协议所提供的参数,封装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

5、 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 destinationAdd

6、ress = 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

7、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

8、 = (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

9、 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, si

10、zeof(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(in

11、t 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. 总结与

12、心得体会通过这次实验,我对TCP/IPV4协议的工作原理和处理流程有了很好的理解,学习了计算机之间的底层通信的实现。对Ipv4的地址分类应用,配置及网络传输也有进一步理解。对所学的知识得以总结和综合运用。参考资料:NetRiver2000网络实验系统 的tcp/ip协议实验部分【这里提供了编程的思路,其实也是需求分析和算法,这样实现起来就比较容易了】在两个计算机端系统通信的环境中,网络的拓扑可以简化为两台计算机直接相连,中间的具体连接方式可以抽象为一条简单的链路,如图所示。IPv4分组收发实验就是要在实验系统客户端的开发平台上,实现IPv4分组的接收和发送功能。客户端接收到测试服务器发送来的I

13、Pv4分组后,调用接收接口函数stud_ip_recv( )。学生需要在这个函数中实现IPv4分组接收处理的功能。接收处理完成后,调用接口函数ip_SendtoUp( ) 将需要上层协议进一步处理的信息提交给上层协议;或者调用函数ip_DiscardPkt( )丢弃有错误的分组并报告错误类型。在上层协议需要发送分组时,会调用发送接口函数stud_ip_Upsend( )。学生需要在这个函数中实现IPv4分组封装发送的功能。根据所传参数完成IPv4分组的封装,之后调用接口函数ip_SendtoLower( )把分组交给下层完成发送。 接收流程 :在接口函数stud_ip_recv( )中,需要完

14、成下列处理步骤(仅供参考): 1) 检查接收到的IPv4分组头部的字段,包括版本号(Version)、头部长度(IP Head length)、生存时间(Time to live)以及头校验和(Header checksum)字段。对于出错的分组调用ip_DiscardPkt( )丢弃,并说明错误类型。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号