网络专题训练Ipv4转发实验报告Word格式.docx

上传人:b****6 文档编号:20184797 上传时间:2023-01-17 格式:DOCX 页数:7 大小:16.18KB
下载 相关 举报
网络专题训练Ipv4转发实验报告Word格式.docx_第1页
第1页 / 共7页
网络专题训练Ipv4转发实验报告Word格式.docx_第2页
第2页 / 共7页
网络专题训练Ipv4转发实验报告Word格式.docx_第3页
第3页 / 共7页
网络专题训练Ipv4转发实验报告Word格式.docx_第4页
第4页 / 共7页
网络专题训练Ipv4转发实验报告Word格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

网络专题训练Ipv4转发实验报告Word格式.docx

《网络专题训练Ipv4转发实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《网络专题训练Ipv4转发实验报告Word格式.docx(7页珍藏版)》请在冰豆网上搜索。

网络专题训练Ipv4转发实验报告Word格式.docx

/掩码长度,用于实现最长匹配unsignedintnexthop;

/下一跳地址;

vectorm_table/存储路由表然后,在路由表项添加函数中,处理路由表项的添加voidstud_route_add(stud_route_msg*proute)routeTableltemnewTableltem;

newTableltem.masklen=ntohl(proute-masklen);

记录掩码长度newTableltem.mask=(1v(ntohl(proute-masklen)-1);

获得掩码newTableltem.destIP=ntohl(proute-dest)&

newTableltem.mask;

/获取网路地址段newTableltem.nexthop=ntohl(proute-nexthop);

获取下一条m_table.push_back(newTableltem);

加入路由表return;

每当收到一个新的包时首先读取包头信息/获取包头信息intIHL=pBufferO&

Oxf;

/获取包头长度(bits/32)/coutIHL:

IHLendl;

intTTL=(int)pBuffer8;

/timetolive,存活时间intheaderchecksum=ntohl(*(unsignedshort*)(pBuffer+10);

头部校验和intdestIP=ntohl(*(unsignedint*)(pBuffer+16);

目的地址然后判断此包是否是发给本机的if(destlP=getlpv4Address()fwd_LocalRcv(pBuffer,length);

return0;

判断是否应该丢弃此包if(TTL=0)fwd_DiscardPkt(pBuffer,STUD_FORWARD_TEST_TTLERROR);

return1;

查找最长匹配for(inti=0;

ilongestMatchLen&

m_tablei.destlP=(destIP&

m_tablei.mask)bestMatch=i;

isMatch=true;

longestMatchLen=m_tablei.masklen;

查找成功,重新计算校验和并发送if(isMatch)char*buffer=newcharlength;

memcpy(buffer,pBuffer,length);

buffer8卜-;

TTL-1intsum=0;

/重新计算校验和unsignedshortintlocalCheckSum=0;

for(intj=0;

j2*IHL;

j+)if(j=5)continue;

sum=sum+(bufferj*216)!

=0)sum=unsigned(sum)16+sum&

Oxffff;

localCheckSum=htons(0xffff-(unsignedshortint)sum);

memcpy(buffer+10,&

localCheckSum,sizeof(unsignedshort);

/发送fwd_SendtoLower(buffer,length,m_tablebestMatch.nexthop);

查找不成功,丢弃该包elsefwd_DiscardPkt(pBuffer,STUD_FORWARD_TEST_NOROUTE);

五、收获1.对Ipv4的转发机制有了实际的认识和体会2.实践了最长匹配算法六、源代码/*THISFILEISFORIPFORWARDTEST*/#includesyslnclude.h#includeusingstd:

vector;

#includeusingstd:

cout;

/systemsupportexternvoidfwd_LocalRcv(char*pBuffer,intlength);

externvoidfwd_SendtoLower(char*pBuffer,intlength,unsignedintnexthop);

externvoidfwd_DiscardPkt(char*pBuffer,inttype);

externunsignedintgetlpv4Address();

/implementedbystudentsstructrouteTableltemunsignedintdestIP;

unsignedintmask;

unsignedintmasklen;

unsignedintnexthop;

vectorm_table;

voidstud_Routenit()m_table.clear();

return;

voidstud_route_add(stud_route_msg*proute)routeTableItemnewTableItem;

newTableltem.mask=(1(ntohl(proute-masklen)-1);

newTableltem.destIP=ntohl(proute-dest)&

newTableltem.mask;

newTableltem.nexthop=ntohl(proute-nexthop);

m_table.push_back(newTableltem);

intstud_fwd_deal(char*pBuffer,intlength)intIHL=pBufferO&

0xf;

intheaderChecksum=ntohl(*(unsignedshort*)(pBuffer+10);

intdestIP=ntohl(*(unsignedint*)(pBuffer+16);

if(destIP=getlpv4Address()fwd_LocalRcv(pBuffer,length);

if(TTL=0)fwd_DiscardPkt(pBuffer,STUD_FORWARD_TEST_TTLERROR);

boolisMatch=false;

unsignedintlongestMatchLen=0;

intbestMatch=0;

for(inti=0;

/coutfindoneendl;

if(isMatch)char*buffer=newcharlength;

/TTL-1intsum=0;

unsignedshortintlocalCheckSum=0;

sum=sum+(buffer2v16)!

fwd_SendtoLower(buffer,length,m_tablebestMatch.nexthop);

elsefwd_DiscardPkt(pBuffer,STUD_FORWARD_TEST_NOROUTE);

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

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1