1 MAC帧格式
以太帧由一个包含三个字段的帧头开始,前两个字段包含了物理地址,各六个字节,头部的第三个字段包含了16位的以太帧类型,帧头后面是数据区。结构如图1-2。根据帧类型可以判断是哪种数据包,一般常用的有0X0080(IP数据包)、0X0806(ARP请求/应答)0X0835(RARP请求/应答)三种类型。
2 IP数据包结构
互联网把它的基本传输单元PDU称为IP数据报(IP datagram),有时称为Internet数据包,或仅称为数据报。它相当于分组或包。IP数据报格式如图1-3所示,符合典型的PDU的一般格式,分为报头(header)或称首部和数据区两部分。
0 4 8 16 19 31
其中:
.版本(version)IP数据报中的第一个域(字段)是版本域,长度为4比特,表示传送数据报的IP协议的版本号。对于不同的IP协议版本,其数据报格式事实上是不同的。当前的IPv4版本号是“4”。IPv6数据报的格式已改变,并不是将版本字段置为“6”即可。
.协议(protocol)协议域表示创建数据报数据区数据的高级协议的类型,比如TCP为“6”、UDP为“17”、ICMP为“1”和IGMP为“2”等。协议类型代码是由一个中央管理机构管理的,在整个Internet范围内全局一致。版本或协议域都是指定数据的格式。前者指定数据报头格式,属IP层范围;后者关联数据报数据区格式,属传输层范围。
.报头长(header length)IP数据报报头含两个长度域:报头长和总长。报头长是IP数据报报头的长度,是一个4比特的域,以32比特(4字节)为单位,如表2.3所示。IP数据报报头中除IP选项域和填充域(padding)外,其他各域都是定长的。各定长域长度之和为20字节,因此,一个不含选项域和填充域的普通IP数据报其报头长域的值为“5”。一个含选项的IP数据报报头长度则取决
于选项域的长度。但报头最大长度值为“15”,即60字节,其中选项的最大长度为40字节。另外,报头长应当是4字节的整数倍,假如不满足,由填充域添“0”补齐。
.总长(total length)总长指示整个IP数据报的长度,包括报头长及数据区长,单位为字节。总长域为16比特,所以IP数据报最长可达64K(65535)字节。这个长度限制可以适应目前的大多数应用。在下一代的IPv6数据报中,数据区长度是64K字节。当长的数据报要分片进行传送时,总长指分片后每片的报头长与数据区长度的总和,而不是分片前的数据报总长。
.服务类型(service type)服务类型规定对本数据报的处理方式,其长度为1字节,划分为6个子域,结构如图1-4所示
图1-4服务类型子域结构
Fig1-4 The types of service sub-domain structure
.头校验和(header checksum) 头校验和域用于保证报头数据在传送中的正确性。IP协议报头校验和的算法很简单:置头检验和的初值为“0”,然后对报头的每16位求二进制反码,然后累加,结果再取反。
.地址在IP数据报的报头中有两个地址域:源站地址(source address)域和目的站地址(destination address)域。
.生存时间TTL(Time To Live) 生存时间TTL域用于数据报的延迟监控。
3 )TCP数据包结构
TCP(传输控制协议)是专门设计用于在不可靠的网络上提供可靠的、端到端的字节流通信的协议。TCP的数据包结构与IP数据包结构相似,如图1-5所示,也有一个不少于20字节的可变长度的报头。
0410162431
图1-5 TCP报文段的格式
Fig1-5 Format of TCP Message
TCP报文主要字段的含义如下:
源端口和目的端口各占2个字节。端口是传输层与应用层的服务接口,和UDP一样,端口可用来将多个应用程序向下复用。
序号即发送序号,4字节,它是本报文段所携带的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有编有一个序号。
确认序号4字节,用于收方对发方发出的数据的累计确认,说明该序号及其之前的数据均已收到,也就是收方指望发方下次发送的数据的第一个字节的序号,因此它也是将要收到的下一个报文段首部的序号的值。由于序号字段有32比特长,可对4GB的数据进行编号。
首部长度4比特,指示TCP报文段首部的长度,因为首部中的选项字段长度是不确定的,因为首部长度不固定。首部长度的单位是32比特(4字节)字长的字,而不是字节或比特。该字段后面还留有6比特是保留字段,供今后使用,目前应置为0。
4)UDP数据包结构
UDP数据包的报头十分简单,固定为8字节,内容分别为2字节的源端口、目的端口、UDP长度和UDP校验和。其中UDP长度标志的是包括8字节的报头及后面的报文在内的数据包长度;UDP校验和校验的是全部UDP数据包的内容。UDP数据包的格式如图1-6所示
0 16 31
Fig1-6 Format of UDP Message
5 )ICMP数据包结构
ICMP报文格式如图1-7所示,它也分为报头和数据区两部分,其中报头包含类型、代码和校验和三个域。
1字节的类型(type)域指明ICMP报文的类型,如表所示。1字节的代码(code)域指出关于报文类型的进一步信息。2字节长的校验和(checksum)提供整个ICMP报文的校验和,校验和的算法与IP数据报报头校验和算法相同。
字节(个)
图1-7 ICMP报文格式
Fig1-7 Format of ICMP Message
ICMP报文数据区包含出错数据报报头及该数据报前64位数据,之所以提供这些信息是为了帮助源站分析出错的数据报,确定涉及出错数据报的高层协议和应用程序,高层协议的重要信息包含在前64位数据中。
6)ARP和RARP数据包结构
ARP协议(Address Resolution Protocol,地址解析协议)是一个高效的数据链路层协议。ARP协议的基本功能是在发送数据帧前将目标lP地址转换成目标MAC 地址,以保证通信的顺利进行。它的报文格式如图1-8所示。
图1-8 ARP/RARP报文格式
Fig1-8 Format of ARP/RARP Message
ARP/RARP设计成一种能适应各种物理网络地址和高级协议地址的格式。“硬件类型”(HARDWARE TYPE)域(或称字段)指出发送者网络接口类型,例如值“1”代表以太网。“协议类型”(PROTOCOL TYPE)域指出发送者提供的高层协议地址类型,例如“0x0806”代表IP协议地址。两个长度域分别指出以后各相应域的长度。“操作”(OPERATION)域指出本报文的类型,“1”表示ARP 请求,“2”表示ARP响应,“3”表示RARP请求,“4”表示RARP响应。