Como qualquer pacote de protocolo de roteamento atinge (fluxos de operações) do cartão NIC (camada física) para qualquer daemon de roteamento (OSPF / RIP / BGP)?

3

O problema é rearmar o fluxo de pacotes do protocolo de roteamento em qualquer dispositivo Linux / Unix onde vários daemons de protocolos de roteamento estão sendo executados.

Como qualquer pacote de protocolo de roteamento atinge (fluxos de operações) do cartão NIC (camada física) para qualquer daemon de roteamento (OSPF / RIP / BGP)?

    
por mav_2k 09.02.2012 / 06:21

2 respostas

11

Você não especificou de que kernel você está falando.
Do ponto de vista da BSD, tudo é explicado em TCP / IP Illustrated, Volume 2: A implementação por Gary R. Wright W. Richard Stevens

A versão curta segue:

  1. O quadro chega ao anel descritor rx da NIC. Através do DMA, ele é transferido para o anel RX na RAM.
  2. O driver converte os descritores específicos do dispositivo no anel RX para algum tipo de estrutura geral do kernel da rede (por exemplo, mbuf / mbuf_cluster ou sk_buff ). Também aqui o pacote é copiado para bpf .
  3. Em ether_input , dependendo das famílias de protocolo e endereço do quadro, ele é processado pela entrada de matriz protosw (comutador de protocolo) correspondente.
  4. Então, depois que o datagrama ip_input ou tcp_input / udp_input chegar na camada de soquete ao so_rcvbuf (buffer de recebimento do soquete) do daemon de roteamento correspondente.
  5. A partir desse ponto, o daemon de roteamento geralmente é notificado sobre dados pendentes no soquete por meio de algum tipo de recurso de notificação de E / S ( selecione (2) / enquete (2) / epoll (7) / kqueue (2) ) e usa recv (3) nesse soquete para extrair a carga útil dos pacotes. Aqui (e)glibc / libc / libSystem toma seu lugar.
  6. O daemon de roteamento é mágico e altera a (s) tabela (s) de roteamento dos kernels por meio de sockets de roteamento ( PF_ROUTE em derivados BSD ou PF_NETLINK 's NETLINK_ROUTE no Linux)
por 10.02.2012 / 11:28
8

Daemons e suites de roteamento manipulam a tabela de roteamento no Kernel. Assim, os pacotes não fluem através do daemon de roteamento, mas os pacotes são roteados de acordo com a tabela de roteamento.

Quando se trata de quais rotas ganham prioridade quando há duas opções de igual especificidade (a rota mais específica sempre ganha) na tabela de roteamento, é qual delas tem o melhor (menor) metric (veja route ). No terreno da Cisco, chama-se ' Distância administrativa .' Diferentes protocolos, como RIP e BGP, possuem métricas padrão. Não tenho certeza se existe uma referência específica ao Linux, mas se você olhar para o link da distância administrativa, arriscaria adivinhar que os daemons de roteamento usam a mesma prioridade.

No que diz respeito ao protocolo de roteamento, ele depende do protocolo de roteamento, mas geralmente usa protocolos de transporte padrão. Por exemplo, o BGP usa uma sessão TCP / IP na porta 179. Assim, o daemon apenas ligaria um soquete de acordo.

    
por 09.02.2012 / 06:30