CSMA/CD(Carrier Sense Multiple Access/Collision Detect)



全双工以太网是在同一个时刻可以同时收发的以太网。

全双工模式:传输数据是双向同步进行的,即同时接收和发送数据。

半双工模式:同一时刻只能单向传输数据,即要么是接收数据,要么是发送数据。

自适应模式:即自动协商双工模式。在状态显示时,显示的是协商后的实际工作模式。



   
我们知道:以太网访问控制用的是CSMA/CD,即载波侦听多点接入/
冲突检测,是以广播的方式将数据发送到所有端口;我们还知道:交换机能主动学习端口所接设备的MAC地址,在获知该端口的MAC
地址后,就会把传送给目标设备的直接发送到该端口而不是广播出去。

   
那么,以太网交换机是如何工作的呢?交换机和以太网的工作机理岂不是要相冲突吗

   
回答:之所以有CSMA/CD的存在,是因为在早期的共享式以太网中,双向的传输是在同一线路上进行的,而以太网是一种共享介质的广播技术,所以同一时间
只能有一面的信号在线路上,即要么A往B发,要么B往A发,如果AB同时发送数据或者线路上已有信号,那么信号就会发生碰撞,继而影响数据有效传输,为了
解决此一问题,才有了CSMA/CD的技术。

   
随着技术的发展,CSMA/CD在最初的以太网中具有的历史和实践的重要性在慢慢减弱,现在交换式以太网取代了共享式以太网,甚至于共享式以太网消失。这主要是因为介质和交换技术的发展而造成的.

介质方面:使用4对线的UTP,传输和接收各自使用一对,可以全双工方式工作,这样,一边只管发,一边只管收,因此就能够避免碰撞了,光纤方面也可如此。

交换技术方面:当两个工作站需要通信时,交换技术在两个站之间建立了一个点到点的虚链路,也叫做微分段,因此同样也避免了碰撞了,这就是交换机使用的技术.

所以,从上面可以看出,以太网访问控制机制和交换机工作原理并没有相冲突的地方,只是随着技术的发展,一些不必要的机制就慢慢不要了。

------------------------------------------------------------------------

全双工,半双工与CSMA/CD的关系:

   
以太网中到底何时使用CSMA/CD检测机制来避免冲突,在于网络处于什么样的工作模式(全双工或者半双工)下工作,网卡将自动与网络接入设备(例如:交换机或者集线器)进行协商来判断时候使用CSMA/CD检测机制避免冲突的发生。

我想,关于什么是CSMA/CD各位网管或者网络工程师们都应该知道,在这里就不做太多解释了。大家都知道,以太网工作模式有两种,一种是全双工工作模式,一种是半双工工作模式。我们看分析一下这两个模式下到底是不是用CSMA/CD冲突检测机制。

一.在全双工工作模式下的以太网使用CSMA/CD检测机制来避免冲突吗?

   
在这一工作模式下的以太网是不需要使用CSMA/CD冲突检测机制的。我们知道,全双工工作模式下可以完成同时接收和发送数据。我们想想,网卡可能会在同
一时刻发送两个数据包吗?这是不可能的。绝对不可能会出现在同一时刻网卡接收到两个或两个以上同时需要发送数据的请求,就连CPU也不可能同时做到在同一
时刻处理两个或两个以上指令呀。这个时候,如果我们假设网卡启用CSMA/CD机制来检测冲突,请问他检测哪一条冲突通道呢?我们可要知道,网卡在接收到
需要发送的数据包后,就像排队一样一个一个往外发送,怎么可能会冲突呢?

    
这个时候有人可能要问了,那接收呢?它可能会和接收的冲突呀?其实这么想就错了。全双工工作模式下,我们将使用双绞线中的2对线进行工作。一对用于发送,
一对用于接收。那么既然发送和接收是分开的2条链路,就不存在冲突的问题了。就像在高速公路上,有一个车道是由东往西行驶车道,一个车道是由西往东行驶车
道。那么,你说两车对开,各行驶于各自的车道,有可能会冲撞吗?所以,全双工工作模式下是不需要使用CSMA/CD冲突检测机制的。

二.在半双工工作模式下的以太网使用CSMA/CD检测机制来避免冲突吗?

   
我想这个问题只要是网管或者是CCNA的工程师们都应该知道,在这一工作模式下的以太网是需要使用CSMA/CD冲突检测机制的。我们知道,半双工模式下
虽然可以实现在同一链路上进行发送和接收,但不是在同一时间。这就必须使用CSMA/CD冲突检测机制来避免冲突的发生。半双工工作模式的典型接入设备就
是集线器。至于为什么,请大家认真复习一下CCNA中的这一节内容。这里就不做详细的讨论了。

   
三.我们都说交换机中有智能设备,如CPU和缓存。为什么工作在半双工模式下的交换机,还会使用CSMA/CD呢?

   
这个问题问得特别好。其实大家想一想就知道了。我们先明白一点:交换机确实有CPU和缓存来调节数据包的输出和接收,是不会发生冲突的。交换机只关心它的
背板速率,关心的是整个带宽。所以,在交换机内的数据包是绝对不会发生冲突的情况。只会发生是否出现网络拥塞。这是和冲突没有任何关联的。

理解了这一点,我们再理解下一个问题:CSMA/CD侦听包是有谁发出,什么时候才会发出呢?我们回忆一下CCNA的教程,其实,CSMA/CD侦听包是
由网卡发出的,并不是有交换机或者集线器发出的侦听包。而且,网卡在发送数据前,才会发送CSMA/CD侦听包侦听网络是否畅通。

   
理解了这两点,我们就好解释了。对于CSMA/CD冲突检测机制而言,交换机和集线器的侦听对象是不完全相同的。在集线器中,每一个端口都同在一个冲突域
中,CSMA/CD检测的整个同处一个冲突域每一个端口的每一种状态。它既侦听网络中正在发送的数据包,也真听网络中正在接收的数据包。因为,它只有1条
通道。就像总线一样,所有数据都在同一个通道内跑。CSMA/CD必须侦听到没人使用,它才发送数据包。而交换机则不太相同。虽然每一个端口都是一个独立
的冲突域,端口之间并不相互冲突。可如果实在半双工工作模式下,一个端口中的接收和发送就产生冲突了。这个时候,CSMA/CD冲突检测机制将侦听在这个
端口上是否有数据正在被接收而占用。所以,交换机在半双工工作模式下工作,网卡同样会启用CSMA/CD冲突检测机制来避免冲突的发生。

------------------------------------------------------------------------

自协商~~

case:

连接好的A、B两个端口。当A端口打开自协商,B端口关闭自协商且配置为100M全双工时,在A口得到的协商结果是100M半双工。而我们一般希望A口也协商成B端口的最大能力,即100M全双工。

自协商是通过一种叫做快速连接脉冲(Fast Link
Pulse)的信号实现的,简称FLP。自协商的双方通过FLP来交换数据。



在具备自协商能力的端口没有Link的情况下,端口一直发送FLP,在FLP中包含着自己的连接能力信息,包括支持的速率能力、双工能力、流控能力等。这
个连接能力是从自协商能力寄存器中得到的(Auto-Negotiation Advertisement Register
,PHY标准寄存器地址4
)。FLP中的编码方式如图。依靠脉冲位置编码携带数据。一个FLP突发包含33个脉冲位置。17个奇数位置脉冲为时钟脉冲,时钟脉冲总是存在的;16个
偶数位置脉冲用来表示数据:此位置有脉冲表示1,此位置没有脉冲表示0。这样1个FPL的突发就可以传输16bit的数据。自协商交互数据就这样通过物理
线路被传输。



如果两端都支持自协商,则都会接收到对方的FLP,并且把FLP中的信息解码出来。得到对方的连接能力。并且把对端的自协商能力值记录在自协商对端能力寄
存器中(Auto-Negotiation Link Partner Ability Register , PHY标准寄存器地址5
)。同时把状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)置成1。在自协商未完成的情况下,这个bit一直为0。

然后各自根据自己和对方的最大连接能力,选择最好的连接方式Link。比如,如果双方都即支持10M也支持100M,则速率按照100M连接;双方都即支持全双工也支持半双工,则按照全双工连接。

一旦连接建立后,FLP就停止发送。直到链路中断,或者得到自协商Restart命令时,才会再次发送FLP。



并行检测:

为了保证在对端不能支持自协商的情况下也能连接,引入了被称为并行检测(Parallel
Detection)的机制。在一端打开自协商,另一端关闭自协商的情况下,连接的建立就依靠并行检测功能实现。

并行检测机制是这样的:在具有自协商能力的设备端口上,如果接收不到FLP,则检测是否有10M链路的特征信号或100M链路的特征信号。

如果设备是10M设备,不支持自协商,则在链路上发送普通连接脉冲(Normal Link
Pulse)简称NLP。NLP仅仅表示设备在位,不包含其它的额外信息。

如果是100M设备,不支持自协商,则在没有数据的情况下,在链路上一直发送4B/5B编码的Idle符号。

并行检测机制如果检测到NLP,则知道对方支持10M速率;如果检测到4B/5B编码的Idle符号,则知道对方支持100M速率。但是对方是否支持全双工、是否支持流控帧这些信息是无法得到的。因此在这种情况下,认为对方只支持半双工,不支持全双工,且不支持流控帧。

基于以上原理,在对端不打开自协商时,打开自协商的一方只能协商成半双工模式。

802.3协议规定,通过并行检测建立连接后,PHY的状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)依然要置位成1,尽管链路上
并非使用了真正的自协商操作。同时规定在自协商完成bit为1的情况下,本地自协商能力寄存器(PHY标准寄存器地址4)和对端自协商能力寄存器(PHY
标准寄存器地址5)是有意义的。所以,要把寄存器5中的数据更新。如果建立的连接为10M,则寄存器5的10M能力bit(bit5)置1,其它bit置
0,表示对端只能支持10M半双工;如果建立的连接为100M,则寄存器5的100M能力bit(bit7)置1,其它bit置0,表示对端只能支持
100M半双工。



=============================

端口自协商

端口自协商基本原理

端口自动协商模式是端口根据另一端设备的连接速度和双工模式,自动把它的速度调节到最高的公共水平,即线路两端能具有的最快速度和双工模式。

自协商功能允许一个网络设备能够将自己所支持的工作模式信息传达给网络上的对端,并接受对方可能传递过来的相应信息,从而解决双工和10M/100M速率自协商问题。自协商功能完全由物理层芯片设计实现,因此并不使用专用数据包或带来任何高层协议开销。
  

自协商功能的基本机制是:每个网络设备在上电、管理命令发出、或是用户干预时发出FLP(快速
连接脉冲),协商信息封装在这些FLP序列中。FLT中包含有时钟/数字序列,将这些数据从中提取出来就可以得到对端设备支持的工作模式,以及一些用于协
商握手机制的其他信息。当一个设备不能对FLP作出有效反应,而仅返回一个NLP(普通连接脉冲)时,它被作为一个10BASE-T兼容设备。
快速链路脉冲FLP和普通链路脉冲NLP都仅使用于非屏蔽双绞线上,而不能应用在光纤媒体。   

自动协商的内容主要包括双工模式、运行速率、流控等内容,一旦协商通过,链路两端的设备就锁定在这样一种运行模式下。1000M以太网也支持自协商,在此从略。

 

电口和光口自协商主要区别是在OSI 中它们所处的位置不同。对于电口来说,协商发生在链路信号传输之前;对于光口来说,
自协商机制与PCS在同一层, 这意味着光口的协商必须先建立链路同步以后才可以进行协商。

  

以太网端口电口工作模式简单介绍   

1.以太网口的两端工作模式(10M半双工、10M全双工、100M半双工、100M全双工、自协商)必须设置一致。   

2.如果一端是固定模式(无论是10M、100M),另外一端是自协商模式,即便能够协商成功,自协商的那一端也将只能工作在半双工模式。
  

3.如果一端工作在全双工模式,另外一端工作在半双工模式(包括自协商出来的半双工,也一样处理),Ping是没有问题的,流量小的时候也没有任何问题,流量达到约15%以上时,就会出现冲突、错包,最终影响了工作性能!
  

4.对于两端工作模式都是自协商,最后协商成的结果是“两端都支持的工作模式中优先级最高的那一类”。   

5.
如果A端自协商,B端设置为100M全双工,A协商为100M半双工后,再强制将B改为10M全双工,A端也会马上向下协商到10M半双工;如果A端自协
商,B端设置为10M全双工,A协商为10M半双工后,再强制将B改为100M全双工,会出现协商不成功,连接不上!这个时候,如果插拔一下网线,又会重
新协商在100M半双工。


[转载]Ethernet,Half-Duplex/Full-Duplex,CSMA的更多相关文章

  1. 【Ubuntu 16】网络配置文件

    之前使用图形化NetworkManager配置静态IP,但在/etc/network/interfaces中找不到静态IP的配置信息,让人不解. 今天在网上看到网友的一则文章,知道了在/etc/Net ...

  2. 以太网PHY寄存器分析【转】

    转自:https://blog.csdn.net/Firefly_cjd/article/details/79825869 以太网PHY寄存器分析    1 1.以太网PHY标准寄存器分析    2 ...

  3. Node.js Stream-基础篇

    Node.js Stream - 基础篇 邹斌 ·2016-07-08 11:51 背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分.这些部分的接口遵循一定的规范,通过某种方式相连,以共同 ...

  4. RFID 基础/分类/编码/调制/传输

    不同频段的RFID产品会有不同的特性,本文详细介绍了无源的感应器在不同工作频率产品的特性以及主要的应用. 目前定义RFID产品的工作频率有低频.高频和甚高频的频率范围内的符合不同标准的不同的产品,而且 ...

  5. psutil官方文档

    psutil documentation¶ Quick links Home page Install Blog Forum Download Development guide What’s new ...

  6. 爱你不容易 —— Stream详解

    作为前端,我们常常会和 Stream 有着频繁的接触.比如使用 gulp 对项目进行构建的时候,我们会使用 gulp.src 接口将匹配到的文件转为 stream(流)的形式,再通过 .pipe() ...

  7. NodeJS Stream 五:双工流

    双工流就是同时实现了 Readable 和 Writable 的流,即可以作为上游生产数据,又可以作为下游消费数据,这样可以处于数据流动管道的中间部分,即 rs.pipe(rws1).pipe(rws ...

  8. gulp源码解析(一)—— Stream详解

    作为前端,我们常常会和 Stream 有着频繁的接触.比如使用 gulp 对项目进行构建的时候,我们会使用 gulp.src 接口将匹配到的文件转为 stream(流)的形式,再通过 .pipe() ...

  9. nodejs stream 手册学习

    nodejs stream 手册 https://github.com/jabez128/stream-handbook 在node中,流可以帮助我们将事情的重点分为几份,因为使用流可以帮助我们将实现 ...

随机推荐

  1. Android 的四大组件都需要在清单文件中注册吗?

    Activity . Service . ContentProvider 如 果 要 使 用 则 必 须 在 AndroidManifest.xml 中 进 行 注 册 , 而BroadcastRec ...

  2. c#协变 抗变

    public class Fa : TranOut<Fa>, TranIn<Fa> { } public class son : Fa, TranOut<son>, ...

  3. sigmoid function的直观解释

    Sigmoid function也叫Logistic function, 在logistic regression中扮演将回归估计值h(x)从 [-inf, inf]映射到[0,1]的角色. 公式为: ...

  4. pandas分组运算(groupby)

    1. groupby() import pandas as pd df = pd.DataFrame([[1, 1, 2], [1, 2, 3], [2, 3, 4]], columns=[" ...

  5. [Flask]使用sqlite数据库

    app.py from flask import Flask from flask_sqlalchemy import SQLAlchemy import os basedir = os.path.a ...

  6. win10 点击开始按钮无反应

    本人亲身经历 由于安装软件时需要注册表权限,在一顿猛如虎的操作下,将注册表中 HKEY_CURRENT_USER 的权限出问题.而导致无法打开 开始菜单 ----------------以下是本人为了 ...

  7. zabbix 4.0版本

    Zabbix 4.0 最高版本是4.2 1.什么是zabbix及优缺点(对比cacti和nagios) zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速 ...

  8. tomcat报错解决方法

    tomcat报错如 关闭被占用的进程 解决方法:cmd进入控制台,输入命令netstat   -ano|findstr  8005 (什么端口号被占用就输入什么号),回车  发现是进程2044占用了这 ...

  9. [IJCAI-17 口碑商家客流量预测]

    IJCAI-17 口碑商家客流量预测               第 1 赛季截止日期        2017/03/14 赛制介绍 重要时间2月8日 08:00: 评测启动3月7日 10:00: 报 ...

  10. AspNet Core Swagger4.0 生成请求model描述

    今天给大家分享 swagger 俩个冷门的小技巧 获取控制器描述 将 IncludeXmlComments 方法第二个参数设置为 true 即可 public static void IncludeX ...