首頁  >  文章  >  運維  >  linux中iphdr是什麼

linux中iphdr是什麼

WBOY
WBOY原創
2022-07-15 15:35:072429瀏覽

在linux中,iphdr是ip封包的描述結構體;iphdr所在的頭檔為“/usr/src/linux/include/linux/ip.h”,結構體是由一批數據組合而成的結構型數據,組成結構型數據的每個數據稱為結構型數據的成員,其描述了一塊內存區間的大小及解釋意義。

linux中iphdr是什麼

本教學操作環境:linux7.3系統、Dell G3電腦。

linux中iphdr是什麼

iphdr,是一種電腦用語。是Linux下IP資料包的描述結構體。

所在頭檔為/usr/src/linux/include/linux/ip.h,結構如下:

struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD) //小端模式下
    __u8 ihl:4,//首部长度(4位)
        version:4;//ip协议版本IPv4
#elif defined (__BIG_ENDIAN_BITFIELD) //大端模式下
    __u8 version:4,
        ihl:4;
#else
#error "Please fix "
#endif
    __u8 tos;//服务类型字段(8位)
    __be16 tot_len;//16位IP数据报总长度
    __be16 id;//16位标识字段(唯一表示主机发送的每一分数据报)
    __be16 frag_off;//(3位分段标志+13位分段偏移数)
    __u8 ttl;//8位数据报生存时间
    __u8 protocol;//协议字段(8位)
    __be16 check;//16位首部校验
    __be32 saddr; //源IP地址
    __be32 daddr; //目的IP地址
};

linux中iphdr是什麼

擴充知識

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。

推薦學習:Linux影片教學

#

以上是linux中iphdr是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn