(other)以太网的冲突检测

来源:互联网 发布:电脑计费软件 编辑:程序博客网 时间:2024/06/09 16:52

关于以太网何时使用CSMA/CD检测机制,这个问题前两天刚和朋友做了讨论。在网络上搜索和很久,也有一些同行们不太理解,特别是一些初学CCNA的,没有工作经验的同行们。在此,我把我的观点和依据发在博客上供大家讨论。
    以太网中到底何时使用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冲突检测机制来避免冲突的发生。

 

 

可以把冲突域比做一个双向单车道上的交通规则!而全双工则是一个双车道。有了自己专有的行驶车道,你可以开自己的奔驰任意飞速行驶还要什么交通规则?这种情况下还使用CSMA/CD的规则那不是吃多了?

全双工模式下两个节点间的传送和接收链路实际是分开的,所以帧是不可能冲突的。由于消除了冲突,所以全双工连接将关闭端口上的冲突检测功能,并不是要丢弃CSMA/CD。

是否为全双工模式的检测,由自动协商功能完成,但是自动协商功能并不完美,有时候需要静态的在端口上配置全双工。

要运行在全双工模式,必须满足几个条件:
1.两个节点必须是点到点的连接或是专用线缆连接
2.两个节点必须都支持全双工
3.禁止冲突检测功能

以上理解不知道是否正确。如果哪位大侠有更好的理解,请留言告诉我。谢谢。

 

下面的图帮助你理解共享域和广播域的区别:

(1)共享式HUB

(参见附录里的图:共享式HUB)


在共享式的HUB中,所有的端口都共享同一个冲突域和广播域,这时需要使用CSMA/CD。

(2)没有划分VLAN的二层交换机

(参见附录里的图:没有划分VLAN的二层交换机)


在没有划分VLAN的二层交换机中,每一个端口拥有自己的冲突域,但所有的PC仍处于同一个广播域中。

(3)划分了VLAN的二层交换机

(参见附录里的图:划分了VLAN的二层交换机)


划分了VLAN的二层交换机中,交换机的每一个端口拥有自己的冲突域,在这个交换机中,每个VLAN是一个广播域。

附录:CSMA/CD的定义。

CSMA/CD是英文carrier sense multiple access/collision detected的缩写,可把它翻成“载波侦察听多路访问/冲突检测”,或“带有冲突检测的载波侦听多路访问”。所谓载波侦听(carrier sense),意思是网络上各个工作站在发送数据前都要总线上有没有数据传输。若有数据传输(称总线为忙),则不发送数据;若无数据传输(称总线为空),立即发送准备好的数据。所谓多路访问(multiple access)意思是网络上所有工作站收发数据共同使用同一条总线,且发送数据是广播式的。所谓冲突(collision),意思是,若网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的混合,哪个工作站都同时发送数据,在总线上就会产生信号的混合,哪个工作站都辨别不出真正的数据是什么。这种情况称数据冲突又称碰撞。为了减少冲突发生后又的影响。工作站在发送数据过程中还要不停地检测自己发送的数据,有没有在传输过程中与其它工作站的数据发生冲突,这就是冲突检测(collision detected)。

 

CSNM/CD媒体访问控制方法的工作原理,可以概括如下:

 

先听后说,边听边说;

 

一旦冲突,立即停说;

 

等待时机,然后再说;

 

听,即监听、检测之意;说,即发送数据之意。

 

上面几句话在发送数据前,先监听总线是否空闲。若总线忙,则不发送。若总线空闲,则把准备好的数据发送到总线上。在发送数据的过程中,工作站边发送检测总线,是否自己发送的数据有冲突。若无冲突则继续发送直到发完全部数据;若有冲突,则立即停止发送数据,但是要发送一个加强冲突的JAM信号,以便使网络上所有工作站都知道网上发生了冲突,然后,等待一个预定的随机时间,且在总线为空闲时,再重新发送未发完的数据。

0 0