路由器的衍生知识点
子网和子网掩码
在机器间传递消息的时候**,如果在同一子网下,接直接将包通过交换机发出去,如果不处于一个子网,就需要通过路由器去处理。**
处于同一子网
192.168.0.1 和 192.168.0.2 处于同一个子网
192.168.0.1 和 192.168.1.1 处于不同子网
那么我们很清晰的就能发现规律,对于192.168.0.1和192.168.0.xxx就是和它在同一子网,否则就是不同的子网。
那对于计算机来讲,就需要一种方式来辨认是否在同一子网,也就是找出相同的几位,那么就可以用到子网掩码的概念。
**例如:**某台机器的子网掩码定为255.255.255.0
**这表示:**将源IP与目的IP分别同这个子网掩码进行与运算,相等则是在一个子网,不相等就是在不同子网。
比如:
A电脑:192.168.0.1 & 255.255.255.0 = 192.168.0.0
B电脑:192.168.0.2 & 255.255.255.0 = 192.168.0.0
C电脑:192.168.1.1 & 255.255.255.0 = 192.168.1.0
D电脑:192.168.1.2 & 255.255.255.0 = 192.168.1.0
//那么 A 与 B 在同一个子网,C 与 D 在同一个子网,但是 A 与 C 就不在同一个子网,与 D 也不在同一个子网,以此类推。
如果 A 给 C 发消息,A 和 C 的 IP 地址分别 & A 机器配置的子网掩码,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发给路由器,就不管了,之后怎么转发,A 不关心。
默认网关
机器联系路由器的方式就是在A上设置默认网关
当机器判断出自己应该把包发送给路由器,他就会将包发给默认网关,也就是说直接发给同处于一个子网下的某个IP上,至于接受的是否是路由器它并不关心。
默认网关就是机器内部配置的一个IP地址,以便在发给不同子网的机器时,将包发送给该IP地址。
路由表
路由表就是路由器端口和IP地址对应的表,与MAC地址表类似。
路由表就表示,192.168.0.xxx 这个子网下的,都转发到 0 号端口,192.168.1.xxx 这个子网下的,都转发到 1 号端口。下一跳列还没有值,我们先不管。
ARP协议
ARP协议就是以某种广播请求来将IP地址和对应的MAC地址做表。
ARP协议,同时电脑 A 和 B 里面也会有一张 ARP 缓存表,表中记录着 IP 与 MAC 地址的对应关系。
一开始的时候这个表是空的,电脑 A 为了知道电脑 B(192.168.0.2)的 MAC 地址,将会广播一条 ARP 请求,B 收到请求后,带上自己的 MAC 地址给 A 一个响应。此时 A 便更新了自己的 ARP 表。
这样通过大家不断广播 ARP 请求,最终所有电脑里面都将 ARP 缓存表更新完整。
小结
电脑视角:
- 1)首先我要知道我的 IP 以及对方的 IP;
- 2)通过子网掩码判断我们是否在同一个子网;
- 3)在同一个子网就通过 arp 获取对方 mac 地址直接扔出去;
- 4)不在同一个子网就通过 arp 获取默认网关的 mac 地址直接扔出去。
交换机视角:
- 1)我收到的数据包必须有目标 MAC 地址;
- 2)通过 MAC 地址表查映射关系;
- 3)查到了就按照映射关系从我的指定端口发出去;
- 4)查不到就所有端口都发出去。
路由器视角:
- 1)我收到的数据包必须有目标 IP 地址;
- 2)通过路由表查映射关系;
- 3)查到了就按照映射关系从我的指定端口发出去(不在任何一个子网范围,走其路由器的默认网关也是查到了);
- 4)查不到则返回一个路由不可达的数据包。
如果你嗅觉足够敏锐,你应该可以感受到下面这句话:
网络层(IP协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的。
涉及到的三张表分别是:
- 1)交换机中有 MAC 地址表用于映射 MAC 地址和它的端口;
- 2)路由器中有路由表用于映射 IP 地址(段)和它的端口;
- 3)电脑和路由器中都有 ARP 缓存表用于缓存 IP 和 MAC 地址的映射关系。
这三张表是怎么来的:
- 1)MAC 地址表是通过以太网内各节点之间不断通过交换机通信,不断完善起来的;
- 2)路由表是各种路由算法 + 人工配置逐步完善起来的;
- 3)ARP 缓存表是不断通过 ARP 协议的请求逐步完善起来的。