三、Linux网络编程-TCP/IP基础(三)IP数据报格式、网际校验和、路由

时间:2022-04-28 10:30:14
一、IP数据报格式
(1)、IP头部的数据格式
三、Linux网络编程-TCP/IP基础(三)IP数据报格式、网际校验和、路由
版本  IP协议版本号,长度为4位,IPv4此字段值为4,IPv6此字段值为6

首部长度  以32位的字为单位,该字段长度为4位,最大值为15,所以首部长度最大为60个字节

服务类型(TOS)  长度为8位。此字段包含3位的优先权(现已忽略),4位的服务类型子字段和1位的保留位(必须置0)。4位的服务类型分别为最小延迟(D)、最大吞吐量(T)、最高可靠性(R)、最小费用(F)。

总长度  该字段长度为16位,以字节为单位,该字段长度包含IP的头部和数据部分。IP数据报最大可达65535个字节。

标识  16位标识,用来标识一个IP包,每发送一个此值会加1

标志与片偏移    3位标志其中第一位不使用, 每二位DF(Don’t Fragment),该位如果为1,如果传输的数据报超过最大传输单元,该数据报会被丢弃,并发送一个ICMP差错报文。第三位MF(MoreFragment)表示是否有更多的片,该位为1,说明后续有分片。最后一片MF为0。 IP分片后每一个分组都具有自己的首部,但是片偏移值不同,通过片偏移值接收端可以重新组装IP包。

TTL  TTL(TimeTo Live)表示数据报最多可经过的路由器的数量。数据报每经过一个路由器,TTL减1,减为0时丢弃,并发送ICMP报文通知源主机。TTL可以避免数据报在路由器之间不断循环。

协议类型  表示IP层上承载的是哪个高级协议。在封装与分用的过程中,协议栈知道该交给哪个层的协议处理。1ICMP 2 IGMP 6 TCP 17 UDP

头部校验和  保证数据报头部的数据完整性,但校验不包括数据部分。这样做的目的有二:一是所有将数据封装在IP数据包中的高层协议均含有覆盖整个数据的校验和,因此IP数据报没有必要再对其所承载的数据部分进行校验。二是每经过一个路由器,IP数据报的头部要发生改变,而数据部分不变,这样只对发生改变的头部进行校验,显然不会浪费太多的时间。为了减少计算时间,一般不用CRC校验码,而是采用更简单的网际校验和。

源IP地址  发送数据的主机IP地址

目的IP地址  接收数据的主机IP地址

选项与填充(选项为4字节整数倍,否则用0填充)
  • 安全和处理限制
  • 路径记录:记录所经历路由器的IP地址
  • 时间戳:记录所经历路由器的IP地址和时间
  • 宽松源站路由:指定数据报文必须经历的IP地址,可以经过没有指定的IP地址。
  • 严格的源站路由:指定数据报文必须经历的IP地址,不能经过没有指定的IP地址。

二、网际校验和
网际校验和,英文全称(Internet Checksum)发送方对要发送的数据划分为许多16位字序列(如果数据的字节数为奇数,则在末尾补一字节0凑成偶数。)对这些序列反码求和,便得到校验和。 如果数据在传输过程中没有发生任何差错,那么接收方计算校验和的结果应该为全1。如果结果不是全1(即校验和错误)。计算如下:
IP首部(不含校验和)反码+0x1111 = 发送端校验和
IP首部(不含校验和)反码+发送端校验和反码=接收端校验和
IP首部 = IP首部(不含校验和) + 发送端校验和

三、路由
(1)、路由步骤
路由一般根据三个规则:1、 搜索匹配的主机地址 2、 搜索网络地址 3、 搜索默认表项
三、Linux网络编程-TCP/IP基础(三)IP数据报格式、网际校验和、路由