目录
IP(Internet Protocol)的中文全称是网际互连协议,是一种用于计算机网络通信的核心协议。使用此协议可将IP信息包从源设备(例如用户的计算机)传送到目的设备(例如某部门的网站服务器)。而为了达到此目的,IP必须依赖IP地址与IP路由器两种机制来实现。
IP规定计算机网络上所有的设备都必须有一个独一无二的编号以便识别和传输数据,这就是IP地址。就好比是邮件上都必须注明收件人地址,邮递员才能将邮件送到。同理,每个IP信息包都必须包含有目标设备的IP地址,信息包才可以正确地送到目的地。
如果要在计算机网络中传送IP信息包,除了确保网络上每个设备都有一个唯一的IP地址之外,网络内还必须有信息传送的机制,才能将IP信息包通过一个个的网络节点传送到目的地,这种传送机制便称为IP路由,而实现路由功能的设备就叫路由器。在IP路由的过程中,路由器负责选择传输路径,IP信息包则是被传输对象。
IP目前有两个在用的版本:IPv4和IPv6。
IPv4
IPv4(Internet Protocol version4),即网际互连协议第4版,于1981年9月发布。
IPv4地址的表示方法
IPv4地址由32位二进制数构成,理论上可以提供有232(约42.28亿)个地址。
为了方便记忆输入,通常用点分十进制表示法表示IPv4地址:把表示IPv4地址的32位二进制数分成四组,每组包含8位二进制数,将这四个二进制数转成十进制(取值范围是 0
到 255
)后用句点 .
隔开,便是IPv4地址的常见表达格式,其格式为 D.D.D.D
。如:0.0.0.0
、127.0.0.1
、192.168.0.1
。
IPv4地址的组成与分类
IPv4地址由两部分组成:
- 网络标识(NetID):用于识别是哪个网络
- 主机标识(HostID):用于识别是该网络下的哪个主机
初始分类方式
最开始,IPv4地址只由前8位作为网络标识,剩下的作为主机标识,可分配的网络数量有 28-2=254 个,每个网络可容纳的主机数量有 224-2=16777214 个。
随着时间的推移,在局域网出现的早期,这种分类方式就显得不够用了。
分类网络
1981年,分类网络(Prototype Internet)被提了出来。它允许IPv4地址的网络标识长度为8位、16位或者24位,与此对应的主机标识便是24位、16位、8位。据此,分类网络将IPv4地址分为了5种类型:A类、B类、C类、D类、E类,一般最常用到的是A、B、C类这三种。
A类地址
A类地址的前8位为网络标识,后24位为主机标识。根据规定该类地址的网络标识第一位必须是“0”,即前缀为“0”。其二进制格式表示为 0XXXXXXX YYYYYYYY YYYYYYYY YYYYYYYY
,X表示网络标识位,Y表示主机标识位。用十进制表示地址的范围则是 0.0.0.0
~ 127.255.255.255
。
在A类地址中,可分配的网络数量是 27-2=126 个。这里减去2是因为有2个地址另有它用:网络标识全为“0”的地址用于默认路由,如 0.0.0.0
、0.0.0.1
;网络标识后7位全为“1”的地址用于环回测试,如 127.0.0.0
、127.0.0.1
。
在A类地址中,每个网络可容纳 224-2=16777214 台主机。这里减去2是同样因为有2个地址另有它用:主机标识全为“0”的用于网络地址,如 1.0.0.0
、2.0.0.0
;主机标识全为“1”的用于广播地址,如 1.255.255.255
、2.255.255.255
。
综上所述,A类地址可分配的网络数量较少,每个网络可容纳主机数量较多,因此A类地址适用于大型网络。
B类地址
B类地址的前16位为网络标识,后16位为主机标识。根据规定该类地址的网络标识前两位必须是“10”,即前缀为“10”。其二进制格式表示为 10XXXXXX XXXXXXXX YYYYYYYY YYYYYYYY
,X表示网络标识位,Y表示主机标识位。用十进制表示地址的范围则是 128.0.0.0
~ 191.255.255.255
。
在B类地址中,可分配的网络数量是 214=16384 个。
在B类地址中,每个网络可容纳 216-2=65534 台主机。这里减去2是同样因为有2个地址另有它用:主机标识全为“0”的用于网络地址,如 128.1.0.0
、129.2.0.0
;主机标识全为“1”的用于广播地址,如 128.1.255.255
、129.2.255.255
。
综上所述,B类地址可分配的网络数量适中,每个网络可容纳主机数量适中,因此B类地址适用于中型网络。
C类地址
C类地址的前24位为网络标识,后8位为主机标识。根据规定该类地址的网络标识前三位必须是“110”,即前缀为“110”。其二进制格式表示为 110XXXXX XXXXXXXX XXXXXXXX YYYYYYYY
,X表示网络标识位,Y表示主机标识位。用十进制表示地址的范围则是 192.0.0.0
~ 223.255.255.255
。
在C类地址中,可分配的网络数量是 221=2,097,152 个。
在C类地址中,每个网络可容纳 28-2=254 台主机。这里减去2是同样因为有2个地址另有它用:主机标识全为“0”的用于网络地址,如 192.1.1.0
、193.2.2.0
;主机标识全为“1”的用于广播地址,如 192.1.1.255
、193.2.2.255
。
综上所述,C类地址可分配的网络数量较多,每个网络可容纳主机数量较少,因此C类地址适用于小型网络。
D类地址
D类地址主要用于多点广播(Multicast,也称为多播)之中作为多播组IP地址,它不分网络标识和主机标识,是一类专门保留的地址。多播组IP地址让源主机能够将分组发送给网络中的一组主机,属于多播组的主机将被分配一个多播组lP地址。由于多播组lP地址标识了一组主机(也称为主机组),因此多播组IP地址只能作为目标地址,源地址总是为单播地址。
D类地址的前四位必须是“1110”,即前缀为“1110”。用十进制表示地址的范围则是 224.0.0.0
~ 239.255.255.255
。
E类地址
E类地址保留用于实验和将来使用。
E类地址前四位必须是“1111”,即前缀为“1111”。用十进制表示地址的范围则是 240.0.0.0
~ 255.255.255.255
。其中 255.255.255.255
作为广播地址。
无类别域间路由(CIDR)
1993年,无类别域间路由(Classless Inter-Domain Routing,简称CIDR)被提出。它解决了分类网络在实际应用中IP地址使用不够充分、路由不够便利的问题。
相比分类网络只能将IPv4地址的网络标识长度设为8位、16位、24位三种长度,CIDR可以将网络标识设为任意位数,其表示方法便是在IPv4地址后面加上斜杠 /
和0到32之间的一个数字,这个数字就表示该地址的前若干位是网络标识(或称前缀),格式为 D.D.D.D/N
,如 0.0.0.0/8
、192.168.0.0/16
。
如果一个IP地址的前N位与一个CIDR地址块的前缀是相同的话,那么就说这个地址属于这个CIDR地址块,或者说是与CIDR地址块的前缀匹配。所以,要理解CIDR,就要把地址写成二进制的形式。因为IPv4地址的长度总是32位,N位长的CIDR前缀就意味着地址里有32−N位不匹配。这些位有2(32−N)种不同的组合,即存在2(32−N)个IPv4地址与CIDR地址块的前缀匹配。前缀越短就能匹配越多的地址,越长就匹配得越少。一个地址可能与多个长度不同的CIDR前缀匹配。
IPv4的其他技术
子网划分
子网是一种网络划分技术,它可以将一个大的网络划分为多个小的网络,每个小的网络称为子网。子网可以用于将不同的业务或部门划分为不同的网络,以便于进行网络管理和安全管理。子网可以进一步划分为更小的子网,直到满足需要为止。
子网划分的方式是借走若干主机标识位,将其作为子网标识位,使整个IPv4地址由原本的两部分变成了三部分:网络标识+子网表标识+主机标识。因此,划分越多的子网,每个子网内容纳的主机便越少。
划分子网后,可通过使用一串数字,通过特定的算法,把子网隐藏起来,这使得从外部来看,网络本身并没有任何变化,这串数字就是子网掩码。子网掩码是一个32位的2进制数,与IPv4地址的格式一模一样,其对应目标IPv4地址网络标识的所有位都为1,对应主机标识的所有位都为0。A类网络的默认子网掩码是 255.0.0.0
,B类网络的默认子网掩码是 255.255.0.0
,C类网络的默认子网掩码是 255.255.255.0
。将子网掩码和IP地址按位进行逻辑“与”运算,可得到IP地址的网络标识,剩下的部分就是主机标识,从而区分出任意IP地址中的网络和主机。
例如,有台主机,IP地址为 222.21.160.6
,子网掩码为 255.255.255.192
,则其网络地址(原网络标识+子网标识)为 222.21.160.0
,具体计算如下:
222.21.160.6
转二进制11011110.00010101.10100000.00000110
255.255.255.192
转二进制11111111.11111111.11111111.11000000
- 将上面两组二进制数进行按位逻辑与运算,结果为
11011110.00010101.10100000.00000000
- 将结果转为十进制可得
222.21.160.0
由于子网划分技术出现的比CIDR早,CIDR便对子网划分技术做了兼容,因此,子网掩码还可以用CIDR的网络前缀法来表示,即 D.D.D.D/N
,N表示网络标识位数。如 138.96.0.0/16
表示B类网络 138.96.0.0
的子网掩码为 255.255.0.0
。
专用网络
专用网络是指遵守特定规范,使用私有IP地址空间的网络。IPv4地址按用途分为私有IP地址和公有IP地址两种,私有IP地址是在本地局域网上的IP,公有IP地址是在因特网上的IP。
在分类网络划分方式下的的A、B、C三类IP地址中,各有一组IPv4地址被拿出来专门用于私有IP网络。其范围如下:
网络类别 | 私有IP范围 | CIDR地址块 |
---|---|---|
A类 | 10.0.0.0~10.255.255.255 | 10.0.0.0/8 |
B类 | 172.16.0.0~172.31.255.255 | 172.16.0.0/12 |
C类 | 192.168.0.0~192.168.255.255 | 192.168.0.0/16 |
私有IP地址是不会被因特网分配的,它们在因特网上也不会被路由,虽然它们不能直接和因特网连接,但通过技术手段(如NAT技术)仍旧可以和因特网通讯。
网络地址转换协议(NAT)
1994年,网络地址转换协议(Network Address Translation,简称NAT)被提出,它也叫做网络掩蔽或者IP掩蔽,是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的专用网络(私网)中。
当在专用网内部的一些主机本来已经分配到了本地IP地址,但又想和因特网上的主机通信时,就可使用NAT技术。要实现这个技术需要在专用网络连接到因特网的路由器上安装NAT软件,装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的公有IP地址。如此一来,专用网络内所有使用私有IP地址的主机在和外界通信时,都会在NAT路由器上将其私有IP地址转换成公有IP地址,然后再和因特网连接。因此,在因特网视角看来,同个专用网内的所有设备便共用了同一个IP地址。
NAT技术不仅缓解了IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
IPv6
由于IPv4最大的问题在于网络地址资源不足,在其基础上不管采用什么技术也只能缓解这一问题而不能根治,严重制约了互联网的应用和发展。为此,IP协议进行了更新升级,从旧版本的IPv4升级到新版本的IPv6。
IPv6(Internet Protocol version6),即网际互连协议第6版,于1996年发布,2012年6月6日正式启动。
IPv6地址的表示方法
IPv6地址由128位二进制数构成,理论上可以提供约2128(约3.4*1038)个地址。
为了方便记忆输入,通常用冒分十六进制表示法表示IPv6地址:把表示IPv6地址的128位二进制数分成八组,每组包含16位二进制数,将这八个二进制数转成十六进制(取值范围是 0x0000
到 0xffff
)后用冒号 :
隔开,便是IPv6地址的常见表达方式,其格式为X:X:X:X:X:X:X:X
。如:fe80:0000:0000:0000:0123:4567:89ab:cdef
。
冒分十六进制表示法可以进行简写,即每组十六进制数的前导0可以省略,如果四位都为0则至少需保留一个0。如:2000:0000:00ff:0000:0000:0000:0000:ff00
→ 2000:0:ff:0:0:0:0:ff00
若一个或多个连续的十六进制数组都为0,则可用双冒号 ::
表示,为保证地址解析的唯一性,整个地址中只能有一个 ::
。如:2000:0000:00ff:0000:0000:0000:0000:ff00
→ 2000::ff:0:0:0:0:ff00
或 2000:0:ff::ff00
0:0:0:0:0:0:0:1
→ ::1
0:0:0:0:0:0:0:0
→ ::
为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为 X:X:X:X:X:X:d.d.d.d
。前6组十六进制数仍采用冒分十六进制表示,而最后2组十六进制数则使用IPv4的点分十进制表示,如:2000:0:ff:0:0:0:123.123.123.123
2000:0:ff::123.123.123.123
::192.168.0.1
::ffff:192.168.0.1
IPv6地址的组成与分类
与IPv4一样,IPv6也由两部分组成:
- 网络前缀:用于识别是哪个网络,相当于IPv4地址中的网络标识,长度为N位(0<N<128)
- 接口标识:用于识别是该网络下的哪个主机,相当于IPv4地址中的主机标识,长度为128-N位
IPv6主要定义了三种地址类型:单播地址(Unicast Address)、组播地址(Multicast Address)和任播地址(Anycast Address)。与原来在IPv4地址相比,新增了“任播地址”类型,取消了原来IPv4地址中的广播地址,因为在IPv6中的广播功能是通过组播来完成的。
单播地址:用来唯一标识一个接口,类似于IPv4中的单播地址。发送到单播地址的数据报文将被传送给此地址所标识的一个接口。
- 全局单播地址:等同于IPv4中的公网地址,可以在IPv6 Internet上进行全局路由和访问。
- 本地单播地址:指本地网络使用的单播地址,等同于IPV4地址中局域网专用地址。每个接口上至少要有一个链路本地单播地址,另外还可分配任何类型(单播、任播和组播)或范围的IPv6地址。
- 链路本地地址
FE80::/10
:仅用于单个链路(链路层不能跨VLAN),不能在不同子网中路由。 - 唯一本地地址
FC00::/7
:唯一本地地址是本地全局的,它应用于本地通信,但不通过因特网路由,将其范围限制为局域网。 - 站点本地地址
FEC0::/10
:新标准中已被唯一本地地址代替。
- 链路本地地址
- 兼容性地址:用于兼容IPv4。
- 特殊地址:
- 未指定地址
::
:仅用于表示某个地址不存在,等价于IPv4未默认路由地址0.0.0.0
。 - 环回地址
::1
:用于标识环回接口,允许节点将数据包发送给自己,等价于IPv4环回地址127.0.0.1
。
- 未指定地址
组播地址:用来标识一组接口(通常这组接口属于不同的节点),类似于IPv4中的组播地址。发送到组播地址的数据报文会被传送给此地址所标识的所有接口。IPv6组播地址的最明显特征就是最高的8位固定为“1111 1111”。IPv6地址很容易区分组播地址,因为它总是以FF开始的。
任播地址:与组播地址一样,也用来标识一组接口(通常这组接口属于不同的节点)。发送到任播地址的数据报文会被传送给此地址所标识的一组接口中距离源节点最近(根据使用的路由协议进行度量)的一个接口。
IPv6的优势
与IPV4相比,IPV6具有以下几个优势:
- IPv6具有更大的地址空间。
- IPv6使用更小的路由表。
- IPv6增加了增强的组播支持以及对流的控制。
- IPv6加入了对自动配置(DHCP)的支持。
- IPv6具有更高的安全性。
- IPv6有更好的数据头部格式。
- IPv6允许扩充。
为什么只听说过IPv4和IPv6?其他版本的IP呢?
IPv1、IPv2、IPv3都是包含在在传输控制协议(TransmissionControl Protocol,简称TCP)里的,TCP版本1和TCP版本2分别是1973年和1977年设计的。这里有一个轶事,TCP在第3个版本的时候乔恩·波斯特尔(Jon Postel)意识到他们在设计协议上犯了错,违反了分层原则,也就是“每个协议只负责一个功能”,于是他们把TCP和IP拆分,就有了用到现在的IPv4。
至于IPv5,被称为因特网流协议,其设计初衷是为了解决IPv4中多媒体传输中的速率和延迟问题,但是后来科技迅速发展,包括带宽、应用程序和一些压缩技术等方面都有很大进步,所以在IPv5最开始要解决的问题已经不再是问题的情况下,IPv5被嵌入了IPv6。