Estou tentando entender como ocorre uma colisão na Ethernet, especialmente quando existe uma incompatibilidade duplex ou quando em uma rede Ethernet herdada dois nós transmitem simultaneamente.
Todos explicam a colisão em um nível superior (dois quadros colidem quando um está sendo enviado e o outro está sendo recebido). No entanto, o gráfico abaixo mostra que existem circuitos diferentes para Rx e Tx. Como uma colisão pode acontecer, uma vez que existem circuitos dedicados para enviar e receber quadros?
Edição : Talvez o rótulo "Hub MDI-X" cause alguma confusão sobre o ponto da minha pergunta. Não estou perguntando como a funcionalidade de um hub pode causar colisão. Meu foco está na comunicação entre dois nós com interfaces MDI ou MDI-X (o hub e os comutadores têm interfaces MDI-X). Em qualquer um desses dois casos, como uma colisão pode ocorrer entre dois nós quando eles têm incompatibilidade duplex, enquanto na incompatibilidade duplex Rx e Tx ainda têm seus circuitos dedicados?
fonte
Respostas:
Para entender isso, você precisa entender o contexto histórico.
Originalmente, a Ethernet usava um cabo coaxial compartilhado. Somente um dispositivo pôde transmitir com êxito por vez. Se dois dispositivos transmitidos ao mesmo tempo, era considerado uma colisão.
Então surgiram repetidores, para estender a distância e aumentar o número de nós. Um repetidor detectaria qual porta está transmitindo e repetiria esse sinal nas outras portas. Para manter a detecção de colisão, os repetidores em funcionamento tinham que ter alguma funcionalidade para garantir que todos os nós detectassem uma colisão. Os primeiros repetidores tinham apenas duas portas, mas os repetidores posteriores podiam ter várias portas, que se tornaram conhecidos como hubs, especialmente quando usados em conjunto com a fiação de par trançado. Os repetidores eram dispositivos bastante estúpidos, eles regenerariam os sinais elétricos, mas pouco mais.
Em seguida, entrou o 10BASE-T, que, como você notou, possui canais de dados dedicados para cada direção. No entanto, ele ainda precisava se encaixar no modelo existente; portanto, por padrão, operava no modo "half-duplex", onde emulava um cabo coaxial. De fato, os sinais não colidiram com o fio, mas os transceptores agiram como se o fizessem e os repetidores seguiriam as mesmas etapas de antes para garantir que isso fosse visto na rede.
A Ethernet de par trançado também pode suportar o modo "full-duplex". Nesse modo, todo o hardware relacionado à colisão é desativado e as duas extremidades podem transmitir a qualquer momento. No entanto, este modo trouxe algumas grandes desvantagens.
Esses problemas significavam que, na prática, os sistemas 10BASE-T quase sempre operavam no modo half-duplex.
Para o 100BASE-TX, a situação melhorou dramaticamente. Os switches Ethernet (pontes multiporta tecnicamente rápidas) caíram de preço a ponto de os hubs repetidores mudos poderem ser eliminados. A negociação automática permitiu que as placas de rede estabelecessem conexões full-duplex sem configuração manual suscetível a erros. Se você conectar duas NICs 100BASE-TX juntamente com um cabo cruzado ou uma NIC 100BASE-TX a um comutador e não tomar medidas para substituir manualmente as coisas, elas certamente negociarão o modo full-duplex.
O 1000BASE-T teoricamente possui um modo half-duplex que algumas placas de rede alegam oferecer suporte e havia uma especificação para repetidores multiportas gigabit, mas nunca vi nenhuma evidência de que alguém já tenha vendido um. Na prática, um link de gigabit quase certamente estará sendo executado no modo full-duplex.
Velocidades mais rápidas abandonaram completamente o modo half-duplex.
fonte
Um hub é realmente apenas um cabo de alimentação que repete todos os sinais que recebe em uma interface para todas as outras interfaces. Se dois dispositivos transmitirem ao mesmo tempo para o recebimento das interfaces do hub, o hub repetirá os dois sinais ao mesmo tempo para a transmissão de todas as outras interfaces do hub e os dois sinais recebidos colidirão na transmissão das outras interfaces, portanto você tem uma colisão em que todas as outras interfaces têm sinais de lixo porque são dois sinais ao mesmo tempo. Os hosts que estão enviando simultaneamente e ouvem outro sinal perceberão que mais de um está enviando por vez e determinarão que há uma colisão.
Pense dessa maneira: o recebimento de todas as interfaces de hub é conectado à transmissão de todas as outras interfaces. Dentro do hub, a transmissão e a recepção estão conectadas, mesmo se estiverem separadas na interface.
Compare isso com um switch, em que cada link é terminado na interface do switch e o switch não possui as interfaces conectadas. Em vez disso, o switch possui lógica (geralmente embutida no hardware) para determinar para onde enviar os quadros recebidos em uma interface e para evitar colisões dentro do switch.
Um switch é uma ponte de alta densidade. As pontes originais eram como PCs com múltiplas interfaces. Você não esperaria que um PC com várias interfaces tivesse colisões se recebesse quadros simultâneos em várias interfaces.
Editar:
Seus comentários me levam a acreditar que você ainda não entende o que escrevi acima sobre hubs.
A maneira como as colisões são detectadas ao usar o UTP e um hub é quando os dispositivos emissores ouvem outro sinal durante o envio. Se um dispositivo usando UTP estiver configurado para half-duplex, ele acreditará que há uma colisão quando ouvir um sinal durante o envio.
Quando você tem uma incompatibilidade duplex, o dispositivo configurado para full duplex é enviado com satisfação ao receber do dispositivo configurado para half duplex. Por outro lado, o dispositivo configurado para half duplex acreditará que há uma colisão ao enviar e ouve o sinal do dispositivo configurado para full duplex. Isso causará todos os tipos de problemas, porque o dispositivo configurado para half-duplex deixará de enviar o quadro (causando um atraso) e enviará um sinal de obstrução que o dispositivo configurado para full-duplex não está esperando. O dispositivo configurado para full duplex deixará de enviar seu quadro.
fonte
Ótima pergunta.
Em full duplex, há um canal dedicado para o tráfego da "esquerda para a direita" e um canal dedicado para o tráfego da "direita para a esquerda":
Portanto, em full duplex, as colisões são impossíveis - mesmo que as duas placas de rede transmitam ao mesmo tempo.
No half-duplex , no entanto, o tráfego em qualquer direção destina-se a usar apenas o fio, uma direção por vez. Portanto, embora fisicamente ainda existam canais dedicados, logicamente, se uma NIC receber alguma coisa enquanto estiver transmitindo, ela será registrada como uma colisão. Os bits / sinais realmente não "colidem" no fio - um contador de colisão é simplesmente incrementado quando a NIC está recebendo e transmitindo ao mesmo tempo.
fonte
Com par trançado e um hub repetidor, o hub não é muito mais que um amplificador digital. Para isso, ele detecta uma portadora de um sinal recebido em uma porta e alterna todas as outras portas para o modo de saída. Nesse modo de saída, qualquer operadora de entrada adicional é uma colisão. Isso dispara um sinal de congestionamento para propagar a colisão e fazer o remetente parar de transmitir.
Esse método de repetição imita o comportamento das variantes Ethernet de mídia compartilhada anteriores (10BASE5 e 10BASE2), nas quais o repetidor era usado apenas como junções de segmentos físicos ou extensores de linha. É claro que você está correto: o par trançado é um meio full duplex no nível do fio, onde uma colisão só acontece na camada física superior e não no próprio fio.
Um repetidor não pode permitir mais de um remetente ao mesmo tempo. Múltiplas transmissões simultâneas se misturariam nas portas de saída e produziriam ruídos ininteligíveis. Da mesma forma, qualquer nó no modo half-duplex assume um meio compartilhado, incapaz de transmissão full-duplex. Qualquer transportadora detectada durante a transmissão é uma colisão, fazendo com que o remetente se afaste. Se o meio é compatível com full-duplex (fibra, par trançado) ou não (cabo coaxial), não importa.
Com uma incompatibilidade duplex, uma extremidade do link está no modo half-duplex e a outra no modo full-duplex. Agora, quando o lado half-duplex (HDX) está transmitindo, qualquer portadora em seu receptor faz com que seja detectada uma colisão. No entanto, o lado full-duplex (FDX) pode ser enviado com facilidade enquanto está sendo recebido do lado do HDX e é completamente alheio às colisões que ele cria no lado oposto. O lado HDX precisa interromper a transmissão e envia um sinal de congestionamento. Como o lado do FDX não pode detectar a suposta colisão, ele detecta um quadro parcial e, portanto, danificado.
Os quadros pequenos e de baixa frequência têm uma chance razoável de superar essa incompatibilidade duplex, para que um
ping
possa realmente funcionar. No entanto, assim que qualquer transmissão séria tentar iniciar, a frequência de quadros mais alta e o tamanho maior farão com que as transmissões falhem com muita confiabilidade.Com comutadores não gerenciados, pode ser muito difícil detectar uma incompatibilidade duplex, especialmente quando nem as NICs do host relatam seu modo duplex corretamente.
Com comutadores gerenciados, você normalmente possui contadores de erros de porta. O aumento de colisões de um lado (HDX) e o aumento de runts e erros de FCS do outro lado (FDX) são indicações muito fortes para uma incompatibilidade duplex.
Basicamente, confiar na negociação automática é uma prática muito boa para evitar incompatibilidades duplex. A configuração manual do modo velocidade e duplex geralmente é suscetível de criar uma incompatibilidade, especialmente ao substituir o equipamento alguns anos depois. Felizmente, todo o esquema half-duplex desapareceu com a Gigabit Ethernet e mais rápido.
fonte
Suponha que a máquina A comece a enviar dados para a máquina B. À medida que o pacote começa a ser enviado, a máquina C começa a enviar dados diferentes para a máquina B. Existe apenas um caminho de sinal para a máquina B; portanto, as transmissões de A e C colidem e B não pode receber os dois.
O fato de um circuito diferente ser usado para transmissões da máquina B, da máquina A e da máquina C não ajuda. Tudo o que está acontecendo é que A e C estão tentando transmitir para a máquina B ao mesmo tempo e há apenas um caminho de sinal para a máquina B.
fonte