IP编址
接口(interface):
- 主机/路由器与物理链路的边界
- 路由器有多个接口
- 主机典型地有一个或两个接口(比如以太网接口、Wifi接口)
IP address:
- 每个网络接口对应一个IP地址
- IP地址是一个32位的二进制数,通常用点分十进制数表示
基于类的编址(早期)
单播地址结构
单播地址除类别标识外,其余比特被划分成网络号和主机号两部分:
- 网络号:在因特网范围内标识一个物理网络
- 主机号:标识该物理网络上的一个网络接口
根据该编址方法可知,同一个物理网络上的网络接口,它们的IP地址具有相同的网络号
地址分配
因特网中的每个接口必须具有唯一的IP地址
为在因特网范围内保证IP地址的全局唯一性:
- 网络号由ICANN统一分配
- 主机号由网络管理员统一分配
建立私有网络的组织可以自己选择网络号,但同样必须保证每个网络号在私有网络内的唯一性
特殊的地址
全0或全1的网络号及主机号是特殊地址,从不分配给特定的网络接口:
- 网络号有效、主机号全为0的地址:保留给网络本身。
- 网络号有效、主机号全为1的地址:保留作为定向广播,即在网络号指定的网络中广播(仅用作目的地址)
- 32位全1的地址:本地广播地址,表示仅在发送节点所在的网络中广播(仅用作目的地址)
- 32位全0的地址:指示本机(仅用作源地址)
- 网络号为0、主机号有效的地址:指代本网中的主机
- 形如127.x.y.z的地址:保留作为回路测试,发送到这个地址的分组不输出到线路上,而是送回内部的接收端。
网络数量与地址数量
A、B、C类地址对应不同规模的网络
一个A类、B类及C类地址可提供的接口地址数:
- A类地址: 2 24 − 2 = 16777214 2^{24}-2 = 16777214 224−2=16777214
- B类地址: 2 16 − 2 = 65534 2^{16}-2 = 65534 216−2=65534
- C类地址: 2 8 − 2 = 254 2^8-2 = 254 28−2=254
A类、B类、C类地址的个数:
A类地址: 2 7 − 2 = 126 2^7-2 = 126 27−2=126
B类地址: 2 14 − 2 = 16382 2^{14}-2 = 16382 214−2=16382
C类地址: 2 21 − 2 = 2097152 2^{21}-2 = 2097152 221−2=2097152
子网
子网(Subnet) 是对一个 IP 网络进行划分的技术。通过子网划分,能够将一个大的网络分割成多个更小的网络,这样可以提高网络的管理、性能和安全性。子网的划分是基于 IP 地址 和 子网掩码(Subnet Mask) 来进行的。
- 子网划分 :通过调整 子网掩码,将一个大的网络地址空间划分为多个小的地址空间。每个子网都有自己的网络地址、广播地址和可用地址。
- 子网掩码(Subnet Mask) :子网掩码是一个与 IP 地址一样长度的二进制数,用来确定 IP 地址中哪些位是网络位,哪些位是主机位。通过子网掩码,路由器可以判断一个 IP 地址是否属于本地网络。
- 子网掩码通常采用四个字节的格式(如
255.255.255.0
)。 - 在二进制中,子网掩码的网络部分是连续的
1
,主机部分是连续的0
。
- 子网掩码通常采用四个字节的格式(如
如何从IP地址中获取子网地址?
- 将IP地址与子网掩码做"与"运算
- 例如:
128.10.1.1
AND255.255.255.0
=128.10.1.0
- 注意:子网地址 ≠ 子网号,子网地址包括主机号之前的所有比特
子网:更确切的含义
- 具有相同子网地址 、且不需要通过路由器就可以相互到达的网络接口构成一个子网
- 在因特网文献中,子网也称为IP网络或直接称为网络
- 子网内部的接口具有相同的子网地址
- 子网内部的通信不需要经过路由器
- 子网之间通信一定要经过路由器
IP数据报转发
网络层转发数据报的两种情形:
- 直接交付(direct delivery):节点将数据包直接发送给目的主机(不需要其它路由器转发)
- 间接交付(indirect delivery):节点将数据包转发给一个路由器去处理
判断使用直接交付还是间接交付
- 直接交付:数据包的目的地址与本节点的某一端口在同一个子网中
- 间接交付:数据包的目的地址不与本节点的任何一个端口在同一个子网中
间接交付的实现:
- 节点查找转发表,将数据包发送给下一个路由器
转发表
转发表记录目的地址到输出端口的映射
取决于目的地址类型的不同,有三类转发表项:
- 目的地址是一个子网地址:地址前缀表项
- 目的地址是一个特定的网络接口地址:特定主机表项
- 缺省项:不匹配所有其它表项的地址都被映射到一个默认的路由器端口
IP采用逐跳选路:
- 每个转发表项只记录去往目的地址的下一跳信息(下一个要到达的路由器端口),而不是一条完整的端到端路由
每个转发表项包括:
- 目的地址/掩码、下一跳地址、输出端口等
- 下一跳地址必须与输出端口在同一个子网中(不需要通过其它路由器就可以直接到达)
CIDR:Classless Inter-Domain Routing(无类域间路由)
CIDR 的核心思想是 不再依赖固定的类(A、B、C) ,而是使用 前缀长度 来灵活地划分地址空间。CIDR 使用类似于 IP地址/前缀长度
的表示方式来标识网络,前缀长度表示网络部分的位数,而剩余的部分则用于主机地址。
- IP 地址 :通常表示为
a.b.c.d
(四个字节),每个字节的取值范围是 0-255。 - 前缀长度 :表示 IP 地址中网络部分的位数,后面跟着斜杠(
/
),如/24
,表示前 24 位是网络位。
CIDR地址分配的原则:
- 地址块的长度 L 必须是 2 的幂次
- 所有地址的前(32-log2L)位必须
地址聚合
转发表中符合以下条件的若干个表项可以合并成一个表项:
- 这些表项的目的地址可以聚合成一个前缀更短的地址
- 这些表项使用相同的下一跳
若个别(少数)表项不满足路由聚合的条件:
- 仍然可以在转发表中给出一条聚合表项: 200.23.16.0/20
- 同时给出不能被聚合的表项: 200.23.18.0/23
最长前缀匹配:
- 在所有匹配的路由表项中,选择前缀最长的表项
IP编址的小结
基于类的编址存在两个问题:
- 地址空间浪费
- 转发表空间爆炸
CIDR解决了这两个问题:
- 按需分配解决了地址空间浪费的问题
- 地址聚合解决了转发表空间爆炸的问题
CIDR引入的问题:
- 地址聚合要求采用最长前缀匹配的原则查找转发表
- 最长前缀匹配给转发表的快速查找带来了困难