家用路由器,其实有2种主要的功能,一种就是路由器,一种是交换机。
路由器是工作在网络层的设备,而交换机是工作在数据链路层的设备,所以不同的工作层级决定了它们的工作方式与作用的不同。路由器一般有两个物理接口,一个对应于WAN,接入广域网,一个是LAN,用于和局域网内的设备进行通讯,所以它也有两个IP,一个用于局域网,一个用于广域网。
首先来看下作为交换机,它的工作流程。交换机主要用于交换接入交换机物理接口的不同设备之间的数据,使得设备们可以互相传递数据。在局域网内的两台机器A(192.168.1.2/24)和B(192.168.1.3/24),假设都接入了同一个路由器,在A向B传递IP数据报的过程中,主要有以下几个步骤:
- 首先A机器通过子网掩码获得目的机器B的网络号为192.168.1,主机号为3,处在同一个子网,于是查询arp缓存,假如是第一次访问,则通过arp协议来进行广播,询问局域网内所有主机,谁是192.168.1.3。等到机器B回应自己的MAC地址后,机器A就知道要将数据包发往哪一个物理地址了。(在这里,机器A在发送arp请求的时候,该请求已经有自己的MAC地址信息,于是交换机在收到arp请求的时候,已经可以确定A连接的交换机的物理接口对应的MAC地址了,而B回应arp的时候,同理,B的交换机物理接口的MAC地址也确定了)
- 构造的数据包内,MAC为B的MAC地址,IP地址也为B的IP地址,传送到交换机的物理接口中。物理接口进行拆包,由于工作在链路层,它只关心MAC地址,获得目标MAC地址后,将数据包传送到B的物理接口上,于是B机器就收到了A机器传送的数据了。
我们发现,工作在链路层的交换机,它只关心链路层的数据头,所以它只根据MAC地址进行数据的转发。下面我们来看一下工作在网络层的路由器的工作流程,看看与工作在链路层的路由器有什么不同。机器A(192.168.1.2/24)向B(192.168.2.2/24)发送一个IP数据报,路由器内网地址(192.168.1.1/24),外网地址(192.168.2.254/24),下面为大概的步骤:
- 首先A机器通过子网掩码获得目的机器B的网络号为192.168.2,主机号为2,不处于同一个子网中,于是查找路由表,获得有效的网关,在这里网关就是路由器的内网地址(192.168.1.1/24),为了将数据报传送到另外一个网络中,必须通过路由器进行中转。所以这里的策略进行了修改,目标IP不变,依旧是B的地址,然而必须将该数据报先传送到路由器上,所以通过arp查询路由器的MAC地址,同时通过上述已经分析过的交换机的流程,将数据报传送到路由器上。
- 路由器是工作在网络层上的,所以需要解析网络层的数据头,此处要进行NAT,改写源IP为路由器的外网地址,源MAC为路由器的MAC地址,目的IP不变。接下来有两种情况。
- 假设路由器与目标机器不在同一个子网内,那么转发的数据包必须经过下一跳的路由才能进行转发,于是路由器作为步骤1中的A,执行步骤1。在这里主要是寻找下一跳路由的MAC地址,并将目的MAC改写,向下一跳路由进行分发。
- 假设路由器与目标机器在同一个子网内,那么该路由器应当是作为交换机上的一个物理接口的接入设备,直接根据目标IP查找目标机器的MAC,再经由交换机进行转发。
于是路由的过程,可能是一个路由器连接两个子网,也有可能是一个路由器连着一个路由器,经过若干路由器后,才能找到最终的目标机器。