做为网络设备,二层转发是最基本的功能。要想继续学习linux 内核协议栈,必须明白二层转发的流程。这篇文章举例讲一讲二层转发的流程。
二层转发是根据报文的目的MAC直接进行转发,转发过程中不用对报文的头部做任何的修改。
三层转发则是根据报文的ip 地址来进行转发,并且要对报文的二层头部进行相应的修改。
进行二层转发的设备一般叫做网桥(bridge)。桥可以是一个单独的一台网桥设备,也可以是运行在设备内的软件实例,即虚拟桥,又叫软桥。这里我们的桥指的是软桥。
桥接是指报文经过桥后直接根据桥内维护的转发信息表把报文原封不动的转发出去,因为报文经过桥转发后报文不被修改,所以桥设备在整个链路上是透明的。
每个桥内都会维护一张转发信息表,转发表项包含如下信息:
MAC:设备的MAC地址
port:该设备连接在交换机的哪个端口。
所以桥收到报文后根据目的MAC查到表项就知道报文的出端口,直接转发出去即可。
下面就以同一网段内两台PC之间 ping 报文的通信流程来讲一下二层转发中报文的处理流程:
如上图所示:
交换机上运行一个软桥的实例,eth0和eth1两个物理口加入到软桥中。这时eth0 和 eth1 接口上都不需要配置ip 地址,并且被配置为混杂模式。
PC1 和PC2通过交换机组成一个局域网。我们以PC1 ping PC2为例来说明二层转发时报文