大刘的电脑 A 和小美的电脑 B 可以通过网线连接起来,组成一个网络。A 发出来数据,B 都能接收到。反之 A 可以接收 B 发出来的所有数据。
没过多久,隔壁老王的电脑 C、阿丽的电脑 D、敏敏的电脑 E 也要加入到网络中来。只使用网线连接是搞不定的了,搞不定的问题就用分层的办法处理。
于是就有了二层网络设备交换机,交换机提供网络互联功能。
交换机可以接入多台电脑,那么它是如何识别不同的电脑呢?又是如何进行数据转发呢?
每个电脑网卡的 MAC 地址都是不一样的,电脑发送数据时,数据头部携带网卡的 MAC 地址,用 MAC 地址标识来不同的电脑。交换机就可以识别数据头部的 MAC 地址来区分不同的电脑。
交换机除了能识别不同的电脑,还需要找到电脑连接的交换机端口,才能顺利的把数据从相应端口发送出去。交换机通过自学机制,把学习到的设备 MAC 地址和交换机端口号添加到 MAC 地址表,并根据 MAC 地址表进行数据转发。
随着韩国棒棒的电脑 F、美国山姆的电脑 G、印度三三的电脑 H 等等的陆续加入,网络规模越来越大。交换机需要记录的 MAC 地址表也越来越多,需要的交换机也越来越多。但是交换机的容量和性能有限,MAC 地址表无法记录全世界电脑的 MAC 地址和对应的端口号,MAC 地址表太大也无法快速查找到对应的 MAC 地址表项。
交换机搞不定的问题,就用分层的办法处理。
于是就有了三层网络设备路由器,路由器可以把全世界的网络连接起来。
局域网内的网络连接可以使用交换机,例如一个公司内的网络或者一个校园内的网络通过交换机连接。不同区域的局域网互联使用路由器,那么如何区分不同的网络区域呢?又是如何跨网络区域进行数据转发的呢?
MAC 地址是烧录到网卡上的,也叫硬件地址,可以标识某一台设备,但无法用来标识某一个网络区域。为了区分不同的网络区域,IP 地址闪亮登场。IP 地址由网络号和主机号两部分组成,网络号可以标识网络区域,网络号相同的主机位于同一个网络区域内,即相同网段内。不同的网络区域使用不同的网络号。主机号标识相同网段内的不同主机,不允许相同网段内出现重复的主机号。在整个网络中通过设置网络号和主机号,保证每台主机的 IP 地址不会重复出现,即 IP 地址具有唯一性。
路由器有多个端口,分别连接不同的网络区域,不同网络区域的 IP 地址网络号不同。它通过识别目的 IP 地址的网络号,再根据路由表进行数据转发。
IP 地址由 32 位二进制数组成,为方便查看和记录,使用十进制数表示。
常用二进制数与十进制数的转换
分配给主机使用的分类地址有 A 类、B 类、C 类,分类地址使用的是固定网络位数,A 类 8 位网络号,B 类 16 位网络号,C 类 24 位网络号。既可以通过判断分类地址类型( A 类、B 类、C 类其中之一)识别出网络号,也可以通过子网掩码识别出网络号。
A 类地址第一位以 0 开头,可变化的网络位有 7 位,即 128 个 A 类地址。其中 0 和 127 属于特殊地址,可用的 A 类地址就是 128 - 2 = 126 个。
可变化的主机位有 24 位,即 16777216 个主机地址。其中主机位全为 0 和主机位全为 1 分别为网段地址和广播地址,不能分配给主机使用,每个 A 类地址可用的主机地址就是 16777216 - 2 = 16777214 个。
A 类地址的范围是 1.0.0.0 ~ 126.255.255.255 。
A 类地址子网掩码是 255.0.0.0 ,也可写作 /8 。
B 类地址前两位以 10 开头,可变化的网络位有 14 位,即 16384 个 B 类地址。其中 128.0 和 191.255 属于特殊地址,可用的 B 类地址就是 16384 - 2 = 16382 个。
可变化的主机位有 16 位,即 65536 个主机地址。其中网段地址和广播地址不能分配给主机使用,每个 B 类地址可用的主机地址就是 65536 - 2 = 65534 个。
B 类地址的范围是 128.0.0.0 ~ 191.255.255.255 。
B 类地址子网掩码是 255.255.0.0 ,也可写作 /16 。
C 类地址前三位以 110 开头,可变化的网络位有 21 位,即 2097152 个 C 类地址。其中 192.0.0 和 223.255.255 属于特殊地址,可用的 C 类地址就是 2097152 - 2 = 2097150 个。
可变化的主机位有 8 位,即 256 个主机地址。其中网段地址和广播地址不能分配给主机使用,每个 C 类地址可用的主机地址就是 256 - 2 = 254 个。
C 类地址的范围是 192.0.0.0 ~ 223.255.255.255 。
C 类地址子网掩码是 255.255.255.0 ,也可写作 /24 。
网段地址是主机号全为 0 的地址,表示某个网段,比如:网段地址 192.168.10.0/24 表示的是网络号为 192.168.10 的所有地址。
广播地址是主机号全为 1 的地址,向同一个网段中的所有主机发送数据包的一个地址,比如:网段地址 192.168.10.0/24 的广播地址是 192.168.10.255 。
分类地址保留了几个可以自由使用的私网地址。
A 类私网地址是 10.0.0.0
B 类私网地址范围是 172.16.0.0 ~ 172.31.0.0
C 类私网地址范围是 192.168.0.0 ~ 192.168.255.0
举个栗子
A 类私网地址 10.10.10.10
可推算出:10.10.10.10 的网段地址是 10.0.0.0/8 ,子网掩码是 255.0.0.0 ,广播地址是 10.255.255.255 ,第一个可用地址是 10.0.0.1 ,最后一个可用地址是 10.255.255.254 ,可用地址范围是 10.0.0.1 ~ 10.255.255.254 。
B 类私网地址 172.20.20.20
可推算出:172.20.20.20 的网段地址是 172.20.0.0/16 ,子网掩码是 255.255.0.0 ,广播地址是 172.20.255.255 ,第一个可用地址是 172.20.0.1 ,最后一个可用地址是 172.20.255.254 ,可用地址范围是 172.20.0.1 ~ 172.20.255.254 。
C 类私网地址 192.168.30.30
可推算出:192.168.30.30 的网段地址是 192.168.30.0/24 ,子网掩码是 255.255.255.0 ,广播地址是 192.168.30.255 ,第一个可用地址是 192.168.30.1 ,最后一个可用地址是 192.168.30.254 ,可用地址范围是 192.168.30.1 ~ 192.168.30.254 。
子网掩码必须和 IP 地址一起使用,子网掩码也是由 32 位二进制数组成,网络位为 1 ,主机位为 0 。子网掩码和 IP 地址进行与( AND )运算,得到这个 IP 地址的网段地址。换句话说, IP 地址有多少位网络号,子网掩码就有多少位取 1 ,其余都取 0 。
子网掩码可以使用十进制数表示,还可以使用斜线记法表示。
根据 IP 地址和子网掩码计算网段地址,先将 IP 地址和子网掩码转换成二进制数,然后将 IP 地址与子网掩码二进制数一位一位的做 AND 运算,再将结果转换为十进制,就是网段地址。
与( AND )运算
IP 地址和子网掩码的二进制数,逐位进行计算。只有当 IP 地址和掩码都是 1 时,运算结果为 1 。其余情况计算结果都为 0 。
分类地址使用的是固定网络位数,可分配的主机 IP 地址也是固定的。但是在实际使用网络时,需要的 IP 地址数量却是各不相同。
举个栗子:一个公司有 500 台电脑,需要分配 500 个 IP 地址。如果分配一个 C 类地址,一个 C 类地址的可用 IP 地址数量是 254 个,可用地址不够使用。如果分配一个 B 类地址,一个 B 类地址的可用 IP 地址数量是 65534 个,会造成大量的 IP 地址浪费。
再来个栗子:一个家庭有 2 台电脑需要上网,如果分配一个 C 类地址也很浪费,但是没有比 C 类范围更小的地址。
为了解决地址浪费问题,可使用 CIDR(无类域间路由)和 VLSM(可变长子网掩码)技术。
VLSM 可以对 A 、 B 、 C 类地址进行划分,划分成各种类型大小的网络,可用主机地址数量可以灵活变化大小。划分分类地址的过程也叫子网划分。
CIDR 可以把多个分类地址进行聚会到一起,生成一个更大的网段,以减少路由器中路由条目的数量,减轻路由器的负担。分类地址合并的过程也叫超网合并。
子网划分后或超网合并后的网段地址,不再是固定的网络位数,这种网络位数可变的网段地址也叫做无类地址。无类地址只能通过子网掩码识别出网络号。
子网划分是从 IP 地址主机位的最左边开始,把主机位划入网络位,得到多个子网地址。主机位变成网络位的部分叫做子网号,划分后的子网数量等于 2 的 N 次方,N 等于子网号的位数。
即每把一位主机位变成网络位,一个网段地址就变成两个子网地址,子网地址的地址数量只有原来网段地址的一半。
举个栗子
一个学校有 150 台电脑,有三个电脑室,每个电脑室 50 台电脑。使用私有地址 192.168.0.0/24 给每个电脑室都分配一个网段地址。
网络规划步骤:
再来个栗子
一个公司有 157 人,市场部 100 人,技术部 50 人,行政部 4 人,财务部 3 人,每人一台办公电脑。使用私有地址 192.168.100.0/24 分别为每个部门划分网络地址。
网络规划步骤:
与子网划分相反,把一些小网络组合成一个大网络就是超网合并。
192.168.3.64/26 和 192.168.3.128/26 可以合并吗?
192.168.3.64/26 和 192.168.3.128/26不能合并。
当子网掩码向左移动一位时,网络号不相同,无法合并;
当子网掩码向左移动两位是,网络号是相同了,但是合并了四个网段,非 192.168.3.64/26 和 192.168.3.128/26 合并。
结论:子网掩码左移一位,且网络号相同,能够合并两个网段;左移两位,且网络号相同,能够合并四个网段;左移三位,能够合并八个网段。依次类推。
路由器在收到数据包时,会识别目的 IP 地址的网络号,来查询路由表的路由条目,根据最长匹配的路由条目,来判断应该从哪个接口转发数据包。路由表中有匹配的路由条目才会发送数据,无匹配的路由条目则直接丢弃。
路由表由路由条目组成,路由条目包含目的地址、下一跳和出接口等。
目的地址( Destination / Mask )表示目的网段地址或目的 IP 地址。目的地址既可以是直连在路由器接口上的网段地址,也可以是其它路由器上的网段地址或 IP 地址。
下一跳/出接口( NextHop / Interface )表示转发目的地址的数据包时,下一跳设备的接口 IP 地址,或者是将数据包从哪个接口转发出去。
协议类型( Proto / Protocol 简写 )表示路由条目的获取方式,一共有三种方式。
优先级( Pre / Preference 简写 )表示有多条去往同一个目的地址的路由条目,根据路由条目的类型,选择优先级最高的路由条目添加到路由表里面。
路由优先级的值越小,代表这种类型的路由优先级越高。
路径开销( Cost )表示通过同一种路由类型学习到多条去往同一个目的地址的路由条目,选择路径开销最小的路由条目添加到路由表里面。
直连路由是唯一一种自动向路由表中添加路由条目。这种路由条目指向的目的网络是路由器接口直连的网络,直连路由的路由优先级和路径开销值都是 0 。
为了保障直连路由的可用性,路由器只会把状态正常的接口所连接的网络,作为直连路由放入自己的路由表中。
默认情况下,路由器只会自动生成直连路由。对于非直连网络,路由器并不知道要如何转发才能到达非直连网络。这时,我们就可以手动添加静态路由,告诉路由器如何转发去往某个网络的数据包。
静态路由的默认路由优先级为 60 ,还可以手动调整静态路由的优先值。静态路由的路径开销值是 0 。路由器静态路由配置命令:
ip route-static destination-address mask-length nexthop-address
通过目的地址相同、下一跳或出接口不同的两条静态路由实现数据流量的负载分担,路由器会同时使用这两条静态路由条目转发数据包。但是在实际网络环境中,不推荐使用,因为数据报文往返路径不对称,会导致上层应用受影响。
通过目的地址相同、路由优先级不同的两条静态路由实现路由备份,当优先级高的路由条目出现问题时,路由器就会使用另一条优先级低的路由条目来转发数据包。
优点:
缺点:
路由器只能转发有路由条目的数据包,对于网络未知的数据包,只能选择丢弃。实际上,我们也不可能知道所有网站或者应用程序的 IP 地址,需要使用一种特殊的路由条目解决这个问题。
路由转发的最长匹配原则是:当匹配目的 IP 地址的路由条目有多条时,路由器会选择子网掩码最长的路由条目,也就是最精确的路由条目来转发数据包。
我们通常会配置一条 0.0.0.0/0 的静态路由,根据最长匹配原则,可以匹配任何目的 IP 地址的数据包,保证任何数据包都能被转发出去;同时,只要路由器上还有任何一条可以匹配目的 IP 地址的路由条目,这条路由条目一定比 0.0.0.0/0 更精确,于是路由器会用更精确的路由条目来转发数据包。这就是静态默认路由,也是静态路由的一种。
一般家用路由器上除了本地直连路由外就只设置个默认路由,把去往互联网的流量都转发给运营商的路由器。
两个网络之间要实现通信,必须要通过网关。网关通常位于有路由功能的设备上,网关的 IP 地址可以是路由器的某个接口的 IP 地址,也可以是三层交换机 VLAN 端口的 IP 地址。
一台主机可以由多个网关,当一台主机找不到可用的网关时,数据包可以发送给默认网关。其实主机上配置的默认网关就是默认路由。
配置路由时,需要在通信双方都进行配置,不要忘记配置回程路由。
参考资料:
TCP/IP详解 卷1:协议 - W·Richard Stevens
网络基础 - 田果
路由与交换技术 - 刘丹宁
……