IP地址和IP子网划分
最近想重新学习一下计算机网络相关的知识,从苹果图书里找到了一本免费的IBM写的《TCP/IP Tutorial and Technical Overview》。本文简要记录一下IP地址和子网划分的相关知识。
网络参考模型
TCP/IP参考模型,IETF提出的参考模型,分为4层,TCP/IP协议参考模型分层从上到下分别为:
- 应用层(application layer),比如HTTP/FTP/DNS协议
- 传输层(transport layer), TCP/UDP
- 网络互连层(internet layer),IP协议
- 网络访问(链路)层(network access (link) layer),以太网、WIFI等
IP地址
IP协议通过创建虚拟网络视图将底层各种各样的硬件差异给隐藏掉,它是一种不可靠、尽最大努力和不面向连接的数据报传输协议。IP地址是主机在互联网上独一无二的身份标识,IPV4地址用32位无符号二进制比特表示,通常用点十进制表示,比如192.168.0.1。
IP地址 = <Network Number><Host Number>
IP地址由网络编号和主机编号组成,网络编号部分是由三个区域因特网注册处管理的:
- America Registy for Internet Numbe (ARIN) 负责美洲和部分非洲
- Reseaux IP Europeans (RIPE) 负责欧洲、中东和部分非洲
- Asia Pacific Network Information Centre (APNIC) 负责亚太地区
IP地址分类
IP地址的前几个比特表示IP地址中剩余比特位应该如何划分为网络编号和主机编号,一共有五种分类:
- A类,前缀为0,7位网络编号,24位主机编号
- B类,前缀为10,14位网络编号,16位主机编号
- C类,前缀为110,21位网络编号,8位主机编号
- D类,前缀为1110,多播专用
- E类,前缀为11110,将来/实验
从上面前缀可以看出,区分网络分类的办法就是看第一个0比特位出现的位置,第一个就是A类,第二个就是B类,以此类推。根据二进制前缀可以很容易算出各类IP的IP地址前缀及其包含的网络数。
- A类 0(0000000)到127(111111) 126个网络,每个网络容纳16777214个主机地址,有两个保留网络,0和127
- B类 128(10000000)到192(10111111) 16382个网络,每个网络容纳65534个主机地址,有两个保留网络128和191
- C类 192(11000000)到224(110111111) 2097150个网络,每个网络容纳254个主机地址,有两个保留网络,192和224保留
- D类 224(11100000)到239(11101111)
- E类 240(11110000)到246(11110111)
计算A/B/C网络容纳网络数和主机数时,一般用
2^{比特位数} - 2
来计算,通常比特位全为0和1的情况视为特殊用途,所以减去2
保留IP地址
IP地址中的两个部分比特位全为0或者1通常具有特殊意义:
- 所有比特为0: 网络编号部分全为0则表示当前网络,主机编号部分全为0的地址被解释成当前主机
- 所有比特为1,网络编号部分全为1则表示所有网络,主机编号部分全为1的地址被解释成所有主机
- 回环地址,127.0.0.1被定义为回环地址,回环地址不会访问物理网络
特殊IP地址
有些特殊IP地址段,简要列举几个:
- 0.0.0.0/8 当前网络
- 14.0.0.0/8 公共数据网络
- 24.0.0.0/8 有线电视网络
- 169.254.0.0/16 本地连接
- 192.0.2.0/24 测试网络,IPV6转4中转 任播
- 224.0.0.0/24 多播
- 240.0.0/4 保留做将来使用
IP子网划分
当互联网在爆炸式发展的时候,IP地址的分配就显得不太灵活,不太方便修改本地网络的配置,比如需要把本地的一个大网络拆分成两个小网络,这时候就必须要分配新的公网IP地址。为了解决这个问题,IP子网划分的概念被提出来了。IP子网划分完全是本地网络的配置,整个网络对外部看起来还是一个IP地址。
划分方法,将IP地址主机编号部分拆分出一个子网前缀,剩余部分还是作为主机编号,即:
IP地址 = <Network Number><Subnet Number><Host Number>
子网编号和主机编号的组合又被称为本地地址或者本地部分,子网划分由本地管理员决定,可以选择本地地址中的任意多的比特位来划分子网。划分使用32位子网掩码来完成,子网掩码中为0的比特位标志IP地址的主机部分,子网掩码中为1的部分表示子网编号。子网掩码中属于原始IP地址网络编号的被设置成了1但是不使用(部分平台设置成了0但是也是不使用)。子网掩码通常也用点十进制表示。如255.255.255.0。
划分子网时,一般用连续的比特位来作为子网掩码,这样地址会更加容易读,尤其是当子网占用8位或者16位时,很多TCP/IP实现不支持不连续比特位作为子网掩码。
一个子网划分的案例,对于一个B类地址,存在16位主机编号,可以把8位作为子网编号,剩余8位作为主机编号,这样就可以划分出254个子网,每个子网有254个主机地址。
子网划分根据子网编号位数是否可变分为:
- 静态子网划分,子网全部使用相同的子网掩码
- 变长子网划分,子网可以使用不同的子网掩码,根据子网大小选择子网掩码长度
- 混合静态和变长子网划分
一般来说子网掩码会被存储在主机的配置文件中,但是有时候主机可能没有这个配置,比如没有磁盘的工作站,这时候可以通过ICMP协议来获取。ICMP协议包括两种消息:地址掩码获取和地址掩码响应,它可以让主机从网关获取当前网络的子网掩码。