Camada de Enlace
Enlace é o percurso que um pacote vai percorrer desde um hospedeiro até outro hospedeiro. Vamos por isso deixar de os chamar por esses nomes e passar a tratá-los como nós da rede. Assim sendo, enlace é o percurso compreendido entre dois nós de uma rede, nisto incluídas as interfaces em cada um dos nós. As interfaces são aquilo que conhecemos como placas de rede, até há uns tempos encaixadas como suplementos em slots PCI da placa mãe, atualmente incorporadas na própria placa mãe. Estamos a referir as interfaces mais conhecidas, concretamente a Ethernet e a WiFi, aquelas que vamos abordar ao longo deste texto.
Uma observação sobre o termo ”pacote” que agora passamos a usar. Ao encapsulamento do datagrama feito pela camada de enlace chama-se Frame, em Inglês, que é a língua natural da informática. Tal termo traduz-se para “Quadro” em Português, mas esse termo, na nossa opinião não encaixa na representação física que se pretende. Quadro tem muitos significados na intrincada e maravilhosa língua de Camões, mas nenhum deles tem a imagem pretendida para aquilo que no final circula na rede. Por isso decidimos passar a chamar ”Pacote” a este encapsulamento final do datagrama. Adiante.
Até agora temos vindo a falar de camadas que providenciam serviços de entrega fim a fim, isto é, entre o Browser e o servidor Web representados na figura que em artigos anteriores nos acompanhou durante o roteamento. Mas, como já vimos nessa figura, o pacote desloca-se de nó em nó, ou enlace a enlace, desde a origem até ao destino. E, em cada enlace pode encontrar meios físicos com características e capacidades completamente diferentes. É precisamente à Camada de Enlace que compete tratar disso. É sua responsabilidade fazer deslocar o pacote através do enlace seguinte usando o protocolo adequado ao meio físico desse enlace bem como às suas características, preservando sempre o conteúdo do pacote, garantindo uma entrega confiável.
Os diferentes protocolos podem ou não oferecer uma entrega confiável, dispondo para o efeito de métodos de deteção e correção de erros, só deteção ou nenhum, de serviços de pedido de repetição de pacote no enlace, como é o caso dos protocolos de transmissão por rádio como o WiFi, dispor ou não de serviços de controlo de fluxo que acrescentam ao já existente no TCP. Na camada de enlace todos os nós têm um endereço de enlace tal como têm um endereço IP na camada de rede. Chama-se endereço MAC (Media Access Control), ou endereço físico, ou mais vulgarmente o seu nome em Inglês, MAC Address.
Endereço MAC
O endereço MAC, acónimo para Media Access Control, é um endereço exclusivo e único a nível global, de um adaptador de rede ou interface de um nó. Qualquer fabricante de adaptadores de rede, mesmo os incorporados nas placas mãe deve adquirir a uma entidade internacional reguladora um pacote de 24 bits de endereços para todas as peças que fabrique. O endereço MAC é composto por 48 bits. Quando a um determinado fabricante são atribuídos os 24 bits de menor ordem, aos 24 bits de maior ordem são atribuídos valores identificativos do fabricante pela entidade reguladora.O endereço MAC é habitualmente descrito no sistema hexadecimal, tendo cada Byte separado por traço (hyphen). Por exemplo E0-CB-4E-07-5E-03 é um endereço MAC de um adaptador.
E porquê mais um endereço?
Por várias razões, entre as quais uma muito importante. Enquanto o IP pode variar consoante o valor que lhe for atribuído por DHCP ou conforme a sua localização (no caso de um Portátil, um Tablet, um SmartPhone) o endereço MAC é permanente e identifica aquela máquina, onde quer que se encontre. O endereço MAC é aquele que é utilizado nos pacotes na camada de enlace, isto é, o cabeçalho tipo do pacote contém os MAC Address de origem e destino.
Mas como pode um nó saber o endereço MAC do nó para onde vai enviar o pacote? Ele só conhece o IP dele.
Para isso existe o ARP, o protocolo de resolução de endereços a que a camada de enlace recorre para resolver o seu problema.
ARP (Adress Resolution Protocol)
O protocolo ARP é responsável pela conversão de qualquer endereço IP num endereço MAC. Mas esta tradução está limitada à sub-rede em que o nó se insere, isto é, a resolução de endereços proporcionada pelo ARP está limitada à sub-rede em que tal resolução é pedida.
Porque o endereço MAC é o endereço utilizado na camada de enlace, qualquer nó que queira enviar um pacote a outro nó no mesmo enlace tem de conhecer o endereço MAC desse nó de destino. Então, nada mais lógico do que cada nó ter uma tabela ARP de todos os nós dessa sub-rede guardada em memória. E, na realidade quase que assim é. Cada nó tem uma tabela dos endereços MAC dos restantes nós da sua rede.
E como é que cada nó faz para construir essa tabela?
Uma tabela ARP de um nó é construída numa base de “conforme necessário”, isto é, quando um nó necessita do endereço MAC de outro nó da sub-rede faz uma consulta à sua tabela ARP. Se o mapeamento desse endereço de rede ao correspondente endereço MAC lá não se encontrar, então o nó executa uma consulta ARP, construindo um datagrama ARP e enviando-o à sub-rede. Então comecemos por ver a estrutura de um datagrama ARP, conforme a figura 1, em que:
- HTYPE – (Hardware Type – 16 bits), especifica o protocolo tipo do hardware da sub-rede, por exemplo Ethernet
- PTYPE – (Protocol Type – 16 bits), especifica o protocolo para o qual o pedido ARP é dirigido, por exemplo IPv4.
- HLEN – (Hardware Adress Length – 8 bits), comprimento do endereço de hardware em bytes, por exemplo Ethernet é 6.
- PLEN – (Protocol Adress Length – 8 bits), comprimento em Bytes do endereço usado na camada acima, ou do protocolo especificado como sendo aquele para que é feito o pedido, por exemplo IPv4 é 4.
- OPER – (Operation – 16 bits), especifica a operação que o nó está a realizar, 1 para consulta e 2 para resposta.
- SHA -(Sender Hardware Adress – 48 bits), representa o endereço MAC do nó remetente.
- SPA – (Sender Protocol Adress – 32 bits), representa o endereço de rede, por exemplo o endereço IPv4.
- THA – (Target Hardware Adress), represente o endereço MAC do destinatário, deixado em branco nas consultas.
- TPA – (Target Protocol Adress – 32 bits), representa o endereço de rede do destinatário.
Construído o datagrama, o ARP passa-o à camada de enlace para o encapsular num pacote com o endereço MAC de destino FF-FF-FF-FF-FF-FF, isto é, um broadcast de camada de enlace à sub-rede onde o nó de origem se encontra. Feito o envio em broadcast de enlace, todos os nós da sub-rede vão receber o pacote, abri-lo e enviá-lo a um módulo ARP que verificará se o endereço de rede contido no datagrama ARP corresponde ao seu endereço. Se coincidir, o respetivo nó preenche o datagrama ARP de acordo com os valores de origem e destino agora em caso e coloca o seu endereço MAC no respetivo campo, fazendo assim o mapeamento entre o endereço de rede e o endereço MAC. De seguida envia o datagrama para a camada de enlace para que seja enviado ao endereço MAC do nó que fez a consulta.
Assim, o nó questionante já pode preencher a sua tabela com mais esse mapeamento e, com base na consulta à tabela atualizada, enviar o datagrama IP que entretanto estava em fila de espera. Na figura 2 está um exemplo do que pode ser a tabela ARP para uma sub-rede como a representada na mesma figura.
Devem ter reparado que referimos datagrama ARP, embora este protocolo não pertença à camada de rede, pois contém endereços MAC. Mas o caso é que também não pertence à camada de enlace, pois tem endereços de rede. Digamos que está a meio caminho. Por isso optámos pelo nome de datagrama, para se distinguir do pacote em que é encapsulado na camada de enlace. Vamos agora acompanhar um pacote no seu percurso pela camada de enlace, correspondendo a um pedido de um nó cliente da rede d do SA4, que se representa esquematicamente na Figura 4 do artigo anterior. Vamos começar por analisar um pedido feito pelo nó 85.136.38.130, um Desktop ligado por fio à rede, utilizando portanto Ethernet na camada de enlace.