本系列文章旨在向程序员分享一些网络基本知识,让程序员具备基本的网络常识,以便与网络工程师沟通。本系列文章不会涉及如何组建网络、如何配置交换机/路由器等硬件相关的内容,所以不适合想考CCNA/HCNA证书的人士。
IP地址
IP地址,多么熟悉啊,比如192.168.1.1就是一个IP地址,但你可能未必知道IP地址的含义,本文将分享给你一些IP地址相关的基础知识。
IP地址的结构
事实上192.168.1.1
这样的IP地址是一个IPv4地址,IPv4地址实际上是由4个字节组成,回想一下一个字节(byte)多少位(bit)来着?192.168.1.1
实际上是二进制11000000.10101000.00000001.00000001
的十进制表达。所以IP地址的最大值也就是255.255.255.255
——11111111.11111111.11111111.11111111
。
所以在读下去之前请记住:IP地址是由4个字节组成,IP地址是二进制的。
network id和host
IP地址包含了两个信息:
- network id,当前主机所属的二层网络
- host,当前主机在二层网络中的ID
但是我们怎么从IP地址的4个字节中提取这两个信息呢?这就需要子网掩码(Subnet Mask)了。
子网掩码和IP地址一样也是4个字节,区别在于它的二进制形式中的1必须从左到右且连续,比如255.255.255.0
的二进制是11111111.11111111.11111111.0
。254.255.255.0
不是一个合法的子网掩码,因为它的二进制是11111110.11111111.11111111.0
,1没有连续。1.255.255.0
也不是一个合法的子网掩码,因为它的二进制是00000001.11111111.11111111.0
,1不是从最左侧开始的。
我们在来看192.168.1.1
的network id和host,它的子网掩码是255.255.255.0
,为了简便起见,我们用子网掩码中的1的数量来表示:192.168.1.1/24
:
ip : 11000000.10101000.00000001.00000001 (192.168.1.1)
subnet mask : 11111111.11111111.11111111.00000000 (255.255.255.0)
network id : 11000000.10101000.00000001.00000000 (192.168.1.0)
host : 00000000.00000000.00000000.00000001 (1)
我们把子网掩码和IP地址Bit AND一下,得到network id=192.168.1.0
,把子网掩码取反码和IP地址Bit AND一下,得到host=1
。
那我们知道network id有什么用呢?当我们试图做网络通信的时候,操作系统会计算出源IP的network id和目标IP的network id,如果两者一样就说明在同一个二层网络,如果不一样则说明不在同一个二层网络,那么数据就会发送给路由器处理(回忆网络模型及网络设备的内容)。
IP地址类型
IP地址是分类型的,有:
- A类:
1-126.xxx.xxx.xxx / 8
- B类:
128-191.xxx.xxx.xxx / 16
- C类:
192-223.xxx.xxx.xxx / 24
- D类:
224-239.xxx.xxx.xxx
- E类:
240-255.xxx.xxx.xxx
- loopback:
127.xxx.xxx.xxx
不过我们一般都只会接触到A、B、C三类加一个loopback地址。
私有IP地址
在A、B、C三类IP地址中有部分地址保留为私有地址,Internet上的网络设备均不会接受、发送或者转发属于私有地址的源IP地址或目的IP地址。私有IP地址的范围是:
- 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
(这个很熟悉吧)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。