网卡硬件和ISO模型对应关系

一直不清楚MAC、PHY和Serdes之间到底是怎么连接的,今天理了理,
如果MAC没有内置PHY的话,可以认为MAC通过Serdes连接PHY。

OSI模型

OSI模型

每层之间的关系如下图:

OSI模型

OSI模型和MAC、PHY之间的关系

MAC是链路层的协议,也可以表示IP,PHY是IP。
他们之间的关系可以参考下面这幅图
OSI和MAC、PHY关系图

MAC和PHY之间可以通过Serdes互联。

一般在IP上,可以按照下面的方式互联:
IP互联

Linux Kernel驱动

在linux kernel中,网卡的驱动一般分成两部分MAC和PHY,也有MAC内置PHY的情况。
IP层上由kernel的tcp/ip协议栈实现。

MAC在kernel的结构体为struct net_device,主要处理收发包,以及IP中的ring buffer,
和kernel中的net框架打交道。

PHY一般通过MDIO总线进行访问。
PHY在kernel的结构体为struct phy_device,主要用来做自协商和link状态通知,有的PHY
也有高级功能,比如统计、Wake-on-LAN、MACSec等,它主要和内核中的phylib和phylink
框架打交道,PHY基本上已经非常标准化了,很多功能已经在phylib中实现了。

用户态工具

ethtool主要用来观察MAC,mii-tool基本已经不用,但是可以用它来观察PHY。

参考

知道是不会有人点的,但万一有人呢:)