网络技术:IP 编址
IP 地址
IP 地址是分配给 IP 网络中每台机器的数字标识符,IP 地址用于描述设备在网络中的地址。它让一个网络中的主机能够和另一个网络中的主机通信,同时它并不在乎这些主机所属的 LAN 是什么类型的。
层次型 IP 编址
IPv4 地址长 32 位 (4 组 8 位二进制),这是一种结构化(层次型)地址。如果每个 IP 地址都是散乱分布且唯一的,则因特网上的所有路由器都需要存储所有主机和路由器接口的 IP 地址,这样会使得路由器的路由表异常庞大,难以查找,从而使转发分组面临巨大开销。因此将 IP 地址分为 2 个部分,分别是网络号和主机号,网络号用于唯一地标识网络,主机号用于唯一地标识主机。
IP 地址 :: =
根据网络号和主机号将 IP 地址划分为若干个固定类,主机号在它前面的网络号所指明的网络范围内必须是唯一的。你可以把 IP 地址和电话号码的区号进行一个类比,通过区号电话就知道要把信号转接到哪个区域,而电话号码就能具体的转接到对应的电话上。同理网络号用于表示主机所在的网络,这样路由器就知道大概往哪转发,而主机号就能具体地表示是这个网络中的哪台主机。
通过划分子网,在 IP 地址中又增加了一个“子网号”字段,使两级的 IP 地址变成为三级的 IP 地址。从主机号借用若干个位作为子网号,而主机号也就相应减少了若干个位。
IP地址 :: =
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号和子网号找到目的子网,最后就将 IP 数据报直接交付目的主机。
特殊用途的 IP 地址
保留地址
网络号 | 主机号 | 作为 IP 分组源地址 | 作为 IP 分组目的地址 | 用途 |
---|---|---|---|---|
全 0 | 全 0 | √ | × | 本网络内表示本主机,路由表内表示默认路由 |
全 0 | host-id | × | √ | 本网络范围内表示某个特定主机 |
全 1 | 全 1 | × | √ | 本网络范围内表示广播地址 |
net-id | 全 0 | × | × | 网络地址,表示一个网络 |
net-id | 全 1 | × | √ | 直接广播地址,对特定网络的主机进行广播 |
127 | 非全 0/1 | √ | √ | 用于本地软件的环回测试 |
私有地址
私有 IP 地址是一段保留的 IP 地址,只使用在局域网中,无法在 Internet 上使用。
地址类型 | 保留的地址空间 |
---|---|
A 类 | 10.0.0.0 ~ 10.255.255.255 |
B 类 | 172.16.0.0 ~ 172.31.255.255 |
C 类 | 192.168.0.0 ~ 192.168.255.255 |
IP 地址十进制转二进制
计算方式
IP 地址可以用点分十进制表示,也能使用二进制来表示,我们需要熟悉这 2 种表示法的转换方式。一种比较好算的转换方式是,由于 IPv4 是 4 组 8 位二进制,则 0 ~ 256 的二进制数可以认为是 128、64、32、16、8、4、2、1 这 8 个数的和差计算。这 8 个数字的二进制与十进制的转换如下:
十进制 | 二进制 |
---|---|
128 | 10000000 |
64 | 01000000 |
32 | 00100000 |
16 | 00010000 |
8 | 00001000 |
4 | 00000100 |
2 | 00000010 |
1 | 00000001 |
样例一
将 192.168.10.15 转换为二进制,结果为 11000000.10101000.00001010.00001111。
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | 二进制 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 11000000 |
1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 10101000 |
0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 00001010 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 00001111 |
其转换关系为:
192 = 10000000 + 01000000 = 11000000
168 = 10000000 + 00100000 + 00001000 = 10101000
10 = 00001000 + 00000010 = 00001010
15 = 00001000 + 00000100 + 00000010 + 00000001 = 00001111
样例二
将 11000110.11010011.00111001.11010001 转换为十进制,转换结果为 198.211.57.209。
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | 十进制 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 198 |
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 211 |
0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 57 |
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 209 |
其转换关系为:
128 + 64 + 4 + 2 = 198
128 + 64 + 16 + 2 + 1 = 211
32 + 16 + 8 + 1 = 57
128 + 64 + 16 + 1 = 209
IPv4 地址类型
广播地址
广播信息是发给广播域中所有主机的信息,它使用广播地址作为目标地址。广播地址表示网络中的所有节点,广播地址的主机号都为 1。例如对于网络 172.16.0.0/16,则它的广播地址就是 172.16.255.255。
单播地址
单播地址是特定的网络接口卡的地址,用于将分组发送给单个目标的主机。使用单播地址,可以将分组传输到特定的主机上。
组播地址
组播能让多个接收方接收消息,并且不会将消息传递给广播中的所有主机。组播地址用于将分组传输到不同网络中的众多设备,是一种一对多的地址。
CIDR 策略
现在在全球因特网中,地址分配策略采用的是无类别域间路由选择 (CIDR)策略。CIDR 消除了传统 A、B、C 类地址和子网划分的概念,将子网寻址的概念一般化了。网络前缀可以是任意长度,融合子网地址和子网掩码可以更为方便地进行子网划分。当子网寻址时,32 bit 的 IP 地址的形式是 a.b.c.d/x,其中 x 指示了地址第一部分的比特数,构成了网络前缀。
IP 地址 ::=
网络前缀用于指明主机或路由器所连接到的网络,网络前缀在互联网中必须是唯一的。主机号用于标志主机或路由器,主机号在其所在的网络中是唯一的。CIDR 策略使得路由器转发分组时,可以往网络前缀相同的 IP 地址的区域发送,也就是缩小了发送链路的选择范围。因此采用 CIDR 策略提高了 IPv4 地址空间的分配效率,同时也提高了路有效率。
使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成,在查找路由表时可能会得到不止一个匹配结果。应当从匹配结果中选择具有最长网络前缀的路由,也就是最长前缀匹配。网络前缀越长,其地址块就越小,因而路由就越具体。
IPv4 数据报
字段 | 说明 |
---|---|
版本 | 4 bit,IPv4 字段的值是 4 |
首部长度 | 4 bit,说明首部有多少 32 位字 |
服务类型 | 6 bit,使不同类型的 IP 数据报能相互区分 |
显式拥塞通告 | 允许在不丢弃报文的同时通知对方网络拥塞的发生 |
数据报长度 | 16 位,定义了报文总长 |
标识、标志、片位移 | 和 IP 分片有关 |
存活时间 | 占 8 位,避免报文在互联网中永远存在。 |
上层协议 | 占 8 位,指示数据部分应该交付给哪个指定的运输层协议 |
首部检验和 | 占 16 位,检验和字段只对首部查错 |
源地址、目的地址 | 报文的发送端、报文的接收端 |
选项 | 附加其他信息 |
数据 | 有效载荷 |
IPv6
在 2011 年 2 月,IANA 向一个区域注册机构分配完了未分配的 IPv4 地址的最后剩余地址池。这些注册机构可用的 IPv4 地址一旦用完,IPv4 地址就会耗尽,因此IPv6 技术就被开始进行研发部署。
IPv6 数据报
字段 | 作用 |
---|---|
版本(version) | 占 4 位,表示协议版本 |
流量类型(traffic class) | 占 8 位,与 IPv4 的服务类型类似,区分不同的数据报 |
流标签(flow label) | 占 20 位,用来标识一段数据报的流,能够对一个流中的某些数据报给出优先权 |
有效载荷长度(payload length) | 占 16 位,给出了 IPv6 数据报出基本首部以外的字节数 |
下一个首部(next header) | 占 8 位,当 IPv6 数据报没有拓展首部时,指明数据应当交付给哪一个上层协议;当出现拓展首部时,标识后面第一个拓展首部的类型 |
跳数限制(hop limit) | 占 8 位,该字段类似于 IPv4 中的 TTL,每次转发跳数减 1,该字段达到0 时包将会被丢弃 |
源地址、目的地址(Address) | 各占 128 位,标识该报文的来源和目的地 |
对比 IPv4
IPv6 数据报相对于 IPv4 数据报有很多删减的地方,首先是 IPv6 数据报不允许在路由器上分片。这个操作只能在源和目的执行,如果中间遇到链路的 MTU 较小,路由器就直接丢包并向发送方发一个“分组太大”的 ICMP 报文。然后源就根据这个报文,把数据报分成更小的几个再重传。
首部校验和的问题,这个字段在 IPv6 中已经没了,因为在传输层、数据链路层协议中有很多协议都有具备错误检测的功能。而首部校验和因为有 TTL 等参数变化,计算的开销很大。因此把这个字段去除之后,也可以提升 IP 数据报转发的速度。
选项这个字段在 IPv6 中也没了,不过它的功能被归并到下一个首部字段中了。这种改动可以使得 IP 数据报的首部长度为定长,也就是 40 字节。
参考资料
《CCNA 学习指南(第 7 版)》,[美] Todd Lammle 著,袁国忠 徐宏 译,人民邮电出版社
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社