openstack云主机网卡的混杂模式
程序员文章站
2022-05-11 15:39:34
...
为什么在openstack虚拟网络中要设置物理网卡为混杂模式promisc
sudo ifconfig eth0 promisc //设置混杂
sudo ifconfig eth0 -promisc //取消混杂
L2 数据链路层通过交换机设备进行帧转发。交换机在接收到帧之后(L2 层叫帧,L3 层叫包)先解析出帧头中的 MAC 地址,再在转发表中查找是否有对应 MAC 地址的端口,有的话就从相应端口转发出去。没有,就洪泛(专业术语,即将帧转发到交换机的所有端口),每个端口上的计算机都检查帧头中的 MAC 地址是否与本机网卡的 MAC 地址一致,一致的话就接收数据帧,不一致就直接丢弃。而转发表是通过自学习自动建立的。
这里引出一个重要概念,混杂模式。默认情况下计算机只接收和本机 MAC 地址一致的数据帧,不一致就丢弃,如果要求计算机接受所有帧的话,就要设置网卡为混杂模式(ifconfig eth0 0.0.0.0 promisc up)。所以在虚拟网桥中,如果希望虚机和外部通讯,必须打开桥接到虚拟网桥中物理网卡的混杂模式特性。
网卡工作模式有4种,分别是:
广播(Broadcast)模式
多播(Multicast)模式
单播模式(Unicast)
混杂模式(Promiscuous)。
在混杂模式下的网卡能够接收一切通过它的数据,而不管该数据目的地址是否是它。如果通过程序将网卡的工作模式设置为 “混杂模式”,那么网卡将接受所有流经它的数据帧,这实际上就是Sniffer工作的基本原理:让网卡接收一切他所能接收的数据。Sniffer就是一种 能将本地网卡状态设成混杂(promiscuous)状态的软件,当网卡处于这种”混杂”方式时,该网卡具备”广播地址”,它对所有遇到的每一个数据帧都 产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。可见,Sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数 据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。