中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      IP協(xié)議設(shè)計(jì)實(shí)現(xiàn)—重裝模塊(一)

      時(shí)間:2024-06-05 05:24:16 通信工程畢業(yè)論文 我要投稿
      • 相關(guān)推薦

      IP協(xié)議設(shè)計(jì)實(shí)現(xiàn)—重裝模塊(一)

      內(nèi)容摘要
       IP協(xié)議(網(wǎng)際協(xié)議),是TCP/IP 協(xié)議族中最為核心的協(xié)議。所有的數(shù)據(jù)在此協(xié)議機(jī)制下都以IP數(shù)據(jù)報(bào)的格式傳輸。當(dāng)分組過(guò)大不適合在所選硬件接口(即不同網(wǎng)絡(luò))上發(fā)送時(shí),就要對(duì)其分片。在目的主機(jī)上再把所有分片組裝成一個(gè)完整的數(shù)據(jù)報(bào),提交給上層協(xié)議處理。本次設(shè)計(jì)開(kāi)發(fā)工具為Turboc2.o+win2000,由我們3人獨(dú)立完成,采用結(jié)構(gòu)化設(shè)計(jì)思想完成對(duì)所有分片的重裝,實(shí)現(xiàn)IP協(xié)議的重裝模快。

      IP協(xié)議設(shè)計(jì)實(shí)現(xiàn)—重裝模塊(一)

       

      (一)IP協(xié)議重裝原理及功能分析
      1:設(shè)計(jì)背景
      我們知道,每一個(gè)數(shù)據(jù)鏈路層都有自己的幀格式,在格式里面規(guī)定了數(shù)據(jù)的最大長(zhǎng)度,即MTU。當(dāng)數(shù)據(jù)報(bào)封裝成幀時(shí),長(zhǎng)度都應(yīng)該小于此長(zhǎng)度,因此,為了適應(yīng)不同網(wǎng)絡(luò),就要對(duì)IP數(shù)據(jù)報(bào)進(jìn)行分片,分片帶來(lái)的問(wèn)題就是要對(duì)分片進(jìn)行重裝。
      2:重裝依據(jù)—>IP數(shù)據(jù)報(bào)首部
      0                     15 16                  31                                      
      4位版本 4位首部長(zhǎng)度 8位TOS 16位總長(zhǎng)度(字節(jié)) 
      16位標(biāo)識(shí) 3位標(biāo)志 13位片偏移 
      8位TTL 8位協(xié)議 16位首部檢驗(yàn)和 
      32位源IP地址 
      32位目的IP地址 
      32位選項(xiàng) 
      數(shù)據(jù) 
      (圖1)IP首部
      首部共20字節(jié)。
       
       
       把一份IP數(shù)據(jù)報(bào)分片后,只有到達(dá)目的地才進(jìn)行重新組裝。重新組裝由目的端的IP層來(lái)完成,其目的是分片與重新組裝過(guò)程對(duì)傳輸層是透明的。如圖(1)IP首部為分片后的重裝提供了必要的信息:首先,其標(biāo)識(shí)字段包含一個(gè)唯一的值,該值在分片后被復(fù)制到每個(gè)片中;其次,標(biāo)志字段由3個(gè)1bit組成,比特0是保留的,必須為0,比特1是“不分片”,比特2是表示“更多的片”標(biāo)志,標(biāo)志字段其它13bit指出該片偏移原始數(shù)據(jù)報(bào)開(kāi)始處的位置,以8字節(jié)單元計(jì)算,因此,除最后一個(gè)分片外,其他每個(gè)分片都望是一個(gè)8字節(jié)倍數(shù)的數(shù)據(jù),從而使后面的分片從8字節(jié)開(kāi)始。當(dāng)數(shù)據(jù)被分片后,片總長(zhǎng)要改為該片的長(zhǎng)度。當(dāng)IP數(shù)據(jù)報(bào)被分片后,每個(gè)片都有自己的首部,這樣在目的端就有足夠的信息來(lái)組裝這些數(shù)據(jù)報(bào)分片。
      處理思想:
       IP協(xié)議是個(gè)無(wú)連接的協(xié)議,無(wú)連接是指IP并不維護(hù)任何關(guān)于后續(xù)數(shù)據(jù)報(bào)的狀態(tài)信息,因此它不能保證分片都按序到達(dá),另外,屬于一個(gè)數(shù)據(jù)報(bào)的分片也可能與另一個(gè)數(shù)據(jù)報(bào)分片混雜在一起,。為了解決上述問(wèn)題,我們可    
      以用重裝表圖(2)和一些想關(guān)鏈表完成。重裝表做的就是找出當(dāng)前分片是那個(gè)組的,將屬于同一個(gè)數(shù)據(jù)報(bào)的分片進(jìn)行排序,當(dāng)所有的分片都到達(dá)時(shí)將它們重新組裝成一個(gè)數(shù)據(jù)報(bào),當(dāng)然在接收數(shù)據(jù)時(shí)都有一定時(shí)間限制,當(dāng)建立的超時(shí)限已過(guò),同時(shí)有的分片丟失了,則將接受到的分片都丟掉。
      處理過(guò)程:
       當(dāng)接收到一個(gè)IP數(shù)據(jù)報(bào)時(shí),如果其的片偏移為0而還有“更多分片“也為0,則將數(shù)據(jù)報(bào)發(fā)送到適當(dāng)對(duì)列,反之,就去查找重裝表項(xiàng)目,如果沒(méi)有找到,就建立一個(gè)新的項(xiàng)目,找到了就在鏈表適當(dāng)?shù)胤讲迦氪朔制.?dāng)所有的分片都已經(jīng)到達(dá),就重裝這些分片,將其發(fā)送到高層協(xié)議,反之,就檢查是否超時(shí),如果超時(shí),就丟棄所有分片同時(shí)發(fā)送ICMP差錯(cuò)報(bào)文。
      功能分析:
      通過(guò)上述處理就完成了對(duì)分片的重裝,就實(shí)現(xiàn)不同網(wǎng)絡(luò)中數(shù)據(jù)幀的傳輸。

       

      ST SA DI To F 
       ………. 
           
      ——>鏈表
                  圖(2)重裝表
      ——>鏈表

      ST:狀態(tài);SA:源址,DI:數(shù)據(jù)報(bào)ID;TO:超時(shí);F:分片
      (二)數(shù)據(jù)結(jié)構(gòu)定義及處理流程
      1:變量定義:
      數(shù)據(jù)報(bào)首部:
      數(shù)據(jù)報(bào)首部 說(shuō)明 
      ip_id 標(biāo)識(shí)字段 
      ip_off 標(biāo)志字段 
      IP_DF 標(biāo)志字段的”不分片”標(biāo)志 
      IP_MF “更多分片“標(biāo)志 
      ip_src 源地址 
      ip_dst 目的地址 
      ip_p 協(xié)議值 
      ip_len 數(shù)據(jù)報(bào)長(zhǎng)度 


      記數(shù)統(tǒng)計(jì)量:
      ipstat成員 說(shuō)明 
      ips_cantfrag 要求分片但被DF禁止而沒(méi)有發(fā)送的數(shù)據(jù)報(bào)報(bào)數(shù) 
      ips_odropped 內(nèi)存不足而被丟棄的分組數(shù) 
      ips_ofragments 被發(fā)送的分組數(shù) 
      ips_fragmented 未輸出的分片的分組數(shù) 
      全局變量:
      ipq:類型Struct,說(shuō)明—>重裝表
      2:函數(shù)設(shè)計(jì):
      函數(shù) 說(shuō)明 
      ipintr() 接收分片并交給ip_reass()處理,最后由它把封裝好的數(shù)據(jù)報(bào)傳給上層 
      ip_reass() 接受來(lái)自ipintr()的分片,并對(duì)其進(jìn)行重裝,最后把重裝好的數(shù)據(jù)報(bào)交給ipintr()函數(shù) 
      3用到的數(shù)據(jù)結(jié)構(gòu)以及必要的說(shuō)明:
      ipq(重裝表)結(jié)構(gòu):
      struct  ipq{
      struct  ipq *next,*prev;    /*重組報(bào)頭*/
      char ipq_tll;   /*重裝生存時(shí)間*/
      char ipq_p;   /*此片用到的協(xié)議*/

      short ipq_id;  /*重裝序列號(hào)*/
      struct ipastrag *ipq_next,*ipq_prve;  /*分片的IP報(bào)頭*/
      struct in_addr, ipq_src,ipq_dst; /*地址清單、目的與源地址*/
      }
      ipasfrag(過(guò)度結(jié)構(gòu))結(jié)構(gòu):
      struct ipasfrag{
      /* 預(yù)處理*/
      #if BYTE_ORDER==LITTLE_ENDIAN
      Char ip_hl=4,ip_v=4;
      #endif
      #if BYTE_ORDER==BIG_ENDIAN
      char ip_v=4,ip_hl=4;
      #endif
       char ipf_mff;   /* ipf_mff成員覆蓋ip結(jié)構(gòu)中的服務(wù)字段,*/
                       /*防止報(bào)頭損壞,從標(biāo)志字段復(fù)制*/
      short ip_len/*下是報(bào)頭定義,與ipq結(jié)構(gòu)類似*/
      unsigned short ip_id;
      short ip_off;
      unsigned char ip_p;
      unsigned short ip_sum;
      struct ipasfrag *ipf_next,*ipf_prev;
      }
      3詳細(xì)流程:
      ipintr先要對(duì)接收到的分片進(jìn)行處理,如果它檢查到MF或分片偏移為非0,則分組就是一個(gè)必須重裝的分片,反之,就可以跳過(guò)重裝。當(dāng)一個(gè)緩存區(qū)無(wú)法容納分組時(shí),接口就將整個(gè)分組返回,在ipintr函數(shù)中在處理前應(yīng)將IP首部移到緩沖區(qū)上。ipintr把一個(gè)要處理的分片傳給和一個(gè)指針傳給ip_reass,其中指針指向ipq中匹配的的重裝首部,ip_reass可能把分片重裝并返回一個(gè)完整的數(shù)據(jù)報(bào)(只有一個(gè)分片),也可能將該分片鏈接到數(shù)據(jù)報(bào)的重裝鏈表上(不只一個(gè)分片),等其他分片到達(dá)后重裝。ip_reass在一個(gè)由ipf_next和ipf_prev鏈接起來(lái)的雙向循環(huán)鏈表上,并收集某個(gè)數(shù)據(jù)報(bào)分片。當(dāng)在重裝時(shí)產(chǎn)生錯(cuò)誤,ip_reass就丟棄該分片,返回一個(gè)空。在設(shè)計(jì)中,最多實(shí)現(xiàn)重裝576字節(jié)的數(shù)據(jù)報(bào)。ip_reass先創(chuàng)建重裝表,然后切斷分組,在重裝表中找相應(yīng)位置,插入分組,再重裝數(shù)據(jù)報(bào)。
      流程圖:圖(3)

       

      以上就是重裝的流程圖。在超時(shí)檢查時(shí),如果沒(méi)有超時(shí),則繼續(xù)接收,直到完成為止。
       

      (三)基本代碼實(shí)現(xiàn)
      由于只有一個(gè)模快,故沒(méi)有主函數(shù)main(),以下就是函數(shù)ipintr()與ip_reass的實(shí)現(xiàn)以及必要的說(shuō)明,其中的數(shù)據(jù)結(jié)構(gòu)定義包含在chong_z.h中。
      IP數(shù)據(jù)報(bào)首部定義:
      struct  ip{
      /* 預(yù)處理*/
      #if BYTE_ORDER==LITTLE_ENDIAN
      unsigned char ip_hl=4,ip_v=4;
      #endif
      #if BYTE_ORDER==BIG_ENDIAN
      usigned char ip_v=4,ip_hl=4;
      #endif
      unsigned char ip_tos;/*服務(wù)類型,下面的前面已給出*/
      short ip_len;
      short id;
      short ip_off;
      #define IP_DF 0x4000;/*不分片標(biāo)志*/
      #define IP_MF 0x2000;/*更多分片標(biāo)志*/
      #define IP_OFFMASK 0x1fff;/* 分段位*/
      unsigned char ip_ttl;
      unsigned char ip_p;
      unsigned short ip_sum;/*檢驗(yàn)和*/
      struct in_addr,ip_src,ip_dst;
      };
      mbuf緩沖區(qū)定義:
      struct m_hdr{
      struct mbuf  *mh_next;/*鏈表的下一個(gè)緩沖區(qū)*/
      struct mbuf  *mh_nextpkt;/*對(duì)列中的下個(gè)鏈表*/
      int mh_len; /*緩沖區(qū)數(shù)據(jù)總數(shù)*/
      short mh_type; /*數(shù)據(jù)類型*/
      short mh_flags; /*標(biāo)志位*

      【IP協(xié)議設(shè)計(jì)實(shí)現(xiàn)—重裝模塊(一)】相關(guān)文章:

      基于DSP的擴(kuò)頻電臺(tái)基帶模塊的設(shè)計(jì)與實(shí)現(xiàn)03-18

      帶硬件地址識(shí)別的UART IP 的設(shè)計(jì)和實(shí)現(xiàn)12-07

      基于FPGA的HDLC通信模塊的實(shí)現(xiàn)05-14

      單片機(jī)控制GSM模塊實(shí)現(xiàn)短信收發(fā)的軟件設(shè)計(jì)03-20

      用CPLD實(shí)現(xiàn)單片機(jī)讀寫(xiě)模塊03-20

      現(xiàn)代遠(yuǎn)程教學(xué)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)-在線考試與信息反饋模塊03-08

      在TMS320VC5402上實(shí)現(xiàn)的嵌入式TCP/IP協(xié)議棧03-19

      IP over WDM網(wǎng)絡(luò)中業(yè)務(wù)驅(qū)動(dòng)機(jī)制的研究與實(shí)現(xiàn)03-30

      VB5.0中數(shù)據(jù)庫(kù)查詢模塊的實(shí)現(xiàn)03-03

      主站蜘蛛池模板: 阿v视频在线| 亚洲高清国产品国语在线观看| 精品国产迪丽热巴在线| 久久精品亚洲一区二区| 99久久国产一区二区三区| 国产三级黄色片子看曰逼大片| 国产成人丝袜在线无码| 亚洲国产成人精品毛片九色| 亚洲无码观看a| 国产精品三级在线专区1| 在线观看免费人成视频国产| 免费观看成人稀缺视频在线播放| 鲜城| 尼木县| 亚洲精品日本久久久中文字幕| 一区二区三区国产在线网站视频| 青青草一区在线观看视频| 好看午夜一鲁一鲁一鲁| 亚洲av午夜成人片精品 | 久久精品国产成人午夜福利| 对白刺激的老熟女露脸| 兴隆县| 天天射天天操天天综合网| 理塘县| 桂林市| 葫芦岛市| 97色综合| 乱淫av一区二区三区| 亚洲熟妇夜夜一区二区三区| 欧美亚洲尤物久久综合精品| 久久人成免费网站小草| 国产精品一区二区三区蜜臀| 桃子视频亚洲一二三区| 狠狠色丁香婷婷久久综合2021| 北条麻妃精品一区二区三区| 精品无码一区二区三区小说 | 国产在线视频h| 成年视频网站在线观看777| 狠狠色噜噜狠狠狠狠97俺也去| 精品亚洲女同一区二区| 亚洲露出在线观看下一页|