### 认识自协商——自协商的工作机理 #### 前言 随着网络技术的发展,以太网作为最常用的数据通信技术之一,其自协商能力成为了解决不同设备之间连接兼容性问题的重要手段。然而,在实际应用中,经常会遇到一端开启自协商功能而另一端关闭的情况,导致协商结果不符合预期。例如,当A端口开启自协商功能而B端口关闭自协商功能且被设置为100M全双工模式时,A端口可能会被协商为100M半双工模式,而非我们期望的100M全双工模式。本文将深入探讨自协商的工作原理,解释为什么会出现这种现象。 #### 自协商工作机理 自协商是通过快速连接脉冲(Fast Link Pulse, FLP)信号实现的。具备自协商能力的端口会在没有连接(Link)的情况下持续发送FLP信号,该信号中包含了端口的能力信息,包括支持的速率、双工模式、流控能力等。这些信息来源于自协商能力寄存器(Auto-Negotiation Advertisement Register, ANAR),位于PHY标准寄存器地址4。 - **FLP的编码方式**:FLP采用脉冲位置编码的方式携带数据,每个FLP突发包含33个脉冲位置。其中,17个奇数位置为固定的时钟脉冲,用于同步;16个偶数位置用于表示数据,有脉冲表示1,无脉冲表示0。这意味着每次FLP突发可以传输16比特的数据。 - **自协商过程**:如果两端都支持自协商,则它们能够接收到对方的FLP信号,并解码出对方的连接能力。这些信息会被记录在自协商对端能力寄存器(Auto-Negotiation Link Partner Ability Register, ANLPAR,PHY标准寄存器地址5)中。一旦自协商完成,端口的状态寄存器(PHY标准寄存器地址1)中的自协商完成标志(bit5)会被置1。 - **连接选择**:双方根据自身与对方的最大连接能力选择最优的连接方式。例如,如果双方都支持10M和100M速率以及全双工和半双工模式,则会按照较高的100M速率和全双工模式进行连接。 一旦建立了确定的连接,FLP信号就会停止发送,除非链路中断或收到自协商重启命令。 #### 并行检测 并行检测(Parallel Detection)是一种辅助机制,确保在对端设备不支持自协商的情况下仍能建立连接。 - **10M设备**:如果对端设备仅支持10M速率且不支持自协商,则会发送普通连接脉冲(Normal Link Pulse, NLP),表明设备存在但不包含其他信息。 - **100M设备**:如果对端设备支持100M速率且不支持自协商,则会在没有数据传输时发送4B/5B编码的空闲符号(Idle Symbol)。 具备自协商能力的设备会检测是否有NLP或4B/5B编码的空闲符号。如果检测到NLP,则表明对方支持10M速率;如果检测到4B/5B编码的空闲符号,则表明对方支持100M速率。在这种情况下,由于无法获取对端设备的双工模式和流控能力等信息,所以默认为对方仅支持半双工模式,不支持全双工模式及流控帧。 根据802.3协议的规定,通过并行检测建立连接后,PHY状态寄存器(PHY标准寄存器地址1)的自协商完成标志(bit5)应置为1。此时,本地自协商能力寄存器(地址4)和对端自协商能力寄存器(地址5)应包含有意义的信息。因此,寄存器5中的数据需要更新: - 如果建立的连接为10M,则寄存器5的10M能力标志(bit5)置1,其他标志置0,表明对端仅支持10M半双工模式。 - 如果建立的连接为100M,则寄存器5的100M能力标志(bit7)置1,其他标志置0,表明对端仅支持100M半双工模式。 #### 结论 通过对自协商及其相关机制的理解,我们可以更好地解释为什么当一端开启自协商功能而另一端关闭时,协商结果可能与预期不符。并行检测机制虽然有助于在对端设备不支持自协商的情况下建立连接,但也限制了连接的能力,特别是对于双工模式的选择。了解这些原理有助于我们在部署网络时做出更合理的决策。
2025-07-19 22:53:14 69KB 认识自协商
1
C++之父Bjarne Stroustrup是计算机科学界的一位杰出人物,他对编程语言的发展做出了巨大贡献。1979年,Stroustrup获得了剑桥大学计算机博士学位,并在贝尔实验室工作期间发明了C++语言。Stroustrup的研究领域不仅限于C++,还包括分布式系统、编程语言和软件开发工具。他在2018年荣获美国国家工程院颁发的查尔斯·斯塔克·德拉普尔奖,这一奖项常被喻为工程学界的诺贝尔奖。 Bjarne Stroustrup在技术大会上的演讲主题为“重新认识C++:跨世纪的现代演进”。C++语言的发展和演进不仅仅代表了一个编程语言的成长,更折射出软件开发技术和理念的进步。他强调了在使用C++进行编程时,程序员需要明确自己真正的编程需求,并且要避免重蹈覆辙,不盲目使用某些看似万能但实际可能带来问题的编程技巧,如goto语句。Stroustrup提倡“熟悉”不等同于“简单”,并鼓励使用C++20/23等新版本来编写更简单、更安全、更高效的代码。 在实际编程中,Stroustrup展示了如何使用C++来优化代码,比如通过使用哈希表来处理输入流中的不重复行。他提出了一种高效的代码示例,以展示如何在不进行显式I/O和循环处理的情况下,使用C++标准库中的功能来实现需求。此外,Stroustrup也提到了C++标准库中某些功能的缺失,例如vector的范围构造函数,但他也指出了这个问题的简单解决方案,即创建一个模板函数来填充vector。他还预测了这个功能将来可能会成为C++标准库的一部分。 Stroustrup在技术大会上的演讲不仅深入浅出地介绍了C++的新特性、最佳实践和编程技巧,而且揭示了C++作为一种现代编程语言,在简化编程、提高效率和安全性方面的巨大潜力。通过这些内容,我们可以看到C++语言的跨世纪演进,以及它如何适应现代软件开发的需求。
2025-06-05 11:19:25 11.01MB
1
易语言GDI矩阵源码,GDI矩阵,取指针,置指针,方法_置指针,new,delete,销毁,创建自窗口句柄,创建自DC,创建自图像,获取DC,释放DC,取混合模式,置混合模式,取渲染原点,置渲染原点,取混合品质,置混合品质,置平滑模式,取平滑模式,置文本渲染模式,取文本渲染模式,置算
1
图神经网络的初认识及代码
1
无源滤波元器件中,电容是一个很重要的基本元器件,但应用中由于对电容的认识不深,存在一些不正确的使用而造成问题。本文主要针对常用的三类电容(铝电容、钽电容和陶瓷电容),从电容结构、制造工艺入手,结合滤波模型关注的参数性能进行深入的剖析,最后引出如何正确可靠应用电容。结构上采取每类电容一大章,每一章三小节分析:第一小节简单介绍电容的结构和生产加工工艺流程;第二小节为电容主要性能参数的变化特点,涉及到如何应用等方面;第三小节介绍电容使用中的物理可靠性问题需要关注的地方。同时附录还对三类电容在参数、特性及应用上做了深入的比较。
2024-04-07 13:50:33 772KB
1
在使用altium designer之前,先说一下一个工程的大概架构,对于PCB工程而言,包括:原理图文件(.SchDoc),PCB文件(.PcbDoc),netlist文件(主要用于网表文件的导入),gerber文件和CAM文件,后面两个文件在制板的时候会用到。
2024-03-28 07:13:40 68KB Altium designer 硬件设计
1
在对Oracle做备份时出现Status Code 29错误:Failed trying to execute a command。本文分析了错误发生的原因,介绍了其解决办法。
2024-03-23 09:34:01 25KB
1
以安徽省最新的地质、物探资料为基础,通过研究徐淮地块与六安地块边界断裂两侧的重磁场特征、地质矿产特征、结晶基底性质等方面的综合信息,为其边界厘定提供了新的依据,给出了新的边界划分方案,即二者应以洞山断裂为界。
2024-02-27 08:22:45 577KB 行业研究
1
1994 年网页浏览器的出现,迅速地让World-Wide Web在短短的几年间,首度达到前所未有,一个真正横跨全世界的超级信息库,所有的文件都遵照相同的格式提供出来,并相互串联。 如果我们从技术的角度探究Web之所以能成功,会发现遵循开放标准所带来的松散藕合(loose coupling)是最重要的关键。怎么说?站在一个使用者的立场,我只要有一个浏览器,不管是用什么平台--PC、Unix、Mac,甚至是PDA,我都可以看遍全世界的网站。或许我明天会挖掘出几个之前从来没去过、令人兴奋的新网站。
2024-01-18 09:02:30 32KB
1
山东大学软件学院,大三上学期苏州认识实习报告,三千字以上
2023-12-31 16:34:01 25KB 山东大学 认识实习
1