Codificando uma pilha TCP/IP, 1: Ethernet e ARP (2016)
(saminiir.com)-
Implementação da pilha TCP/IP
- Implementar uma pilha TCP/IP por conta própria pode parecer uma tarefa complexa.
- As especificações centrais do TCP consistem em análise do cabeçalho TCP, máquina de estados, controle de congestionamento e cálculo de tempo limite de retransmissão.
- Nesta série de blog, será implementada uma pilha TCP/IP mínima em espaço de usuário no Linux.
- O objetivo deste post e do software é educacional, para aprender mais profundamente sobre programação de redes e de sistemas.
-
Dispositivo TUN/TAP
- Um dispositivo TAP é usado para interceptar tráfego de rede de baixo nível no kernel Linux.
- Dispositivos TUN/TAP são fáceis de configurar em programas de espaço de usuário e são usados em vários programas, como o OpenVPN.
- Com um dispositivo TAP, é possível ler e escrever dados em buffers Ethernet.
-
Formato do quadro Ethernet
- Ethernet é a base de várias tecnologias de rede que conectam computadores em uma LAN.
- O padrão Ethernet evoluiu bastante desde sua primeira publicação em 1980.
- O cabeçalho do quadro Ethernet pode ser declarado como uma estrutura em C e inclui os campos DMAC, SMAC, Ethertype e payload.
-
Análise de quadros Ethernet
- O atributo
packedé usado para evitar que o compilador GNU C otimize o layout de memória da estrutura. - O cenário completo de análise e processamento de um quadro Ethernet é simples.
- O atributo
-
Protocolo de Resolução de Endereços (ARP)
- O ARP é usado para mapear dinamicamente endereços Ethernet de 48 bits para endereços de protocolo.
- O formato do pacote ARP é relativamente simples e inclui os campos tipo de hardware, tipo de protocolo, tamanho do hardware, tamanho do protocolo, opcode e dados.
-
Algoritmo de resolução de endereços
- Uma
translation tableé usada para armazenar os resultados do ARP e evitar solicitações ARP duplicadas. - O teste final da implementação de ARP é verificar se ela responde corretamente a solicitações ARP.
- Uma
-
Conclusão
- A implementação mínima de processamento de quadros Ethernet e ARP é relativamente fácil e pode ser feita com algumas linhas de código.
- O código-fonte do projeto pode ser visto no GitHub.
- No próximo post, a implementação continuará com echo e resposta ICMP (ping) e análise de pacotes IPv4.
Ainda não há comentários.