IP报文分段和重组模拟实现_第1页
IP报文分段和重组模拟实现_第2页
IP报文分段和重组模拟实现_第3页
IP报文分段和重组模拟实现_第4页
IP报文分段和重组模拟实现_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、分层协议示例-IP报文分段和重组模拟 H Ho os st t B BH Ho os st t D DH Ho os st t A AH Ho os st t C CF Fo or rw w a ar rd de er rHost功能描述-1v业务逻辑层的功能 登录 维护当前所有已登录Host的信息 退出登录 传输文件Host功能描述-2v消息分段重组层的功能 消息分段根据当前配置的消息所限定的最大长度,对所有消息进行分段 消息分段重组对收到的消息分段进行重组,恢复原始消息Host功能描述-3v消息发送与接收层的功能 消息的错序模拟IP网络可能发生的错序现象 消息的丢失 模拟IP网络可能发生的

2、分组丢失现象 消息的发送和接收 Forwarder功能描述-2v消息分段重组层功能 消息的再分段 余同HostForwarder功能描述-3v消息发送与接收层功能 消息转发根据消息中的源Host和目的Host的地址,进行文件传输消息转发 消息的错序 消息的丢失 消息的发送和接收分层协议栈网络层网络层应用层应用层传输层传输层网络层网络层应用层应用层传输层传输层网络层网络层源主机源主机目的主机目的主机路由器路由器业务逻辑层业务逻辑层消息分段重组层消息分段重组层消息发送与接收层消息发送与接收层业务逻辑层业务逻辑层消息分段重组层消息分段重组层消息发送与接收层消息发送与接收层业务逻辑层业务逻辑层消息分段

3、重组层消息分段重组层消息发送与接收层消息发送与接收层应用层协议栈应用层协议栈 HostForwarderHost协议栈数据封装 分段重组消息头部分段重组消息头部业务逻辑消息业务逻辑消息分段重组消息分段重组消息业务逻辑头部业务逻辑头部分层协议定义-分段重组层消息verhlensrc_ipdest_ipidMoffsetprotocol分层协议定义-业务逻辑层消息typelen业务消息内容业务逻辑层消息-登录typelenuser业务逻辑层消息-登录转发typelenuserip业务逻辑层消息-退出登录typelenuser业务逻辑层消息-文件传输typelenuserfilename业务逻辑层消

4、息-文件传输结束typelenuserfilename业务逻辑层消息-允许文件传输typelenuserfilename业务逻辑层消息-文件块typelenuserdataIP报文分段和重组模拟程序 v 模拟程序的文件构成 host.c forwarder.c msg.h list.h apptimer.c apptimer.h msg.conf Makefilemsg.conf Host文件发送工作流程登登 录录开开 始始选择目标用户选择目标用户发送发送begin_trans消息消息发送文件发送文件发送发送end_trans消息消息收到收到ready消息?消息? 退出?退出?NY结结 束束

5、Host文件接收工作流程登登 录录开开 始始收到收到begin_trans消息消息接收数据并写入文件接收数据并写入文件创建创建mfn并发送并发送ready消息消息收到收到end_trans消息?消息?NY结结 束束关闭文件关闭文件文件传输完整过程 Sender Receiver Forwarderloginlogin responseselect receiversend BEGIN_TRANSforward BEGIN_TRANSsend READYforward READYsend DATA_BLOCKforward DATA_BLOCKwrite filesend END_TRANSfo

6、rward END_TRANSclose file分段重组层消息verhlensrc_ipdest_ipidMoffsetprotocoltypelen业务消息内容msg_hdr(13 bytes)2 bytes变长变长 业务消息包括:业务消息包括:登录、登录转发、文件传输登录、登录转发、文件传输、. 限定每个分段重组层消息的最大长度为限定每个分段重组层消息的最大长度为255字节字节 分段重组层携带的数据大小必须满足分段重组层携带的数据大小必须满足4字节边界字节边界 最小最小MTU值为值为17字节(字节(13字节头部字节头部 + 4字节数据)字节数据)2bits6 bits1 byte消息分段

7、示例typelen业务消息内容2 bytes240 bytesHost程序功能模块 Host登登录录与与退退出出用用户户列列表表维维护护登登录录转转发发处处理理文文件件接接收收消消息息分分段段消消息息重重组组消消息息接接收收消消息息发发送送业务逻辑模块业务逻辑模块消息处理模块消息处理模块文文件件发发送送Host程序多线程框架 Host程序流程登录处理v 登录者构造并发出登录消息LOGIN_MSGLOGIN_MSG login-make_login_msglogin-make_login_msg v 转发器处理并转发登录消息FWD_LOGIN_MSGFWD_LOGIN_MSG app_do_lo

8、gin-make_fwd_login_msgapp_do_login-make_fwd_login_msg app_do_login-map_usernameapp_do_login-map_usernamev 转发器向登录者返回登录应答消息REPLY_MSGREPLY_MSG app_do_login-make_reply_msgapp_do_login-make_reply_msgv 在线用户处理登录转发消息FWD_LOGIN_MSGFWD_LOGIN_MSG app_do_fwd_login-map_usernameapp_do_fwd_login-map_usernamev 登录者处理

9、登录应答消息REPLY_MSGREPLY_MSG app_do_reply-map_usernameapp_do_reply-map_usernamemake_login_msgint make_login_msg(u8 *sbuf, u8 *name) struct login *p_login; p_login = (struct login *)sbuf; p_login-h.type = LOGIN_MSG; p_login-h.len = AH_SIZE + NAMESIZE; memcpy(p_login-user, name, NAMESIZE); return p_login-

10、h.len;app_do_replyForwarder登录处理流程向其他向其他Host 转发此消息转发此消息消息类别?消息类别?删除对应删除对应Host记录记录登录应答登录应答登录登录退出登录退出登录Y 退出?退出?结结 束束N取下一消息取下一消息开开 始始收到消息的目的地收到消息的目的地址匹配自身的地址址匹配自身的地址Forwarder转发处理流程自身是目的?自身是目的?转发此消息转发此消息Y取下一消息取下一消息开开 始始 退出?退出?N图图7-7结结 束束NYHost消息处理模块v消息处理模块的核心功能就是从网络上接收Forwarder发来的各种消息,并由分段重组层进行消息分段的重组,然后

11、将重组完毕的消息交给业务逻辑层进行业务处理。此外消息处理还负责业务消息的发送 Host消息接收流程接收消息接收消息开开 始始消息入队列消息入队列input_msg_queue退出?退出?结结 束束NYHost对收到消息的进一步处理 从从input_msg_queue取取下一消息下一消息开开 始始处理非登录业处理非登录业务逻辑消息务逻辑消息重组消息重组消息NY结结 束束登录消息?登录消息?消息入登录队列消息入登录队列login_msg_queue退出?退出?YN目的主机?目的主机?YN构造业务逻辑层消息构造业务逻辑层消息开开 始始计算剩余分段大小计算剩余分段大小拷贝分段数据拷贝分段数据加入分段队

12、列加入分段队列frag_queue预分段完毕?预分段完毕?结结 束束YN从队列从队列frag_queue取下一分段取下一分段计算该分段偏移计算该分段偏移设置分段重组层协议头部设置分段重组层协议头部完毕?完毕?YNHost消息分段处理流程消息分段处理流程Host消息重组流程消息重组流程查找该消息分段对应查找该消息分段对应的的mfq结构体结构体开开 始始找到?找到?创建创建mfq获得该分段消息的获得该分段消息的M_OFFSET字段最高字段最高2bit位位计算该消息的计算该消息的起始偏移量起始偏移量计算该消息的计算该消息的结束偏移量结束偏移量将该分段插入到分将该分段插入到分段链表的正确位置段链表的正

13、确位置满足重组条件?满足重组条件?重组并返回重组重组并返回重组后的原始消息后的原始消息结结 束束返回返回NULLYNYN结结 束束消息类别?消息类别?开开 始始从登录消息队列从登录消息队列login_msg_queue中取下一消息中取下一消息登录应答消息登录应答消息登录转发消息登录转发消息退出登录消息退出登录消息创建已登录创建已登录Host列表列表显示已登录显示已登录Host列表列表选择目标选择目标Host添加添加Host删除删除Host退出?退出?YN发送文件发送文件发送文件的流发送文件的流程请参见图程请参见图7-5Host用户交互处理流程用户交互处理流程Forwarder程序功能模块 Fo

14、rwarder登登录录与与退退出出用用户户列列表表维维护护登登录录转转发发处处理理消消息息分分段段与与再再分分段段消消息息重重组组消消息息接接收收消消息息发发送送业务逻辑模块业务逻辑模块消息处理模块消息处理模块消消息息转转发发Forwarder再分段再分段-1开开 始始计算剩余分段大小计算剩余分段大小拷贝分段数据拷贝分段数据加入分段队列加入分段队列frag_queue再分段完毕?再分段完毕?YN获得再分段前该收到消息的获得再分段前该收到消息的M_OFFSET字段的高字段的高2bit位位计算再分段前该消息计算再分段前该消息的起始偏移量的起始偏移量Forwarder再分段再分段-2从分段队列从分段

15、队列frag_queue中取下一消息中取下一消息重新设置该分段的分重新设置该分段的分段重组层头部段重组层头部MF位位及其他有关字段及其他有关字段计算该消息的相计算该消息的相对分段偏移值对分段偏移值处理完毕?处理完毕?YN结结 束束Forwarder登录应答登录应答开开 始始获得登录获得登录Host的用的用户名、户名、IP和端口和端口创建创建登录应答登录应答消息消息转发完毕?转发完毕?YN更新该更新该Host的的IP和端口和端口Host已存在?已存在?建立新建立新Host从已登录从已登录Host表表中取下一个中取下一个Host向该向该Host发送发送登录转发登录转发消息消息向该新登录向该新登录H

16、ost发送发送登录应答登录应答消息消息结结 束束YN消息错序和丢失模拟消息错序和丢失模拟开开 始始产生一个小于当前待发送分段数产生一个小于当前待发送分段数的随机序号数的随机序号数N待处理分段数减待处理分段数减1 完毕?完毕?将该将该N序号分段加入到序号分段加入到shuffled_frag_queue队列尾部队列尾部YN从从frag_queue分段消息队列中移分段消息队列中移除第除第N号分段号分段结结 束束关键数据结构-1 struct msg_buff /* 消息定义消息定义 */ u8 *data; /* 消息数据指针消息数据指针 */ int msg_len; /* 消息长度消息长度 */

17、 #ifdef FORWARDER struct sockaddr_in sk_addr;#endif u16 offset; /* 消息分段在原始消息中的偏移值消息分段在原始消息中的偏移值 */ u16 PREV_OLAP; /* 当前消息分段和前一个分段重叠大小当前消息分段和前一个分段重叠大小 */ u16 NEXT_OLAP; /* 当前消息分段和后一个分段重叠大小当前消息分段和后一个分段重叠大小 */ struct msg_buff *next;/* 消息分段链表消息分段链表 */ struct list_head list;/* 消息队列消息队列input_msg_queue */

18、;关键数据结构-2msg_buffmsg_buffinput_msg_queuedata bufferdata bufferdatadata关键数据结构-3hashcode=1saddrdaddrprotocolIDfragssaddrdaddrprotocolIDfragshashcode=9分段分段M=1分段分段M=1分段分段M=1分段分段M=0struct mfqmfq_hashHQ_HASHSZstruct mfqnextnextnext关键数据结构-3关键数据结构-4ipnameporthlistlisthashcode=1hashcode=9ipnameporthlistlists

19、truct usermapstruct usermapuser_hashHQ_HASHSZipnameporthlistlistuser_queue关键数据结构-4关键数据结构-5user*fphlisthashcode=1hashcode=9user*fphliststruct mfnstruct mfnfn_hashHQ_HASHSZuser*fphlistlist关键数据结构-5关键数据结构-6业务逻辑层消息定义-1业务逻辑层消息定义-2业务逻辑层消息定义-3最大255字节msg_hdrapp_hdrapp_dataIP报文分段和重组模拟场景hostForwarderhostuser890user789mtu = 17mtu = 32testfile user789向向user890发送文件发送文件testfile user890和和Forwarder的的mtu均设为均设为17字节,而

温馨提示

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

评论

0/150

提交评论