A Ethernet

Ethernet é uma tecnologia de redes LAN para a camada de enlace que, desde que foi criada, foi conquistando lentamente lugar às outras, estando atualmente numa posição totalmente dominante, não só na Internet como em redes LAN privadas. O êxito resulta de uma simplicidade grande dos seus protocolos, filosofia aliás que provém do IP (best effort service). A Ethernet é não confiável, apesar de utilizar códigos de deteção de erros. Usa-os com o fim único de descartar um pacote corrompido, evitando assim ocupar a rede com inutilidades, deixando o resto para o TCP no nó de destino. A Ethernet conseguiu sempre acompanhar e até ultrapassar as velocidades dos seus concorrentes, disseminando-se rapidamente os equipamentos básicos da Ethernet:

  • adaptadores ou placas de rede (network card),
  • concentradores (HUB) e
  • comutadores (Switch)

tornaram-se equipamentos de uso comum, baixando substancialmente os seus preços.

A rede 10 Gb Ethernet já está implantada no projeto Internet 2, nas grandes redes de Backbone. Enfim, está gerada a bola de neve que tornou a Ethernet na tecnologia dominante na camada de enlace com cada vez mais predominância. Mas antes que continuemos a falar da Ethernet, vamos conhecer a estrutura do pacote, descriminada na figura 1, em que os diferentes campos têm o seguinte significado:

Figura-14-54
Figura 1
  • Preambulo – No início do pacote estão 8 Bytes de bits alternados 10101010… até ao 8º Byte que acaba em dois 1, isto é, …101011. O fim deste preambulo é afinar o clock do emissor com o do recetor, por forma a que o recetor de seguida consiga distinguir o que são 0 e 1 só pela frequência do clock.
  • Endereço MAC de destino – É pelo valor deste campo (48 bits) que os nós que veem o pacote o passam à camada superior ou o encaminham, por corresponder ao seu endereço, ou o descartam.
  • Endereço  MAC de origem – É o endereço MAC da placa de rede do remetente.
  • EtherType – É através deste campo que o pacote é passado para o protocolo a que se destina o datagrama encapsulado. O IP não é o único protocolo. Temos o ARP e também muitos outros de que não estamos a falar por não serem usados na Internet.
  • Campo de dados – É aqui que vai o datagrama IP, encapsulado no pacote. Como já dissemos, este datagrama não pode ter mais do que 1.500 Bytes, pelo que o TCP trata de calcular o valor do segmento, de forma que adicionados os cabeçalhos seguintes, não ultrapasse os 1.500 Bytes. Se tal acontecer, também já vimos como o IP trata da fragmentação do datagrama. Mas o campo de dados também não pode ter menos de 46 Bytes, pelo que tem que ser preenchido até esse valor. O destinatário saberá descartar esse enchimento pela informação do cabeçalho do datagrama.
  • CRCCiclic Redundancy Check ou verificação de redundância cíclica é o código de deteção de erros usado pela Ethernet. Quando o nó emissor monta o pacote calcula o CRC. Quando o nó recetor recebe o pacote calcula o CRC da mesma forma. Se o resultado for diferente é por que o pacote foi corrompido e então é descartado.
  • Intervalo entre pacotes – Interframe Gap – Sempre que um nó acaba a transmissão de um pacote Ethernet, tem que esperar o tempo de emissão de 96 bits (12 Bytes) no estado inativo, até que possa transmitir um novo pacote.

Ao referirmos os equipamentos da Ethernet, mencionámos o HUB e o Switch, aqueles que permitem interconectar os diversos nós dentro de uma sub-rede. São estes dois equipamentos que fazem o encaminhamento dos pacotes. Vamos então fazer uma descrição da função e forma de trabalhar de cada um deles.

HUB (Concentrador)

O HUB, que se pode ver na Figura 2, é um conector de rede que funciona a nível da camada física, isto é, o HUB  funciona como um barramento comum que põe em ligação os nós que a ele se ligam. Mas faz mais, regenera e repete o pacote que recebe em broadcast para todos esses nós. Já verificámos que em alguns artigos, ao referirem este broadcast, fazem referência ao endereço broadcast à rede como sendo o último da sub-rede, isto é, o xxx.xxx.xxx.255. Referimos agora esta questão para que fique claro que o sentido do termo broadcast, neste caso não tem a ver com o endereçamento IP em broadcast à rede nem sequer com o endereçamento MAC broadcast, mas tão só com o facto de o pacote ser colocado no barramento, portanto com acesso a todos os nós a ele ligados, daí broadcast, sem sofrer qualquer alteração. Aliás, como já se disse, o HUB funciona ao nível da camada física, sendo portanto incapaz de alterar qualquer componente do pacote, até porque não o consegue sequer abrir.

Assim, todos os nós conectados ao HUB têm conhecimento do pacote e verificam se se destina a eles. Aquele a quem se destinar, o que verifica pelo MAC Adress, recolhe-o e passa-o às camadas superiores se for um nó terminal, ou encaminha-o para uma rede de nível superior ou para a Internet se for um gateway. Só depois de o pacote ser recolhido por algum dos nós, outro pacote pode ser lançado em toda a sub-rede que liga ao HUB. Como todos os nós despejam pacotes para dentro do mesmo canal (o barramento), caso o canal esteja ocupado a transmitir um pacote de um nó e outro nó enviar um pacote para o mesmo canal, dá-se uma colisão e ambos os pacotes ficam ilegíveis, perdendo-se assim o tempo de transmissão gasto com os dois, mantendo-se inutilmente ocupado o canal.

Figura-14-55
Figura 2

Este é um dos grandes inconvenientes do HUB. Embora a Ethernet utilize o protocolo CSMA/CD (Carrier Sense Multiple Access with Collision Detection), qualquer solução que não esteja sujeita a colisões é preferível. Outra desvantagem do HUB é o facto de a sua transmissão ser efetuada em half-duplex, pois só pode haver uma transmissão de cada vez no canal, seja em que sentido for. Para além disso, a Ethernet restringe o número máximo de nós e a distância máxima entre dois nós num  mesmo domínio de colisão (quanto maior a distância, maior a probabilidade de um nó começar a transmitir antes de se perceber que o outro já iniciou uma transmissão), o que à partida limita a dimensão e as características de uma LAN apoiada em HUB.

A evolução negativa dos preços dos Switch veio tornar a utilização dos HUB obsoleta, embora ainda sejam encontrados em algumas redes mais antigas, em algumas aplicações especializadas ou ligados a roteadores em redes domésticas, onde a probabilidade de estar ligada mais do que uma máquina em simultâneo é baixa.

Porque o protocolo CSMA/CD existe essencialmente para as LAN partilhadas, como é o caso dos HUB, entendemos ser agora a ocasião indicada para o abordar, deixando para depois a abordagem aos Switch.

Protocolo CSMA/CD

Nas topologias em BUS ou em estrela mas ligadas a um HUB (concentrador), a probabilidade de existência de colisões existe e é tanto maior quanto maior for o número de nós envolvidos. Para tratar devidamente desta questão a Ethernet utiliza o Protocolo CSMA/CD, acrónimo de Carrier Sense Multiple Access with Collision Detection o que em Português dá Acesso Múltiplo com Deteção de Portadora e com Deteção de Colisão. Então vamos lá trocar isto por miúdos:

  • Um nó escuta um canal antes de transmitir (deteção de portadora). Quando percebe que o canal está livre, começa a transmitir os seus bits, que se propagam em todas as direções ao longo do meio de transmissão (caso da topologia BUS) ou em todas as direções no concentrador e por todos os cabos que a ele ligam.
  • Quando acontece uma colisão, ambos os nós abortam imediatamente a transmissão (deteção de colisão) e dão indicação do facto emitindo um sinal de reforço de colisão (que serve para confirmar que ambos os emissores tomam efetivamente conhecimento da colisão e abortam).

Não há dúvida que, se este princípio fosse usado em todos os debates em Televisão onde se confrontam ideias diversas, no fim ficaríamos todos muito mais esclarecidos. Mas voltemos ao que interessa.

Então, se um nó só começa a transmitir quando o canal está livre, como é que pode haver uma colisão?

A questão prende-se com o intervalo de tempo necessário para que um nó sinta que o canal está ocupado, após o início da transmissão por parte de outro nó. Até que isso aconteça o canal está livre para esse nó e ele pode iniciar uma transmissão que inevitavelmente vai colidir com a outra. Resumindo, quando dois nós decidem iniciar uma transmissão praticamente em simultâneo, uma colisão vai ocorrer. Após a deteção de colisão e a emissão do sinal de reforço de colisão, ambos os nós entram num período exponencial de espera.

E o que é lá isso?

Significa que cada nó vai escolher um valor de entre dois possíveis – 0 e 1 – e multiplicá-lo pelo tempo necessário para a emissão de 512 bits. Por exemplo, para uma rede de 100 Mbps de largura de banda, o tempo de emissão de 512 bits será de 5,12 micro segundos. Então, o tempo que deverá aguardar será de 0 ou 5,12 μs (microssegundos). A probabilidade de acontecer nova colisão é de 50%, precisamente a probabilidade de escolherem ambos o mesmo valor.

Caso haja nova colisão o valor será a escolher de entre 4 valores – 0, 1, 2 e 3 –  depois multiplicado por 5,12 μs para encontrar o tempo de espera. A probabilidade de escolha do mesmo número agora passou a ser de 25%.

 E assim sucessivamente, de acordo com a fórmula – tempo espera = k * 512 – em que k representa o tal valor a escolher de entre um número de valores igual a 2n, sendo n o número de repetições com um máximo de 10. Assim teremos 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 possibilidades de números para escolher, conforme estejamos na 1ª, 2ª, 3ª, 4ª, 5ª, 6ª, 7ª, 8ª, 9ª ou 10ª repetição, sendo a probabilidade de escolher o mesmo número de 50%, 25%, 12.5%, 6.25%, 3.125%, 1.56%, 0.78%, 0.39%, 0.195% e 0.098%, respetivamente.

Se mesmo assim a colisão persistir, o pacote é descartado.

Switch (Comutador)

O comutador ou switch, contrariamente ao HUB, está isento de colisões. No entanto o comutador está preparado para utilizar o protocolo CSMA/CD sempre que uma das suas interfaces estiver conectada a um canal partilhado de LAN, concretamente um HUB. Mas vamos passar a chamar-lhe switch, pois é assim que ele é conhecido, embora  a tradução desse nome seja comutador.
Cada porta do switch dispõe de uma interface própria, com capacidade de armazenamento de pacotes, permitindo-lhe assim a transmissão pacote a pacote para cada destino. Assim, mesmo que diversos pacotes cheguem a uma interface simultaneamente vindos de outras portas do switch, ele tem capacidade de armazenar os diversos pacotes e enviá-los um a um. Está portanto livre de colisões.
Quando um pacote chega ao switch através de uma sua interface, este verifica o seu destino por leitura do endereço MAC de destino do pacote e envia-o para a interface a que está ligado o nó com esse endereço.

Mas como é que o switch sabe isso?

O switch dispõe de uma tabela de encaminhamento onde tem registadas as correspondências entre as suas interfaces e endereços MAC dos nós a elas ligados. No início essa tabela está vazia, mas o switch, que tem capacidade de aprendizagem, vai-a preenchendo conforme lhe chegam pacotes pelas suas interfaces até que essa tabela esteja, numa situação ideal, completamente preenchida. Pelos elementos contidos no cabeçalho do pacote, que já conhecemos, é-lhe possível recolher toda a informação de que necessita para fazer esse trabalho.

A figura 5 deve ser seguida com a descrição, pois penso que poderá ajudar na compreensão do assunto. As linhas verdes representam a ligação entre os nós e as interfaces e entre estas e a tabela para uma consulta, p.e. quando um nó envia um pacote, ele é recebido na interface e é feita a consulta à tabela de encaminhamento relativamente ao destinatário. As linhas vermelhas representam o encaminhamento do pacote da tabela até à interface e desta para o nó pretendido, p.e. a resposta à consulta anterior e o envio do pacote ao nó a que o mesmo se destinava.

Então e quando o switch não tem a tabela completa e recebe um pacote com um endereço MAC de destino que não pertence aos existentes?

Figura-14-56
Figura 5

Neste caso, o switch envia esse pacote para todas as interfaces (menos aquela de onde o pacote veio) e os nós que vão receber o pacote, ou o passam à camada superior se o endereço MAC coincidir, ou o descartam em caso contrário.

O switch é um conector de nós que funciona na camada de enlace, contrariamente ao HUB que funciona na camada física. O switch lê os cabeçalhos dos pacotes (os endereços MAC), encaminha-os de acordo com os elementos recolhidos e preenche a sua tabela de encaminhamento. O switch pode interligar troços de Ethernet de diversas velocidades. A receção e a emissão são feitas em interfaces diferentes, respeitando cada uma as características do enlace que lhe está conectado.

O switch proporciona uma ligação dedicada em full-duplex com cada nó, pois o conector Ethernet dispõe de dois pares de fios trançados que permitem que pacotes caminhem no mesmo troço nos dois sentidos sem que interfiram entre si e cada conector destina-se exclusivamente a um nó (exceto quando esse conector se liga a um HUB – embora o HUB represente um nó para o switch, vai proporcionar aos nós finais a ele ligados uma LAN partilhada). Tal capacidade é evidentemente extensiva a cada interface do switch.

Transmissão em full-duplex, possibilidade de interligação de enlaces com diversas velocidades de Ethernet, transmissão simultânea de pacotes vindos de diversos canais para outros canais sem que haja colisões, preços de mercado do equipamento que desceram quase ao nível dos HUB, não é de admirar que o switch tenha tornado o HUB praticamente obsoleto. Foi aliás com a Ethernet comutada que se deu a grande expansão em termos de aumentos de velocidade e rentabilidade da capacidade de transmissão das redes Ethernet.

Porque os switch se podem interligar em diversos níveis, são comummente utilizados em sub-redes, por detrás do roteador de primeiro salto. A velocidade de retransmissão que proporcionam é superior à de qualquer roteador, porque funcionam na camada de enlace e os endereços MAC dos nós já são por eles parcialmente conhecidos. Excluem-se desta afirmação as grandes redes privadas, porque têm que ser divididas em muitas sub-redes de localização ou especialização e, nestas subdivisões, deverão ser utilizados roteadores.