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

      IP協議設計實現—重裝模塊(一)

      時間:2024-06-05 05:24:16 通信工程畢業論文 我要投稿
      • 相關推薦

      IP協議設計實現—重裝模塊(一)

      內容摘要
       IP協議(網際協議),是TCP/IP 協議族中最為核心的協議。所有的數據在此協議機制下都以IP數據報的格式傳輸。當分組過大不適合在所選硬件接口(即不同網絡)上發送時,就要對其分片。在目的主機上再把所有分片組裝成一個完整的數據報,提交給上層協議處理。本次設計開發工具為Turboc2.o+win2000,由我們3人獨立完成,采用結構化設計思想完成對所有分片的重裝,實現IP協議的重裝模快。

      IP協議設計實現—重裝模塊(一)

       

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

       

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

      ST:狀態;SA:源址,DI:數據報ID;TO:超時;F:分片
      (二)數據結構定義及處理流程
      1:變量定義:
      數據報首部:
      數據報首部 說明 
      ip_id 標識字段 
      ip_off 標志字段 
      IP_DF 標志字段的”不分片”標志 
      IP_MF “更多分片“標志 
      ip_src 源地址 
      ip_dst 目的地址 
      ip_p 協議值 
      ip_len 數據報長度 


      記數統計量:
      ipstat成員 說明 
      ips_cantfrag 要求分片但被DF禁止而沒有發送的數據報報數 
      ips_odropped 內存不足而被丟棄的分組數 
      ips_ofragments 被發送的分組數 
      ips_fragmented 未輸出的分片的分組數 
      全局變量:
      ipq:類型Struct,說明—>重裝表
      2:函數設計:
      函數 說明 
      ipintr() 接收分片并交給ip_reass()處理,最后由它把封裝好的數據報傳給上層 
      ip_reass() 接受來自ipintr()的分片,并對其進行重裝,最后把重裝好的數據報交給ipintr()函數 
      3用到的數據結構以及必要的說明:
      ipq(重裝表)結構:
      struct  ipq{
      struct  ipq *next,*prev;    /*重組報頭*/
      char ipq_tll;   /*重裝生存時間*/
      char ipq_p;   /*此片用到的協議*/

      short ipq_id;  /*重裝序列號*/
      struct ipastrag *ipq_next,*ipq_prve;  /*分片的IP報頭*/
      struct in_addr, ipq_src,ipq_dst; /*地址清單、目的與源地址*/
      }
      ipasfrag(過度結構)結構:
      struct ipasfrag{
      /* 預處理*/
      #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結構中的服務字段,*/
                       /*防止報頭損壞,從標志字段復制*/
      short ip_len/*下是報頭定義,與ipq結構類似*/
      unsigned short ip_id;
      short ip_off;
      unsigned char ip_p;
      unsigned short ip_sum;
      struct ipasfrag *ipf_next,*ipf_prev;
      }
      3詳細流程:
      ipintr先要對接收到的分片進行處理,如果它檢查到MF或分片偏移為非0,則分組就是一個必須重裝的分片,反之,就可以跳過重裝。當一個緩存區無法容納分組時,接口就將整個分組返回,在ipintr函數中在處理前應將IP首部移到緩沖區上。ipintr把一個要處理的分片傳給和一個指針傳給ip_reass,其中指針指向ipq中匹配的的重裝首部,ip_reass可能把分片重裝并返回一個完整的數據報(只有一個分片),也可能將該分片鏈接到數據報的重裝鏈表上(不只一個分片),等其他分片到達后重裝。ip_reass在一個由ipf_next和ipf_prev鏈接起來的雙向循環鏈表上,并收集某個數據報分片。當在重裝時產生錯誤,ip_reass就丟棄該分片,返回一個空。在設計中,最多實現重裝576字節的數據報。ip_reass先創建重裝表,然后切斷分組,在重裝表中找相應位置,插入分組,再重裝數據報。
      流程圖:圖(3)

       

      以上就是重裝的流程圖。在超時檢查時,如果沒有超時,則繼續接收,直到完成為止。
       

      (三)基本代碼實現
      由于只有一個模快,故沒有主函數main(),以下就是函數ipintr()與ip_reass的實現以及必要的說明,其中的數據結構定義包含在chong_z.h中。
      IP數據報首部定義:
      struct  ip{
      /* 預處理*/
      #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;/*服務類型,下面的前面已給出*/
      short ip_len;
      short id;
      short ip_off;
      #define IP_DF 0x4000;/*不分片標志*/
      #define IP_MF 0x2000;/*更多分片標志*/
      #define IP_OFFMASK 0x1fff;/* 分段位*/
      unsigned char ip_ttl;
      unsigned char ip_p;
      unsigned short ip_sum;/*檢驗和*/
      struct in_addr,ip_src,ip_dst;
      };
      mbuf緩沖區定義:
      struct m_hdr{
      struct mbuf  *mh_next;/*鏈表的下一個緩沖區*/
      struct mbuf  *mh_nextpkt;/*對列中的下個鏈表*/
      int mh_len; /*緩沖區數據總數*/
      short mh_type; /*數據類型*/
      short mh_flags; /*標志位*

      【IP協議設計實現—重裝模塊(一)】相關文章:

      基于DSP的擴頻電臺基帶模塊的設計與實現03-18

      帶硬件地址識別的UART IP 的設計和實現12-07

      基于FPGA的HDLC通信模塊的實現05-14

      單片機控制GSM模塊實現短信收發的軟件設計03-20

      用CPLD實現單片機讀寫模塊03-20

      現代遠程教學網站的設計與實現-在線考試與信息反饋模塊03-08

      在TMS320VC5402上實現的嵌入式TCP/IP協議棧03-19

      IP over WDM網絡中業務驅動機制的研究與實現03-30

      VB5.0中數據庫查詢模塊的實現03-03

      主站蜘蛛池模板: 中文字幕久久精品一二三区| 饶河县| 中文字幕一区二区网站| 国产主播无套内射一区| 天全县| 昌江| 美女裸体无遮挡黄污网站| 在线观看免费人成视频国产| 日韩高清av一区二区| 国产亚洲人成在线影院| 灵川县| 库尔勒市| 国产在线AⅤ精品性色| 丝袜美腿亚洲综合在线观看视频| 亚洲国产色婷婷久久99精品91 | 正蓝旗| 远安县| 应城市| 泰宁县| 亚洲精品中文有码字幕| 宣城市| 中阳县| 男女在线免费视频网站| 国产精品女同学| 日本加勒比在线一区二区三区| 云和县| 久久精品女人天堂av影院| 微山县| 日本少妇精品一区二区| 91精品一区二区三区蜜桃| 动漫av纯肉无码av在线播放| 亚洲国产一区二区在线| 一本久久精品久久综合桃色| 久久99久久99精品免观看女同| 国产精品亚洲A∨无码遮挡| 台州市| 国产成人一区二区三区久久精品| 亚洲av网一区天堂福利 | 精品视频在线观看二区| 日本午夜按摩在线观看| 国产精品狼人久久久影院|