![为什么双工不匹配就会发生碰撞?](https://linux22.com/image/619062/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%8C%E5%B7%A5%E4%B8%8D%E5%8C%B9%E9%85%8D%E5%B0%B1%E4%BC%9A%E5%8F%91%E7%94%9F%E7%A2%B0%E6%92%9E%EF%BC%9F.png)
在关于 Serverfault 的一个问题文中提到“如果主机网卡和它所连接的交换机端口之间的双工不匹配,则连接到一个端口的单个主机可能会遇到冲突”。这是对的吗?如果是对的,有人能解释一下这是怎么发生的吗?
答案1
我尊重你的批判性思考和学习能力,但说实话,你应该提高你的研究技能。简单的谷歌搜索就可以带你到维基百科,那里有关于为什么它是正确的以及它是如何发生的出色解释。
来源:http://en.wikipedia.org/wiki/Duplex_mismatch
尽管双工不匹配,连接仍可进行通信。单个数据包可以毫无问题地发送和确认。因此,简单的 ping 命令无法检测到双工不匹配,因为单个数据包及其以 1 秒为间隔产生的确认不会对网络造成任何问题。缓慢发送数据(以非常短的突发)的终端会话也可以成功通信。但是,只要连接的任一端尝试发送大量数据,网络就会突然变慢到非常低的速度。由于网络在其他方面都正常工作,因此原因并不那么明显。
当连接的两端同时尝试传输数据时,双工不匹配会导致问题。即使通道(从高层或用户的角度来看)仅在一个方向上使用,在大量数据传输的情况下,也会发生这种情况。事实上,当通过 TCP 发送大量数据传输时,数据会以多个数据包的形式发送,其中一些数据包会触发确认数据包返回给发送方。这会导致数据包同时在两个方向上发送。
在这种情况下,连接的全双工端在发送数据包的同时接收其他数据包;这正是全双工连接的意义所在。同时,半双工端在发送数据时无法接受传入数据——它会将其视为冲突。半双工设备停止当前传输,然后根据 CSMA/CD 稍后重试。因此,当两个设备试图同时传输时,全双工端发送的数据包将丢失,半双工设备发送的数据包将被延迟或丢失。