IP协议(一)IP地址、IP数据报、IP层数据报转发

时间:2024-03-16 17:06:54

网际协议IP

一、虚拟互连网络

–指利用路由器进行网络互连和路由选择

  • 利用IP协议可以使得各种异构的网络看起来是一个互连网络,可以在这个虚拟的连网络中进行数据报的传送
  • 使用IP协议的虚拟互连网络成为IP网
  • 在IP网上使用TCP协议,就成为了现在的互联网(Internet)

例:分组在互联网(使用TCP/IP协议的虚拟互连网络)中传送:

IP协议(一)IP地址、IP数据报、IP层数据报转发

二、IP地址的编址方法

要使得分组能够在互联网中传输,就必须使得每个主机(路由器)有一个唯一的标识符—IP地址

1、分类的IP地址

-最基本的编址方法,每个IP地址由网络号、主机号组成

(1)IP地址是一种分等级的地址结构

  • IP地址管理机构只分配网络号给单位,单位自行分配其地址号
  • 路由器仅根据网络号来转发分组,转发至某一网络

(2)IP地址实际上标志着主机和一条链路的接口

  • 一个路由器连接至多个局域网,因此路由器至少有两个IP地址

(3)用转发器、网桥连接起来的若干局域网依然是一个网络

  • 这些网络具有同样的网络号

(4)分配到网络号的网络:局域网、广域网都是平等的

(5)各类IP地址

IP协议(一)IP地址、IP数据报、IP层数据报转发

(6)几种特殊IP地址

网络号 主机号 源地址 使用 目的地址 使用 代表的意思
0 0 可以 不可 在本网络上的本主机(见 6.6 节 DHCP 协议)
0 host-id 可以 不可 在本网络上的某台主机 host-id
全 1 全 1 不可 可以 只在本网络上进行广播(各路由器均不转发)
net-id 全 1 不可 可以 对 net-id 上的所有主机进行广播
127 非全 0 或全 1 的任何数 可以 可以 用作本地软件环回测试之用

主机号为全1代表在网络上进行广播;网络号和主机号都为0代表本网络上的本主机;网络号为0,主机号为A代表本网络上的主机号为A的主机;

2、子网的划分

两级IP地址到三级IP地址

在IP地址的主机字段抽出一部分作为子网号字段,使得两级IP变为三级IP

  • 划分子网是一个网络内部的事情,对外依然呈现一个未划分子网的网络
  • 其他网络发送到本单位的某个主机的IP数据报,依然只根据网络号来转发,本网络的路由器收到IP数据报后,根据其子网号找到目的子网
  • 减少了IP地址的浪费、使得网络的组织更加灵活和便于管理。

子网掩码

利用IP数据报的首部的IP地址于子网掩码相与,就能得出IP地址中的子网部分

在一个网络中(A,B,C三种网络的一种),当路由器R1收到其他网络发往本网络的数据报时,将其路由表的子网掩码与该IP地址相与,得到目的子网的地址,再根据其下一跳来进行转发

假设H1给H2发送数据,在划分子网的情况下的分组转发算法如下:

IP协议(一)IP地址、IP数据报、IP层数据报转发
首先H1检查目的网络是否在本子网内,用H1所在的子网掩码与上H2的IP地址,是就直接交付,否则交给路由器R1;

R1收到后,查找自己的路由表,将目的网络地址(H2)与子网掩码相与得到正确的子网号以及下一跳。

3、构成超网

无分类编址CIDR

-Classless Inter-Domain Routing 无分类域间路由选择

  • CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念
  • CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”
  • 128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。

路由聚合-构成超网

  • 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合

  • 前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。

IP协议(一)IP地址、IP数据报、IP层数据报转发

  • 这些 C 类地址合起来就构成了超网。

最长前缀匹配

在使用CIDR时,路由表中的每个项目由网络前缀和下一跳组成,当根据目的网络查找时,可能由多个目的网络前缀满足这个目的网络,此时应遵从最长前缀匹配原则。

例如:

收到的分组的目的地址 D = 206.0.71.130

路由表中的项目:

​ 目的网络前缀 下一跳

​ 206.0.68.0/22 1

​ 206.0.71.128/25 2

此时两个目的网络前缀都满足目的地址D的前缀,但根据最长前缀匹配,选择 206.0.71.128/25 2这一项目。

使用二叉树查找路由表

当路由表中的项目数特别大时,为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索

三、IP地址与硬件地址

IP地址与硬件地址介绍

IP地址:在网络层及以上各层使用的地址,逻辑地址,其在IP数据报的首部

硬件地址:数据链路层和物理层使用的地址,在MAC帧的首部

IP协议(一)IP地址、IP数据报、IP层数据报转发

从网络层来看,分组是根据IP地址进行转发的,而在链路层和物理层来看,数据是根据MAC地址转发的。

地址解析协议ARP

ARP协议的必要

通信时需要有两个地址,IP地址、MAC地址。

因为最终数据都要放在链路层和物理层进行传输,所以需要地址解析协议ARP根据一个主机(或路由器)的IP地址,得到其MAC地址,以便于能在物理层中转发。

每个主机(或)路由器都有两个地址

IP协议(一)IP地址、IP数据报、IP层数据报转发

ARP协议的特点
  • 解决的是同一个局域网上的主机和路由器的IP地址到MAC地址的映射问题

  • 如果所要找的目的主机不在本局域网,则通过路由表找到去网该目的网络的下一条路由器A,通过ARP找到某一个路由器(A)的硬件地址,将分组发至该路由器A,由路由器A完成剩下的工作

  • IP地址到MAC地址的映射是自动进行的,知道其IP地址就可以通信,其地址的映射由计算机软件完成。

  • 主机A给本局域网主机B发送IP数据包时,先检查ARP高速缓存中有无B的IP地址和MAC地址的映射关系

    • 有,将MAC地址填入MAC帧首部

    • 没有,向本局域网内广播发送一个ARP请求分组(广播),主机B收到后,发出ARP相应分组,主机A将主机B的IP地址和MAC地址的映射写入ARP高速缓存,同时B也将A的映射关系填入自己的ARP高速缓存。

IP协议(一)IP地址、IP数据报、IP层数据报转发

ARP高速缓存

< IP address;MAC address;TTL >

TTL(Time To Live)地址映射有效时间

存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。

四、IP数据报的格式

1、IP数据报的格式

  • IP数据报由首部个数据两部分组成,
  • 其中首部存放上层协议号、源地址、目的地址等信息;数据部分存放数据多种上层协议报文,如TCP、UDP、ICMP、IGMP、OSPF(RIP存放在TCP报文里)等
  • IP数据报首部的固定长度为20字节,在IP数据报首部的固定长度后面是可选字段,可变。

IP协议(一)IP地址、IP数据报、IP层数据报转发

2、IP数据报首部各字段

版本:占4位,代表IP协议的版本,IPv4、IPv6

首部长度:占4位,一个单位代表4字节,因此当其为最大值1111时,代表首部长度为60字节(最大首部长度)

区分服务:占8位

总长度:16位,IP数据报的总长度,一个单位代表一个字节,当其为FFFF时,IP数据报最大长度为65535字节(216-1),当然IP数据报的长度不能超过链路层最大传送单元MTU。

标识:占16位,没产生一个数据报,此字段加1,当IP数据报的长度大于MTU时,会将IP数据报分割,此标识字段被复制到分割后的各个IP数据报。接收时,只有相同标识字段的IP数据报才能合并

标志:3位,目前前两位有意义,最低位MF=1代表后面“还有分片”的数据报,中间位DF=0代表允许分片

片偏移:8位,指出当前分片IP数据报在原来长的IP数据报中的位置

生存时间:占8位,TTL,每经过一个路由器就减去一定的时间,防止无用的数据报在网络中长时间存在,当TTL为0时,丢弃这个数据报。现在利用跳数代替时间。

协议:指出IP数据报数据部分使用何种协议(例如TCP、UDP、OSPF、ICMP)等,以便主机知道将数据报交给上层的哪个进程、哪个端口。

首部检验和:占16位,只检验IP数据报首部

源地址、目的地址:IP地址

这里我们以抓取一个IP数据报来观察(wireshark抓取TCP包,wireshark貌似不能直接抓取IP数据报,故只能抓取TCP协议,因为TCP协议是基于IP协议的,所以也能观察到IP数据报):

抓取一帧分析:

在IP层上方的是链路层协议、下方是TCP协议,IP协议的各个字段在下面的一串二进制中是颜色较深的那部分,可以看到起协议号是0100 (IPv4),首部长度为0101(5),即为20字节。

IP协议(一)IP地址、IP数据报、IP层数据报转发

五、IP层转发分组的流程

假如利用目的主机的IP地址来制作路由表,则项目数特别大。因此根据目的主机所在网络进行转发,来确定下一跳路由器,转发到目的网络时,路由器再根据其子网掩码进行转发。

特定主机路由:即为特定的目的主机指明一个路由,方便网络测试。

默认主机路由:在未找到去往目的网络的路由时,路由器将数据报交由默认路由处理

1、路由器分组转发算法

  1. 提取目的主机的IP地址,得到目的网络地址
  2. 首先判断目的网络是否与本路由器直接相连,相连则直接转发,否则3
  3. 判断是否有去往目的网络的特定路由,有则交由特定路由指定的下一跳地址,否则4
  4. 判断路由表中是否有去往目的网络的路由,有则交付该路由指定的下一跳,否则5
  5. 判断是否有默认路由,有就交给默认路由,否则6
  6. 报告分组错误

2、路由器将数据报交给下一跳的过程

  1. IP数据报中没有地方来申明下一跳地址,因此路由器得到下一跳的IP地址时,不将其填入IP数据报
  2. 路由器将下一跳的IP地址交给下层的网络接口软件
  3. 网络接口软件利用ARP协议,进行广播得到下一跳的硬件地址,并将其放在MAC帧的首部
  4. 链路层根据首部的MAC地址找到下一跳路由器,并交付给该路由器下一跳,否则5
  5. 判断是否有默认路由,有就交给默认路由,否则6
  6. 报告分组错误