1,IP包头结构如下图所示
2,下面具体分析IP包头中各部分的作用。
版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6)
IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节。
服务类型(Type of Service):长度8比特。8位 按位被如下定义 PPP D T R C 0
PPP:定义包的优先级
000 普通 (Routine)
001 优先的 (Priority)
010 立即的发送 (Immediate)
011 闪电式的 (Flash)
100 比闪电还闪电式的 (Flash Override)
101 CRI/TIC/ECP (不知道虾米意思)
110 网间控制 (Internetwork Control)
111 网络控制 (Network Control)
D 时延: 0:普通 1:尽量小
T 吞吐量: 0:普通 1:尽量大
R 可靠性: 0:普通 1:尽量大
M 传输成本: 0:普通 1:尽量小
0 最后一位被保留,恒定为0
IP包总长(Total Length):长度16比特。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。
标识符(Identifier)(数据报ID):长度16比特。该字段和Flags和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
标记(Flags):长度3比特。该字段第一位不使用。第二位是DF(Don't Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
片偏移(Fragment Offset):长度13比特。表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
协议(Protocol):长度8比特。标识了上层所使用的协议。
以下是比较常用的协议号:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
头部校验(Header Checksum):长度16位。用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改
变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。
至此,IP包头基本的20字节已介绍完毕,此后部分属于可选项,不是必须的部分。
填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。
3,c结构体定义:
//IP头部,总长度20字节
typedef struct _ip_hdr
{
#if LITTLE_ENDIAN
unsigned char ihl:4; //首部长度
unsigned char version:4, //版本
#else
unsigned char version:4, //版本
unsigned char ihl:4; //首部长度
#endif
unsigned char tos; //服务类型
unsigned short tot_len; //总长度
unsigned short id; //标志
unsigned short frag_off; //分片偏移
unsigned char ttl; //生存时间
unsigned char protocol; //协议
unsigned short chk_sum; //检验和
struct in_addr srcaddr; //源IP地址
struct in_addr dstaddr; //目的IP地址
}ip_hdr;
- 大小: 26.1 KB
分享到:
相关推荐
IP 包头结构详解 IP 包头结构是 Internet 协议(IP)的核心组件之一,它提供了基本的寻址、路由和数据传输机制。IP 包头结构由固定部分和可变长的可选部分组成,固定部分长度至少为 20 字节,最大为 60 字节。 ...
IP协议数据报结构详解 在 TCP/IP 协议中,数据报结构是一个比较抽象的内容,大家在日常学习过程中往往难以理解和掌握。为了帮助大家更好地理解和掌握 TCP/IP 协议中的数据报结构,本文将利用 Sniffer 工具捕获 FTP ...
TCP/IP 协议数据报结构详解 TCP/IP 协议中各层的数据报结构是一个比较抽象的内容,大家在日常学习过程中往往难以理解和掌握,常常是死记硬背把它记住了事。为此,本文将利用 Sniffer 工具捕获了 FTP 命令操作过程中...
"TCPIP数据包结构详解" 本文将详细介绍TCPIP数据包结构的组成部分,并对每个部分的作用进行解释。 首先,IP数据包结构可以分为以下几个部分: 1. 版本(4位):表示IP版本号,目前最广泛的是IPv4,未来可能会广泛...
Linux sk_buff 结构详解 Linux kernel 中的 sk_buff 结构是网络代码中最重要的数据结构之一,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。本结构被网络的不同层(MAC 或者...
### TCP/IP详解第一卷 第二版 #### 书籍概述与评价 《TCP/IP详解,卷1:协议》作为TCP/IP领域的经典之作,在第二版中继续深入解析TCP/IP协议栈的各个方面,是计算机网络领域不可多得的专业参考资料。本书不仅适合于...
LWIP需要内存池来存储协议栈内部的数据结构,如TCP和UDP连接、IP包头等。根据STM32的RAM资源,合理配置内存池大小和结构至关重要,以确保高效且无内存泄漏的运行。 此外,为了使LWIP与STM32的RTOS或线程模型协同...
《IP数据流走向详解》 在信息技术领域,网络通信是不可或缺的一部分,而IP(Internet Protocol)数据流走向的理解是网络通信中的基础概念。IP数据流是互联网上信息传输的基石,它描述了数据如何从源节点经过多个...
在这个部分,我们聚焦于IP选项的处理,这是IP数据包头的一部分,用于扩展IP协议的功能和提供额外的信息。 9.1 引言中提到,IP选项在IP输入函数`ip_input`处理时会被解析,这一过程发生在验证分组格式(如校验和和...
5.1.2 包头结构 35 5.1.3 IPv4与IPv6的比较 36 5.1.4 流标签 37 5.1.5 业务流类别 37 5.1.6 分段 38 5.1.7 扩展头 39 5.2 ICMPv6 40 第6章 IPv6寻址 43 6.1 地址 43 6.1.1 地址表达方式 43 6.1.2 寻址模型 44 6.1.3 ...
描述中提到的"08 网际协议.PDF"可能详细介绍了IP地址、子网掩码、IP包头结构、IP服务类型(TOS)以及IP路由选择等内容。 3. **IP的分段和重装**:当数据包过大无法通过某个网络传输时,IP协议会将其分段进行传输,...
- 然后调用`ip_output_if`完成IP包头的设置与数据的发送。 7. **函数名:** `ip_debug_print(struct pbuf *p)` - **功能:** 打印IP层的调试信息。 - **操作:** 具体实现细节未给出。 #### 四、IP分片处理 IP...
5.1.2 包头结构 35 5.1.3 IPv4与IPv6的比较 36 5.1.4 流标签 37 5.1.5 业务流类别 37 5.1.6 分段 38 5.1.7 扩展头 39 5.2 ICMPv6 40 第6章 IPv6寻址 43 6.1 地址 43 6.1.1 地址表达方式 43 6.1.2 寻址模型 44 6.1.3 ...
这一版本的TNS协议定义了一个通用的包头结构,用于标识请求数据类型,不同的数据类型对应不同的服务请求和数据传输行为。例如: - **查询操作**:一般使用数据类型(DATA)。 - **查询语句出错**:使用标记类型...
本文将深入解析IP、TCP、UDP和ICMP这四个基本协议的报头结构,以及相关的以太网数据包头结构。 1. **IP报头**: - **版本**:4位,表示IP协议的版本,如IPv4或IPv6。 - **头长度**:4位,指示IP报头的字节数,...
IP包头包含了源IP、目的IP地址,以及其他用于路由和分片的信息。 - IP路由是网络层的重要功能,包括静态路由和动态路由,通过路由协议(如RIP、OSPF、BGP等)实现。 9. **网络编程接口**: - Stevens的书中也介绍...
- 接收处理传输层分组发送请求,将分组装入IP数据包,加入包头,并选择通往收信主机的路由。 - 处理来自其他计算机的输入数据包,如果目的地是本地,则去除包头并将剩余的传输层分组发给传输层;如果不是本地,则...
- **包头结构**:IPv6 包头结构相对于 IPv4 更加简洁高效,去除了不必要的字段,提高了传输效率。 ### 2. 路由 路由是网络层的重要功能之一,负责选择最佳路径将数据包从源传输到目的地。路由器使用路由表进行决策...
- IPv6允许使用扩展头来添加额外的功能,而不改变基本的包头结构。 ##### 第6章:IPv6寻址 - **6.1 地址** - IPv6地址分为单播地址、组播地址和泛播地址。 - **6.1.1 地址表达方式** - 使用冒号十六进制表示法...