一江春水向東流

          做一個有思想的人,期待與每一位熱愛思考的人交流,您的關(guān)注是對我最大的支持。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks
          很多文章對ip首部檢驗和的計算介紹得很簡略,在理解上常常會比較困難。這篇文章是我自己的一些理解。或許也有不正確的地方,希望大家指正。
          這個問題一直困繞了我很長時間,今天終于理解了。 


          我們可以通過spynet sniffer抓包軟件,抓取一個ip數(shù)據(jù)包進行分析研究。
          下面我以本機抓到的一個完整的ip首部為例(紅色字體表示):

          0000: 00 e0 0f 7d 1e ba 00 13 8f 54 3b 70 08 00 45 00
          0010: 00 2e be 55 00 00 7a 11 51 ac de b7 7e e3 c0 a8
          0020: 12 7a

          45 00 00 2e----4表示ip版本號為ip第4版;5表示首部長度為5個32 bit字長,即為20字節(jié);00 2e表示ip總長度為46字節(jié),其中ip數(shù)據(jù)部分為
          26字節(jié)。
          be 55 00 00----be 55表示標(biāo)識符;00 00表示3 bit標(biāo)志及13 bit片偏移量;
          7a 11 51 ac----7a表示ttl值為122;11表示協(xié)議號為17的udp協(xié)議;51 ac表示16 bit首部檢驗和值;
          de b7 7e e3----表示32 bit 源ip地址為222.183.126.227
          c0 a8 12 7a----表示32 bit 目的ip地址為192.168.18.122



          檢驗和計算:
          首先,把檢驗和字段置為0。
          45 00 00 2e
          be 55 00 00
          7a 11 00 00<----檢驗和置為0
          de b7 7e e3
          c0 a8 12 7a
          其次,對整個首部中的每個16 bit進行二進制反碼求和,求和值為3ae50,然后3+ae50=ae53(這是根據(jù)源代碼中算法 cksum = (cksum
          >> 16) + (cksum & 0xffff) 進行的 )

          最后,ae53+51ac=ffff。因此判斷ip首部在傳輸過程中沒有發(fā)生任何差錯。
          posted on 2007-05-17 21:43 allic 閱讀(562) 評論(0)  編輯  收藏 所屬分類: TCP/IP 開發(fā)
          主站蜘蛛池模板: 永安市| 英山县| 七台河市| 沅陵县| 鹿泉市| 屏山县| 奈曼旗| 三江| 宝兴县| 思茅市| 丰台区| 新宾| 分宜县| 即墨市| 锡林郭勒盟| 德清县| 铜陵市| 黄骅市| 囊谦县| 德钦县| 盐津县| 汝州市| 土默特右旗| 固阳县| 天气| 申扎县| 阿拉善盟| 深水埗区| 永顺县| 隆子县| 金平| 友谊县| 上栗县| 隆安县| 丘北县| 曲麻莱县| 门头沟区| 大石桥市| 尚志市| 会昌县| 修水县|