IP 数据包格式版本字段:4位。
当前的IP 协议版本是4,通常称为IPv4。
下一个版本是6,称为IPv6首部长度:4位,IP 数据报首部的长度,每个单位为4个字节。
IP 数据报的长度是4个字节的整数倍。
服务类型:8位,服务类型。
前3位为优先级,用于表示数据报的重要程度,优先级取值从0(普通优先级)到7(网络控制高优先级)。
D 、T 和R 位表示本数据报希望的传输类型。
D 表示低时延(Delay )需求T 表示高吞吐量(Throughput )要求R 代表高可靠性(Reliability )要求。
总长度:总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
标识(identification):占16位。
IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。
但这个“标识”并不是序号,因为IP 是无连接服务,数据报不存在按序接收的问题。
当数据报由于长度超过网络的MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
标志(flag):占3位,但目前只有2位有意义。
标志字段中的最低位记为MF(More Fragment)。
MF=1即表示后面“还有分片”的数据报。
MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。
只有当DF=0时才允许分片。
片偏移:占13位。
片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。
也就是说,相对用户数据字段的起点,该片从何处开始。
片偏移以8个字节为偏移单位。
这就是说,每个分片的长度一定是8字节(64位)的整数倍。
总长度 服务类型版本 首部长度 标识 源站IP 地址寿命 协议首部校验和 片偏移 标志目的站IP 地址IP 选项(可选)填充 数据……生存时间:占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。
由发出数据报的源点设置这个字段。
其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。
最初的设计是以秒作为TTL的单位。
每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。
若数据报在路由器消耗的时间小于1秒,就把TTL值减1。
当TTL值为0时,就丢弃这个数据报。
协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP 层知道应将数据部分上交给哪个处理过程。
首部检验和:占16位。
这个字段只检验数据报的首部,但不包括数据部分。
这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。
不检验数据部分可减少计算的工作量。
源地址:占32位目的地址:占32位2、IP数据报首部的可变部分IP首部的可变部分就是一个可选字段。
选项字段用来支持排错、测量以及安全等措施,内容很丰富。
此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。
某些选项项目只需要1个字节,它只包括1个字节的选项代码。
但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。
这就增加了每一个路由器处理数据报的开销。
实际上这些选项很少被使用。
新的IP版本IPv6就将IP数据报的首部长度做成固定的。
目前,这些任选项定义如下:(1)安全和处理限制(用于军事领域)(2)记录路径(让每个路由器都记下它的IP地址)(3)时间戳(让每个路由器都记下它的IP地址和时间)(4)宽松的源站路由(为数据报指定一系列必须经过的IP地址)(5)严格的源站路由(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)这些选项很少被使用,并非所有主机和路由器都支持这些选项。
TCP数据包格式源端口和目的端口字段——各占2字节。
端口是传输层与应用层的服务接口。
传输层的复用和分用功能都要通过端口才能实现。
序号字段——占4字节。
TCP连接中传送的数据流中的每一个字节都编上一个序号。
序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
数据偏移——占4bit,它指出TCP报文段的数据起始处距离 CP报文段的起始处有多远。
“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。
保留字段——占6bit,保留为今后使用,但目前应置为0。
紧急比特URG——当URG=1时,表明紧急指针字段有效。
它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认比特ACK——只有当ACK=1时确认号字段才有效。
当ACK=0时,确认号无效。
复位比特RST(Reset)——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。
终止比特FIN(FINal)——用来释放一个连接。
当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口字段——占2字节。
窗口字段用来控制对方发送的数据量,单位为字节。
TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
检验和——占2字节。
检验和字段检验的范围包括首部和数据这两部分。
在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
紧急指针字段——占16bit。
紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
选项字段——长度可变。
TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。
填充字段——这是为了使整个首部长度是4字节的整数倍。
UDP数据包格式UDP数据报格式有首部和数据两个部分。
首部很简单,共8字节。
包括:◆源端口(Source Port):2字节,源端口号。
◆目的端口(Destination Port ):2字节,目的端口号。
◆长度(Length):2字节,UDP用户数据报的总长度,以字节为单位。
◆检验和(Checksum):2字节,用于校验UDP数据报的数字段和包含UDP数据报首部的“伪首部”。
其校验方法同IP分组首部中的首部校验和。
伪首部,又称为伪包头(Pseudo Header):是指在TCP的分段或UDP的数据报格式中,在数据报首部前面增加源IP地址、目的IP地址、IP分组的协议字段、TCP或UDP数据报的总长度等共12字节,所构成的扩展首部结构。
此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。
硬件类型(16位)协议类型(16位)硬件地址长度(8位)协议地址长度(8位)操作代码(16位)发送方硬件地址(以太网为6字节)发送方协议地址(以太网为4字节)目标方硬件地址(以太网为6字节)目标方协议地址(以太网为4字节)硬件类型:2字节,表示发送者硬件地址类型,值为1表示以太网地址。
协议类型:2字节,表示发送方要映射的协议地址类型,该字段的常用值如下表。
协议地址为IP地址时,它的值为0x0800。
它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
硬件地址长度和协议地址长度:各占1字节,分别指出硬件地址长度和协议地址长度。
对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
操作代码:ARP和RARP在设计时协议格式完全相同,只有操作代码可以区分。
1-----ARP请求报文2-----ARP应答报文3-----RARP请求报文4-----RARP应答报文发送方硬件地址和发送方协议地址:目的方硬件地址和目的方协议地址:各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。
常见的有:类型8、代码0:回射请求。
类型0、代码0:回射应答。
类型11、代码0:超时。
16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
最后是16bits序列号字段:用于判断回射应答数据报。
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面一个ICMP报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文RFC定义了13种ICMP报文格式,具体如下:类型代码类型描述0 响应应答(ECHO-REPLY)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 参数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答其中代码为15、16的信息报文已经作废。
IPSEC数据包格式隧道模式使用 IPSec 隧道模式时,IPSec 对 IP 报头和有效负载进行加密,而传输模式只对 IP 有效负载进行加密。
通过将其当作 AH 或 ESP 有效负载,隧道模式提供对整个 IP 数据包的保护。
使用隧道模式时,会通过 AH 或 ESP 报头与其他 IP 报头来封装整个 IP 数据包。
外部 IP 报头的 IP 地址是隧道终结点,封装的 IP 报头的 IP 地址是最终源地址与目标地址。
IPSec 隧道模式对于保护不同网络之间的通信(当通信必须经过中间的不受信任的网络时)十分有用。
隧道模式主要用来与不支持 L2TP/IPSec 或 PPTP 连接的网关或终端系统进行互操作。
可以在下列配置中使用隧道模式:•网关到网关•服务器到网关•服务器到服务器AH 隧道模式如下图所示,AH 隧道模式使用 AH 与 IP 报头来封装 IP 数据包并对整个数据包进行签名以获得完整性并进行身份验证。
ESP 隧道模式如下图所示,ESP 隧道模式采用 ESP 与 IP 报头以及 ESP 身份验证尾端来封装 IP 数据包。
数据包的签名部分表示对数据包进行签名以获得完整性并进行身份验证的位置。
数据包的加密部分表示受到机密性保护的信息。
由于为数据包添加了隧道新报头,因此会对 ESP 报头之后的所有内容进行签名(ESP 身份验证尾端除外),因为这些内容此时已封装在隧道数据包中。