MAC层是基于二层(数据链路层)和三层(网络层)之间的,本文将通过两个例子说明静态路由和路由的过程,不扯虚的,往下看。
1、什么是MAC层,帧结构如何?
在MAC层里面,首先是目标MAC地址,然后是源MAC地址。然后是协议类型,用来说明是IP协议。
IP头里面包括版本号,目前主流的还是IPV4,也有IPV6。这里还有个8位的标识,用来区别下一层的协议是TCP还是UDP等。接下来就是IP层最重要的源IP地址和目的IP地址。

2、路由器工作原理?
路由器是一台三层转发设备,简单的看就是由多个网口和网卡组成,每个网口连接的就是一个单独的局域网。
当每个网卡或网口收到网络包的时候,路由器就会看一下需要转发给哪个网关,然后由该网口转发出去。
可以形象的认为路由器就是多个手,当其中一只手收到网络消息,就会取出MAC和IP层,根据路由算法,然后加上IP和MAC重新从其他手里转发出去。
3、静态路由是什么?
大致有两种,静态路由和动态路由。先来聊聊静态路由,这个也比较好理解。静态路由就是在路由器上配置一条条规则,之前我还刷了一段时间的路由器规则。这些规则其实可以理解为,想访问XXX,从X号口出,下一跳IP地址是XXX.XXX.XXX.XXX。每次需要选择从哪个网口出去,就会一条条匹配规则。匹配上就按照这个规则进行转发出去。
在局域网之间传递消息,一般有两种情况,假如在公网(或某一个局域网内部),没有IP冲突的时候,一般就会修改报文的MAC层,然后转发出去,参考下面的案例1。还有一种情况,就是每个局域网的IP有冲突,那么在传输的时候可能使用NAT协议进行IP转换,参考下面的案例2。
4、案例1,修改MAC地址,不改变IP地址。
如下面,假如最左边的192.168.1.101需要发包给最右边的192.168.4.101地址。需要经过三次转发。

第一次,192.168.1.101发给网关192.168.1.1,包的内容如下:
源MAC地址:服务器A的MAC地址
目标MAC地址:192.168.1.1网关的MAC地址
源IP:服务器A的地址192.168.1.101
目的IP:服务器B的地址192.168.4.101
第二次,192.168.1.1网关转发给下一个网关,此时包的转换后内容为:
源MAC地址:网关A 192.168.56.1的MAC地址
目的MAC地址:网关B 192.168.56.2的MAC地址
源IP:服务器A的地址192.168.1.101
目的IP:服务器B的地址192.168.4.101
第三次,由网关B转发给目标服务器B,此时包内容为:
源MAC地址:网关A 192.168.4.1的MAC地址
目的MAC地址:网关B 192.168.4.101的MAC地址
源IP:服务器A的地址192.168.1.101
目的IP:服务器B的地址192.168.4.101
最终服务器B,发现MAC地址是自己,网卡将包收进来。从上面可以看出,每次经过一个路由器都会改变包的MAC地址,但是IP地址没变。这种情况可以对应于在某个局域网内部传输,没有IP地址的冲突,不需要NAT转换,因此只改变MAC地址即可。
5、案例2:MAC地址和IP地址都会变

如上图所示,左边的服务器A可能在局域网LAN1,最右边的服务器B在局域网LAN2中,因此IP地址完全相同是有可能的。在服务器B上将配置为,发送给192.168.1.101的报文,IP要转换为192.168.56.2 。但是该地址和服务器A不在同一个网段,因此先发给网关A。
报文一:
源MAC地址:服务器A的MAC地址
目的MAC地址:网关A 192.168.1.1网关MAC地址
源IP:服务器A的地址 192.168.1.101
目的IP:网关B的地址192.168.56.2
网关A收到报文,一看是发给网关B的,然后目的MAC肯定就是网关B的MAC地址了。源MAC地址肯定就是网关A了。
报文2:
源MAC地址:网关A的MAC地址
目的MAC地址:192.168.56.2网关MAC地址
源IP:网关A地址 192.168.56.1
目的IP:网关B地址192.168.56.2
网关B收到报文,一看IP地址是自己,然后根据NAT规则将IP修改为局域网内的192.168.1.101。
报文3:
源MAC地址:网关B 192.168.1.1 的MAC地址
目的MAC地址:192.168.1.101网关MAC地址
源IP:网关A地址 192.168.56.1
目的IP:网关B地址192.168.1.101
从上面这个过程可以看出,IP地址会变换。这个过程就是NAT转换。这种是经常使用到的,因为每家的IP地址都是私有的IP地址,在公网进行传输需要进行IP的转化。
题外话,在面试中,也可能会问到,在应用层发送一个消息出去,可能经过怎样的传输,详细描述过程?你可以直接把这两种情况对应的MAC层和IP地址变换讲出来,他不服你就抽他个猪头 。




