




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络专题训练Ipv4转发实验报告一、 实验目的1. 了解路由器是如何为分组选择路由,并逐跳地将分组发送到目的主机。2. 初步接触路由表这一数据结构,认识路由器是如何根据路由表确定分组转发的下一跳。二、 实验要求1. 设计路由表的数据结构。2. 完成对Ipv4分组的接受和发送。3. 完成对Ipv4分租的转发。三、 实验基本框架1. 路由初始化函数 void stud_Route_Init()2. 路由添加函数 void stud_route_add(stud_route_msg*proute)3. 路由信息结构体头部包含路由表项目的地址,掩码长度和下一跳的信息4. 转发处理函数int stud_fwd_deal(char* pBuffer, int length)5. 本地处理函数void fwd_LocalRcv(char* pBuffer, int length)6. 下层发送函数void fwd_SendtoLower(char* pBuffer, int length, unsigned int nexthop)7. 丢弃分组函数void fwd_DiscardPkt(char* pBuffer, int type)8. 获取本机地址函数UINT32 getIpv4Address()四、 设计思路首先设计路由表项结构struct routeTableItemunsigned int destIP; /目的地址IPunsigned int mask; /掩码,用于取出对应的网络地址unsigned int masklen; /掩码长度,用于实现最长匹配unsigned int nexthop; /下一跳地址;vector m_table /存储路由表然后,在路由表项添加函数中,处理路由表项的添加void stud_route_add(stud_route_msg *proute)routeTableItem newTableItem;newTableItem.masklen = ntohl(proute-masklen);/记录掩码长度newTableItem.mask = (1(ntohl(proute-masklen)-1);/获得掩码newTableItem.destIP = ntohl(proute-dest)&newTableItem.mask;/获取网路地址段newTableItem.nexthop = ntohl(proute-nexthop);/获取下一条m_table.push_back(newTableItem);/加入路由表return;每当收到一个新的包时首先读取包头信息/获取包头信息int IHL = pBuffer0 & 0xf; /获取包头长度(bits/32)/cout IHL: IHL endl;int TTL = (int)pBuffer8; /timetolive, 存活时间int headerChecksum = ntohl(*(unsigned short*)(pBuffer+10);/头部校验和int destIP = ntohl(*(unsigned int*)(pBuffer+16);/目的地址然后判断此包是否是发给本机的if(destIP = getIpv4Address()fwd_LocalRcv(pBuffer, length);return 0;判断是否应该丢弃此包if(TTL = 0)fwd_DiscardPkt(pBuffer, STUD_FORWARD_TEST_TTLERROR);return 1;查找最长匹配for(int i = 0; i longestMatchLen & m_tablei.destIP = (destIP & m_tablei.mask)bestMatch = i;isMatch = true;longestMatchLen = m_tablei.masklen;查找成功,重新计算校验和并发送if(isMatch)char *buffer = new charlength; memcpy(buffer,pBuffer,length); buffer8-; /TTL - 1int sum = 0; /重新计算校验和 unsigned short int localCheckSum = 0; for(int j = 0; j 2 * IHL; j +) if (j = 5)continue; sum = sum + (bufferj*2 16) != 0)sum = unsigned(sum) 16 + sum & 0xffff; localCheckSum = htons(0xffff - (unsigned short int)sum);memcpy(buffer+10, &localCheckSum, sizeof(unsigned short);/发送fwd_SendtoLower(buffer, length, m_tablebestMatch.nexthop);return 0;查找不成功,丢弃该包elsefwd_DiscardPkt(pBuffer, STUD_FORWARD_TEST_NOROUTE);return 1;五、 收获1. 对Ipv4的转发机制有了实际的认识和体会2. 实践了最长匹配算法六、 源代码/* THIS FILE IS FOR IP FORWARD TEST*/#include sysInclude.h#include using std:vector;#include using std:cout;/ system supportextern void fwd_LocalRcv(char *pBuffer, int length);extern void fwd_SendtoLower(char *pBuffer, int length, unsigned int nexthop);extern void fwd_DiscardPkt(char *pBuffer, int type);extern unsigned int getIpv4Address( );/ implemented by studentsstruct routeTableItemunsigned int destIP;unsigned int mask;unsigned int masklen;unsigned int nexthop;vector m_table;void stud_Route_Init()m_table.clear();return;void stud_route_add(stud_route_msg *proute)routeTableItem newTableItem;newTableItem.masklen = ntohl(proute-masklen);newTableItem.mask = (1(ntohl(proute-masklen)-1);newTableItem.destIP = ntohl(proute-dest)&newTableItem.mask;newTableItem.nexthop = ntohl(proute-nexthop);m_table.push_back(newTableItem);return;int stud_fwd_deal(char *pBuffer, int length)int IHL = pBuffer0 & 0xf; int TTL = (int)pBuffer8; int headerChecksum = ntohl(*(unsigned short*)(pBuffer+10);int destIP = ntohl(*(unsigned int*)(pBuffer+16);if(destIP = getIpv4Address()fwd_LocalRcv(pBuffer, length);return 0;if(TTL = 0)fwd_DiscardPkt(pBuffer, STUD_FORWARD_TEST_TTLERROR);return 1;bool isMatch = false;unsigned int longestMatchLen = 0;int bestMatch = 0;for(int i = 0; i longestMatchLen & m_tablei.destIP = (destIP & m_tablei.mask)bestMatch = i;isMatch = true;longestMatchLen = m_tablei.masklen;/cout find one endl;if(isMatch)char *buffer = new charlength; memcpy(buffer,pBuffer,length); buffer8-; /TTL - 1int sum = 0; unsigned short int localCheckSum = 0; for(int j = 0; j 2 * IHL; j +) if (j = 5)continue; sum = sum + (bufferj*2 16) != 0)sum = unsigned(sum) 16 + sum & 0xffff; localCheckSum = htons(0xffff - (unsigned shor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古通辽市2024-2025学年高一下学期期末教学质量监测物理试卷(含答案)
- 2025版外墙保温工程保温材料环保检测与施工合同
- 2025年办公楼及写字楼客户接待区清洁服务合同模板
- 2025版智能穿戴设备贴牌加工服务合同
- 2025年度企业人才招聘与委托输送一体化服务协议
- 2025年度企业员工离职与培训外包服务合同
- 2025年旅游产品导购人员劳动合同范本
- 2025版金融保险商业代理招商合作合同范本
- 2025版水利工程中沙石采购与供应合同
- 2025年度法院执行离婚协议书履行条件评估合同
- 喷砂检验报告
- 原材料来料检验报告
- 相关方需求和期望分析表
- PCB板来料检验规范
- 诺如病毒感染暴发调查和预防控制技术指南(2023版)
- (中职)PLC实训课件完整版课件全套ppt教学教程(最新)
- 教师入职审批登记表
- 教案《冷冲压工艺及模具设计》
- 《职业病危害告知卡》
- SPS882和R8、R6比较
- 产品管理讲义
评论
0/150
提交评论