英文头部说明:
![IP、TCP、UDP数据包头部抓包及IP分片传输详解 IP、TCP、UDP数据包头部抓包及IP分片传输详解]()
32bit![IP、TCP、UDP数据包头部抓包及IP分片传输详解 IP、TCP、UDP数据包头部抓包及IP分片传输详解]()
8 8 8 8
Version | Header Length | Type of service | Totle length |
Identifier | Flag(3bit) | Framgent offest |
Time to live | protocol | Header checksum |
Sourse address |
Destation address |
Option | pading |
中文对照表:
![IP、TCP、UDP数据包头部抓包及IP分片传输详解 IP、TCP、UDP数据包头部抓包及IP分片传输详解]()
32bit![IP、TCP、UDP数据包头部抓包及IP分片传输详解 IP、TCP、UDP数据包头部抓包及IP分片传输详解]()
8 8 8 8
版本号 | 报头长度 | 服务类型 | 报文总长度 |
标识 | 标志(3字节) | 段偏移 |
生存时间 | 协议 | 校验和 |
源IP地址 |
目的IP地址 |
选项 | 填充字段 |
抓包说明:
版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),IPv6的值(0110)
IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。IP包头最小长度为20字节,由于变长的可选部分最大长度可能会变成24字节。
服务类型(Type of Service):长度8比特。这个子段可以拆分成两个部分:Precedence和TOS。TOS目前不太使用。而Precedence则用于QOS应用。(TOS字段的详细描述RFC 1340 1349)
IP包总长(Total Length):长度16比特。IP包最大长度65535字节。
标识符(Identifier):长度16比特。该字段和Flags和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。
标记(Flags):长度3比特。该字段第一位不使用。第二位是DF位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法 在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分 段的IP包的包头中将MF位设为1。
分段序号(Fragment Offset):长度13比特。该字段对包含分段的上层数据包的IP包赋予序号。由于IP包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路 由器在接受到IP包之后能够还原分段的上层数据包。到某个包含分段的上层数据包的IP包在传送是丢失,则整个一系列包含分段的上层数据包的IP包都会被要 求重传。
生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会 将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于故障而导致IP包在网络中不停被转发。
协议(Protocol):长度8比特。标识了上层所使用的协议。
头部校验(Header Checksum):长度16位,由于IP包头是变长的,所以提供一个头部校验来保证IP包头中信息的正确性。
起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。
可选项(Options):这是一个可变长的字段。该字段由起源设备根据需要改写。可选项目包含以下内容:
松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。
严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。
路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。
时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
抓包分析IP数据包结构:

UDP数据包结构:
32bit![IP、TCP、UDP数据包头部抓包及IP分片传输详解 IP、TCP、UDP数据包头部抓包及IP分片传输详解]()
源端口 | 目的端口 |
用户数据报的总长度 | 校验和 |
数据...... |
UDP的头部比较简单,不详加说明了。
TCP数据包结构:
32bit
源端口号 | 目的端口号 |
序号 |
确认号 |
首部长度 | 保留(6位) | urg | ack | psh | rst | syn | fin | 窗口大小 |
校验和 | 紧急指针 |
选项 |
数据...... |
各字段说明:
端口号:
常说FTP占21端口、HTTP占80端口、TELNET占23端口等,这里指的端口就是TCP或UDP的端口,端口就像通道两端的门一样,当两机 进行通讯时门必须是打开的。源端口和目的端口各占16位,2的16次方等于65536,这就是每台电脑与其它电脑联系所能开的“门”。一般作为服务一方每 项服务的端口号是固定的。客户端连接的时候开一个大于1024的端口。常用netstat 查看端口的开放情况,防止木马。
32位序号:
也称为顺序号(Sequence Number),简写为SEQ,当一方要与另一方联系时就发送一个初始序号给对方,意思是:“让我们建立联系吧?”,服务方收到后要发个独立的序号给发送方,意思是“消息收到,数据流将以这个数开始。”由此可看出,TCP连接完全是双向的,即双方的数据流可同时传输。在传输过程中双方数据是独立的,因此每个TCP连接必须有两个顺序号分别对应不同方向的数据流。
32位确认序号:
也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答,在数据传输阶段,确认序号将发送方的序号加发送的数据大小作为回答,表示确实收到这些数据。
4位首部长度:
这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。
6个标志位:
URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据
ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。
PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。
SYN 置1时用来发起一个连接。
FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。
16位窗口大小:
TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16字节字段,因而窗口大小最大为65535字节。
16位检验和:
检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
16位紧急指针:
只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
选项:
最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段。1460是以太网默认的大小。
这里面需要特别说明一点的是,当数据包过大,IP分片传输的时候,抓包工具wireshark,假设发的是UDP包。此此时会有一个UDP协议的包,对应多个IP协议的包,UDP字段里面的length是数据包的总长度加上UDP的头部,IP字段里面的长度totle length 是本分片Ip的数据长度加上IP的头部长度。为分片的长度需要加上UDP的头部长度。另外分片后的IP协议包不会显示UDP字段了。
总体IP的结构是帧头部+IP头部+UDP头部(tcp头部)+数据+校验和(tcp的才会有这个字段)。
这里是以tcp,UDP协议举例。当然还会有其他的协议,比如ICMP,Arp ......