物理网卡、网卡接口、内核、IP等属性的关系

物理网卡明明是块小板子,为何跟和eth0对应?为何还能给物理网卡配置IP地址?

1 类比

  • 人=》物理网卡
  • 人的姓名=》网卡接口名称
  • 人的档案信息(保存在公安机构)=》网卡接口的配置信息
  • 公安机构=》内核

你的朋友知道这名字对应你,但对派出所,不能依赖你名字识别你,因为人可能改名,也可能重名,所以人都有身份证号。派出所会根据你的档案信息做出对应处理,如户籍是杭州,某些事就得交给杭州办。

网卡也一样,用户可通过网卡接口名称识别网卡,但网卡接口名称不可靠,接口名称只是显示给用户看,对内核,内核是通过为该网卡接口分配的UUID属性识别网卡。内核和网卡交互时,内核需根据网卡接口的配置信息来决策。

2 网卡和网卡接口

物理网卡是硬件设备,硬件设备在os工作,得有对应驱动。物理网卡驱动程序向os内核注册该网卡设备,从而让内核识别该物理网卡。

网卡注册成功后,用户就能看到该物理网卡对应的网卡接口(如eth0、本地连接等名称),再经过配置,就能启动该网卡设备使其工作。

网卡注册成功后,并非一定显示对应接口名称,这取决于设备管理程序的行为。即使看不到网卡接口,但可能它对应网卡设备已能工作。

物理网卡、网卡接口、内核、IP等属性的关系

3 网卡接口配置属性

还可以对网卡做一些配置,如配置IP地址、配置DNS、配置是否使用DHCP动态获取IP地址:

$ cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=97c84984-8b8e-4686-af19-1cb2f5f89db6
DEVICE=ens160
ONBOOT=yes

你可能从一开始就认为这些属性都是配置在网卡,大概是因为这些属性都是直接控制对应网卡。但实际上,这些属性都配置在内核,部分信息保存在内核的网络协议栈。这些属性都应称为网卡接口的属性,而非网卡属性,所谓网卡属性是那些网卡出厂设置的硬件属性,如MAC地址。

所以,IP地址、网关等网卡配置信息,都属于内核:

物理网卡、网卡接口、内核、IP等属性的关系

为某网卡接口配置属性后,在内核网络协议栈中,该网卡就有对应配置属性(档案信息),以后内核需要和该网卡交互时,就能基于这些属性来工作。

  • 如为网卡接口eth0配置开机自启动,则系统启动时,内核就会自动启动该网卡设备
  • 如为eth0配置了IP地址10.10.10.10后,那么在内核协议栈中,该网卡接口就对应了该IP地址(注意,IP等网卡接口属性属于内核)。当本机收到目标地址是10.10.10.10的数据包后,内核知道该地址是为本机某个网卡接口所配置的,于是内核收下该数据包,而不会丢弃或转发。

如为eth0配置子网掩码后,基于该子网掩码,内核就能知道某IP地址是否和该网卡接口在同一网段。

总之,这些接口配置信息都是为内核配置,内核会基于这些配置信息做出处理。

4 内核和网卡的关系

网卡工作在OSI七层模型最底层(物理层),最基本的功能是以比特流的方式接收和发送数据(可以通过介质传输),这是硬件自身的功能。

内核和网卡的关系,内核就像封闭加工厂,网卡就像加工厂大门。所以,对内核,网卡作用就是接收外界流入的数据和发送内部流出的数据。

物理网卡、网卡接口、内核、IP等属性的关系

如上图,每个物理网卡都像门一样,都连接着两端:

  • 一端是内核(网络协议栈)
  • 另一端是外界网络

当本机要通过该网卡向外发送数据,数据从内核协议栈写入网卡,然后网卡发出去。

当该网卡接收到外界传来的数据时,网卡需中断,通知内核有数据来临(因为只有内核才有读写数据特权),数据将从网卡读取到内核协议栈。这就像带有门卫系统的门一样,有人来了先报告。

网卡是一个带芯片的硬件设备,有芯片意味着除了硬件自身基础功能外,还可通过一些代码(网卡驱动程序)来控制网卡的工作,如中断通知内核、DMA等。

若网卡无DMA功能,网络协议栈和网卡之间的数据传输都将由内核完成读或写。网卡具备DMA功能时,网卡和网络协议栈之间的数据传输主要由网卡DMA完成,DMA传输完数据后,DMA控制器中断通知内核,表示数据已写入目标内存地址。

物理网卡也有缓存:

  • 当内核想要通过某网卡发送数据时,该网卡可以将内核写入该网卡的数据缓存起来,然后由网卡自身来决定何时发送数据
  • 网卡接收数据时也可以缓存一部分后再通知内核来读取网卡中的数据

5 总结

物理网卡是硬件设备,工作在OSI最底层,其硬件功能是以比特流的方式接收和发送数据 物理网卡需网卡驱动程序向内核注册后方可工作,注册后一般会显示对应的网卡接口,网卡接口名称是给用户看的,内核不以接口名称来识别网卡 为网卡接口做的配置属于内核而非网卡 内核在和某网卡交互时,会基于内核中属于该网卡的配置属性做出决策和对应的处理 物理网卡一端是内核(网络协议栈),另一端是外界网络 物理网卡收发数据(先不考虑DMA方式): 发:本机通过某物理网卡发送数据时,内核将网络协议栈中的数据写入该网卡,该网卡将其发送出去 收:网卡收到数据后,中断通知内核,内核从网卡读取数据并放入网络协议栈 但网卡具有DMA功能,所以网卡和网络协议栈之间的数据传输主要由网卡负责,DMA传输完毕后DMA控制器中断通知内核已传输完毕

  • 内核:图解Linux网络包接收过程 - 环信
发表评论

相关文章