首先,我们需要明确的是在整个转发过程中什么是变化的,什么是不变的。
源和目的mac地址产生变化
源和目的ip地址不变
接下来,我们一起看看转发的过程:
1、主机A查看查看自己的ARP表。如果主机A第一次给主机B发送数据包,那将无法从ARP映射表中找到对应的mac地址。
所以主机A将以FF:FF:FF:FF:FF:FF为目的mac地址,发送一个广播包。
2、这个时候,如果主机B在本网段内。则主机B会向主机A发送一个应答包。让主机A得到主机B的mac地址。这样主机A
将分别以自己和主机B的mac地址作为源和目的地址,以自己和主机B的ip地址作为源和目的地址发送数据包。交换机将通
过自身的mac地址表找到主机B对应的端口,并发送给主机B。
3、但是一般情况并非是这样,如果主机B不在本网段内。路由器的端口将通过把自己的mac地址发送给主机A,这个时候
主机A的操作和2基本相同。将目的mac地址替换为路由器端口的mac地址。并且发送出去,并且通过同样的道理发送到路
由器的端口。(注:如果是直连,则不需经过交换机直接发送)
4、路由器从端口中接收数据包之后,进行数据链路层帧头的拆包。并从网络层的ip数据报头中获取目的ip地址,根据路由
表进行转发。获得下一跳的ip地址后,如果路由器中没有下一跳的mac地址,则进行mac广播这里跟1中是相同的。但是区
别在于,这里就算知道了下一跳的ip地址,但是保留原ip报文中的ip信息。不进行替换。
5、路由器将源mac地址替换为转发出的端口mac地址,目的mac地址转换为下一跳mac地址。进行转发。
6、当下一跳收到数据包后,重复3、4、5的步骤。直到主机B收到对应的数据包