以太网帧格式如下图所示:
目的MAC地址(6字节) |
源MAC地址(6字节) |
协议类型(2字节) |
以太网帧数据负载(46字节到1500字节) |
协议类型说明:
0x0800:IP协议数据包
0x0806:ARP协议数据包
0x0835:RARP协议数据包
0x8863:PPP Over Ethernet Discovery Stage
0x8864:PPP Over Ethernet Session Stage
IP协议数据包结构如下页表:
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)
8个BIT的含义是:
000 前三位不用
0 表示最小时延,如Telnet服务使用该位
0 表示吞吐量,如FTP服务使用该位
0 表示可靠性,如SNMP服务使用该位
0 表示最小代价
0 不用
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比特。标识了上层所使用的协议。如果是ICMP协议,此处的协议代码应为1。如果TCP协议,则此处的协议代码应为6。如果是UDP协议,则此处的协议代码应为17。
头部校验(Header Checksum):长度16位,由于IP包头是变长的,所以提供一个头部校验来保证IP包头中信息的正确性。
起源和目标地址(Source and Destination Addresses)
IP选项(options)主要用于控制和测试两大目的。
作为选项,用户可以使用也可以不使用IP选项,但作为IP协议的组成部分,所有实现IP协议的设备能处理IP选项。
UDP报文结构如下表:
UDP源端口号(16位) UDP目标端口号(16位
UDP长度(16位) UDP校验和(16位)
数据区
使用wireshark软件捕获网络数据见图