分类的 IP 地址
1、IP地址及其表示方法
IP 地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符。IP 地址的结构使我们可以在互联网上很方便地进行寻址。IP 地址现在由互联网名字和数字分配机构 ICANN
(Internet Corporation for Assigned Names and Numbers)进行分配。
“分类的 IP 地址” 就是将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个字段是网络号(net-id),它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。第二个字段是主机号(host-id),它标志该主机(或路由器)。一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。所以,一个IP地址在整个互联网范围内是唯一的。
-
A类、B类和C类地址的网络号字段(在图中这个字段是灰色的)分别为1个、2个和3个字节长,而在网络号字段的最前面有1~3位的类别位,其数值分别规定为0,10和110。
-
A类、B类和C类地址的主机号字段分别为3个、2个和1个字节长。
IP 地址并不仅仅指明一台主机,而是还指明了主机所连接到的网络。
为了提高可读性,我们常常把 32 位的IP地址中的每8位插入一个空格(但在机器中并没有这样的空格)。为了便于书写,可用其等效的十进制数字表示,并且在这些数字之间加上一个点。
2、常用的三种类别的IP地址
A类地址的网络号字段占 1 个字节,只有 7 位可供使用(该字段的第一位已固定为 0 ),但可指派的网络号是 126 个(即27 – 2)。
减 2 的原因:
- 第一,IP 地址中的全 0 表示“这个(this)”。网络号字段为全 0 的 IP 地址是个保留地址,意思是“本网络”;
- 第二,网络号为127(即01111111)保留作为本地软件环回测试(loopbacktest)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。
A类地址的主机号占3个字节,因此每一个A类网络中的最大主机数是 224–2 ,即16777214。
这里减 2 的原因是:
- 全 0 的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址(例如,一主机的IP地址为5.6.7.8,则该主机所在的网络地址就是5.0.0.0),
- 而全 1 表示“所有的(all)”,因此全1的主机号字段表示该网络上的所有主机(6)。
IP 地址空间共有232(即4294967296)个地址。整个A类地址空间共有231个地址,占整个IP地址空间的50%。
B 类地址的网络号字段有 2 个字节,但前面两位(10)已经固定了,只剩下 14 位可以进行分配。
但实际上 B 类网络地址 128.0.0.0 是不指派的,而可以指派的 B 类最小网络地址是 128.1.0.0 。因此B类地址可指派的网络数为214−1,即 16383。B 类地址的每一个网络上的最大主机数是 216–2,即65534 。这里需要减 2 是因为要扣除全 0 和全 1 的主机号。整个 B 类地址空间共约有230个地址,占整个IP地址空间的 25%。
C 类地址有 3 个字节的网络号字段,最前面的 3 位是(110),还有 21 位可以进行分配。C 类网络地址 192.0.0.0 也是不指派的,可以指派的 C 类最小网络地址 192.0.1.0,因此 C 类地址可指派的网络总数是221−1,即 2097151 。每一个 C 类地址的最大主机数是28–2,即 254 。整个 C 类地址空间共约有229个地址,占整个 IP 地址的 12.5%。
IP 地址的特点:
每一个 IP 地址都由网络号和主机号两部分组成。从这个意义上说,IP 地址是一种分等级的地址结构。分两个等级的好处是:
- 第一,IP 地址管理机构在分配 IP 地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理;
- 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间。
实际上 IP 地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号必须是不同的。这种主机称为多归属主机
(multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的 IP 地址。这好比一个建筑正好处在北京路和上海路的交叉口上,那么这个建筑就可以拥有两个门牌号码。例如,北京路 4 号和上海路 37 号。
了三个局域网( LAN1,LAN2 和 LAN3 )通过三个路由器( R1,R2 和 R3 )互连起来所构成的一个互联网(此互联网用虚线圆角方框表示)。其中局域网 LAN2 是由两个网段通过网桥 B 互连的。图中的小圆圈表示需要有一个 IP 地址。
- 在同一个局域网上的主机或路由器的 IP 地址中的网络号必须是一样的。
- 用网桥(它只在链路层工作)互连的网段仍然是一个局域网,只能有一个网络号。
- 路由器总是具有两个或两个以上的IP地址。即路由器的每一个接口都有一个不同网络号的IP地址。
- 当两个路由器直接相连时(例如通过一条租用线路),在连线两端的接口处,可以分配也可以不分配 IP 地址。
3、IP地址与硬件地址
物理地址
是数据链路层和物理层使用的地址,而 IP 地址是网络层和以上各层使用的地址,是一种逻辑地址
(称IP地址为逻辑地址是因为IP地址是用软件实现的)。
在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用 IP 地址的 IP 数据报一旦交给了数据链路层,就被封装成 MAC 帧了。MAC 帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在 MAC 帧的首部中。
4、地址解析协议ARP
我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的 IP 地址,需要找出其相应的硬件地址。地址解析协议 ARP
就是用来解决这样的问题的。
还有一个旧的协议叫做逆地址解析协议 RARP ,它的作用是使只知道自己硬件地址的主机能够通过 RARP 协议找出其 IP 地址。现在的 DHCP 协议已经包含了 RARP 协议的功能。
地址解析协议 ARP 解决这个问题的方法是在主机 ARP 高速缓存中存放一个从 IP 地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。
举个例子:
当主机 A 要向本局域网上的某台主机 B 发送 IP 数据报时:
- 就先在其 ARP 高速缓存中查看有无主机B的IP地址。
- 如有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。
- 但也有可能查不到主机 B 的 IP 地址的项目。这可能是主机 B 才入网,也可能是主机A刚刚加电,其高速缓存还是空的。
- 在这种情况下,主机 A 就自动运行 ARP ,然后按以下步骤找出主机 B 的硬件地址。
- ARP 进程在本局域网上广播发送一个
ARP请求
分组; - 在本局域网上的所有主机上运行的 ARP 进程都收到此 ARP 请求分组。
- 主机 B 的 IP 地址与 ARP 请求分组中要查询的IP地址一致,就收下这个 ARP 请求分组,并向主机 A 发送 ARP 响应分组同时在这个
ARP响应
分组中写入自己的硬件地址。 - 主机 A 收到主机 B 的 ARP响应分组后,就在其
ARP高速缓存
中写入主机 B 的 IP 地址到硬件地址的映射。
虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
为了减少网络上的通信量,主机 A 在发送其 ARP请求分组时,就把自己的 IP 地址到硬件地址的映射写入 ARP请求分组。当主机 B 收到 A 的 ARP请求 分组时,就把主机 A 的这一地址映射写入主机 B 自己的 ARP高速缓存中。以后主机 B 向 A 发送数据报时就很方便了。
使用 ARP 的四种典型情况:
- 发送方是主机(如H1),要把 IP 数据报发送到同一个网络上的另一台主机(如H2)。这时H1发送 ARP请求 分组(在网1上广播),找到目的主机H2的硬件地址。
- 发送方是主机(如H1),要把 IP数据报 发送到另一个网络上的一台主机(如H3或H4)。这时H1发送ARP请求分组(在网1上广播),找到网1上的一个路由器R1的硬件地址。剩下的工作由路由器R1来完成。R1要做的事情是下面的(3)或(4)。
- 发送方是路由器(如R1),要把 IP数据报 转发到与 R1 连接在同一个网络(网2)上的主机(如H3)。这时R1发送ARP请求分组(在网2上广播),找到目的主机 H3 的硬件地址。
- 发送方是路由器(如R1),要把IP数据报转发到网3上的一台主机(如H4)。H4与R1不是连接在同一个网络上。这时R1发送ARP请求分组(在网2上广播),找到连接在网2上的一个路由器R2的硬件地址。剩下的工作由这个路由器R2来完成。
5、IP 数据报的格式
IP 数据报的格式能够说明 IP 协议都具有什么功能。在 TCP/IP
的标准中,各种数据格式常常以 32 位(即4字节)为单位来描述。
一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
IP数据报首部的固定部分中的各字段如下,由于不可变部分很少用到,这里就不再阐述。
- 版本: 占4位,指 IP 协议的版本。通信双方使用的 IP协议 的版本必须一致。目前广泛使用的 IP协议 版本号为 4( 即
IPv4
)。 - 首部长度: 占4位,可表示的最大十进制数值是 15 。请注意,首部长度字段所表示数的单位是 32 位字(1个 32 位字长是 4 字节)。因为 IP 首部的固定长度是 20 字节,因此首部长度字段的最小值是 5 (即二进制表示的首部长度是 0101 )。而当首部长度为最大值 1111 时(即十进制数的 15 ),就表明首部长度达到最大值 15 个 32 位字长,即 60 字节。当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。因此 IP数据报 的数据部分永远在 4 字节的整数倍时开始,这样在实现 IP 协议时较为方便。
- 区分服务: 占8位,用来获得更好的服务。
- 总长度: 总长度指首部和数据之和的长度,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 216–1=65535 字节。然而实际上传送这样长的数据报在现实中是极少遇到的。
- 标识: 占 16 位。IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1 ,并将此值赋给标识字段。但这个“标识”并不是序号,因为 IP 是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
- 标志: 占3位,但目前只有两位有意义。
- MF=0 表示这已是若干数据报片中的最后一个。
- 只有当 DF=0 时才允许分片。
- <stron> 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的
相对位置
。</stron>
片偏移以 8 个字节为偏移单位。这就是说,每个分片的长度一定是 8 字节( 64 位)的整数倍。
注意是相对位置
——指的是相对于起点的位置 !
举个例子:一数据报的总长度为 3820 字节,其数据部分为 3800 字节长(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。于是分为 3 个数据报片,其数据部分的长度分别为 1400 ,1400 和 1000 字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。
因为是以 8 个字节为偏移单位,所以用前面的字节数除八就可以得到片偏移的值:
现在假定数据报片 2 经过某个网络时还需要再进行分片,即划分为数据报片 2-1(携带数据 800 字节)和数据报片 2-2(携带数据 600 字节)。那么这两个数据报片的总长度、标识、MF、DF 和片偏移分别为:820,12345,1,0,175;620,12345,1,0,275。
- 生存时间 :占 8 位,生存时间字段常用的英文缩写是
TTL
(Time To Live),表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器 R1 转发到 R2 ,再转发到 R3 ,然后又转发到 R1 ),因而白白消耗网络资源。
路由器在每次转发数据报之前就把 TTL 值减 1。 若 TTL 值减小到零,就丢弃这个数据报,不再转发。因此,现在 TTL 的单位不再是秒,而是跳数。TTL 的意义是指明数据报在互联网中至多可经过多少个路由器。显然,数据报能在互联网中经过的路由器的最大数值是 255 。若把 TTL 的初始值设置为 1 ,就表示这个数据报只能在本局域网中传送。
- 协议:占 8 位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的 IP 层知道应将数据部分上交给哪个协议进行处理。
10.首部检验和:首部检验和——占16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
- 源地址:占 32 位,即 4 字节;
- 目的地址:占 32 位,即 4 字节。
6、IP 层转发分组的流程
- 若按目的主机号来制作路由表,每一个路由表就有 4 万个项目,即 4 万行(每一行对应于一台主机),则所得出的路由表就会过于庞大。
- 但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含 4 个项目(每一行对应于一个网络),这样就可使路由表大大简化。
在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
查找路由表
根据目的网络地址就能确定下一跳路由器,这样做的结果是:
- IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付。
特定主机路由
- 虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。
- 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络。
默认路由 (default route)
- 路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。
路由器分组转发算法
IP 数据报的首部中没有地方可以用来指明 “下一跳路由器的 IP 地址”
- 当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。
- 网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。
关于路由表
- 路由表没有给分组指明到某个网络的完整路径。
- 路由表指出,到某个网络应当先到某个路由器(即下一跳路由器)。
- 在到达下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器。
- 这样一步一步地查找下去,直到最后到达目的网络。