• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            aurain
            技術文摘
            posts - 137,  comments - 268,  trackbacks - 0
            /usr/src/linux/include/linux/ip.h

            struct iphdr {
            #if defined(__LITTLE_ENDIAN_BITFIELD)
                __u8    ihl:4,
                        version:4;
            #elif defined (__BIG_ENDIAN_BITFIELD)
                __u8    version:4,
                        ihl:4;
            #else
            #error "Please fix <asm/byteorder.h>"
            #endif

                __u8    tos;
                __be16 -tot_len;
                __be16 -
            id;
                __be16
            -
            frag_off;
                __u8    ttl;
                __u8    protocol;
                __be16
            -
            check;
                __be32
            -
            saddr;
                __be32
            -
            daddr;
            };

                 31                                     0
                 |----|----|------|--|-------------------|
            ----------
                 |ver |ihl | -tos | -|    tot_len        |
                 |----|----|------|--|-------------------|
                 |       id          |   frag_off       -|
                 |---------|---------|-------------------|
                 |   ttl   |protocol |    check          | 20 Bytes
                 |---------|---------|-------------------|
                 |                saddr                  |
                 |---------------------------------------|
                 |                daddr                  |
                 |---------------------------------------|
            ----------
                 |                                       |
                -|                options                |
            40 Bytes
                 |                                       |

                 |
            ---------------------------------------|

                       
                          IPv4 (Internel協議)頭部




            iphdr->version
                版本(4位),目前的協議版本號是4,因此IP有時也稱作IPv4。

            iphdr->ihl
                首部長度(4位):首部長度指的是IP層頭部占32 bit字的數目(也就是IP層頭部包含多少個4字節 -- 32位),包括任何選項。由于它是一個4比特字段,因此首部最長為60個字節。普通IP數據報(沒有任何選擇項)字段的值是5 <==> 5 * 32 / 8 = 5 * 4 = 20 Bytes

            iphdr->tos
                服務類型字段(8位): 服務類型(TOS)字段包括一個3 bit的優先權子字段(現在已被忽略),4 bit的TOS子字段和1 bit未用位但必須置0。4 bit的TOS子字段分別代表:最小時延、最大吞吐量、最高可靠性和最
            小費用。4 bit中只能設置其中1 bit。如果所有4 bit均為0,那么就意味著是一般服務。

            iphdr->tot_len
                總長度字段(16位)是指整個IP數據報的長度,以字節為單位。利用首部長度字段和總長度字段,就可以知道 IP數據報中數據內容的起始位置和長度。由于該字段長16比特,所以IP數據報最長可達65535字節
                 總長度字段是IP首部中必要的內容,因為一些數據鏈路(如以太網)需要填充一些數據以達到最小長度。盡管以太網的最小幀長為46字節,但是IP數據可能會更短。如果沒有總長度字段,那么IP層就不知道46字節中有多少是IP數據報的內容。

            iphdr->id
                標識字段(16位)唯一地標識主機發送的每一份數據報。通常每發送一份報文它的值就會加1。

            iphdr->frag_off (16位)
                frag_off域的低13位 -- 分段偏移(Fragment offset)域指明了該分段在當前數據報中的什么位置上。除了一個數據報的最后一個分段以外,其他所有的分段(分片)必須是8字節的倍數。這是8字節是基本分段單位。由于該域有13個位,所以,每個數據報最多有8192個分段。因此,最大的數據報長度為65,536字節,比iphdr->tot_len域還要大1。

                iphdr->frag_off的高3位
                (1) 比特0是保留的,必須為0;
                (2) 比特1是“更多分片”(MF -- More Fragment)標志。除了最后一片外,其他每個組成數據報的片都要把該比特置1。
                (3) 比特2是“不分片”(DF -- Don't Fragment)標志,如果將這一比特置1,IP將不對數據報進行分片,這時如果有需要進行分片的數據報到來,會丟棄此數據報并發送一個ICMP差錯報文給起始端。

                  
               |---|-------------|
               |DM0|   offset    |
               |---|-------------|
               15 1312          0
                   

            iphdr->ttl
                TTL(time-to-live) -- 8位,生存時間字段設置了數據報可以經過的最多路由器數。它指定了數據報的生存時間。TTL的初始值由源主機設置(通常為32或64),一旦經過一個處理它的路由器,它的值就減去1。當該字段的值為0時,數據報就被丟棄,并發送ICMP報文通知源主機。
                TTL(Time to live)域是一個用于限制分組生存期的計數器。這里的計數時間單位為秒,因此最大的生存期為255秒。在每一跳上該計數器必須被遞減,而且,當數據報在一臺路由器上排隊時間較長時,該計數器必須被多倍遞減。在實踐中,它只是跳計數器,當它遞減到0的時候,分組被丟棄,路由器給源主機發送一個警告分組。此項特性可以避免數據報長時間地逗留在網絡中,有時候當路由表被破壞之后,這種事情是有可能發生的。

            iphdr->protocol
                協議字段(8位): 根據它可以識別是哪個協議向IP傳送數據。
                當網絡層組裝完成一個完整的數據報之后,它需要知道該如何對它進行處理。協議(Protocol)域指明了該將它交給哪個傳輸進程。TCP是一種可能,但是UDP或者其他的協議也是可能的。

            iphdr->check
                首部檢驗和字段(16位)是根據IP首部計算的檢驗和碼。它不對首部后面的數據進行計算。 ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和數據檢驗和碼。
                為了計算一份數據報的IP檢驗和,首先把檢驗和字段置為0。然后,對首部中每個16 bit進行二進制反碼求和(整個首部看成是由一串16 bit的字組成),結果存在檢驗和字段中。當收到一份IP數據報后,同樣對首部中每個16 bit進行二進制反碼的求和。由于接收方在計算過程中包含了發送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那么接收方計算的結果應該為全1。如果結果不是全1(即檢驗和錯誤),那么IP就丟棄收到的數據報。但是不生成差錯報文,由上層去發現丟失的數據報并進行重傳。

            iphdr->saddr
                32位源IP地址
            iphdr->daddr
                32位目的IP地址




            網絡字節序
                4個字節的32 bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31 bit。這種傳輸次序稱作big endian字節序。由于TCP/IP首部中所有的二進制整數在網絡中傳輸時都要求以這種次序,因此它又稱作網絡字節序。
            posted on 2008-11-21 10:47 閱讀(1422) 評論(0)  編輯 收藏 引用 所屬分類: tcp/ip

            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(17)

            隨筆分類(138)

            隨筆檔案(137)

            網絡開發

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 497482
            • 排名 - 36

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲人成网站999久久久综合| 青青国产成人久久91网| 久久精品这里热有精品| 久久青青草视频| 久久青青色综合| 久久久久久午夜精品| 国产欧美久久久精品影院| 少妇久久久久久被弄到高潮 | 久久精品亚洲欧美日韩久久| 久久久久久综合一区中文字幕| av国内精品久久久久影院| 久久99精品久久久久久| 免费观看成人久久网免费观看| 一本大道加勒比久久综合| 99精品久久久久久久婷婷| 久久精品国产亚洲5555| 要久久爱在线免费观看| 新狼窝色AV性久久久久久| 九九99精品久久久久久| 香蕉久久夜色精品国产小说| 久久国产美女免费观看精品 | 久久国产精品-久久精品| 久久精品草草草| 欧美性猛交xxxx免费看久久久| 模特私拍国产精品久久| 国产亚洲色婷婷久久99精品| 精品国产91久久久久久久a| 伊人久久大香线蕉成人| 精品久久久久久无码专区不卡| 99久久精品免费观看国产| 久久这里的只有是精品23| 国内精品久久国产大陆| 中文字幕无码久久久| 久久夜色精品国产亚洲| 久久婷婷国产剧情内射白浆| 91视频国产91久久久| 中文字幕久久精品| 色成年激情久久综合| 色欲综合久久躁天天躁蜜桃| 久久国产福利免费| 国产成人久久精品一区二区三区 |