在 Cisco Packet Tracer 中模拟路由器
使用路由器就不是简单的单个局域网了,一般是连接多个不同网段的互连网,在这之前我们应该首先了解一下 IP 地址、网段、子网掩码、MAC 地址、网关等概念,然后再来看路由器,会更加深刻一些。
MAC地址
首先是 MAC 地址是 分配给网络接口(Network Interface)的唯一标识符,由 IEEE802 标准规定,他通常是由厂商在出厂的时候直接写入网卡中的(写入 ROM 中),每一个 MAC 地址,都占用 6 个字节也就是 48 bit,前三个字节是 OUI,也就是组织唯一标识符,表示生产厂商,由 IEEE 的注册管理机构分配给厂商,后三个字节则是网络结构标识符,是厂商自己分配的。
如果是在不同的操作系统中,对 MAC 地址进行查询,表示的格式可能不同,一般都是使用 16 进制,例如在 Windows 中,格式为:11-22-33-44-55-66-77-88。而在类 Unix 系统中表示格式为:11:22:33:44:55:66:77:88。在 Cisco Packet Tracer 中,格式为:1122.3344.5566.7788。
值得注意的是如果 MAC 地址全为 1 的时候,代表的是广播地址,例如 ARP 中,就是先使用广播地址,拿到目标 MAC 地址以后再通过目标 MAC 地址发送 ICMP。
虽然硬件的 MAC 地址一般不让修改,但是软件层面依旧可以修改 MAC 地址,类似于玩游戏封号以后修改机器码。
在2-网桥和4-交换机中我们提到,他们拥有自学习能力的,会记录下来端口侧有哪些 MAC 地址,但是这个缓存时间有多长主要取决于机器、操作系统和缓存模式,如果是动态模式,一般就是 2 分钟,但也不一定,不同的机器或者操作系统是不同的,如果是静态模式,缓存时间可能更长,可能一直到关机,缓存都不会被清理,也可能即使重启,也依旧有缓存。此外缓存可以手动清理,不用担心缓存问题。
IP 地址与子网掩码
IPv4
IP 地址和 MAC 地址类似,用来标识互联网上的每一个主机,我们最常见的 IP 地址是 IPv4 版本的 IP 地址,一共 4 个字节(32 bit),目前为止已经被用完。
IPv4组成部分
IPv4依旧是考研 408 中,最主要的研究对象,IPv6 并没有那么高的要求,因此我们主要讨论的也是 IPv4,之后如果没有标清楚,IP 一般就是指 IPv4 地址。
为了方便记忆,我们将 IP 地址按照字节划分为 4 个部分:
| 1100 0000 | 1010 1000 | 0000 0001 | 0000 1010 |
|---|---|---|---|
| 第一部分 | 第二部分 | 第三部分 | 第四部分 |
| 192 | 168 | 1 | 10 |
如果按照功能划分,IP 地址可以被分为两部分:网络标识(网络 ID)和主机标识(主机 ID),所谓同一网段,就是说网络 ID 相同,同一网段的两台设备,主机 ID 不同。如何划分网络 ID 和主机 ID 呢?
子网掩码
我们使用 子网掩码 来划分网络 ID 和主机 ID,例如:
IP 地址:192.168.1.10
子网掩码:225.255.0.0
把 IP 地址和子网掩码写成二进制并进行按位与操作,得到网路 ID:192.168.0.0,而子网掩码中 0 对应的 IP 地址中的部分就是主机 ID,这里是:0.0.1.10。
所以我们可以用一种更加简单的方式(CIDR:无类别域间路由),表示 IP 地址和子网掩码:192.168.1.10/16,这就表示,子网掩码前 24 位为 1,于是可以以此为依据,划分网络 ID 和主机 ID。
此时我们还是要注意一个问题,利用子网掩码划分好了网络 ID 和主机 ID 以后,主机分配到的 ID 并不能完全任意,例如,192.168.0.0 主机位全 0,此时就代表这个网段,而不能分配给主机。此外还有 192.168.255.255 也不能分配给主机,主机位全 1 代表的是这个网段中的广播 IP 地址,因此,在这个例子中,我们能分配给主机的 IP 地址一共有 个。
IP地址的分类
IP 地址也是有分类的:
- A 类地址默认子网掩码是 255.0.0.0,使用前 8 位作为网络 ID,并且这 8 位网络 ID 必须以 0 开头,剩下的 24 位作为主机 ID
注意,A 类地址除了上面的要求,还有一些要求,网络 ID 不能为 0,并且 127 要作为保留网段,其中 127.0.0.1 是本地环回地址(Loopback),代表本机地址。也就是说网络 ID 的取值范围为 1~126,也就是说快捷判断 A 类地址就看 IP 地址的第一部分的范围是不是 1~126。主机 ID 的限制和之前说的一样,主机位不能全 0 也不能全 1,因此 A 类网络一共有 个,每个 A 类网络能够容纳的最大主机数是:
- B 类地址默认子网掩码是 255.255.0.0,使用前 16 位作为网络 ID,并且网络 ID 必须以 10 开头,剩下 16 位作为主机 ID
B 类地址的第一部分范围是128~191,剩下的都是 0~256,所以 B 类网络一共有 个,每个 B 类网络最多容纳 台主机
- C 类地址默认子网掩码是 255.255.255.0,使用前 24 位作为网络 ID,并且网络 ID 必须以 10 开头,剩下 8 位作为主机 ID
C类地址的第一部分范围是 192
223,剩下的部分都是 0255,C 类网络一共有 个,每个 C 类地址最多可以容纳 台主机
- D 类地址以 1110 开头,多播地址
D类地址第一部分取值范围为 244~239
- E 类地址以 1111 开头,保留为今后使用
E类地址第一部分取值范围为 240~255
因此只需要看第一部分的数值就可以判断到底是哪一类地址。
只有 ABC 三类 IP 地址可以分配。
IPv4 的子网划分与合并
子网划分
考试很容易考的一类题,不论是考研还是期中期末考试都会出现这种题。给定一些条件,按照条件进行子网划分。
子网划分就是,利用主机位作为子网位,划分出多个子网。子网划分分为:
- 等长子网划分:将一个网段等分成多个子网,每个子网的可用 IP 地址数量是一致的(划分为等长的 个子网,掩码往右扩展 位)
- 变长子网划分:每个子网的可用 IP 地址可以是不一样的(其实我的理解是 ABCDE 类IP 地址,就类似于对整个 IP 地址进行变长子网划分)
总结规律:

补充:
一台主机想和另外一台主机通信的时候,首先是要判断另一台主机是否和自己处于同一网段,判断的方法是:用对方的 IP 地址与自己的子网掩码进行与运算,如果得到的结果和自己的 IP 地址与自己的子网掩码进行与运算的结果相同,说明处于同一网段,若不同,则认为处于不同的网段,无法通信,例如主机 A(192.168.0.10/24)和主机 B(192.168.10.10/16)通信,主机 A 在知道 B 的 IP 地址以后,将 B 的 IP 地址和 A 的子网掩码进行与运算,得到结果 192.168.10.0/24,而自己则是 192.168.0.0/24,明显不处于同一网段,无法ping通,反过来,B 想和 A 通信也是如此,计算 A 得到 192.168.0.0/16,计算自己得到 192.168.0.0/16,B 确实可以发数据给 A,但是ping要求 B 还要拿到 A 的返回,可是 A 没法发数据回 B,所以也是无法ping通。
超网
于子网划分的概念相反,超网是将多个连续的网段合并成一个更大的网段。
并不是任意网段都可以合并,必须得是连续的网段。
例如:

两个连续的网段也不一定可以通过子网掩码左移一位实现合并,例如:

总结一下合并的规律:


如何判断一个网段是子网还是超网
想要判断一个网段是子网还是超网,只需要看子网掩码是往左移动还是往右移动,例如:
192.168.10.10/22 就是一个超网,因为 192 开头的地址是C 类地址,而 C 类地址的子网掩码是 24 位的,22 明显是左移了,所以这是一个超网。
191.168.10.10/18 就是一个子网,因为 191 开头的地址是 B 类地址,而 B 类地址的子网掩码是 16 位的,所以这是右移了,这是一个子网。
IPv6(待补充)
为了扩大 IP 地址,不让 IP 地址再被用完,后面推出了 IPv6,一共 16 个字节(128 bit)
路由与路由器
之前我们提到的计算机连接方式,都是用于连接同一个网段下的主机的,例如交换机,他并不能用于给两个不同网段的主机进行通信,使用 Cisco Packet Tracer 可以观察到,两台主机无法 ping 通,这也是为什么我们不说交换机是网络通信的终极方案,而是说交换机是局域网的终极方案,要想让两台处于不同网段的主机进行通信,就需要使用路由器,这也是路由器的作用,使用路由器和交换机配合,才有了整个互联网。
首先我们先来看看如何使用 Cisco Packet Tracer 模拟两台不处于同一网段的主机,利用路由器进行通信的,首先创建一下这样一个实例,并且给主机配置上不同网段的 IP 地址:

接下来就应该配置我们的路由器:

与 PC0 连接的路由器端口配置为 192.168.1.1/24,和 PC0 的 IP 处于同一网段,记得打开端口:

同理与 PC1 连接的路由器端口配置的 IP 也要与 PC1 的 IP 处于同一网段,这里设置为 192.168.2.1/24,同样也要打开端口:

可以看到配置好了以后,各个端口状态都是绿色,说明已经连好了:

但是这并不是说 PC0 可以和 PC1 直接通信了,记得 PC0 和 PC1 还要配置网关,首先是 PC0,网关就是路由器的端口 IP:

PC1 也是同理:

但是配置网关为什么不配置网关的子网掩码呢?因为网关必须和主机 IP 位于同一网段,所以根本不需要单独配置网关的子网掩码。
然后就可以 ping 一下,看看 PC0 能不能和 PC1 正常通信,反过来也可以试试:


我们发现第一次数据包发送失败了,但这并不是巧合,这是因为路由器需要先 通过 ARP(地址解析协议)去找到目标主机的 MAC 地址。第一次 ping 的时候,这个过程还没完成,所以第一个包可能丢失。之后 ARP 表里有了记录,后续 ping 就能正常通了。
那这就是最简单的路由器连接的网络了,我们可以把这个网络变得更加复杂:

我们按照刚才的经验连接好并且配置好了,大部分接口已经是绿色的了,但是这两个路由器连接以后,它们互联的两个端口依旧是红色的,我们可以使用 PC0 ping PC2,也可以使用 PC1 ping PC3,都是可以 ping 通的,但是如果使用 PC0 ping PC3,我们将会得到这个:

网关回复了我们的请求,说 PC3 是无法抵达的,这说明,左边的包到不了右边,右边的包也到不了左边,看来中间的接口报红是必须解决的,这是因为路由器只能直接转发给配置好的并且直接连接路由器的设备,如果需要通过多个路由器转发就不能直接抵达了,事实上解决这个问题并不复杂,只需要给路由器进行进一步的配置:
首先是 Router0:

然后是 Router1:

会发现这两个接口配置的 IP 是同一个网段的,这是非常重要的要求,这两个接口的 IP必须是同一个网段的,否则无法通信。配置好了记得把接口打开,图片中忘记了。
到这一步依然还是不能直接通信,因为我们忘记了最重要的一步,配置路由。
所谓路由,指的是数据包从源设备到目标设备所经过的路径,而 路由器 是负责决定这些路径的设备,路由器通过维护一张路由表,根据路由表来决定数据包到底去哪里。
路由分为静态路由和动态路由,这里只演示静态路由,动态路由后面还会单独补充。
在 Cisco Packet Tracer 中该如何配置路由呢?
首先是路由器 0,因为我们想让左边访问到右边去,右边有两个网段,一个是 192.168.2.0/24,一个是192.168.4.0/24,并且需要路由器 1 转发一次,那我们需要给路由表插入两条:


现在路由表里有两条路由了,如果只配置了路由器 0,左边可以到右边去,但是 ping 是需要数据返回的,所以还是需要给路由器 1 也配置上才行。
同理,左边有两个网段 192.168.1.0/24 和 192.168.3.0/24:

这样就可以使用 ping 来测试连通了,例如我想使用 PC0 ping PC3:

这样就可以了。
如果我想给 192.168.2.0/24多加一个设备会影响吗?我们可以试试,现在已经连接并配置好了 PC4:


看来是能直接 ping 通的,因为我们在路由表里面写的是 192.168.2.0/24 这个网段,只要属于这个网段,就可以直接抵达。
假如,我不想让整个 192.168.2.0/24 这个网段里的所有主机都被路由器转发怎么办?其实我们还是可以通过修改路由表实现更加精确的转发,例如我现在只希望 PC1 可以被PC0 或者 PC2 ping 通,不希望 PC4 被 ping 通:
先删除掉 192.168.2.0/24 这个网段的路由:


然后添加一个新的路由,我们不仅把 IP 写得更加精确了,子网掩码也变成了 255.255.255.255:

然后分别使用 PC0 去 ping PC1 和 PC4:

PC1 是正常的,而 ping PC4 直接被网关告知无法抵达,这说明 PC4 已经被屏蔽了,这就是路由器的实验。
最后总结一下,数据包的的大体传输过程:
主机根据目标主机的 IP 发送数据包,但是数据包最终是要靠 MAC 地址传输的,因为最后是要传输到目标网卡上,但是主机并不知道目标 IP 的主机的 MAC 地址是什么,所以数据包最开始的目标 MAC 应该是网关的 MAC 地址,路由器转发以后,数据包的目标是下一个网关的MAC 地址,一直传到目标主机的网卡上。
动态路由(待补充)
公网 IP 和私网 IP
IP地址分为公网 IP 和私网 IP,公网和私网的概念是很早就有了,正式的规范是 RFC 1918(1996年),其中划分了私网 IP 的范围,之前我们学习了 IPv4 地址的分类,A、B、C 类地址是可以分配给主机的,我们所说的公网 IP 一般都是说这些地址,但是要注意的是,A 类地址中的 10.0.0.0/8,B 类地址中的 172.16.0.0/12~172.31.0.0/12,C 类地址中的 192.168.0.0/16~192.168.255.0/24 等不会分配给公网,而是作为私网 IP。
此外 127.0.0.0/8:环回地址(Loopback),最常见的是 127.0.0.1。而169.254.0.0/16:链路本地地址(Link-local),APIPA 自动分配时使用
公网 IP 由因特网信息中心(Inter NIC)统一分配和管理,ISP 需要向 Inter NIC 申请公网 IP
NAT技术
IPv4 公网地址早就已经用完了,但是我们依然广泛地使用 IPv4,IPv4 并不足够给所有的设备都分配一个公网的 IPv4 地址,NAT 技术的出现刚好解决了 IPv4 地址不足的问题,NAT 是 Network Address Translation,它将私网 IP 地址映射到公网 IP 地址(这一步可以由路由器完成),让多台设备共用一个公网 IP 地址。NAT 技术不仅仅节省了公网 IP 地址,同时还通过隐藏内部网络结构增加了网络安全性。
NAT的分类
- 静态转换:需要手动配置 NAT 映射表,实现一对一转换
- 动态转换:定义好外部地址池,动态随机转换,但是也是一对一
- PAT:PAT 也是一种 NAT 技术,表示端口地址转换,可以实现多对一转换,最大程度上的节省公网 IP,采用端口多路复用方式,通过端口号标识不同的数据流,是目前应用最广泛的 NAT 实现方式