Unter Linux ist iphdr die Beschreibungsstruktur des IP-Datenpakets; die Header-Datei, in der sich iphdr befindet, ist „/usr/src/linux/include/linux/ip.h“, und die Struktur besteht aus einem Datenstapel Strukturdaten: Jedes Datenelement, aus dem strukturierte Daten bestehen, wird als Strukturdatenelement bezeichnet, das die Größe und Interpretationsbedeutung eines Speicherintervalls beschreibt.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.
iphdr ist ein Computerbegriff. Es handelt sich um die Beschreibungsstruktur von IP-Datenpaketen unter Linux.
Die Header-Datei ist /usr/src/linux/include/linux/ip.h und die Struktur ist wie folgt:
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 <asm/byteorder.h>" #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地址 };
Erweiterte Kenntnisse
iphdr->version
Version (4 Ziffern), derzeit Die Versionsnummer des Protokolls ist 4, daher wird IP manchmal als IPv4 bezeichnet.
iphdr->ihl
Header-Länge (4 Bits): Die Header-Länge bezieht sich auf die Anzahl der 32-Bit-Wörter im IP-Layer-Header (d. h. wie viele 4 Bytes – 32 Bits in der IP-Layer enthalten sind). Header), einschließlich beliebiger Optionen. Da es sich um ein 4-Bit-Feld handelt, beträgt die maximale Länge des Headers 60 Byte. Der Wert des normalen IP-Datagrammfelds (ohne Optionen) beträgt 5 5 * 32 / 8 = 5 * 4 = 20 Bytes.
iphdr->tos
Feld „Typ des Dienstes“ (8 Bit): Das Feld „Typ des Dienstes“ (TOS) enthält ein 3-Bit-Prioritätsunterfeld (jetzt ignoriert), ein 4-Bit-TOS-Unterfeld und 1 Bit, das nicht verwendet wird Bit, muss aber auf 0 gesetzt werden. Das 4-Bit-TOS-Unterfeld steht für: minimale Verzögerung, maximaler Durchsatz, maximale Zuverlässigkeit und minimale Kosten. Von den 4 Bits kann nur 1 Bit gesetzt werden. Wenn alle 4 Bits 0 sind, bedeutet dies, dass der Dienst normal ist.
iphdr->tot_len
Das Feld „Gesamtlänge“ (16 Bit) bezieht sich auf die Länge des gesamten IP-Datagramms in Bytes. Mithilfe des Header-Längenfelds und des Gesamtlängenfelds können Sie die Startposition und Länge des Dateninhalts im IP-Datagramm ermitteln. Da dieses Feld 16 Bit lang ist, kann das IP-Datagramm bis zu 65535 Byte lang sein. Das Feld „Gesamtlänge“ ist ein notwendiger Inhalt im IP-Header, da einige Datenverbindungen (z. B. Ethernet) einige Daten ausfüllen müssen, um das Minimum zu erreichen Länge. Obwohl die minimale Framelänge von Ethernet 46 Byte beträgt, können IP-Daten kürzer sein. Wenn kein Gesamtlängenfeld vorhanden ist, weiß die IP-Schicht nicht, wie viel der 46 Bytes der Inhalt des IP-Datagramms ist.
iphdr->id
Das Identifikationsfeld (16 Bit) identifiziert jedes vom Host gesendete Datagramm eindeutig. Normalerweise wird sein Wert bei jedem Senden einer Nachricht um 1 erhöht.
Empfohlenes Lernen: Linux-Video-Tutorial
Das obige ist der detaillierte Inhalt vonWas ist IPHDR unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!