物理层实现数据链路实体间比特(bit)流的透明传输,而数据链路层将物理层的0,1信号组成帧单元传递给目标物理地址(MAC地址),两台计算机之间的通讯最终要依靠MAC地址进行。数据到了第三层网络层,数据通讯需要IP地址,IP地址就是IP协议里规定的地址,而MAC地址和IP地址之间的转化是由ARP 或RARP协议来完成。
IP地址由网络号和主机号构成,并划分了A、B、C、D、E5类;每一类有不同长度的网络号和主机号:
特殊的IP地址:比如主机号全0的地址:用来标识一个网络。例如:203.156.8.0 表示一个C类网络号203.156.8的网络;
主机号全1表示广播地址,向指定网络的所有主机发生数据包。
上面IETF分配了私有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
子网
为了优化网络性能,方便管理及缩减网络流量,常把一个网络划分成若干个子网(subnet)。划分子网后IP格式变成:
其中子网号采用向主机号借用地址来实现,同主机号一样,不同的子网代表不同的网络,不同的子网之间无法直接通讯,起到隔离和安全的作用。为了快速确定IP地址的网络号和主机号,以及判断两个IP是否属于同一个网络,产生了子网掩码。例如一个C类地址的默认子网掩码为:255.255.255.0
如果一个IP地址的子网掩码不是默认值,说明该网络划分了子网。
确定子网掩码及子网地址范围
1:确定要划分的子网数,子网数目转化成2的n次方;
例如:把C类IP地址192.168.10.0划分4个子网,借用主机位的2位;
2:从主机位借用n位作为子网位;1100 0000 = 192(10进制)
3:将子网位全变成1,即可得到子网掩码;255.255.255.192
每个子网的地址范围:
子网号 | 掩码组合 | 10进制 | 子网地址 | 主机地址段 (2进制) | 主机地址段 (10进制) |
00(全0) | 0000 0000 | 0 | 192.168.10.0 | 00000001~00111110 | 1~62 |
01(有效) | 0100 0000 | 64 | 192.168.10.64 | 01000001~01111110 | 65~126 |
02(有效) | 1000 0000 | 128 | 192.168.10.128 | 10000001~10111110 | 129~190 |
03(全1) | 1100 0000 | 192 | 192.168.10.192 | 11000001~11111110 | 193~254 |
以上地址主机号全0和全1需要去除:有单独作用,全0标识本网络,全1用于向子网广播。(有效子网数目=2的n次方-2:n为子网号占用的二进制位数)
上面例子中任意一个子网地址构成为:前3个字节(网络号) + 最后一个字节的前2位(子网号) + 后6位(主机号)
子网掩码有时使用前缀长度标识:例:192.168.10.151/24 和 192.168.10.151/26 标识不同的网络
如法炮制:划分8个子网,需借用3个主机位:子网掩码为:255.255.255.224,主机范围如下列表所示:
子网号 | 掩码组合 | 10进制 | 子网地址 | 主机地址段 (2进制) | 主机地址范围 (10进制) |
00(无效) | 0000 0000 | 0 | 192.168.10.0 | 00000001~00011110 | 192.168.10.1~192.168.10.30 |
01 | 0010 0000 | 32 | 192.168.10.32 | 00100001~00111110 | 192.168.10.33~192.168.10.62 |
02 | 0100 0000 | 64 | 192.168.10.64 | 01000001~01011110 | 192.168.10.65~192.168.10.94 |
03 | 0110 0000 | 96 | 192.168.10.96 | 01100001~01111110 | 192.168.10.97~192.168.10.126 |
04 | 1000 0000 | 128 | 192.168.10.128 | 10000001~10011110 | 192.168.10.129~192.168.10.158 |
05 | 1010 0000 | 160 | 192.168.10.160 | 10100001~10111110 | 192.168.10.161~192.168.10.190 |
06 | 1100 0000 | 192 | 192.168.10.192 | 11000001~11011110 | 192.168.10.193~192.168.10.222 |
07(无效) | 1110 0000 | 224 | 192.168.10.224 | 11100001~11111110 | 192.168.10.225~192.168.10.254 |
如何得出当前IP所属网络和主机号?
规则如下:
1:从IP地址提取网络号:子网掩码与IP地址进行“逻辑与”运算;
2:从IP地址获取主机号:子网掩码取反再与IP地址进行“逻辑与”运算;
例如:192.168.10.151/24 默认24位子网掩码255.255.255.0 ,显然主机号为:0.0.0.151
1:二进制IP: 11000000 10101000 00001010 10010111
2:子网掩码: 1111 1111 1111 1111 1111 1111 00000000
3:子网掩码取反: 00000000 00000000 00000000 1111 1111
#1和3行逻辑与: 00000000 00000000 00000000 10010111
下面看下: 192.168.10.151/26 子网掩码: 11111111 11111111 11111111 11000000
二进制IP: 11000000 10101000 00001010 10010111 (向主机位借了2位,主机号为最后6位:010111)
子网掩码取反: 00000000 00000000 00000000 00111111
逻辑与: 00000000 00000000 00000000 00010111 主机号为:0.0.0.23
子网划分后,IP地址分配注意要点:
1:连接到同一个网络上所有主机的IP地址和网络号相同;
2:路由器可以连接多个物理网络,每个连接都应该拥有自己的IP地址,而且该IP地址的网路号应与分配给该网络的网络号相同。每个连接要具有不同的网络号;
3:不允许任何两个接口拥有相同的IP地址;
4:某些设备如服务器、路由器需要维护静态IP地址;
最后来个小测试:如下图所示:Laptop0和PC1在一个子网,可以互通,但PC1、PC2、PC3都分处于不同的子网,无法通讯;
子网之间的通讯
如何使不同子网的终端主机通讯呢?可以借用路由器或三层交换机来实现:如下图所示拓扑和IP配置:
上图中:子网192.168.10.32 和 子网192.168.10.64 通过路由器的两个端口Fa0/1: 192.168.10.62 和 192.168.10.194 相连;
各子网终端的网关设置和路由器对应端口的IP保持相同,此时因为在路由器中构成了一条连接路由路径,所以两个子网就可以通信了:
show ip route // Route的路由表:
192.168.10.0/27 is subnetted, 2 subnets
C 192.168.10.32 is directly connected, FastEthernet0/0
C 192.168.10.64 is directly connected, FastEthernet1/0
更进一步,在上面的拓扑图中再添加192.168.10.96 和 192.168.10.128两个子网:
并用另外一台路由器RouteB连接 上面两个子网:RouteA和RouteB之间用串口连接:
由上一步可以利用RouteA把子网A(192.16810.32)和子网B(192.168.10.64)互联,同样道理:可以利用RouterB把 子网C和子网D互联;
此时子网A 和子网C 、子网B和子网D 均不通,该是路由器之间的串口线起作用的时候了。
同上图,把RouterB的Serial2/0口设置IP为:192.168.11.2/24 ,让路由器之间互联;
在路由器A中配置静态路由:
同理设置路由器B的静态路由;
此时路由器A的路由表为:
192.168.10.0/27 is subnetted, 4 subnets
C 192.168.10.32 is directly connected, FastEthernet0/0
C 192.168.10.64 is directly connected, FastEthernet1/0
S 192.168.10.96 [1/0] via 192.168.11.2
S 192.168.10.128 [1/0] via 192.168.11.2
C 192.168.11.0/24 is directly connected, Serial2/0
C - connected(直连), S - static(静态)
此时路由器B的路由表为:
192.168.10.0/27 is subnetted, 4 subnets
S 192.168.10.32 [1/0] via 192.168.11.1
S 192.168.10.64 [1/0] via 192.168.11.1
C 192.168.10.96 is directly connected, FastEthernet0/0
C 192.168.10.128 is directly connected, FastEthernet1/0
C 192.168.11.0/24 is directly connected, Serial2/0
测试互通结果如下:子网之间都能互相ping通了: