网络层(二)

2018-04-26  本文已影响12人  EvanForEver

三、IP 数据报

IP 数据报的格式

一个 IP 分组由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

IP 数据报首部的固定部分中的各字段

  1. 版本:占 4 位,指 IP 协议的版本,目前的 IP 协议版本号为 4 (即 IPv4)
  2. 首部长度:占 4 位;最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
  3. 区分服务:占 8 位,用来获得更好的服务,但实际上一直未被使用过。旧标准中叫服务类型,1998 年改名区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段 。
  4. 总长度:占 16 位;指首部和数据之和的长度,单位为字节,因此数据报的
    最大长度为 65535 字节;总长度必须不超过最大传送单元 MTU。
  5. 标识(identification):占 16 位;它是一个计数器,用来产生数据报的标识。
  6. 标志(flag):占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF = 0 时才允许分片。
  7. 片偏移:占12 位,较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
IP 数据报分片
  1. 生存时间:占8 位,记为 TTL (Time To Live),数据报在网络中可通过的路由器数的最大值
  2. 协议:占8 位字段,此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程
  3. 首部检验和:占16 位字段只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
首部检验和
  1. IP 数据报首部的可变部分
     IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
     选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
     增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
     实际上这些选项很少被使用。

IP 层转发分组的流程

路由器若按目的主机号来制作路由表,所得出的路由表过于庞大。因此采取按主机所在的网络地址来制作路由表,使路由表大大简化。注意:用一个IP地址并不能准确标识一个网络,还需要一个地址掩码。

路由器根据目的网络地址确定下一跳路由器,这样做的结果是:
 IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)
 只有到达最后一个路由器时,才试图向目的主机进行直接交付。

注意:
1、IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。
2、当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。
3、网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。

分组转发算法

  1. 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
  2. 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
  6. 报告转发分组出错。

四、划分子网和构造超网

(IP 地址) AND (子网掩码) = 网络地址

 子网掩码是一个网络或一个子网的重要属性。
 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
不同的子网掩码得出相同的网络地址。但不同的掩码的效果是不同的

使用子网掩码的分组转发过程

  1. 在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。因此分组转发的算法也必须做相应的改动。
  2. 从收到的分组的首部提取目的 IP 地址 D。先用自己各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
  3. 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
  4. 对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
  5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
  6. 报告转发分组出错。

无分类编址 CIDR

划分子网在一定程度缓解IP地址枯竭问题,为进一步提高 IP 地址资源的利用率。在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。

路由聚合(route aggregation)

一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。路由聚合也称为构成超网(supernetting)
PS:CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。

前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。这些 C 类地址合起来就构成了超网。CIDR 地址块中的地址数一定是 2 的整数次幂。
网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。

最长前缀匹配

使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。最长前缀匹配又称为最长匹配或最佳匹配

使用二叉线索查找路由表

用 5 个前缀构成的二叉线索

网际控制报文协议 ICMP

为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。

ICMP 差错报告报文的数据字段的内容
上一篇 下一篇

猜你喜欢

热点阅读