IP報(bào)文分段和重組模擬實(shí)現(xiàn)_第1頁(yè)
IP報(bào)文分段和重組模擬實(shí)現(xiàn)_第2頁(yè)
IP報(bào)文分段和重組模擬實(shí)現(xiàn)_第3頁(yè)
IP報(bào)文分段和重組模擬實(shí)現(xiàn)_第4頁(yè)
IP報(bào)文分段和重組模擬實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、分層協(xié)議示例-IP報(bào)文分段和重組模擬 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業(yè)務(wù)邏輯層的功能 登錄 維護(hù)當(dāng)前所有已登錄Host的信息 退出登錄 傳輸文件Host功能描述-2v消息分段重組層的功能 消息分段根據(jù)當(dāng)前配置的消息所限定的最大長(zhǎng)度,對(duì)所有消息進(jìn)行分段 消息分段重組對(duì)收到的消息分段進(jìn)行重組,恢復(fù)原始消息Host功能描述-3v消息發(fā)送與接收層的功能 消息的錯(cuò)序模擬IP網(wǎng)絡(luò)可能發(fā)生的錯(cuò)序現(xiàn)象 消息的丟失 模擬IP網(wǎng)絡(luò)可能發(fā)生的

2、分組丟失現(xiàn)象 消息的發(fā)送和接收 Forwarder功能描述-2v消息分段重組層功能 消息的再分段 余同HostForwarder功能描述-3v消息發(fā)送與接收層功能 消息轉(zhuǎn)發(fā)根據(jù)消息中的源Host和目的Host的地址,進(jìn)行文件傳輸消息轉(zhuǎn)發(fā) 消息的錯(cuò)序 消息的丟失 消息的發(fā)送和接收分層協(xié)議棧網(wǎng)絡(luò)層網(wǎng)絡(luò)層應(yīng)用層應(yīng)用層傳輸層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)層應(yīng)用層應(yīng)用層傳輸層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)層源主機(jī)源主機(jī)目的主機(jī)目的主機(jī)路由器路由器業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層消息分段重組層消息分段重組層消息發(fā)送與接收層消息發(fā)送與接收層業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層消息分段重組層消息分段重組層消息發(fā)送與接收層消息發(fā)送與接收層業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層消息分段

3、重組層消息分段重組層消息發(fā)送與接收層消息發(fā)送與接收層應(yīng)用層協(xié)議棧應(yīng)用層協(xié)議棧 HostForwarderHost協(xié)議棧數(shù)據(jù)封裝 分段重組消息頭部分段重組消息頭部業(yè)務(wù)邏輯消息業(yè)務(wù)邏輯消息分段重組消息分段重組消息業(yè)務(wù)邏輯頭部業(yè)務(wù)邏輯頭部分層協(xié)議定義-分段重組層消息verhlensrc_ipdest_ipidMoffsetprotocol分層協(xié)議定義-業(yè)務(wù)邏輯層消息typelen業(yè)務(wù)消息內(nèi)容業(yè)務(wù)邏輯層消息-登錄typelenuser業(yè)務(wù)邏輯層消息-登錄轉(zhuǎn)發(fā)typelenuserip業(yè)務(wù)邏輯層消息-退出登錄typelenuser業(yè)務(wù)邏輯層消息-文件傳輸typelenuserfilename業(yè)務(wù)邏輯層消

4、息-文件傳輸結(jié)束typelenuserfilename業(yè)務(wù)邏輯層消息-允許文件傳輸typelenuserfilename業(yè)務(wù)邏輯層消息-文件塊typelenuserdataIP報(bào)文分段和重組模擬程序 v 模擬程序的文件構(gòu)成 host.c forwarder.c msg.h list.h apptimer.c apptimer.h msg.conf Makefilemsg.conf Host文件發(fā)送工作流程登登 錄錄開(kāi)開(kāi) 始始選擇目標(biāo)用戶(hù)選擇目標(biāo)用戶(hù)發(fā)送發(fā)送begin_trans消息消息發(fā)送文件發(fā)送文件發(fā)送發(fā)送end_trans消息消息收到收到ready消息?消息? 退出?退出?NY結(jié)結(jié) 束束

5、Host文件接收工作流程登登 錄錄開(kāi)開(kāi) 始始收到收到begin_trans消息消息接收數(shù)據(jù)并寫(xiě)入文件接收數(shù)據(jù)并寫(xiě)入文件創(chuàng)建創(chuàng)建mfn并發(fā)送并發(fā)送ready消息消息收到收到end_trans消息?消息?NY結(jié)結(jié) 束束關(guān)閉文件關(guān)閉文件文件傳輸完整過(guò)程 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業(yè)務(wù)消息內(nèi)容msg_hdr(13 bytes)2 bytes變長(zhǎng)變長(zhǎng) 業(yè)務(wù)消息包括:業(yè)務(wù)消息包括:登錄、登錄轉(zhuǎn)發(fā)、文件傳輸?shù)卿洝⒌卿涋D(zhuǎn)發(fā)、文件傳輸、. 限定每個(gè)分段重組層消息的最大長(zhǎng)度為限定每個(gè)分段重組層消息的最大長(zhǎng)度為255字節(jié)字節(jié) 分段重組層攜帶的數(shù)據(jù)大小必須滿(mǎn)足分段重組層攜帶的數(shù)據(jù)大小必須滿(mǎn)足4字節(jié)邊界字節(jié)邊界 最小最小MTU值為值為17字節(jié)(字節(jié)(13字節(jié)頭部字節(jié)頭部 + 4字節(jié)數(shù)據(jù))字節(jié)數(shù)據(jù))2bits6 bits1 byte消息分段

7、示例typelen業(yè)務(wù)消息內(nèi)容2 bytes240 bytesHost程序功能模塊 Host登登錄錄與與退退出出用用戶(hù)戶(hù)列列表表維維護(hù)護(hù)登登錄錄轉(zhuǎn)轉(zhuǎn)發(fā)發(fā)處處理理文文件件接接收收消消息息分分段段消消息息重重組組消消息息接接收收消消息息發(fā)發(fā)送送業(yè)務(wù)邏輯模塊業(yè)務(wù)邏輯模塊消息處理模塊消息處理模塊文文件件發(fā)發(fā)送送Host程序多線(xiàn)程框架 Host程序流程登錄處理v 登錄者構(gòu)造并發(fā)出登錄消息LOGIN_MSGLOGIN_MSG login-make_login_msglogin-make_login_msg v 轉(zhuǎn)發(fā)器處理并轉(zhuǎn)發(fā)登錄消息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 轉(zhuǎn)發(fā)器向登錄者返回登錄應(yīng)答消息REPLY_MSGREPLY_MSG app_do_login-make_reply_msgapp_do_login-make_reply_msgv 在線(xiàn)用戶(hù)處理登錄轉(zhuǎn)發(fā)消息FWD_LOGIN_MSGFWD_LOGIN_MSG app_do_fwd_login-map_usernameapp_do_fwd_login-map_usernamev 登錄者處理

9、登錄應(yīng)答消息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 轉(zhuǎn)發(fā)此消息轉(zhuǎn)發(fā)此消息消息類(lèi)別?消息類(lèi)別?刪除對(duì)應(yīng)刪除對(duì)應(yīng)Host記錄記錄登錄應(yīng)答登錄應(yīng)答登錄登錄退出登錄退出登錄Y 退出?退出?結(jié)結(jié) 束束N取下一消息取下一消息開(kāi)開(kāi) 始始收到消息的目的地收到消息的目的地址匹配自身的地址址匹配自身的地址Forwarder轉(zhuǎn)發(fā)處理流程自身是目的?自身是目的?轉(zhuǎn)發(fā)此消息轉(zhuǎn)發(fā)此消息Y取下一消息取下一消息開(kāi)開(kāi) 始始 退出?退出?N圖圖7-7結(jié)結(jié) 束束NYHost消息處理模塊v消息處理模塊的核心功能就是從網(wǎng)絡(luò)上接收Forwarder發(fā)來(lái)的各種消息,并由分段重組層進(jìn)行消息分段的重組,然后

11、將重組完畢的消息交給業(yè)務(wù)邏輯層進(jìn)行業(yè)務(wù)處理。此外消息處理還負(fù)責(zé)業(yè)務(wù)消息的發(fā)送 Host消息接收流程接收消息接收消息開(kāi)開(kāi) 始始消息入隊(duì)列消息入隊(duì)列input_msg_queue退出?退出?結(jié)結(jié) 束束NYHost對(duì)收到消息的進(jìn)一步處理 從從input_msg_queue取取下一消息下一消息開(kāi)開(kāi) 始始處理非登錄業(yè)處理非登錄業(yè)務(wù)邏輯消息務(wù)邏輯消息重組消息重組消息NY結(jié)結(jié) 束束登錄消息?登錄消息?消息入登錄隊(duì)列消息入登錄隊(duì)列l(wèi)ogin_msg_queue退出?退出?YN目的主機(jī)?目的主機(jī)?YN構(gòu)造業(yè)務(wù)邏輯層消息構(gòu)造業(yè)務(wù)邏輯層消息開(kāi)開(kāi) 始始計(jì)算剩余分段大小計(jì)算剩余分段大小拷貝分段數(shù)據(jù)拷貝分段數(shù)據(jù)加入分段隊(duì)

12、列加入分段隊(duì)列frag_queue預(yù)分段完畢?預(yù)分段完畢?結(jié)結(jié) 束束YN從隊(duì)列從隊(duì)列frag_queue取下一分段取下一分段計(jì)算該分段偏移計(jì)算該分段偏移設(shè)置分段重組層協(xié)議頭部設(shè)置分段重組層協(xié)議頭部完畢?完畢?YNHost消息分段處理流程消息分段處理流程Host消息重組流程消息重組流程查找該消息分段對(duì)應(yīng)查找該消息分段對(duì)應(yīng)的的mfq結(jié)構(gòu)體結(jié)構(gòu)體開(kāi)開(kāi) 始始找到?找到?創(chuàng)建創(chuàng)建mfq獲得該分段消息的獲得該分段消息的M_OFFSET字段最高字段最高2bit位位計(jì)算該消息的計(jì)算該消息的起始偏移量起始偏移量計(jì)算該消息的計(jì)算該消息的結(jié)束偏移量結(jié)束偏移量將該分段插入到分將該分段插入到分段鏈表的正確位置段鏈表的正

13、確位置滿(mǎn)足重組條件?滿(mǎn)足重組條件?重組并返回重組重組并返回重組后的原始消息后的原始消息結(jié)結(jié) 束束返回返回NULLYNYN結(jié)結(jié) 束束消息類(lèi)別?消息類(lèi)別?開(kāi)開(kāi) 始始從登錄消息隊(duì)列從登錄消息隊(duì)列l(wèi)ogin_msg_queue中取下一消息中取下一消息登錄應(yīng)答消息登錄應(yīng)答消息登錄轉(zhuǎn)發(fā)消息登錄轉(zhuǎn)發(fā)消息退出登錄消息退出登錄消息創(chuàng)建已登錄創(chuàng)建已登錄Host列表列表顯示已登錄顯示已登錄Host列表列表選擇目標(biāo)選擇目標(biāo)Host添加添加Host刪除刪除Host退出?退出?YN發(fā)送文件發(fā)送文件發(fā)送文件的流發(fā)送文件的流程請(qǐng)參見(jiàn)圖程請(qǐng)參見(jiàn)圖7-5Host用戶(hù)交互處理流程用戶(hù)交互處理流程Forwarder程序功能模塊 Fo

14、rwarder登登錄錄與與退退出出用用戶(hù)戶(hù)列列表表維維護(hù)護(hù)登登錄錄轉(zhuǎn)轉(zhuǎn)發(fā)發(fā)處處理理消消息息分分段段與與再再分分段段消消息息重重組組消消息息接接收收消消息息發(fā)發(fā)送送業(yè)務(wù)邏輯模塊業(yè)務(wù)邏輯模塊消息處理模塊消息處理模塊消消息息轉(zhuǎn)轉(zhuǎn)發(fā)發(fā)Forwarder再分段再分段-1開(kāi)開(kāi) 始始計(jì)算剩余分段大小計(jì)算剩余分段大小拷貝分段數(shù)據(jù)拷貝分段數(shù)據(jù)加入分段隊(duì)列加入分段隊(duì)列frag_queue再分段完畢?再分段完畢?YN獲得再分段前該收到消息的獲得再分段前該收到消息的M_OFFSET字段的高字段的高2bit位位計(jì)算再分段前該消息計(jì)算再分段前該消息的起始偏移量的起始偏移量Forwarder再分段再分段-2從分段隊(duì)列從分段

15、隊(duì)列frag_queue中取下一消息中取下一消息重新設(shè)置該分段的分重新設(shè)置該分段的分段重組層頭部段重組層頭部MF位位及其他有關(guān)字段及其他有關(guān)字段計(jì)算該消息的相計(jì)算該消息的相對(duì)分段偏移值對(duì)分段偏移值處理完畢?處理完畢?YN結(jié)結(jié) 束束Forwarder登錄應(yīng)答登錄應(yīng)答開(kāi)開(kāi) 始始獲得登錄獲得登錄Host的用的用戶(hù)名、戶(hù)名、IP和端口和端口創(chuàng)建創(chuàng)建登錄應(yīng)答登錄應(yīng)答消息消息轉(zhuǎn)發(fā)完畢?轉(zhuǎn)發(fā)完畢?YN更新該更新該Host的的IP和端口和端口Host已存在?已存在?建立新建立新Host從已登錄從已登錄Host表表中取下一個(gè)中取下一個(gè)Host向該向該Host發(fā)送發(fā)送登錄轉(zhuǎn)發(fā)登錄轉(zhuǎn)發(fā)消息消息向該新登錄向該新登錄H

16、ost發(fā)送發(fā)送登錄應(yīng)答登錄應(yīng)答消息消息結(jié)結(jié) 束束YN消息錯(cuò)序和丟失模擬消息錯(cuò)序和丟失模擬開(kāi)開(kāi) 始始產(chǎn)生一個(gè)小于當(dāng)前待發(fā)送分段數(shù)產(chǎn)生一個(gè)小于當(dāng)前待發(fā)送分段數(shù)的隨機(jī)序號(hào)數(shù)的隨機(jī)序號(hào)數(shù)N待處理分段數(shù)減待處理分段數(shù)減1 完畢?完畢?將該將該N序號(hào)分段加入到序號(hào)分段加入到shuffled_frag_queue隊(duì)列尾部隊(duì)列尾部YN從從frag_queue分段消息隊(duì)列中移分段消息隊(duì)列中移除第除第N號(hào)分段號(hào)分段結(jié)結(jié) 束束關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-1 struct msg_buff /* 消息定義消息定義 */ u8 *data; /* 消息數(shù)據(jù)指針消息數(shù)據(jù)指針 */ int msg_len; /* 消息長(zhǎng)度消息長(zhǎng)度 */

17、 #ifdef FORWARDER struct sockaddr_in sk_addr;#endif u16 offset; /* 消息分段在原始消息中的偏移值消息分段在原始消息中的偏移值 */ u16 PREV_OLAP; /* 當(dāng)前消息分段和前一個(gè)分段重疊大小當(dāng)前消息分段和前一個(gè)分段重疊大小 */ u16 NEXT_OLAP; /* 當(dāng)前消息分段和后一個(gè)分段重疊大小當(dāng)前消息分段和后一個(gè)分段重疊大小 */ struct msg_buff *next;/* 消息分段鏈表消息分段鏈表 */ struct list_head list;/* 消息隊(duì)列消息隊(duì)列input_msg_queue */

18、;關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-2msg_buffmsg_buffinput_msg_queuedata bufferdata bufferdatadata關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-3hashcode=1saddrdaddrprotocolIDfragssaddrdaddrprotocolIDfragshashcode=9分段分段M=1分段分段M=1分段分段M=1分段分段M=0struct mfqmfq_hashHQ_HASHSZstruct mfqnextnextnext關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-3關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-4ipnameporthlistlisthashcode=1hashcode=9ipnameporthlistlists

19、truct usermapstruct usermapuser_hashHQ_HASHSZipnameporthlistlistuser_queue關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-4關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-5user*fphlisthashcode=1hashcode=9user*fphliststruct mfnstruct mfnfn_hashHQ_HASHSZuser*fphlistlist關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-5關(guān)鍵數(shù)據(jù)結(jié)構(gòu)-6業(yè)務(wù)邏輯層消息定義-1業(yè)務(wù)邏輯層消息定義-2業(yè)務(wù)邏輯層消息定義-3最大255字節(jié)msg_hdrapp_hdrapp_dataIP報(bào)文分段和重組模擬場(chǎng)景hostForwarderhostuser890user789mtu = 17mtu = 32testfile user789向向user890發(fā)送文件發(fā)送文件testfile user890和和Forwarder的的mtu均設(shè)為均設(shè)為17字節(jié),而

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論