以太网卡、IB网卡的详细介绍以及区别分析

本文介绍了以太网卡和IB网卡。以太网卡支持以太网协议,可按总线接口、带宽等分类;IB网卡在高性能计算领域优势明显,能卸载CPU处理。还对比了两者在带宽、时延、可靠性和组网方面的差异,并推荐了纳多德的几款网卡,帮助用户依网络环境和预算选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网卡(NIC)全称为网络接口控制器,也被称为网络适配器或网络接口卡,多用于计算机和服务器上,可通过网络连接线(双绞线、光纤线缆等),与交换机、存储设备、服务器、工作站等设备进行互连通信。随着市场热度以及技术能力的提升,也出现了各种类型的网卡,如以太网卡和IB网卡等。本文也将着重介绍以太网卡和IB网卡的区别,希望能帮助到您选择最合适的网卡。

什么是以太网卡?

以太网卡是一种网络适配器,是一种插入主板插槽的卡,支持以太网协议标准。每块网卡都有全球唯一的物理地址,称为MAC地址,在网络中可以依据网卡的MAC地址将数据准确地发送到目的计算机中。以太网卡的种类很多,分类方法也多种多样,可以按照带宽、网络接口类型、总线接口类型这三种方式进行划分。其中,光口的以太网卡一般叫做光纤以太网卡(光纤以太网适配器,简称光纤网卡),其遵循光纤以太网通信协议,通常使用光纤线缆与光纤以太网交换机连接,是目前应用最为广泛的网卡类型。目前光纤网卡主要可以从总线接口和带宽进行分类;

总线接口分类

以太网卡的总线接口类型可以分为PCI、PCI-Express(简写为PCI-E)、USB、ISA。ISA/PCI为较早时期的总线接口,随着技术的愈发成熟逐渐被淘汰。其中PCIE是目前使用最多的总线接口,在工业级应用和服务器计算机上非常常见。

1. PCIe卡的工作原理是什么?

PCIe是一个串行连接,工作原理更像是一个网络而不是总线,与其他处理不同来源数据的总线接口最明显的区别在于,PCIe控制数据的流向方式是通过交换机来实现点对点连接。PCle网卡插入插槽后生成一个逻辑连接(互连或链路)从而实现互相通信。它一般支持两个PCle端口之间的点对点通信通道并可以进行发送和接收普通PCI请求或者中断的动作。

2. PCIe卡有哪些分类?
规格:通常PCle插槽内的通道的数量决定了PCle卡的一个规格。常见的PCle卡的物理规格有以下五种:x1、x4、x8、x16和x32。如PClex8卡代表着该卡有八个通道。

版本:PCIe在取代旧的PCI和PCI-X总线标准时,不断进行调整改进从而满足日益增长的高带宽需求。最早的PCIe 1.0(2.5GT/s)版本发布于2002年,后续又出现了PCIe 2.0(5GT/s)、PCIe 3.0(8GT/s)、PCIe 4.0(16GT/s)、PCIe 5.0(32GT/s)、PCIe 6.0(64GT/s)和PCIe7.0(128GT/s)。其中所有的PCIe版本都是支持向后兼容的。

带宽分类

随着互联网流量的逐日增长,网络设备也面临着来自各大网络服务供应商的压力,不断地随着更高的性能需求在迭代更新,实现10G、25G、40G或高达100G的数据传输。关于它们的一些基本信息将在以下部分详细说明。

1. 10G光纤网卡(以太网服务器网卡)

10G光纤网卡采用32/64位PCI总线网络接口卡,支持10G单模或多模光纤,适用于企业及校园骨干网建设,同时,10G以太网最远可以传送高达100公里,可满足城域范围的传输要求,在城域网骨干层部署10G网络可大大地简化网络结构、降低成本、便于维护,通过端到端以太网打造低成本、高性能和具有丰富业务支持能力的城域网。

2. 25G光纤网卡

25G光纤网卡弥补了10G以太网的低带宽和40G以太网的高成本缺陷,采用25Gb/s单通道物理层技术,可基于4个25Gbps光纤通道实现100G传输。由于SFP28封装是基于SFP+封装研发而来,且两者尺寸相同,因此25G光纤网卡端口可支持25G以及10G速率。相较10G网卡而言,25G光纤网卡的更大带宽满足高性能计算集群的网络需求,在100G甚至更高速率的网络升级中,25G光纤网卡将是不可或缺的基础设施之一。

3. 40G光纤网卡

40G光纤网卡有一个40G QSFP+接口,支持40Gbps传输带宽。它同时也支持PCI-e x8标准插槽,确保高效和稳定地运行。通常情况下,40G光纤网卡有单端口和双端口,是企业数据中心、云计算、高性能计算和嵌入式环境的最高性能的互连解决方案。

4. 100G光纤网卡

目前市场上常见的100G光纤网卡为单端口和双端口的,每个端口最高可达 100Gb/s 以太网,保障可靠传输的自适应路由,增强的 vSwitch / vRouter 卸载能力。100G光纤网卡提供高性能和灵活的解决方案,在硬件中提供一系列创新的卸载和加速器,以提高数据中心网络和存储连接的效率。

服务器与交换机之前的连接不断向更高带宽方向发展,其中25G以太网卡作为连接25G服务器与100G交换机之间的中间设备已成为主流。以及随着数据中心正以前所未有的速度向400G发展,服务器与交换机之间的连接将趋于100G发展,100G网卡也在数据中心中扮演着不可或缺的角色。

在这里插入图片描述

什么是IB网卡?

InfiniBand网络
InfiniBand作为一个计算机网络通信标准,依靠着高吞吐带宽和超低的网络传输时延的优势在高性能计算(HPC)领域有着广泛的应用。InfiniBand网络可以通过交换机网络实现横向拓展从而适应各种规模的组网需求。从2014年开始,大多数的 TOP500 超级计算机都采用了Infiniband网络技术。近些年,AI/大数据相关的应用,也已经大规模地采用IB网络实现高性能的集群部署。

Infiniband作为一个分层的协议,定义了近似OSI七层协议模型的分层协议栈。IB协议通过IB交换机后可建立一个私有的并且受到保护的直连通道在服务器节点上。在这个通道中,数据和消息的传递将不再需要CPU处理,而是直接通过RDMA来实现。这样接收和发送的功能都卸载到了IB网卡上进行处理。物理上来说,IB网卡将基于PCIe接口与CPU内存实现互联,与其他通讯协议相比提高了更大的带宽、更低的时延以及更强的可拓展性。

在这里插入图片描述

InfiniBand网卡
InfiniBand体系结构定义了部署体系结构所必需的一整套硬件组件,IB网卡则是其中一个。IB网卡也叫做HCA - Host Channel Adapter。HCA 是 InfiniBand 端节点(如服务器或存储设备)连接到 InfiniBand 网络的点。InfiniBand的架构师花了大量时间来确保架构能够实现更多的内容,不要求在单一的硬件、固件或软件中实现特定的 HCA 功能,所以最后代表 HCA 功能的硬件、软件和固件的集合为一个应用程序提供了对网络资源的访问。HCA同时也包含了操作系统控制下的地址转换机制,允许应用程序直接访问HCA。实际上,应用程序用来访问InfiniBand硬件的队列结构将直接出现在应用程序的虚拟地址。同样的地址转换机制是HCA代表用户级应用访问内存的一种手段。通常应用程序指的是虚拟地址;HCA有能力将这些地址转换为物理地址去进行信息传输。

InfiniBand网卡的优势

  1. IB网卡为服务器和存储系统提供了最高性能和最可扩展的互连解决方案。尤其在高性能计算、Web 2.0、云计算、大数据、金融服务、虚拟化数据中心和存储应用中将获得明显的性能改善,从而缩短完成时间,降低整个流程的成本。

  2. IB网卡是需要高带宽、高消息速率和低延迟以实现高服务器效率和应用程序生产力的 HPC 集群的理想解决方案。

  3. IB网卡将CPU的协议处理和数据移动从CPU卸载到互连上,最大限度地提高了CPU的效率,对高分辨率模拟、超大数据集和高度并行化算法进行超快速处理。

InfiniBand网卡的选型帮助
对应正在挑选IB网卡的朋友,建议可按照以下实际网络需求来对应选用合适的IB网卡产品:

1.网络带宽: 100G、200G、400G

2.单机网卡数量

3.端口速率: 100Gb/s (HDR100/EDR)、200Gb/s (HDR)

4.端口数量:1/2

5.主机接口类型: PCIe3/4 x8/x16,OCP2.0/3.0

6.是否需要Socket-Direct或Multi-host功能支持

InfiniBand与以太网的主要对比
带宽:因为两者的应用的不同,带宽的需求也各不相同。Ethernet面向更多的是终端的设备互连,在带宽上没有太高的需求。InfiniBand应用于高性能计算中服务器之间的互连,不仅考虑互通,还要考虑网络在高速传输时如何降低对CPU的负载。受益于RDMA技术,Infiniband网络可以在高速传输中实现对CPU卸载的同时提高了网络的利用率,因此CPU不会因为速率的大幅提升而牺牲更多的资源用于网络处理而拖慢整个HPC性能的发展。

时延:主要分为交换机和网卡两方面进行对比,交换机方面:作为网络传输模型中的二层技术,Ethernet交换机处理流程较长,一般会在若干us(支持cut-though的会在200ns以上),而InfiniBand交换机二层处理非常简单,并且采用Cut-Through技术可大大缩短转发时延至100ns以下,远远快于Ethernet交换机;网卡方面:由于采用RDMA技术,InfiniBand网卡转发报文不需要经过CPU,大大加快了报文在封装解封装处理的时延(通常收发时延在600ns),而基于Ethernet上的TCP UDP应用的收发时延会在10us左右,相差十几倍之多。

可靠性:在高性能计算领域,丢包重传对整体性能的影响非常大,所以需要一个高可靠的网络协议从机制层面来保证网络的无损特性,从而实现其高可靠特性。nfiniBand是一个完整的网络协议有自己定义的一至四层格式,报文在网络上的收发是基于端到端的流控来实现的。在InfiniBand的网络上传输不会出现缓存积累,这样时延抖动也就控制到了最小,从而构造了一个理想纯净的网络;而Ethernet构造的网络没有基于调度的流控机制,不仅成本高而且功耗也会更大,除此之外,由于没有端到端的流控机制,导致网络在略极端情况下,会出现缓存拥塞而导致的丢包,使得数据转发性能大幅波动。

组网:Ethernet的组网方式需要网络内的每个服务器来定时发送报文保证表项的实时更新,当网络内的节点数量增加到一定程度就会产生广播风暴从而使得网络带宽被严重浪费。同时,由于Ethernet网络本身表项学习机制的不足会导致环路网络,并且Ethernet不具备SDN特制,在部署网络时需要改变报文格式或者转发机制来满足SDN的要求,因此增加了网络配置的复杂度;而InfiniBand是天生具备SDN理念的,每个InfiniBand的二层网络内有会有一个子网管理器来配置网络内节点的ID(LocalID),然后通过控制面统一计算转发路径信息,下发至InfiniBand交换上,这样组成一个InfiniBand的二层组网不需要做任何配置既可以完成网络配置,同时没有泛洪的问题,也省去了Vlan和环网破环的操作,可以轻松部署一个规模几万台服务器的超大二层网络。

网卡推荐

纳多德作为NVIDIA网络产品的精英级别合作伙伴,提供NVIDIA ConnectX-4/5/6全系列、10/25/100/200Gb全速率网卡。接下来分别为你重点推荐以下几款产品:

ConnectX-5以太网卡(MCX512A-ACAT)

ConnectX-5 以太网网络接口卡具有多达两个 10/25GbE 连接端口、750ns 延迟、每秒高达 2 亿条消息 (Mpps) 以及开发套件 (DPDK)。对于存储工作负载,ConnectX-5 提供了一系列创新加速,例如硬件中的签名切换 (T10-DIF)、嵌入式 PCIe 交换机和 NVMe over Fabric 目标卸载。ConnectX-5 适配器卡还为电信和云数据中心带来了先进的 Open vSwitch 卸载,以驱动极高的数据包速率和吞吐量,同时减少 CPU 资源消耗,从而提高数据中心基础设施的效率。

ConnectX-6以太网卡(MCX623106AN-CDAT)

ConnectX-6 Dx SmartNIC支持的传输速率有1/10/25/40/50/100GbE,用于新网络流的灵活可编程管道,具有高级 QoS 的多主机,支持IPsec 和 TLS 在线加密加速,阻止静态数据的加密加速。 是业界最安全、最先进的云网络接口卡,可加速关键任务数据中心应用程序,例如安全、虚拟化、SDN/NFV、大数据、机器学习和存储。

ConnectX-6 VPI IB网卡(MCX653105A-ECAT-SP)

ConnectX-6 VPI 卡提供 HDR100 EDR InfiniBand 和 100GbE 以太网连接的单端口、低于 600ns 的延迟和每秒 2.15 亿条消息。支持PCIe 3.0 和 PCIe 4.0 ;具有高级存储功能,包括块级加密和校验和卸载;可实现最高性能和最灵活的解决方案,旨在满足数据中心应用不断增长的需求。

ConnectX-5 VPI IB网卡(MCX556A-ECAT)

ConnectX-5 InfiniBand 适配器卡提供高性能和灵活的解决方案,具有双端口100Gb/s InfiniBand 和以太网连接端口、低延迟和高消息速率,以及嵌入式 PCIe 交换机和 NVMe over Fabrics 卸载。 这些支持智能远程直接内存访问 (RDMA) 的适配器为高性能计算 (HPC)、云超大规模和存储平台提供高级应用程序卸载功能。

从上面提到的IB网卡和以太网卡,不难发现他们都有自己的特点,相应的应用范围。部署哪种类型的卡不仅取决于卡支持的协议,还取决于您的网络环境和预算。

from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.webdriver import WebDriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.common.exceptions import TimeoutException, WebDriverException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def init_driver(): chrome_options = Options() # 基础配置 chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--single-process") # 强化反检测配置 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 初始化Driver(确保路径正确) service = Service(executable_path="/usr/bin/sensible-browser") driver: WebDriver = webdriver.Chrome(service=service) # 覆盖WebDriver属性 driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': ''' Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); ''' }) return driver # 安全初始化Driver变量 driver = None try: driver = init_driver() driver.get('http://portal.sx.cmcc/home') # 显式等待元素可见(非仅存在) wait = WebDriverWait(driver, 15) main_content = wait.until( EC.visibility_of_element_located((By.ID, "main-content")) ) print("成功加载目标元素!") except TimeoutException as e: print(f"页面元素加载超时: {str(e)}") except WebDriverException as e: print(f"浏览器驱动异常: {str(e)}") if "net::ERR_NAME_NOT_RESOLVED" in str(e): print("提示:请检查网址是否正确或网络连接是否正常") except Exception as e: print(f"未知错误: {str(e)}") finally: if driver: driver.quit() else: print("警告:Driver未成功初始化,无需退出")
最新发布
03-13
<think>嗯,用户让我解释一下这段Python代码,特别是关于Selenium的使用。首先,我需要仔细看一下代码的结构各个部分的功能。 代码开头导入了很多Selenium的模块,比如webdriver、Service、WebDriver、By等等。还有一些异常处理的类,比如TimeoutExceptionWebDriverException。看起来这是一个用Selenium进行网页自动化操作的脚本,可能用于爬虫或者自动化测试。 接下来是init_driver函数,里面配置了Chrome的选项。这里有几个点需要注意:用户使用了无头模式(headless),还添加了一些反检测的配置,比如禁用AutomationControlled覆盖navigator.webdriver属性。这可能说明用户希望避免被网站检测到自动化脚本,防止被反爬虫机制拦截。另外,代码里设置了一些参数,比如--no-sandbox--disable-dev-shm-usage,这些通常是在Linux环境下运行时需要的,可能是为了避免资源问题。 然后初始化Service的时候,executable_path被设置为"/usr/bin/sensible-browser",这里可能需要确认是否正确。通常,ChromeDriver的路径应该是正确的,如果路径错误的话,可能会导致驱动无法启动。不过用户可能已经配置好了环境,或者这是一个笔误? 接下来,代码使用try-except块来处理异常,包括超时、驱动错误其他未知错误。在finally块中确保driver被正确关闭,避免资源泄漏。这里有一个问题,当初始化driver失败时,比如Service路径错误,driver可能还是None,所以在finally里检查driver是否存在是好的做法。 用户可能想了解这段代码的作用,或者在使用过程中遇到了问题,比如元素加载超时、驱动异常等。可能的问题包括网页无法访问、元素ID错误、ChromeDriver路径不正确,或者反检测措施不够导致被屏蔽。 另外,用户可能没有提到具体的错误,但根据代码中的异常处理,常见的问题可能包括网络问题(如ERR_NAME_NOT_RESOLVED),需要检查URL是否正确,或者驱动版本与浏览器不兼容。此外,无头模式下的页面渲染可能普通模式不同,导致元素无法找到,需要调整等待策略或元素定位方式。 总结一下,这段代码的主要功能是通过配置Chrome选项来启动无头浏览器,访问指定网页,并等待特定元素出现。用户可能需要了解代码各部分的作用,以及如何调试可能出现的错误,比如超时、驱动问题等。在解释时,需要分步骤说明代码结构、配置选项的作用、异常处理的重要性,以及可能的优化点,比如正确的ChromeDriver路径、更灵活的元素等待方法等。</think>以下分步解析您提供的Selenium代码: --- ### 一、代码结构解析 #### 1. 模块导入 ```python from selenium import webdriver # 核心浏览器控制模块 from selenium.webdriver.chrome.service import Service # 浏览器驱动服务管理 from selenium.webdriver.chrome.webdriver import WebDriver # 类型注解专用 from selenium.webdriver.common.by import By # 元素定位方式 from selenium.webdriver.chrome.options import Options # 浏览器配置选项 from selenium.common.exceptions import TimeoutException, WebDriverException # 异常处理 from selenium.webdriver.support.ui import WebDriverWait # 显式等待 from selenium.webdriver.support import expected_conditions as EC # 等待条件 ``` #### 2. 核心功能函数 ##### `init_driver()` 浏览器初始化 ```python def init_driver(): chrome_options = Options() # 基础配置(针对无头模式服务器环境) chrome_options.add_argument("--no-sandbox") # 禁用沙箱提升稳定性 chrome_options.add_argument("--disable-dev-shm-usage") # 避免内存不足问题 chrome_options.add_argument("--headless=new") # 使用新版无头模式 chrome_options.add_argument("--disable-gpu") # 禁用GPU加速 # 反自动化检测配置 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) # 隐藏自动化标识 chrome_options.add_experimental_option('useAutomationExtension', False) # 驱动初始化(需注意路径问题) service = Service(executable_path="/usr/bin/sensible-browser") # 常见问题点 driver = webdriver.Chrome(service=service) # 覆盖webdriver属性防检测 driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})' }) return driver ``` #### 3. 执行流程 ```python driver = None # 安全初始化 try: driver = init_driver() driver.get('http://portal.sx.cmcc/home') # 访问目标网站 # 显式等待元素(推荐做法) wait = WebDriverWait(driver, 15) main_content = wait.until( EC.visibility_of_element_located((By.ID, "main-content")) # 等待元素可见 ) print("成功加载目标元素!") except TimeoutException as e: # 处理元素加载超时 print(f"页面元素加载超时: {str(e)}") except WebDriverException as e: # 处理驱动级错误 if "net::ERR_NAME_NOT_RESOLVED" in str(e): print("提示:请检查网址是否正确或网络连接是否正常") except Exception as e: # 兜底异常处理 print(f"未知错误: {str(e)}") finally: if driver: # 安全释放资源 driver.quit() ``` --- ### 二、关键问题说明 #### 1. 驱动路径问题 ```python service = Service(executable_path="/usr/bin/sensible-browser") # 需要验证 ``` - 常见错误:`WebDriverException: Message: unknown error: cannot find Chrome binary` - 解决方案:应使用正确的chromedriver路径,例如: ```python service = Service(executable_path="/usr/local/bin/chromedriver") ``` #### 2. 反检测机制强化 ```python # 通过CDP命令覆盖属性 driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {...}) ``` - 作用:隐藏自动化特征,防止网站检测到Selenium - 扩展建议:可添加更多指纹修改(如:修改屏幕分辨率、时区等) #### 3. 等待策略优化 ```python EC.visibility_of_element_located((By.ID, "main-content")) ``` - 优于`presence_of_element_located`:确保元素不仅存在,且可见可交互 - 推荐:结合CSS选择器或XPath进行更精准定位 --- ### 三、典型调试场景 #### 场景1:`WebDriverException` - 现象:浏览器无法启动 - 检查项: 1. Chrome浏览器与chromedriver版本是否匹配 2. 是否缺少依赖库:`apt install -y libxss1 libnss3 libasound2` #### 场景2:`TimeoutException` - 现象:元素加载超时 - 解决步骤: 1. 使用`driver.save_screenshot('debug.png')`截屏分析 2. 检查元素是否在iframe中 3. 尝试延长等待时间至30秒 --- ### 四、改进建议 1. **增加用户代理伪装** ```python chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...") ``` 2. **启用浏览器缓存复用** ```python chrome_options.add_argument(f"--user-data-dir=/tmp/chrome_profile") ``` 3. **添加页面加载策略配置** ```python chrome_options.page_load_strategy = 'eager' # 加快加载速度 ``` 如需进一步优化,可提供具体错误信息进行针对性分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值