• <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
            技術(shù)文摘
            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協(xié)議)頭部




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

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

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

            iphdr->tot_len
                總長(zhǎng)度字段(16位)是指整個(gè)IP數(shù)據(jù)報(bào)的長(zhǎng)度,以字節(jié)為單位。利用首部長(zhǎng)度字段和總長(zhǎng)度字段,就可以知道 IP數(shù)據(jù)報(bào)中數(shù)據(jù)內(nèi)容的起始位置和長(zhǎng)度。由于該字段長(zhǎng)16比特,所以IP數(shù)據(jù)報(bào)最長(zhǎng)可達(dá)65535字節(jié)
                 總長(zhǎng)度字段是IP首部中必要的內(nèi)容,因?yàn)橐恍?shù)據(jù)鏈路(如以太網(wǎng))需要填充一些數(shù)據(jù)以達(dá)到最小長(zhǎng)度。盡管以太網(wǎng)的最小幀長(zhǎng)為46字節(jié),但是IP數(shù)據(jù)可能會(huì)更短。如果沒(méi)有總長(zhǎng)度字段,那么IP層就不知道46字節(jié)中有多少是IP數(shù)據(jù)報(bào)的內(nèi)容。

            iphdr->id
                標(biāo)識(shí)字段(16位)唯一地標(biāo)識(shí)主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào)。通常每發(fā)送一份報(bào)文它的值就會(huì)加1。

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

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

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

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

            iphdr->protocol
                協(xié)議字段(8位): 根據(jù)它可以識(shí)別是哪個(gè)協(xié)議向IP傳送數(shù)據(jù)。
                當(dāng)網(wǎng)絡(luò)層組裝完成一個(gè)完整的數(shù)據(jù)報(bào)之后,它需要知道該如何對(duì)它進(jìn)行處理。協(xié)議(Protocol)域指明了該將它交給哪個(gè)傳輸進(jìn)程。TCP是一種可能,但是UDP或者其他的協(xié)議也是可能的。

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

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




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

            <2008年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(17)

            隨筆分類(138)

            隨筆檔案(137)

            網(wǎng)絡(luò)開(kāi)發(fā)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 500428
            • 排名 - 37

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            午夜不卡久久精品无码免费| 久久电影网一区| 国产精品99久久久久久宅男小说| 久久精品国产亚洲av麻豆蜜芽| 久久天天躁狠狠躁夜夜躁2O2O | 久久精品成人免费网站| 久久影院久久香蕉国产线看观看| 久久无码人妻一区二区三区午夜| 精品人妻伦九区久久AAA片69| 久久精品国产99国产精品导航| 大香网伊人久久综合网2020| 久久无码人妻一区二区三区 | 国产999精品久久久久久| 久久精品国产免费观看| 狠狠人妻久久久久久综合蜜桃| 久久99精品久久久久婷婷| 久久久久国产精品嫩草影院| 精品国产91久久久久久久a | 精品久久久中文字幕人妻| 久久精品国产72国产精福利| 久久精品国产亚洲77777| 久久婷婷五月综合97色| 亚洲国产精品无码久久98| 久久精品国产2020| 亚洲午夜久久久久久久久久| 久久99精品久久久大学生| 欧美国产成人久久精品| 色婷婷久久久SWAG精品| 久久久久久亚洲精品不卡 | 久久久www免费人成精品| 久久久久久久久66精品片| 久久亚洲sm情趣捆绑调教 | 中文国产成人精品久久亚洲精品AⅤ无码精品| 久久中文娱乐网| 久久中文精品无码中文字幕| 国产精品99久久久久久宅男| 国产精品内射久久久久欢欢| 国产午夜电影久久| 污污内射久久一区二区欧美日韩| 久久综合精品国产一区二区三区| 久久91精品国产91久|