网络层(二)

三、IP 数据报

IP 数据报的格式

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

8992321-132082416fab27f4.png
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 个字节为偏移单位。
8992321-a309e8fa8ee40701.png
IP 数据报分片
  1. 生存时间:占8 位,记为 TTL (Time To Live),数据报在网络中可通过的路由器数的最大值
  2. 协议:占8 位字段,此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程
  3. 首部检验和:占16 位字段只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
8992321-cd0d056cb22e0078.png
首部检验和
  1. IP 数据报首部的可变部分
     IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
     选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
     增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
     实际上这些选项很少被使用。

IP 层转发分组的流程

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

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

  • 特定主机路由
     这种路由是为特定的目的主机指明一个路由。
     采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
  • 默认路由(default route)
     路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。
     这种转发方式在一个网络只有很少的对外连接时是很有用的。
     默认路由在主机发送 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 地址到三级 IP 地址
     在 ARPANET 的早期,IP 地址的设计确实不够合理;
     IP 地址空间的利用率有时很低。如一个A类网络可容纳千万台主机,实际使用往往远低于这个级别的数目。两级的 IP 地址不够灵活。
  • 三级的 IP 地址
    从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。这种做法叫作划分子网(subnetting)。划分子网已成为因特网的正式标准协议
  • 划分子网的基本思路
     划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
     从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。IP地址 ::= {<网络号>, <子网号>, <主机号>}
     凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
     然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机
  • 子网掩码
    从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。
8992321-5eb3bb3d20eaf4c0.png
(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)。

  • 特点:
     CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
     CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
     IP 地址从三级编址(使用子网掩码)又回到了两级编址。
  • 无分类的两级编址的记法:IP地址 ::= {<网络前缀>, <主机号>}
  • CIDR 还使用“斜线记法”(slash notation),它又称为CIDR记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
    举例:128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
路由聚合(route aggregation)

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

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

最长前缀匹配

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

使用二叉线索查找路由表
  • 当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)
  • IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
8992321-33035b4f6d4bec2a.png
用 5 个前缀构成的二叉线索

网际控制报文协议 ICMP

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

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

  • ICMP 差错报告报文共有 5 种
    1、终点不可达
    2、源点抑制(Source quench)
    3、时间超过
    4、参数问题
    5、改变路由(重定向)(Redirect)
8992321-8134f25bd8237d14.png
ICMP 差错报告报文的数据字段的内容
  • 不应发送 ICMP 差错报告报文的几种情况
    1、对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
    2、对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
    3、对具有多播地址的数据报都不发送 ICMP 差错报告报文。
    4、对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
  • ICMP 询问报文有两种
    1、回送请求和回答报文
    2、时间戳请求和回答报文
  • ICMP的应用举例PING (Packet InterNet Groper)
    PING 用来测试两个主机之间的连通性。
    PING 使用了 ICMP 回送请求与回送回答报文。
    PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值