Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IP 地址的基础知识 #100

Open
Qingquan-Li opened this issue May 27, 2018 · 0 comments
Open

IP 地址的基础知识 #100

Qingquan-Li opened this issue May 27, 2018 · 0 comments
Labels

Comments

@Qingquan-Li
Copy link
Owner

Qingquan-Li commented May 27, 2018

目录:

  1. IP 地址的定义
  2. IP 地址由网络和主机两部分标识组成
  3. IP 地址的分类
  4. 特殊的 IP 地址
  5. 广播地址
  6. IP 多播
  7. 子网掩码
  8. CIDR 与 VLSM

一、IP 地址的定义

在用 TCP/IP 通信时,用 IP 地址识别主机和路由器。为了保证正常通信,有必要为每个设备配置正确的 IP 地址。

IP 地址(这里指 IPv4 )由 32 位正整数来表示。 TCP/IP 通信要求将这样的 IP 地址分配给每一个参与通信的主机。

IP 地址在计算机内部以二进制方式被处理。

然而,由于人类社会并不习惯于采用二进制方式,需要采用一种特殊的标记方式。那就是将 32 位的 IP 地址以每 8 位为一组,分成 4 组,每组以 . 隔开,再将每组数转换为十进制数(这种方法也叫做十进制点符号( Dot-decimal notation )) 。

下面举例说明这一方法:

IP地址二进制-十进制


附: IPv4 为什么不够用?

将表示成IP地址的数字整体计算: 232 = 4,294,967,296

从这个计算结果可知,最多可以约允许 43 亿台计算机连接到网络,解决方案:使用 NAT 转换 IP 地址。

NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。



二、IP 地址由网络和主机两部分标识组成

IP 地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。
例如, 192.168.128.10/24 中的 /24 表示从第 1 位开始到 24 位属于网络标识,即 192.168.128 是该 IP 的网络标识(网络地址), 10 是该 IP 的主机标识(主机地址)。

如下图所示,网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的主机标识则不允许在同一个网段内重复出现。

IP地址主机标识


如下图所示,IP 包被转发到途中某个路由器时,正是利用目标 IP 地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。

IP地址网络标识


附: IP 地址与子网掩码

IP 地址由网络号(或称网络标识)和主机号(或称主机标识)两部分组成。那么,究竟从第几位开始到第几位算是网络标识,又从第几位开始到第几位算是主机标识呢?现在基本以子网掩码(网络前缀)区分。

子网掩码可以看出有多少位是网络号,有多少位是主机号:

子网掩码 255.255.255.0 转换成二进制是: 11111111 11111111 11111111 00000000IP 地址中网络号 24 位,并且全是 1 ; 主机号 8 位,并且全是 0 。

同理, 129.168.1.1/24 中的 /24 告诉我们 IP 地址中的网络号是 24 位,也就相当于告诉我们子网掩码11111111 11111111 11111111 00000000 ,转换成十进制的子网掩码是 255.255.255.0

172.16.10.33/27 中的 /27 告诉我们 IP 地址中的网络号是 27 位,也就相当于告诉我们子网掩码是 11111111 11111111 11111111 11100000 ,转换成十进制的子网掩码是 255.255.255.224



三、IP 地址的分类

IP 地址分为四个级别,分别为 A 类、 B 类、 C 类、 D 类(还有一个一直未使用的 E 类。) 。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分(这里 IP 地址使用二进制)。

其中,网络标识相同的计算机必须同属于同一个链路。


IP地址的分类


A 类地址

A 类 IP 地址是首位以 0 开头的地址。从第 1 位到第 8 位(去掉分类位剩下 7 位) 是它的网络标识。

A 类地址网络标识: 00000000 (二进制) = 0 (十进制); 01111111 (二进制) = 127 (十进制)。

0.0.0.0 ~ 127.0.0.0 是 A 类的网络地址。

A 类地址的后 24 位相当于主机标识(第 9 比特到第 32 比特的 24 比特数字)。
因此,一个网段内可容纳的主机地址上限为 224 = 16,777,216 个地址。
其中全部为 0 和全部为 1 的地址已经是保留地址(见下,“四、特殊的 IP 地址”)。
因此 A 类 IP 地址的一个网络地址可以分配 224 - 2 = 16,777,214 个主机地址。


B 类地址

B 类 IP 地址是前两位为 10 的地址。从第 1 位到第 16 位(去掉分类位剩下 14 位) 是它的网络标识。

128.0.0.0 ~ 191.255.0.0 是 B 类的网络地址。

B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 216 - 2 = 65,534 个


C 类地址

C 类 IP 地址是前三位固定为 110 的地址。从第 1 位到第 24 位(去掉分类位剩下 21 位) 是它的网络标识。

192.0.0.0 ~ 223.255.255.0 是 C 类的网络地址

C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 28 - 2 = 254 个。


D 类地址

D类 IP 地址是前四位为 1110 的地址。从第 1 位到第 32 位(去掉分类位剩下 28 位) 是它的网络标识。

224.0.0.0 ~ 239.255.255.255 是 D 类的网络地址。

D类地址没有主机标识,常被用于多播



类别 IP地址(全局IP/公网IP)范围 最大主机数 私有IP地址范围 前缀码 网络地址 子网掩码 对应CIDR修饰
A 0.0.0.0 ~ 127.255.255.255 16,777,214 10.0.0.0 ~ 10.255.255.255 0 0.0.0.0 ~ 127.0.0.0 255.0.0.0 /8
B 128.0.0.0 ~ 191.255.255.255 65,534 172.16.0.0 ~ 172.31.255.255 10 128.0.0.0 ~ 191.255.0.0 255.255.0.0 /16
C 192.0.0.0 ~ 223.255.255.255 254 192.168.0.0 ~ 192.168.255.255 110 192.0.0.0 ~ 223.255.255.0 255.255.255.0 /24


四、特殊的 IP 地址

有一些 IP 地址具有特殊含义,不会分配给主机。


1.

在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位(二进制)表示主机地址(主机标志/主机号)时,不可以全部为 0 或全部为 1

  • 全部为 0 的主机地址,只有在表示对应的网络地址或 IP 地址不可获知的情况下才使用。例如, IP 地址 129.152.0.0 是指网络标志为 129.152 的 B 类网络。

  • 全部为 1 的主机地址,通常作为广播地址。广播是向网络中全部主机发送的消息。 IP 地址 129.152.255.255 就是网络标志为 129.152 的 B 类网络的广播地址(十进制的 255 对应于全是 1 的八位组(二进制) 11111111 )。

因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254 ( 28 - 2 = 254 )个主机地址的原因。



2.

以十进制值 127 开头的地址是环回地址。目的地址为环回地址的消息是由本地 TCP/IP 软件发送的,其目的在于测试 TCP/IP 软件是否工作正常。 测试本地 TCP/IP 软件是否工作正常: ping 127.0.0.1



3.

RFC 1597 (之后被 RFC 1918 取代)保留了一些 IP 地址范围用于私有网络,其设想是,这些私有网络不会连接到 Internet ,所以不必要求是唯一的(只要在同一个域里保证唯一即可)。

目前,这些私有地址范围经常用于“网络地址转换( NAT )”设备背后的受保护网络。
现在有很多学校、家庭、公司内部正采用在每个终端设置私有 IP ,而在路由器(宽带路由器)或在必要的服务器上设置全局 IP 地址的方法。而如果配有私有 IP 的地址主机连网时,则通过 NAT 进行通信。

包含在这个范围内的 IP 地址都属于私有 IP (私有地址),相对的是全局 IP (或称公网 IP )。

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

由于私有地址范围不必与其余地址同步,所以整个地址范围对于任何网络都是可用的。网络管理员利用这些私有地址可以获得更大的子网空间和可用地址范围。



4.

地址范围 169.254.0.0 ~ 169.255.255.255 保留用于自动配置

例如,本地网络上的计算机没有静态 IP 地址,也无法接收动态地址,就会为自己分配一个私有(不可路由)的地址,地址范围从 169.254.0.0 ~ 169.255.255.255 。这样,这些计算机就可以开始在本地网络上进行通信了。当然,由于这些地址是不可路由的,所以计算机将不能访问 Internet 和本地网络之外的资源。





拓展部分:


五、广播地址

广播地址用于在同一个链路((如一个局域网))中相互连接的主机之间发送数据包。


将 IP 地址中的主机地址部分全部设置为 1 ,就成为了广播地址


例如,把 172.20.0.0/16 用二进制表示如下:
10101100.00010100.00000000.00000000 (二进制)

将这个地址的主机部分全部改为 1 ,则形成广播地址:
10101100.00010100.11111111.11111111 (二进制)

再将这个地址用十进制表示,则为 172.20.255.255



注意:

以太网中如果将 MAC 地址的所有位都改为 1 (二进制),则形成 ff:ff:ff:ff:ff:ff (十六进制)的广播地址。

二进制 11111111 转为十进制是 255 转位十六进制是 ff

因此,广播的 IP 包以数据链路的帧的形式发送时,得通过 MAC 地址为全 1 比特的 ff:ff:ff:ff:ff:ff 转发 。

  • 以太网是目前应用最普遍的局域网技术。
  • MAC 地址正是用来标识同一个链路(如一个局域网)中不同计算机的一种识别码。
  • IP 地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。
  • 数据链路层属于计算机网络的底层( OSI 参考模型的第二层),使用的信道主要有点对点信道和广播信道两种类型。

两种广播

广播分为本地广播和直接广播两种。

  1. 在本网络内的广播叫做本地广播。

    例如网络地址为 192.168.0.0/24 的情况下,广播地址是 192.168.0.255 。因为这个广播地址的 IP 包会被路由器屏蔽,所以不会到达 192.168.0.0/24 以外的其他链路上。

  2. 在不同网络之间的广播叫做直接广播。

    例如网络地址为 192.168.0.0/24 的主机向 192.168.1.255/24 的目标地址发送 IP 包。收到这个包的路由器,将数据转发给 192.168.1.0/24 ,从而使得所有 192.168.1.1192.168.1.254 的主机都能收到这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发) 。



本地广播与直接广播



六、IP 多播

多播用于将包发送给特定组内的所有主机。

由于其直接使用 IP 协议,因此也不存在可靠传输。

而随着多媒体应用的发展,对于向多台主机同时发送数据包,在效率上的要求也日益提高。在电视会议系统中对于 1 对 N 、 N 对 N 通信的需求明显上升。而具体实现上往往采用复制 1 对 1 通信的数据,将其同时发送给多个主机的方式。

在人们使用多播功能之前,一直采用广播的方式。那时广播将数据发给所有终端主机,再由这些主机 IP 之上的一层去判断是否有必要接收数据。是则接收,否则丢弃(不一定接收广播数据)。

然而这种方式会给那些毫无关系的网络或主机带来影响,造成网络上很多不必要的流量。况且由于广播无法穿透路由,若想给其他网段发送同样的包,就不得不采取另一种机制。因此,多播这种既可以穿透路由器,又可以实现只给那些必要的组发送数据包的技术就成为必选之路了。


单播/广播/多播通信


IP多播与地址

多播使用 D 类地址。因此,如果从首位开始到第 4 位是 1110 ,就可以认为是多播地址。而剩下的 28 位可以成为多播的组编号。


多播地址


224.0.0.0239.255.255.255 都是多播地址的可用范围。 224 转化成二进制数是 11100000239 转换成二进制数是 11101111

其中从 224.0.0.0224.0.0.255 的范围不需要路由控制,在同一个链路内也能实现多播。而在这个范围之外设置多播地址会给全网所有组内成员发送多播的包(可以利用生存时间( TTL , Time To Live )限制包的到达范围) 。

此外,对于多播,所有的主机(路由器以外的主机和终端主机)必须属于 224.0.0.1 的组,所有的路由器必须属于 224.0.0.2 的组。类似地,多播地址中有众多已知的地址,它们中具有代表性的部分在下图中中列出。

利用 IP 多播实现通信,除了地址外还需要 IGMP ( Internet Group Management Protocol ) 等协议的支持。


既定已知的多播地址


附:单播、广播、多播区别

只有使用路由器,发包就由路由器控制,你用手机平板笔记本等连接无线路由器的时候,无线路由器对你的 DHCP 行为就是广播;你获得 IP 地址后,路由器记录了你的 IP 和 MAC 后,如果有消息要转发给你是直接对你单播的 ……

更多参考



七、子网掩码

网络标识相同的计算机必须同属于同一个链路。例如,架构 B 类 IP 网络时,理论上一个链路内允许 6 万 5 千多台计算机连接。然而,在实际网络架构当中,一般不会有在同一个链路上连接 6 万 5 千多台计算机的情况。因此,这种网络结构实际上是不存在的。

因此,直接使用 A 类或 B 类地址,确实有些浪费。随着互联网的覆盖范围逐渐增大,网络地址会越来越不足以应对需求,直接使用 A 类、 B 类、 C 类地址就更加显得浪费资源。为此,人们已经开始一种新的组合方式以减少这种浪费。


子网与子网掩码

现在,一个 IP 地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做子网掩码的识别码通过子网网络地址细分出比 A 类、 B 类、 C 类更小粒度的网络。这种方式实际上就是将原来 A 类、 B 类、 C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。

自从引入了子网以后,一个 IP 地址就有了两种识别码。一是 IP 地址本身,另一个是表示网络部的子网掩码。

子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 1 ,对应 IP 地址主机标识的部分则全部为 0

由此,一个 IP 地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。


子网掩码表示方式

对于子网掩码,目前有两种表示方式。

172.20.100.52 的前 26 位是网络地址的情况为例,以下是其中一种表示方法,它将 IP 地址与子网掩码的地址分别用两行来表示。

子网掩码表示方式01


另一种表示方式如下所示。它在每个 IP 地址后面追加网络地址的位数(这种方式也叫“后缀”表示法) 用 / 隔开。

子网掩码表示方式02


不难看出,在第二种方式下记述网络地址时可以省略后面的 0 。例如 172.20.0.0/16172.20/16 其实是一个意思。



子网掩码可以灵活指定网络标识的长度

子网掩码可以灵活指定网络标识的长度




八、CIDR 与 VLSM

1. CIDR

根据 IP 地址的分类的方式,例如, A 类地址的派发在全世界最多也无法超过 128 个,B 类地址很快也派发紧张,而 C 类地址的主机标识最多只允许 254 台计算机相连。

于是,人们开始放弃 IP 地址的分类,采用任意长度分割 IP 地址的网络标识和主机标识。这种方式不受 IP 地址分类的限制自由分配( Classless Inter-Domain Routing ,简称 CIDR ),意为“无类型域间选路”,


迁移到 CIDR 的初期,由于 A 类和 B 类地址个数严重不足,常常把那些以 2 的幂次( 4, 8, 16, 32,…… )划分的 C 类 IP 地址组合起来再进行分配。当时这种方式也叫做“超网”。

划分子网,掩码计算:

例 1 ,某部门申请到一个 C 类 IP 地址,若要分成 4 个子网其掩码应为多少?
解:C 类地址子网掩码表示为 255.255.255.0 。要划分 4 个子网,可得 2<sup>x</sup> = 4, x = 2 ,
即从 8 位主机标识中再分出 2 位表示子网,掩码为 11111111.11111111.11111111.11000000 即为 255.255.255.192 。
同理,要划分 8 个字网其掩码则为 11111111.11111111.11111111.11100000 即为 255.255.255.224 ;
要划分 16 个字网其掩码则为 11111111.11111111.11111111.11110000 即为 255.255.255.240 ...

例 2 ,某部门申请到一个 C 类 IP 地址,若要分成 14 个子网其掩码应为多少?
类似地,2<sup>x</sup> >= 14,x 最小为 4 ,子网掩码为 255.255.255.240 。


根据 CIDR ,连续多个 C 类地址( CIDR 汇总的 C 类地址以 2 的幂次划分,因此必须有一个能够按位分割的边界) 就可以划分到一个较大的网络内。

例如下图中,应用 CIDR 技术将 203.183.224.1203.183.225.254 的地址合为同一个网络(它们本来是 2 个 C 类地址)。


CIDR应用举例01


类似地,下图应用 CIDR 技术将 202.244.160.1202.244.167.254 的地址合并为一个网络。即将 8 个 C 类地址合并为一个网络。


CIDR应用举例02



2. VLSM

在 CIDR 被应用到互联网的初期,网络内部采用固定长度的子网掩码机制。也就是说,当子网掩码的长度被设置为 /25 以后,域内所有的子网掩码都得使用同样的长度。然而,有些部门可能有 500 台主机,另一些部门可能只有 50 台主机。如果全部采用统一标准,就难以架构一个高效的网络结构。为此人们提出组织内要使用可变长度的、高效的 IP 地址分配方式。

于是产生了一种可以随机修改组织内各个部门的子网掩码长度的机制 —— VLSM(可变长子网掩码)( Variable Length Subnet Mask )。

根据 VLSM 可以将网络地址划分为主机数为 500 个时子网掩码长度为 /23 ( 29 = 512 ),主机数为 50 个时子网掩码长度为 /26 ( 26 = 64 )。从而在理论上可以将 IP 地址的利用率提高至 50% 。





参考:
《图解TCP/IP(第5版)》
《TCP/IP入门经典(第5版)》

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant