版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分层协议示例-IP报文分段和重组模拟Host功能描述-1业务逻辑层的功能登录维护当前所有已登录Host的信息退出登录传输文件Host功能描述-2消息分段重组层的功能
消息分段根据当前配置的消息所限定的最大长度,对所有消息进行分段消息分段重组对收到的消息分段进行重组,恢复原始消息Host功能描述-3消息发送与接收层的功能
消息的错序模拟IP网络可能发生的错序现象消息的丢失
模拟IP网络可能发生的分组丢失现象消息的发送和接收
Forwarder功能描述-2消息分段重组层功能
消息的再分段余同HostForwarder功能描述-3消息发送与接收层功能
消息转发根据消息中的源Host和目的Host的地址,进行文件传输消息转发消息的错序消息的丢失消息的发送和接收分层协议栈网络层应用层传输层网络层应用层传输层网络层源主机目的主机路由器业务逻辑层消息分段重组层消息发送与接收层业务逻辑层消息分段重组层消息发送与接收层业务逻辑层消息分段重组层消息发送与接收层IP协议栈
应用层协议栈
HostForwarderHost协议栈数据封装分段重组消息头部业务逻辑消息分段重组消息业务逻辑头部分层协议定义-分段重组层消息verhlensrc_ipdest_ipidMoffsetprotocolver—协议版本,2比特。hlen—协议头部长度,6比特。src_ip—源IP,32比特。dest_ip—目的IP,32比特。id—分段重组消息ID,16比特。M—更多消息指示位,2比特,其中01表示有更多消息分段,00表示当前分段是最后一个分段,最高比特位保留。offset—分段在原始数据块中的偏移,6比特。protocol—上层协议,8比特分层协议定义-业务逻辑层消息typelen业务消息内容type—业务消息类别,8比特。
len—业务消息总长度,包含type和len字段以及后续业务消息内容,8比特。业务逻辑层消息-登录typelenusertype—为1。
user—登录名,8字节,其中登录名占7字节,最后一字节为’\0’业务逻辑层消息-登录转发typelenuseriptype—为2。
user—登录名,8字节,其中登录名占7字节,最后一字节为’\0’ip—此登录用户对应的IP地址,4字节。
业务逻辑层消息-退出登录typelenusertype—为4。user—登录名,8字节,其中登录名占7字节,最后一字节为’\0’业务逻辑层消息-文件传输typelenuserfilenametype—为5。user—文件发送方Host的登录名
filename—被传输的文件的名字,变长。
业务逻辑层消息-文件传输结束typelenuserfilenametype—为6。user—文件发送方Host的登录名
filename—被传输的文件的名字,变长。
业务逻辑层消息-允许文件传输typelenuserfilenametype—为7。user—文件接收方Host的登录名
filename—被传输的文件的名字,变长。
业务逻辑层消息-文件块typelenuserdatatype—为8。user—文件发送方Host的登录名
data—文件数据块。
IP报文分段和重组模拟程序模拟程序的文件构成host.cforwarder.cmsg.hlist.happtimer.capptimer.hmsg.confMakefilemsg.conf
#SHUFFLEdo_shuffle=1
/*混淆分段*/#DROPdo_drop=0
/*禁止丢失分段的模拟*/frags_drop:4-5-6#TIMERcountdown=300
/*未重组成功的分段回收超时时间*/#PMTUpmtu=64
/*允许发生的分段最大长度*/#NICdev=eth1
/*网卡编号*/
Host文件发送工作流程登录开始选择目标用户发送begin_trans消息发送文件发送end_trans消息收到ready消息?退出?NY结束N
Host文件接收工作流程登录开始收到begin_trans消息接收数据并写入文件创建mfn并发送ready消息收到end_trans消息?NY结束关闭文件文件传输完整过程forwardLOGIN_MSG分段重组层消息verhlensrc_ipdest_ipidMoffsetprotocoltypelen业务消息内容msg_hdr(13bytes)2bytes变长业务消息包括:登录、登录转发、文件传输、......限定每个分段重组层消息的最大长度为255字节分段重组层携带的数据大小必须满足4字节边界最小MTU值为17字节(13字节头部+4字节数据)2bits6bits1byte消息分段示例typelen业务消息内容2bytes240bytes仅首个分段包含业务层消息头…N=?msg_hdrmsg_hdr......Host程序功能模块Host登录与退出用户列表维护登录转发处理文件接收消息分段消息重组消息接收消息发送业务逻辑模块消息处理模块文件发送Host程序多线程框架
input_msg_queuelogin_msg_queue登录相关消息消息入队列消息出队列主线程消息重组线程用户交互线程写文件非登录消息接收应答消息分段发送文件用户交互消息分段Host程序流程登录处理登录者构造并发出登录消息LOGIN_MSGlogin->make_login_msg
转发器处理并转发登录消息FWD_LOGIN_MSGapp_do_login->make_fwd_login_msgapp_do_login->map_username转发器向登录者返回登录应答消息REPLY_MSGapp_do_login->make_reply_msg在线用户处理登录转发消息FWD_LOGIN_MSGapp_do_fwd_login->map_username登录者处理登录应答消息REPLY_MSGapp_do_reply->map_usernameuser_hashuser_queue用户登录make_login_msgintmake_login_msg(u8*sbuf,u8*name){structlogin*p_login;p_login=(structlogin*)sbuf;p_login->h.type=LOGIN_MSG;p_login->h.len=AH_SIZE+NAMESIZE;
memcpy(p_login->user,name,NAMESIZE);returnp_login->h.len;}app_do_replyForwarder登录处理流程向其他Host转发此消息消息类别?删除对应Host记录登录应答登录退出登录Y退出?结束N取下一消息开始收到消息的目的地址匹配自身的地址user_hashuser_queuefn_hash登录退出Forwarder转发处理流程自身是目的?转发此消息Y取下一消息开始
退出?N图7-7结束NYHost消息处理模块消息处理模块的核心功能就是从网络上接收Forwarder发来的各种消息,并由分段重组层进行消息分段的重组,然后将重组完毕的消息交给业务逻辑层进行业务处理。此外消息处理还负责业务消息的发送
Host消息接收流程接收消息开始消息入队列input_msg_queue退出?结束NYHost对收到消息的进一步处理从input_msg_queue取下一消息开始处理非登录业务逻辑消息重组消息NY结束登录消息?消息入登录队列login_msg_queue退出?YN目的主机?YN构造业务逻辑层消息开始计算剩余分段大小拷贝分段数据加入分段队列frag_queue预分段完毕?结束YN从队列frag_queue取下一分段计算该分段偏移设置分段重组层协议头部完毕?YNHost消息分段处理流程预分段Host消息重组流程查找该消息分段对应的mfq结构体开始找到?创建mfq获得该分段消息的M_OFFSET字段最高2bit位计算该消息的起始偏移量计算该消息的结束偏移量将该分段插入到分段链表的正确位置满足重组条件?重组并返回重组后的原始消息结束返回NULLYNYN结束消息类别?开始从登录消息队列login_msg_queue中取下一消息登录应答消息登录转发消息退出登录消息创建已登录Host列表显示已登录Host列表选择目标Host添加Host删除Host退出?YN发送文件发送文件的流程请参见图7-5Host用户交互处理流程
Forwarder程序功能模块Forwarder登录与退出用户列表维护登录转发处理消息分段与再分段消息重组消息接收消息发送业务逻辑模块消息处理模块消息转发Forwarder再分段-1
开始计算剩余分段大小拷贝分段数据加入分段队列frag_queue再分段完毕?YN获得再分段前该收到消息的M_OFFSET字段的高2bit位计算再分段前该消息的起始偏移量1Forwarder再分段-2
设置标志not_last_frag从分段队列frag_queue中取下一消息重新设置该分段的分段重组层头部MF位及其他有关字段计算该消息的相对分段偏移值处理完毕?YN结束1Forwarder登录应答
开始获得登录Host的用户名、IP和端口创建登录应答消息转发完毕?YN更新该Host的IP和端口Host已存在?建立新Host从已登录Host表中取下一个Host向该Host发送登录转发消息向该新登录Host发送登录应答消息结束YN消息错序和丢失模拟
开始产生一个小于当前待发送分段数的随机序号数N待处理分段数减1完毕?将该N序号分段加入到shuffled_frag_queue队列尾部YN从frag_queue分段消息队列中移除第N号分段结束关键数据结构-1
structmsg_buff{ /*消息定义*/u8*data; /*消息数据指针*/intmsg_len; /*消息长度*/
#ifdefFORWARDERstructsockaddr_insk_addr;#endifu16offset; /*消息分段在原始消息中的偏移值*/u16PREV_OLAP; /*当前消息分段和前一个分段重叠大小*/u16NEXT_OLAP; /*当前消息分段和后一个分段重叠大小*/structmsg_buff*next; /*消息分段链表*/
structlist_headlist; /*消息队列input_msg_queue
*/};关键数据结构-2msg_buffmsg_buff……input_msg_queuedatabufferdatabufferdatadata关键数据结构-3[hashcode]=1saddrdaddrprotocolIDfragssaddrdaddrprotocolIDfrags[hashcode]=9分段M=1分段M=1分段M=1分段M=0…structmfq……mfq_hash[HQ_HASHSZ]structmfqnextnextnext关键数据结构-3
structhlist_headmfq_hash[HQ_HASHSZ];structmfq{structhlist_nodehlist; /*哈希链表*/
structlist_headlru_list; /*最近使用过链表*/u32src; /*发送此消息的源用户IP*/u32dest; /*接收此消息的目的用户IP*/u16id; /*消息id*/u8protocol; /*上层协议*/u8last_in;/*最后分段到达标志*/structmsg_buff*frags; /*已接收消息分段链表*/intlen; /*原始消息的总长度*/intmeat; /*实际收到的消息分段的累计长度*/structapp_timertimer; /*垃圾回收定时器*/};关键数据结构-4ipnameporthlistlist[hashcode]=1[hashcode]=9ipnameporthlistliststruct
usermap……structusermapuser_hash[HQ_HASHSZ]ipnameporthlistlistuser_queue…关键数据结构-4structusermap{structhlist_nodehlist;structlist_headlist;u32ip;#ifdefFORWARDERu16port;#endifu8name[NAMESIZE];};关键数据结构-5user*fphlist[hashcode]=1[hashcode]=9user*fphliststruct
mfn……structmfnfn_hash[HQ_HASHSZ]user*fphlistlist…关键数据结构-5structhlist_headfn_hash[HQ_HASHSZ];structmfn{structhlist_nodehlist;u8user[NAMESIZE];FILE*fp;};关键数据结构-6structmsg_hdr{ /*分段重组消息头部*/u8 hlen:6, /*消息头部长度*/ ver:2; /*消息版本*/u32src; /*源用户IP*/u32dest; /*目标用户IP*/u16id; /*分段id*/u8 frag_off; /*分段标志和分段偏移*/u8 protocol; /*上层协议*/};structapp_hdr{ /*业务逻辑层消息头部*/u8type; /*业务逻辑层消息类型*/u8len; /*业务逻辑层消息长度*/};业务逻辑层消息定义-1structlogin{ /*登录消息*/structapp_hdrh;u8user[NAMESIZE];};structlogin_fwd{ /*登录转发消息*/structapp_hdrh;u8user[NAMESIZE];u32ip;};structlogin_reply{ /*登录应答消息*/structapp_hdrh;u8user[NAMESIZE];u32ip;u8others[0]; /*已登录用户及其IP地址从此开始*/};业务逻辑层消息定义-2structlogin_exit{ /*退出登录消息*/structapp_hdrh;u8user[NAMESIZE];};structbegin_trans{ /*开始文件传输消息*/structapp_hdrh;u8user[NAMESIZE];u8file[256]; /*文件名*/};structend_trans{ /*结束文件传输消息*/structapp_hdrh;u8user[NAMESIZE];u8file[256]; /*文件名*/};structready{ /*允许文件传输消息*/structapp_hdrh;u8user[NAMESIZE];u8file[256]; /*文件名*/};structdatablock{ /*文件块*/structapp_hdrh;u8user[NAMESIZE];u8data[0];};业务逻辑层消息定义-3最大255字节msg_hdrapp_hdrapp_dataIP报文分段和重组模拟场景hostForwarderhostuser890user789mtu=17mtu=32testfile
user789向user890发送文件testfile
user890和Forwarder的mtu均设为17字节,而user789的mtu为
32字节
user789发出的消息首先就按32字节进行分段,然后Forwarder将对32字节的消息分段按17字节进行再分段处理模拟程序的编译all:hostforwarderhost:host.oapptimer.o
gcc-g-ohosthost.oapptimer.o-lpthread-std=gnu99
host.o:msg.hlist.hhost.c
gcc-g-chost.c-std=gnu99
forwarder:forwarder.oapptimer.o
gcc-g-oforwarderforwarder.oapptimer.o–lpthread-std=gnu99
forwarder.o:msg.hlist.hforwarder.c
gcc-g-cforwarder.c-std=gnu99
apptimer.o:apptimer.hlist.happtimer.cgcc-capptimer.c-std=gnu99Forwarder的启动$./forwarder192.168.1.1379000loadingtheconfigfile...shufflefunctionisenabled!dropfragsfunctionisdisabled!thetimerofmfq'scountdownnumber:300sthePMTU:17#SHUFFLEdo_shuffle=1#DROPdo_drop=0frags_drop:4-5-6#TIMERcountdown=300#PMTUpmtu=17登录Forwarder-1$./host192.168.1.1379000user890loadingtheconfigfile...shufflefunctionisenabled!dropfragsfunctionisdisabled!thetimerofmfq'scountdownnumber:300sthePMTU:17[0]MORE[1]user789
pleasechooseoneusertobeginFragmentationexercise:#SHUFFLEdo_shuffle=1#DROPdo_drop=0frags_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家装培训知识
- 围手术期的护理
- 桌花婚礼中的
- 小学一年级数学两位数加减一位数水平自测练习题大全附答案
- 现代殡葬技术与管理专业群课程主题互联网技术与素养
- 南瓜小房子阅读活动
- 医院新上岗人员岗前培训
- 《纺织工艺与设备上》课件
- 实验室设计规划
- 病案归档制度
- 中学生安全教育优质实用课件(共54张PPT)
- 第10课《我是汽车设计师》教学设计(新人教版小学美术四年级上册)
- (完整版)霍兰德职业兴趣测试量表及答案.docx
- 《糖尿病足的治疗》PPT课件
- 牛津自然拼读Oxford Phonics WorldLevel1Unit1 lesson1课件
- 漫画艺术欣赏及创作
- 中药材储存仓库技术规范
- 与月亮有关的古诗
- 203741_彩绘工程施工组织设计
- 1073 法律文书-国家开放大学2021年(202101-202107)期末考试真题及答案【2套】-开放本科
- 基础生态学课后习题和答案
评论
0/150
提交评论