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