TCP/IP 因特网的寻址方案

因特网的寻址方案

1 标识一台主机

​ 名字 -> 对象是什么
​ 地址 -> 对象在哪里
​ 路径 -> 如何到达对象
​ (通过IP地址来进行标识)

2 早期的IP地址方案

有类别的地址方案

长度 32bit -> 对应一个32位的整数 (网络号+主机号)

地址分类:ABCDE,D类为广播地址,E类为保留地址

定义的是主机和一个网络的连接,(例如多接口主机需要多个IP地址)

IP地址不是指定具体一台地址,而是连接到网卡的一条路径

具体表示:点分十进制,
类别 低地址 高地址
A 1.0.0.0 127.0.0.0
B 128.0.0.0 191.255.0.0
C 192.0.0.0 223.255.255.0
D 224.0.0.0 239.255.255.255
E 240.0.0.0 255.255.255.254

地址的特殊类别:

​ 1 单播:(不能作为目标地址来使用)
​ hostid全为零:本网的网络地址
​ 2 广播:(不能作为源地址来使用)
​ netid确定情况下hostid全为1:定向广播地址
​ 32位全为1:本网有限广播。(在系统启动时若还没得到网络号可以使用此地址进行广播,若得到网络号则用定向广播地址)
​ 32位全为0:保留地址(在初始化时节点还未获取IP地址则如此表示)
​ 3 多播:(多播是将分组传送到一个指定的主机集合
​ loopback(不能上线,逻辑分配的地址,仅在主机内部做测试)

地址方案缺陷:

​ 一台主机从一个网络移动到另一个网络,则它的地址需要重新分配。
​ 网络地址数量太多。
​ 分类地址规模固定。
​ 主机由多个接口时,通信报文传输路径由多条

3 网络字节顺序

​ 大端存储和小端存储
​ 因特网中的传输规则:
​ 多个字节的整数,采用大端的形式

4 IPv4子网地址

子网划分(将原来两部分的地址划分成了三部分的地址,是一个分层的结构)

网络号:因特网部分
主机号:本地部分
取其中一部分bit出来 来区分本地的不同的物理网络,可以将这一部分看成网络的子网号,剩余部分为主机号

可变长的子网划分 VLSM

​ 背景问题:一个机构内部的网络规模不一样,不同局域网中的主机数量不同。此时,固定长度的子网划分的方法不适用。所以使用可变长的子网划分方法,大的网络的主机号多一些子网号部分少一些,小的网络号反之。
​ 缺点:管理员设计不当可能导致地址重复使用
​ 优点:可以支持大小网络混合的环境,可以提高地址的利用率

注:VLSM中全0全1地址是可用的,区别于单纯的子网划分

子网掩码(用于指定子网划分)

长度:32bit
设定规则:对应IP地址子网部分的bit取1,对应主机地址的部分取0
说明:子网掩码和IP地址的类别无关

记法:(两种表示方法)
1 三元组(网络号,子网号,主机号)
缺点:无法得知子网号与主机号的位数
优点:屏蔽底层细节
2 as/24 (CIDR):整数值为网络号与子网号的位数

5 目标:最小化网络数量

1 对于一个路由表,网络数量增加路由表项也会增加,当增加到一定数量之后路由器无法承受
2 地址的消耗问题,尤其是B类地址

解决方案:

​ 无类别的寻址方案:CIDR -> 无类别域间路由
​ 1 减少路由表的表项数量
​ 2 分配不均

CIDR的最初应用:

​ 超网分配方案:以多个连续用的C类地址的块来连成一块B类

CIDR记法:

​ 斜杠记法,例如 128.211.168.0/21,其中/21表示掩码的21位

CIDR和VLSM的区别

在使用CIDR聚合地址时,将原来有类IP地址中的网络位划出一部分作为主机位使用。
在使用VLSM划分子网时,将原来有类IP地址中的主机位按照需要划出一部分作为网络位使用。
CIDR是把几个有类网络合成一个大的网络(超网),用于路由地址聚合。
VLSM是把一个有类网络分成几个小型网络(子网),用于更高效划分子网。

IPv6寻址方案

IPv6记法:

采用冒号分十六进制记法
将128位地址平均分成8组,每组16位
全为零的一组可以直接记成0
零压缩记法: 连续全零组记为 :: ,在一个地址中最多只能出现1次
CIDR表示:例如 FF05::03/60

IPv6地址空间

前缀 地址类型 地址空间分片
010 全局单播地址 1/8
1111111010 本地链路单播地址 1/1024
11111111 多播地址 1/256

从IPv4到IPv6的迁移

​ 高64位全零,中间两个16位为0000和FFFF,低32位是IPv4地址

IPv6单播地址

​ 高N位为全球路由前缀,中间(64-N)位是子网号,最后64位是接口号

IPv6接口标识和MAC地址

将MAC地址映射成64位接口ID:格式命名为EUI-64

将48位MAC地址映射成EUI-64:
(MAC地址: 高24位代表厂家,表示一个机构的唯一标识符,低24位为厂家分配,是接口地址)
1 在MAC地址的高24位和低24位之间插入一个16位的,15个1和1个0(FFFE)
2 将Bit6从原来的0改成1
Bit1:G/L位,表示地址是local的还是global的,一般情况下使用的是global地址为0,所以将此0改为1
Bit0:I/G位,用来表示地址是单播地址还是组播地址
全局地址:48位地址
局部地址:16位地址

IPv6多播和任播地址

IPv6中没有广播,通过多播的方式来解决

广播的缺点:
1 浪费的资源多
2 广播一般情况下不跨网
所以IPv6采用多播来取代广播

协议中预先定义的一些保留的多播组:
all routers : 网上的所有路由器节点
all hosts : 网段上的所有主机节点
all nodes : 所有节点

IPv6 Anycast地址

本质上是一个单播地址
作用:处理多服务器的情况(handle server replication)
这些服务器以一个逻辑的整体对外提供服务;服务器所有的配置、提供的功能和对外提供的任播地址都是一样的。当用户在访问这些服务器的时候,使用Anycast地址去访问,最后解析出来的地理位置上距离最近的服务器上进行通信。

典型应用例如:DNS服务器

用于本地局部使用,不是一个全局地址
节点在初始启动时,自动得到一个Link-Local地址

Link-Local地址的类别:
由最高的10位来决定: 1111 1110 10

分组中带有Link-Local地址,报文不会被转发到不同的网络上去。Link-Local地址只局限在接口所在的网段中。

IPv6中接口自动获取地址

1 OS启动激活接口
2 构造Link-Local地址
3 从48位转换为EUI-64得到接口ID,作为低64位,高10位是Link-Local地址,中间54位全为0
4 得到此接口上的linklocal地址,接口可以通过此地址与本地链路上的其他节点进行通信
5 本地链路中的路由器向外发送一条路由恳求,路由器返回通告包括:全局单播地址的前缀
6 全局前缀加上接口ID最终得到全局单播地址


参考资料:

  • INTERNETWORKING WITH TCP/IP PRINCIPLES, PROTOCOLS, AND ARCHITECTURE Vol1 (6th Edition). DOUGLASE E. COMER
  • Understanding IPv6 ,Your Essential Guide to IPv6 on Windows Networks 3rd(2012) . Joseph Davies.