Introdução às Redes e Protocolos TCP/IP Sessão nº6 Jorge Gomes [email protected] MTU • Os frames do nível de ligação possuem um tamanho máximo para a quantidade de informação útil que podem transportar. • No caso de uma rede Ethernet a carga útil de um frame pode ser 1492 ou 1500 bytes dependendo do tipo de encapsulamento. – Pode ser maior com Jumbo frames – Pode ser mais pequeno se tivermos de transportar informação sobre VLANs • O tamanho máximo da carga útil de um frame designa-se por MTU (Maximum Transmission Unit). • O nível de transporte TCP divide a informação a transmitir por segmentos de acordo com o MTU. • Se o nível de rede IP receber um pacote para transmissão com tamanho superior ao MTU máximo esse pacote é partido em datagramas IP de modo a caber no MTU máximo. – Infiniband 65532 – Token ring 16Mbits/s 17914 – FDDI 4352 – Ethernet Jumbo 8000/9000 – Ethernet – IEEE 802.3/802.2 – loopback – PPP (baixo atraso) 1500 1492 16436 296 MTU • Quando duas maquinas ligadas à mesma rede local comunicam entre si o MTU relevante é o MTU da rede local. • No entanto quando duas maquinas ligadas a redes diferentes comunicam entre si os datagramas IP podem ter de atravessar varias redes com MTUs diferentes. • Neste ultimo caso o MTU relevante é o MTU mais pequeno de entre todos os MTUs das varias redes que o datagrama atravessar. • Uma vez que o encaminhamento de tráfego numa rede IP é dinâmico o MTU de uma ligação também pode variar no tempo. • O RFC 1191 define um mecanismo para determinar o MTU de um dado caminho de forma a eliminar a necessidade de fragmentação. – Path MTU discovery MTU • O MTU tem impacto directo no desempenho: – da rede switches / routers etc – dos hosts • Quanto menor for o MTU maior será: – – – – O numero de frames a processar O numero de operações de comutação Interrupts nos hosts Processamento de headers IP • Em redes rapidas 1GbE ou 10GbE: – O Impacto dos interrupts e processamento de headers IP no consumo de CPU pode ser muito elevado – Em 10GbE para se obter bons desempenhos é importante usar Jumbo frames (MTU 8000 ou 9000) – Também em redes de armazenamento (iSCSI) o uso de Jumbo frames pode ter impacto positivo no desempenho MTU • Em algumas circunstâncias os MTUs pequenos podem ser recomendáveis por reduzirem a latência. • Numa linha série RS232 a 9600bits/s um MTU baixo pode melhorar a resposta interactiva. – 9600bits/s com 8 bits por byte mais 1 start bit e 1 stop bit = 960bytes/s – Se no mesmo link estiver a ser usado por uma aplicação interactiva e por uma aplicação de transferência de ficheiros (FTP) que transmite grandes pacotes de dados (1024 bytes por pacote). – Então temos de esperar cerca de 533ms em media antes de podermos enviar um pequeno pacote da aplicação interactiva. – Estudos efectuados mostram que respostas superiores a 100-200ms são mal toleradas pelos humanos. – Uma redução do MTU da linha para 256 bytes reduz o tempo máximo de espera para 266ms e o tempo médio para 133ms. – O valor de MTU apresentado para o PPP é 296bytes = 256 data + 40 headers. Protocolo IP (Nível de rede) IP • O IP (RFC 791) é o protocolo de rede do TCP/IP. • O IP é usado por protocolos como o TCP,UDP, ICMP e IGMP entre outros… • O IP fornece um serviço não garantido: – Não garante a chegada dos datagramas ao destino. – Não garante a sequencia de chegada. • Quando algo corre mal os datagramas são deitados fora: – Uma mensagem de erro ICMP pode ser enviada para a origem. • Exemplos de problemas que levam à perda de datagramas: – Um router pode esgotar os buffers. – Corrupção do datagrama. – Fragmentação pode ser necessária mas o router pode não possuir a essa funcionalidade ou estar simplesmente inibida. – Fragmentação pode ser necessária mas o datagrama IP pode ter o bit de não fragmentação activo. – Uma lista de acesso / firewall pode bloquear a passagem de datagramas. O cabeçalho IP • O tamanho mínimo de um cabeçalho IP é 20 bytes (5 * 32bits). • O cabeçalho pode ter mais de 20 bytes se forem usadas opções. • O tamanho máximo do cabeçalho é 60 bytes (15 * 32bits). • O cabeçalho está dividido em palavras de 32 bits. • Cada palavra de 32 bits é transferida em formato “big endian”. – Ordem de transmissão bits 0-7, 8-15, 16-23, 24-31. • Todos os inteiros binários são transferidos em “big endian”. – Sistemas com hardware “little endian” têem de proceder à conversão de formato antes da transmissão. – Por esta razão este formato é conhecido por “Network byte order”. O cabeçalho IP • Os campos do cabeçalho IP são: – Versão: a versão de IP mais usada é a versão 4 (existe a 6). – Tamanho: tamanho do cabeçalho em palavras de 32 bits. – Tipo de serviço (TOS): • 3 bits de precedência: indicam a importância do datagrama. • 4 bits TOS: tipo de serviço, cada um dos 4 bits define um tipo de serviço. Só um dos 4 bits pode estar activo. – – – – Minimizar os atrasos. Maximizar debito de transferência. Maximizar fiabilidade. Minimizar o custo monetário. • 1 bit não é usado. – Tamanho total: tamanho total do datagrama IP em bytes. O tamanho máximo de um datagrama IP é 65535 bytes. Nenhum sistema é obrigado a aceitar datagramas IP superiores a 576 bytes. O limite mais habitual nas implementações 8192 bytes. – Identificação: identifica cada datagrama. É incrementado cada vez que um datagrama é enviado. O cabeçalho IP • Os campos do cabeçalho IP são: (continuação) – Tempo de vida: limita o numero de routers pelos quais o datagrama pode passar. É inicializado a um dado valor normalmente 64 e é decrementado por cada router atravessado. Quando chega a zero o pacote é deitado fora. – Protocolo: identifica o tipo de protocolo que entregou dados ao IP para transmissão. – Checksum do cabeçalho: complemento para um da soma do cabeçalho dividido em palavras de 16 bits com o campo de checksum a zero. – Endereços IP: O cabeçalho contém ainda um endereço IP de origem e um endereço IP de destino. – Opções: o cabeçalho IP pode conter campos opcionais: • • • • • Restrições de utilização e segurança. Registo de rota. Regista os endereços IP dos routers por onde passa. Registo de tempo. Regista o tempo para cada router atravessado. “loose source routing” “strict source routing” O cabeçalho IP versão (4) tamanho (4) Tipo de serviço (8) identificação (16) tempo de vida (8) tamanho total em bytes (16) flags (3) protocolo (8) offset do fragmento (13) checksum do cabeçalho (16) endereço IP de origem (32) endereço IP de destino (32) opções dados Precedência e TOS • Originalmente o campo de 8 bits de TOS eram divididos em: – 3 bits de precedência – 4 bits de tipo de serviço (TOS) – 1 bit reservado Precedência (3) 0 1 2 Tipo de serviço (4) 3 4 5 6 Reservado (1) 7 Precedência • 3 bits de precedência: – Usados para definir a politica de queueing – Não afecta a escolha da rota apenas a prioritização – Os valores de precedência são geralmente ignorados pois podem ser usados indevidamente 111 110 101 100 010 001 000 Network control Internetwork control CRITIC-ECP Flash override Immediate Priority Routine TOS • O campo de tipo de serviço (ToS) é usado como indicação para os routers e hosts para tratamento diferenciado na escolha da rota • Requer configuração explicita dos “equipamentos” caso contrario é ignorado • Num dado pacote apenas um bit pode estar activo Tipos de serviço originais usados por algumas aplicações Aplicação telnet rlogin FTP • control • data TFTP SMTP • comando • data SNMP NNTP BGP Minimização de atrasos Bit 3 Maximizar Transferência Bit 4 Maximizar Fiabilidade Bit 5 Minimizar Custos Bit 6 Valor Hex 1 1 0 0 0 0 0 0 0x10 0x10 1 0 1 0 1 0 0 0 0 0 0 0 0x10 0x08 0x10 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0x10 0x08 0x04 0x02 0x04 Diff Serv • No final dos anos 90 o IETF redefiniu o bits de tipo de serviço. • O novo esquema designa-se por serviços diferenciados: – Differentiated Services Code Point (DSCP). Codepoint 6 bits Não Usado 2 bits • O esquema define 6 bits que podem ser usados como “ponteiros” para tipos diferentes de serviços que são interpretados pelos dispositivos de encaminhamento de tráfego (routers). • Quando os últimos 3 bits do codepoint estão a zero os primeiros 3 bits assumem o significado do campo original de precedência, mantendo assim compatibilidade com o campo de precedência. Codepoint xxxxx0 xxxx11 xxxx01 Atribuído por Interpretações pré-definidas pelo IETF Para uso local ou testes Para uso local ou testes (por enquanto) Opções IP (RFC 791) • 8 bits option type (RFC 791) – Flag • 0 não copiar esta opção para os fragmentos • 1 copiar esta opção para os fragmentos – Class • 0 controlo (maioria das opções) • 2 debug e medições (internet timestamp) – Number • Identifica a opção Opções IP • Number: – 0: fim da lista de opções, não tem campo data – 1: No operation, não tem campo data usado p/ alinhamento a 32 bits – 2: Security, 11 bytes de data classificação de segurança (DoD, agencias de segurança) – 3: Loose source routing (desaconselhado) – 4: Internet timestamp – 7: Record route – 8: Stream ID, 4 bytes de data (obsoleto) – 9: Strict source routing (desaconselhado) – 18: enhanced traceroute (RFC 1393) • Option length: – Tamanho do campo options data em octetos Subnets • Um endereço IP possui duas componentes endereço de rede e endereço de sistema (host). • É possível partir a componente de sistema em: – Endereço de sub-rede (subnet). – Endereço de sistema (host). • Todos os sistemas possuem obrigatoriamente suporte para subnets. – É da responsabilidade do administrador a decisão de dividir o espaço de endereçamento para sistemas em subnets. – É também sua responsabilidade escolher quantos bits usar para criar subnets. • As subnets são transparentes para os routers exteriores à rede. – A utilização de subnets esconde os detalhes da topologia interna de uma rede IP, mantendo o tamanho das tabelas de encaminhamento. Subnets Exemplo com uma rede /24 (antiga classe C). Net 193.137.55 254 Hosts 24 bits 8 bits Net 193.137.55 24 bits Net 193.137.55 16 SubNets 4 bits 24 bits 4 bits 64 SubNets 24 bits Net 193.137.55 14 Hosts 2 Hosts 6 bits 4 SN 2 bits 2 bits 62 Hosts 6 bits Subnets • Exemplo com uma rede /24 (antiga classe C). • Subnet de 3 bits dá 8 subnets Net 193.137.55 24 bits 8 SN 3 bits 30 Hosts 5 bits Endereço IP(2) Endereço IP(10) Endereço IP das subnets (10) 00000000 00100000 01000000 01100000 10000000 10100000 11000000 11100000 0 32 64 96 128 160 192 224 193.137.55.0 193.137.55.32 193.137.55.64 193.137.55.96 193.137.55.128 193.137.55.160 193.137.55.192 193.137.55.224 Subnets Net 193.137.55 8 SN 24 bits 3 bits 30 Hosts 5 bits Router Internet Router 193.137.55.160 10100000(2) Router 193.137.55.16 00100000(2) Router 193.137.55.128 10000000(2) Router 193.137.55.64 01000000(2) 193.137.55.96 01100000(2) Subnets e mascaras • Para configurar uma interface IP é necessário saber: – o endereço IP atribuído à interface. – quantos bits são usados para definir a rede e subnet caso exista. • Para definir o numero de bits usados para definir a rede + subnet usase uma mascara de 32 bits em que os bits de rede são representados por 1 e os bits de host por 0 (zero). • Para o exemplo anterior a representação será: – 24 bits de rede + 3 bits de subnet + 5 bits de host – 27 bits para definir a componente de rede + 5 bits para a componente hosts – 11111111 11111111 11111111 11100000(2) – 0xffffffe0 – 255.255.255.224 – x.x.x.x /27 Subnets e mascaras • Com base no endereço IP da interface e sua mascara um host pode terminar se um datagrama se destina: – a um host na mesma rede IP – a um host noutra rede IP (o datagrama terá de ser enviado para um router) – ou se o datagrama é um broadcast • Ainda com base no exemplo anterior: Endereço IP Net 193.137.55 8 SN 24 bits 3 bits 30 Hosts 5 bits Mascara 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 111 1 27 bits 0 0 0 0 5 bits 0 Subnets • Continuando o exemplo de subnets numa rede /24 • Usando os 3 primeiros bits do host para definir subnets Endereço IP(2) Endereço IP(10) Mascara(2) Mascara(10) 00000000 00100000 01000000 01100000 10000000 10100000 11000000 11100000 0 32 64 96 128 160 192 224 11100000 11100000 11100000 11100000 11100000 11100000 11100000 11100000 224 224 224 224 224 224 224 224 Subnets • Exemplo com uma rede /24 (antiga classe C). • Subnet de 3 bits dá 8 subnets Net 193.137.55 24 bits 8 SN 3 bits 30 Hosts 5 bits Endereço IP das subnets (10) Mascara (10) 193.137.55.0 /27 193.137.55.32 /27 193.137.55.64 /27 193.137.55.96 /27 193.137.55.128 /27 193.137.55.160 /27 193.137.55.192 /27 193.137.55.224 /27 255.255.255.224 255.255.255.224 255.255.255.224 255.255.255.224 255.255.255.224 255.255.255.224 255.255.255.224 255.255.255.224 Endereços IP especiais • Na tabela seguinte: – 0 significa um campo com todos os bits a zero. – 1 significa um campo com todos os bits a um. – netid, hostid significam um valor que não é todo 0 ou todo 1. Endereço IP Net 0 0 127 1 netid netid netid Pode aparecer como Subnet Host origem destino subnetid 1 0 hostid qualquer 1 1 1 1 OK OK OK nunca nunca nunca nunca nunca nunca OK OK OK OK OK Descrição Este host nesta net O hostid especificado nesta net Endereço de loopback Broadcast limitado à subnet local Broadcast directo à net netid Broadcast directo netid,subnetid Broadcast directo a todas as SN Endereços IP especiais • Exemplos: 0.0.0.0 255.255.255.255 0.0.0.7/24 193.136.97.255/24 127.0.0.1/8 um host na rede local (source) broadcast para todos os hosts na rede local host 7 na rede local broadcast directo para todos os hosts na rede 193.136.97 o próprio host na rede de loopback Endereço IP Net 0 0 127 1 netid netid netid Pode aparecer como Subnet Host origem destino subnetid 1 0 hostid qualquer 1 1 1 1 OK OK OK nunca nunca nunca nunca nunca nunca OK OK OK OK OK Descrição Este host nesta net O hostid especificado nesta net Endereço de loopback Broadcast limitado à subnet local Broadcast directo à net netid Broadcast directo netid,subnetid Broadcast directo a todas as SN Subnet Zero • A primeira subnet tem todos os digitos binarios a 0 – É designada por subnet zero • Tradicionalmente é desaconselhado usar esta subnet • Exemplo: – Em classfull a rede: 193.137.55.0 – Não sabendo a mascara a rede 193.137.55.0 pode ser interpretado como sendo uma rede 255.255.255.0 – Ou seja não é possível pelo endereço de rede inferir que o espaço 193.137.55.0 possui subnets • É possível usar a subnet zero mas é preciso ter cuidado – Pode criar confusões – Muito cuidado com as mascaras de rede !!! • Em alguns equipamentos é necessário habilitar a utilização da subnet zero – CISCO IOS e similares: ip subnet-zero Subnet All-Ones • A última subnet tem todos os digitos binarios a 1 – É por vezes designada por subnet All-Ones • Tradicionalmente é desaconselhado o seu uso • Exemplo: – A subnet 193.137.55.224 tem o endereço de broadcast 193.137.55.255 – Não sabendo a mascara 193.137.55.255 pode ser interpretado como sendo o endereço de broadcast da rede 193.137.55.0/24 – Ou seja olhando simplesmente para 193.137.55.255 não é possível inferir que o espaço 193.137.55.0 possui subnets • Tanto pode ser o broadcast de 193.137.55.0/24 como de 193.137.55.224/27 • É possível usar a subnet All-ones: – É preciso ter muito cuidado com a correcta especificação das mascaras – Em casos limite pode mesmo criar loops de tráfego na rede Subnets variáveis • O RFC1009 permite que uma rede dividida em subnets possa usar mascaras de diferentes tamanhos. • O RFC sobre “novos requisitos de routing” veio tornar o suporte de subnets de tamanho variável um requisito. • O uso de mascaras de tamanho variável permite uma gestão mais eficiente do espaço de endereçamento. • O maior problema com as subnets de tamanho variável é a falta de suporte em alguns protocolos de routing para o envio das mascaras de subnet juntamente com os endereços das subnets. • Os protocolos de routing mais recentes não possuem este problema. Subnets variáveis • Exemplo de subnets de tamanho variável usando uma rede /24 : Endereço IP(2) 00000000 00100000 01000000 01000000 01001000 01010000 01011000 01100000 10000000 10100000 10100000 10110000 11000000 11100000 Endereço IP(10) 0 32 64 64 72 80 88 96 128 160 160 176 192 224 Mascara(2) 11100000 11100000 11100000 11111000 11111000 11111000 11111000 11100000 11100000 11100000 11110000 11110000 11100000 11100000 Mascara(10) 224 224 224 248 248 248 248 224 224 224 240 240 224 224 Encaminhamento IP ou routing IP (Nível de rede) Encaminhamento IP • O encaminhamento é efectuado pelo nível IP. – Todos os sistemas com IP fazem encaminhamento • Encaminhamento (routing) consiste em: a) Procurar na tabela de routing um endereço de host ou rede que coincida com o endereço de destino do datagrama … b) Desta forma determinar qual a interface pela qual o datagrama deve ser enviado e qual o próximo passo • Politica de encaminhamento (routing) – É o conjunto de regras que determina que entradas devem de existir na tabela de routing. – A politica de encaminhamento é determinada através de criação manual de entradas na tabela de encaminhamento ou através de um processo de routing. Encaminhamento IP • Encaminhamento de datagramas IP quando se trata da comunicação entre sistemas na mesma rede IP: – Envio directo • Quando se pretende enviar um datagrama para um sistema numa rede IP diferente – O datagrama é enviado para um router ligado na rede local. • Note-se que estamos a falar de redes IP: – Numa mesma rede física podem coexistir múltiplas redes IP – Sistemas em redes IP diferentes mesmo estando fisicamente no mesmo domínio de broadcast Ethernet precisam de um router para comunicar Router R A B IP orig: A dest: B MAC orig: A dest: B A R1 IP orig: A dest: B MAC orig: A dest: R1 R2 B IP orig: A dest: B MAC orig: R2 dest: B Encaminhamento IP • A maior parte dos sistemas existentes podem ser configurados para funcionarem eles mesmo como routers. • A diferença entre um sistema “normal” (host) e um router: – ao contrario de um host um router reenvia datagramas entre as suas interfaces. • Cada vez que um router recebe um datagrama destinado a um outro sistema: – o router percorre a sua tabela de encaminhamento para determinar por qual interface deve enviar o datagrama para o seu destino. Encaminhamento IP Nível de transporte (TCP, UDP etc.) Sim Endereço IP de destino é um endereço de multicast ou broadcast, ou endereço de uma interface local ? Não Não O sistema é um router Datagrama é eliminado Sim IP Nível de ligação (driver de rede) Rede Função IP de saída Consulta da tabela de encaminhamento Para onde ou por onde enviar o datagrama IP ? Tabela de encaminhamento • Uma tabela de encaminhamento IP contém: – Endereço IP de destino: pode ser um endereço de um host, ou o endereço de uma rede. • Um endereço de rede possui a porção do endereço reservada para o host a zero. – Endereço IP do próximo passo: • Endereço IP de um router que dá acesso ao IP de destino – Flags que especificam se: • O endereço de destino é o endereço de uma rede ou de um host. • O endereço de destino está numa rede directamente ligada ou é alcançável através de um router. – Interface: especifica a interface local a usar para enviar o datagrama IP para o endereço de destino. Tabela de encaminhamento • Exemplo de tabela de routing: Destination 10.0.0.0 Gateway 0.0.0.0 Genmask 255.0.0.0 Flags U Iface eth0 • Nenhum router conhece o caminho completo para os destinos. • Cada router só conhece: – Quais as redes directamente ligadas a si. – Quais os endereços relevantes de outros routers nas redes directamente ligadas (routers vizinhos) e quais as redes a que estes routers dão acesso. Tabela de encaminhamento • O encaminhamento IP efectua as seguintes operações: 1. Procura na tabela de encaminhamento uma linha que corresponda completamente ao endereço IP de destino. • Se encontrar envia o datagrama para o router correspondente ou para uma rede local directamente ligada dependendo das flags. 2. Procura na tabela de encaminhamento uma linha que corresponda ao endereço da rede de destino. • Se encontrar envia o datagrama para o router correspondente ou para uma rede local directamente ligada dependendo das flags. 3. Procura na tabela de encaminhamento uma linha que corresponda ao “default router”. • Se encontrar envia o datagrama para o router correspondente. • Se nenhum destas operações resultar o datagrama não poderá ser entregue e uma mensagem de erro ICMP “host unreachable” ou “network unreachable” é enviada para a origem. Tabela de encaminhamento • Quando uma interface é inicializada uma rota directa é automaticamente adicionada: – Para redes partilhadas (Ethernet) a rota é para a rede IP. – Para uma ligação ponto a ponto a rota é para o host no outro extremo da ligação. • Outras rotas podem ser adicionadas: – Manualmente (rotas estáticas) • através de comandos – Automaticamente através de: • um processo de routing • mensagens de redirecção ICMP. Tabela de encaminhamento • O endereço, mascara e broadcast da interface eth0 é: inet addr:10.1.1.101 • Bcast:10.255.255.255 Mask:255.0.0.0 A configuração da interface com os parâmetros acima descritos dá automaticamente origem a uma entrada na tabela de routing: Destination 10.0.0.0 Gateway 0.0.0.0 Genmask 255.0.0.0 Flags U Iface eth0 Default route • A default route é a rota usada: – Quando não existe nenhuma outra rota mais apropriada para chegar ao destino pretendido. – Ou seja quando a comparação do endereço IP de destino com cada uma das outras rotas existentes na tabela de routing falha. • Cada maquina pode ter zero, uma ou mais default routes. – O RFC de host requirements especifica que todas as maquinas devem suportar mais de uma default route. – No entanto existem muitas implementações que suportam apenas uma default route. • Quando mais de uma default route existe: – O comportamento normal é enviar os datagramas em round-robin para os vários routers. – Desta forma pode ser implementada uma forma de balanceamento. – Se as rotas possuírem prioridades diferentes uma será escolhida e a segunda será usada caso a primeira rota desapareça Flags de routing • Existem 5 flags que podem aparecer em tabelas de routing: – U a rota está UP. – H a rota aponta para uma maquina. Se esta flag não estiver presente a rota aponta para uma rede. – G a rota é indirecta através de um router. Se esta flag não estiver presente a rede ou maquina de destino estão numa rede directamente ligada a uma interface da maquina local. – D a rota foi criada por uma mensagem de ICMP redirect. – M a rota foi modificada por uma mensagem de ICMP redirect. Flags de routing • A flag G distingue uma rota directa de uma rota indirecta: – Rota directa: a maquina de destino encontra-se numa rede directamente ligada à maquina local: • Tratando-se de uma rede partilhada o endereço MAC de destino a usar no envio do frame será o endereço MAC da maquina de destino. • O endereço MAC terá de ser obtido por ARP a partir do endereço IP. – Rota indirecta: a maquina de destino só é acessível através de um router: • Tratando-se de uma rede partilhada o endereço MAC de destino do frame a enviar será o endereço MAC do router a obter via ARP. • O endereço IP será o endereço IP da maquina de destino. Uma tabela de routing simples • Em Linux uma tabela de routing pode ser listada através do comando netstat usando a opção -r. Destination 193.136.90.67 193.136.90.0 127.0.0.0 0.0.0.0 Gateway 0.0.0.0 0.0.0.0 0.0.0.0 193.136.90.254 Genmask 255.255.255.255 255.255.255.0 255.0.0.0 0.0.0.0 Flags UH U U UG MSS 0 0 0 0 Window 0 0 0 0 irtt 0 0 0 0 Iface eth0 eth0 lo eth0 • Destino 193.136.90.67 • • • • Router para esta rota 0.0.0.0 a própria maquina. Mascara 255.255.255.255 significa que devemos considerar para comparação todos os bits do destino (193.136.90.67). Flags: U a rota está UP, H a rota é para uma maquina. Interface: interface por onde os datagramas devem ser enviados (Ethernet 0). • Destino 193.136.90.0 • • • • Router para esta rota 0.0.0.0 a própria maquina. Mascara 255.255.255.0 significa que devemos considerar para comparação os primeiros 24 bits do destino (193.136.90). Flags: U a rota está UP. Interface: interface por onde os datagramas devem ser enviados (Ethernet 0). Uma tabela de routing simples Destination 193.136.90.67 193.136.90.0 127.0.0.0 0.0.0.0 Gateway 0.0.0.0 0.0.0.0 0.0.0.0 193.136.90.254 Genmask 255.255.255.255 255.255.255.0 255.0.0.0 0.0.0.0 Flags UH U U UG MSS 0 0 0 0 Window 0 0 0 0 irtt 0 0 0 0 Iface eth0 eth0 lo eth0 • Destino 127.0.0.0 • • • • Router para esta rota 0.0.0.0 a própria maquina. Mascara 255. 0.0.0 significa que devemos considerar para comparação os primeiros 8 bits do destino (127). Flags: U a rota está UP. Interface: interface por onde os datagramas devem ser enviados (loopback). • Destino 0.0.0.0 • • • • Router para esta rota 193.136.90.254 . Mascara 0.0.0.0 nenhum bit do endereço de destino deve ser usado para comparação. Todos os endereços comparados com esta rota retornam verdade. Flags: U a rota está UP, G a rota aponta para um router. Interface: interface por onde os datagramas devem ser enviados (Ethernet 0). Tabela de encaminhamento • Para o destino 172.30.1.0 mascara 255.255.255.0 – – – – Esta é a rede IP local onde este host está ligado A gateway é 0.0.0.0 ou seja a rede está directamente ligada A interface a que a rede 172.30.1.0/24 está ligada é a eth1 Flags (U – route is UP) • Para o destino 0.0.0.0 mascara 0.0.0.0 (default route) – – – – 0.0.0.0/0 é um wildcard para qualquer outra rede A gateway é o router 172.30.1.254 Sabemos que é um router pela presença da flag G A interface para chegar ao router é a eth1 # netstat -rn Kernel IP routing table Destination Gateway 172.30.1.0 0.0.0.0 0.0.0.0 172.30.1.254 Genmask 255.255.255.0 0.0.0.0 Flags U UG MSS Window 0 0 0 0 irtt Iface 0 eth1 0 eth1 Tabela de encaminhamento • Para o destino 193.136.75.0 mascara 255.255.255.0 – A gateway é o router 10.193.1.254 (flag G) – A interface para chegar ao router é a eth0 • Para o destino 10.193.0.0 mascara 255.255.0.0 – A gateway é 0.0.0.0 ou seja a rede está directamente ligada – A interface a que a rede 10.193.0.0/16 está ligada é a eth0 • Para o destino 10.0.0.0 mascara 255.0.0.0 – A gateway é o router 10.193.1.254 (flag G) – A interface para chegar ao router é a eth0 • Para o destino 0.0.0.0 mascara 0.0.0.0 (default route) – 0.0.0.0/0 é um wildcard para qualquer outra rede – A gateway é o router 10.193.1.253 (flag G) – A interface para chegar ao router é a eth0 Destination 193.136.75.0 10.193.0.0 10.0.0.0 0.0.0.0 Gateway 10.193.1.254 0.0.0.0 10.193.1.254 10.193.1.253 Genmask 255.255.255.0 255.255.0.0 255.0.0.0 0.0.0.0 Flags UG U UG UG MSS 0 0 0 0 Window 0 0 0 0 irtt 0 0 0 0 Iface eth0 eth0 eth0 eth0 Tabela de encaminhamento • Para o destino 10.193.1.2 mascara 255.255.255.255 (é um host flag H) – Não tem gateway e a interface para chegar ao host é a tun0 (um tunel) • Para o destino 193.136.75.240 mascara 255.255.255.240 (é uma rede) – A interface a que a rede está ligada é a eth2 • Para o destino 10.193.0. 0 mascara 255.255.0. 0 (é uma rede) – A interface a que a rede está ligada é a eth3 • Para o destino 0.0.0.0 mascara 0.0.0.0 (default route) – 0.0.0.0/0 é um wildcard para qualquer outra rede – A gateway é o router 193.136.75.254 (flag G) – A interface para chegar ao router é a eth2 Destination 10.193.1.2 193.136.75.240 10.193.0.0 0.0.0.0 Gateway 0.0.0.0 0.0.0.0 0.0.0.0 193.136.75.254 Genmask 255.255.255.255 255.255.255.240 255.255.0.0 0.0.0.0 Flags UH U U UG MSS 0 0 0 0 Window 0 0 0 0 irtt 0 0 0 0 Iface tun0 eth2 eth3 eth2 Tabela de encaminhamento • Em versões mais actuais do Linux a rede 127.0.0.0 não aparece nas tabelas de routing • A rede 127.0.0.0 é tratada como local e por isso não precisa de aparecer nas tabelas • As redes de scope local não aparecem nas tabelas de routing # /sbin/ip addr ls 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:23:7d:db:ca:42 brd ff:ff:ff:ff:ff:ff inet 10.1.1.101/8 brd 10.255.255.255 scope global eth0 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:23:7d:db:ca:43 brd ff:ff:ff:ff:ff:ff Tabela de encaminhamento • O comando ip também pode ser usado para listar e manipular as tabelas de routing # /sbin/ip route list 10.0.0.0/8 dev eth0 proto kernel default via 10.0.0.254 dev eth0 scope link src 10.1.1.101 Tabela de encaminhamento • Para o destino 0.0.0.0 mascara 0.0.0.0 (default route) – 0.0.0.0/0 é um wildcard para qualquer outra rede – A gateway é o router 172.16.1.1 interface VLAN 31 – Rota estática (introduzida à mão) • Para o destino 10.0.0.0 mascara 255.0.0.0 – A interface a que a rede está ligada é a VLAN 10 • Para o destino 172.16.1.0 mascara 255.255.255.0 – A interface a que a rede está ligada é a VLAN 31 • Para o destino 192.168.75.0 mascara 255.255.255.0 – A gateway é o router 172.16.1.75 interface VLAN 31 – Rota estática (introduzida à mão) *S C C S Destination ----------0.0.0.0/0 10.0.0.0/8 172.16.1.0/24 192.168.75.0/24 Gateway ------via 172.16.1.1, Vl 31 Direct, Vl 10 Direct, Vl 31 via 172.16.1.75, Vl 31 Dist/Metric Last Change ----------- ----------1/0 17w4d 0/0 17w4d 0/0 17w4d 1/0 17w4d Encaminhamento • Exemplos para RedHat Linux: – As rotas para as redes locais são criadas automaticamente quando a interface de rede é configurada – A configuração da interface de rede pode ser vista em: • • • • • /etc/sysconfig/network-scripts/ifcfg-eth0 Se a interface de rede for a eth3 então será ifcfg-eth3 IPADDR=10.78.45.1 NETMASK=255.255.0.0 NETWORK=10.78.0.0 – A rota por defeito 0.0.0.0/0 pode ser configurada em • /etc/sysconfig/network • GATEWAY=10.78.0.254 – Pode-se adicionar rotas via uma interface em: • • • • /etc/sysconfig/network-scripts/route-eth0 GATEWAY0=10.78.0.100 ADDRESS0=193.136.31.0 NETMASK0=255.255.255.0 Encaminhamento • Para criar rotas também se pode usar o comando /sbin/route • As rotas criadas desta forma desaparecem com reboot • Exemplos: /sbin/route add –net 0.0.0.0 netmask 0.0.0.0 gw 193.136.73.4 dev eth0 /sbin/route add –net 10.0.0.0 netmask 255.0.0.0 gw 193.136.73.9 dev eth0 /sbin/route del –net 10.0.0.0 netmask 255.0.0.0 gw 193.136.73.9 dev eth0 Encaminhamento • Adicionar rotas estáticas num router com IOS (CISCO) ou similar • Exemplos: ip route 0.0.0.0 0.0.0.0 193.135.9.5 ip route 10.78.0.0 255.255.0.0 186.65.12.46 ip route 10.50.23.0 255.255.255.0 187.158.35.92 ip route 10.50.24.0 255.255.255.0 Null0 show ip route show ip route static show ip route connected Fragmentação IP • O nível de ligação impõe um limite máximo no tamanho dos frames. Este limite corresponde ao MTU do IP: – Quando o IP necessita de enviar um datagrama, primeiro obtém o MTU da interface por onde o datagrama vai ser transmitido. – O tamanho de cada datagrama é comparado ao MTU da interface. – Se um datagrama for superior ao MTU então tem de ser fragmentado antes de ser transmitido. • A fragmentação pode ocorrer no sistema de origem do datagrama ou em qualquer router ao longo do trajecto. – Um fragmento pode ser fragmentado múltiplas vezes de acordo com o MTU das interfaces por onde é transmitido. • A desfragmentação só ocorre quando os fragmentos chegam ao destino final. • Quando um datagrama é fragmentado cada fragmento torna-se um pacote com o seu próprio cabeçalho IP. Fragmentação IP • Os campos do cabeçalho IP que são usados na fragmentação são: – Identificação: identifica cada datagrama logo tem de ser copiada para cada fragmento de um mesmo datagrama. – Flags: • Bit 0: não é usado • Bit 1: bit “don’t fragment” é usado para indicar que um datagrama nunca deve ser fragmentado. Se este bit estiver activo e o recurso à fragmentação for necessário o datagrama é deitado fora e uma mensagem de erro é enviada para a origem. • Bit 2: “more fragments bit” é usado num fragmento para indicar que se seguem mais fragmentos. O ultimo fragmento tem este bit a zero. – Offset do fragmento: posição do inicio do fragmento a contar a partir do inicio do datagrama original (multiplos de 8 bytes). • Os fragmentos possuem um tamanho em múltiplos de 8 bytes – Tamanho total: Para um fragmento contém o seu tamanho. Fragmentação IP • Se um fragmento for perdido todo o datagrama do qual faz parte terá de ser transmitido novamente. • Não existe qualquer possibilidade de retransmitir um fragmento perdido. • A fragmentação aumenta probabilidade de todo um pacote ter de ser retransmitido • A fragmentação pode levar a ocupação da rede por fragmentos que têm de voltar a ser todos retransmitidos caso um único se perca Fragmentação IP • Quando um primeiro fragmento de um datagrama é recebido é lançado um temporizador durante o qual o sistema espera pela chegada dos restantes fragmentos. • Este temporizador dura entre 30 e 60 segundos por fragmento. • Se não chegarem todos os fragmentos então os fragmentos que chegaram são deitados fora. • Se os fragmentos tiverem de ser deitados fora então: – Se o primeiro fragmento do datagrama já tiver chegado, uma mensagem de erro (ICMP time exceeded) é enviada para a maquina de origem do datagrama. – A mensagem de erro inclui os primeiros 8 bytes de dados do datagrama. – Se o primeiro fragmento ainda não tiver chegado, então nenhuma mensagem de erro é enviada porque não existem disponíveis os primeiros bytes de dados do datagrama. Fragmentação IP • Um datagrama pode ser fragmentado por qualquer router ao longo do caminho: – O host de origem nunca chega a saber da fragmentação – Se um fragmento se perde todo o datagrama tem de ser repetido • Péssimo em redes congestionadas – Como os fragmentos secundários não possuem informação dos headers de transporte (TCP, UDP etc) • Levanta problemas de segurança • Obriga à reassemblagem na firewall • Para evitar a fragmentação envia-se os datagramas entre redes com o default MTU máximo de 576 bytes • Actualmente evita-se a fragmentação através do mecanismo de “path MTU discovery” Fragmentação IP • Path MTU discovery: – RFC 1191 de 1990 mas com adopção pratica a partir de 2002 – Os datagramas IP são enviados com o bit de don’t fragment 1 • Se a fragmentação for necessária o router: – Terá de deitar fora o fragmento – Gerar mensagem de erro ICMP do tipo: Fragmentation needed but don’t fragment bit is set – A mensagem ICMP contém o MTU máximo permitido – Como funciona: • Envia-se o maior datagrama possivel • Se receber uma mensagem de erro ICMP – Reenviar o datagrama mas usando como tamanho o valor de MTU contido na mensagem ICMP recebida – Cuidado com as firewalls que bloqueiam mensagens ICMP !!! • Não bloquear as mensagens de “fragmentation needed” Protocolo ARP (Nível de ligação) ARP • Os endereços IP só fazem sentido para o nível de rede do TCP/IP – Os protocolos de ligação usados em redes partilhadas como a Ethernet, etc usam os seus próprios endereços de hardware • MAC address – As ligações ponto-a-ponto não usam endereços de hardware. • As interfaces no nível de ligação – Não utilizam endereços IP para determinar o destino de um frame – Utilizam os endereços de hardware (MAC address). • A resolução de endereços – Efectua o mapeamento entre endereços IP e os endereços de hardware usados no nível de ligação. • O ARP (Address Resolution Protocol) (RFC 826) – Converte dinamicamente endereços IP em endereços de hardware. Formato de um frame ARP Encapsulamento Ethernet (RFC 894) endereço Destino (6) Tipo hard (2) Tipo proto (2) endereço Origem (6) tipo 0x0806 (2) Compr. hard (1) Compr. proto (1) DADOS trailer CRC (4) (46-1500) Oper (2) Endereço hard origem (6) Endereço proto origem (4) Endereço hard destino (4) Endereço proto destino (6) Tipo hard: tipo de endereço de hardware. Para redes Ethernet o valor é 1. Tipo proto: tipo de endereço de protocolo. Para o IP o valor é 0x0800. Compr. hard: comprimento do endereço de hardware. Para Ethernet o valor é 6. Compr. Proto: comprimento do endereço de protocolo. Para IP o valor é 4. Oper: Operação: 1 ARP request; 2 ARP reply; 3 RARP request; 4 RARP reply. Endereço hard origem: Endereço de hardware da interface que enviou. Endereço proto origem: Endereço de protocolo da interface que enviou. Endereço hard de destino: Endereço de hardware da interface de destino. Endereço proto de destino: Endereço de protocolo da interface de destino. Funcionamento do ARP • Uma aplicação num sistema pretende comunicar com outro sistema. – A aplicação traduz o nome do sistema remoto num endereço IP usando a função gethostbyname() que traduz o nome usando: • DNS (Domain Name system). • Uma tabela num ficheiro local. • NIS, etc … – A aplicação pede ao protocolo de transporte TCP o estabelecimento de uma ligação. – TCP envia um segmento de estabelecimento de ligação para o nível IP. – O IP determina se o endereço IP de destino: • Está numa rede IP diferente (caso em que o datagrama é enviado a um router) • Está na mesma rede (caso em que é contactável directamente) – Em qualquer dos casos o endereço Ethernet (do router ou do host) tem de ser determinado. Funcionamento do ARP – O ARP é usado para obter do endereço Ethernet a partir do endereço IP. – O ARP envia um broadcast (ARP request) que é recebido por todos os hosts da rede local Ethernet. O pedido ARP contém: • O endereço IP que se pretende traduzir. • Um campo de operação que indica que se pretende traduzir o endereço. – Todos os sistemas recebem o pedido ARP e comparam o seu endereço IP com o endereço contido no pedido ARP. – O sistema ao qual o endereço pertence : • responde directamente ao sistema de onde o pedido foi originado. • cria uma entrada na sua cache de ARP para o sistema de origem do pedido. – O sistema que efectuou o pedido recebe um ARP reply com o endereço Ethernet do sistema que pretende contactar. – O datagrama IP pode agora ser enviado. – A correspondência endereço IP endereço Ethernet é guardada numa cache. Funcionamento do ARP Quero falar com 193.145.9.2 Será que o 193.145.9.2 está na minha cache de ARP ? NÃO Adiciono à minha cache de ARP 193.145.9.2 00:AA:C1:FE:B7:FE Agora já posso enviar datagramas Ethernet directamente para ele Sou eu mas primeiro Adiciono à minha cache ARP 193.145.9.1 00:BB:D1:A3:F0:01 193.145.9.1 193.145.9.2 193.145.9.3 00:BB:D1:A3:F0:01 00:AA:C1:FE:B7:FE 00:CD:D1:00:1C:AB Broadcast ARP-request Enviado para o broadcast Ethernet Sou o 193.145.9.1 Tenho o MAC 00:BB:D1:A3:F0:01 Pergunto quem tem o 193.145.9.2 ? Unicast ARP-reply Para 00:BB:D1:A3:F0:01 IP 193.145.9.1 Eu sou o 193.145.9.2 E o meu MAC é 00:AA:C1:FE:B7:FE Funcionamento do ARP • A existência da cache ARP é fundamental ao bom desempenho do protocolo. • As entradas da cache expiram alguns minutos após a sua criação. – O TTL das entradas depende do sistema – Num host tipicamente 20 minutos $ /sbin/arp -a monica.lip.pt stlip02.lip.pt ns01.lip.pt nbjorge.lip.pt swlip01-lan.lip.pt lnlip01.lip.pt (10.1.1.50) (10.1.160.2) (10.226.1.1) (10.31.1.1) (10.0.0.254) (10.1.1.101) at 00:11:d8:5c:75:b9 [ether] on eth0 at 00:1b:21:39:a9:62 [ether] on eth0 at 00:22:19:19:f7:e5 [ether] on eth0 at 00:1a:80:d9:06:1b [ether] on eth0 at 00:01:e8:56:08:3d [ether] on eth0 at 00:e0:81:5a:e9:83 [ether] on eth0 Proxy ARP • O Proxy ARP permite que um router responda a pedidos ARP provenientes de uma rede em beneficio de um sistema ligado a outra rede. • Este comportamento leva o sistema que efectua o pedido a considerar o router como sendo o detentor do endereço IP. • Todos os datagramas IP são assim enviados para o router que os encaminha para o verdadeiro destino. 193.137.55.20 255.255.255.0 193.137.55.19 255.255.255.0 193.137.55.18 255.255.255.0 Host Proxy ARP On behalf of the PPP hosts PPP Host Host Router ARP Reply 193.137.55.17 255.255.255.0 193.137.55.0 255.255.255.0 host ARP Req Broadcast 193.137.55.78 255.255.255.0 ARP Gratuito • Um ARP gratuito é o envio de um pedido ARP por um sistema para tradução o seu próprio endereço IP. • Um ARP gratuito possui o endereço de protocolo de origem igual ao endereço de protocolo de destino. • As vantagens do ARP gratuito são: – Pode ser usado durante o boot de um sistema para determinar se algum outro sistema possui o mesmo endereço IP. – Permite actualizar o endereço de hardware nas caches dos vários sistemas caso o endereço de hardware seja alterado: • Porque a placa de rede foi substituída. • Porque um servidor de backup com o mesmo endereço IP tomou o lugar do servidor principal após uma falha deste. • Quando um sistema recebe um broadcast com um pedido ARP cujo endereço IP já se encontra em cache, esta entrada da cache é actualizada. ARP Linux • O comando ARP pode ser usado para criar entradas estáticas de ARP [root@lnsys01 jorge]# arp -s 10.0.0.112 00:22:19:21:fe:e8 [root@lnsys01 jorge]# arp –a swlip01-lan.lip.pt (10.0.0.254) at 00:01:e8:56:08:3d [ether] on eth0 ? (10.0.0.112) at 00:22:19:21:fe:e8 [ether] PERM on eth0 monica.lip.pt (10.1.1.50) at 00:11:d8:5c:75:b9 [ether] on eth0 • Através de uma entrada estática um sistema pode responder a pedidos ARP em beneficio de outros – Proxy ARP [root@lnsys01 jorge]# arp –i eth0 -s 10.0.0.112 00:22:19:21:fe:e8 pub [root@lnsys01 jorge]# arp –a swlip01-lan.lip.pt (10.0.0.254) at 00:01:e8:56:08:3d [ether] on eth0 ? (10.0.0.112) at 00:22:19:21:fe:e8 [ether] PERM PUP on eth0 monica.lip.pt (10.1.1.50) at 00:11:d8:5c:75:b9 [ether] on eth0 Protocolo RARP (Nível de ligação) RARP • Os endereços IP das interfaces são normalmente obtidos a partir de ficheiros de configuração locais. • Em alguns sistemas como terminais X, impressoras ou estações de trabalho sem disco, o endereço IP é obtido a partir da rede como base no endereço de hardware. • Cada interface de rede possui um endereço de hardware único atribuído pelo fabricante. • O RARP (RFC 903) envia um broadcast para a rede com o endereço de hardware da interface, um servidor de RARP responde directamente com o endereço IP correspondente. • O formato de um pacote RARP é idêntico ao ARP, com a diferença do frame type que no caso do RARP é 0x8035. O campo de operação é 3 para um pedido e 4 para uma resposta. RARP • A implementação de um cliente RARP é bastante simples, mas a implementação de um servidor RARP é bastante mais complicada. – Um servidor RARP precisa de manter uma lista de endereços IP e endereços de hardware correspondentes. – Como os kernels não podem ler ficheiros directamente a funcionalidade de um servidor RARP tem de ser implementada como um processo. – O RARP usa um tipo especifico de frame no nível de ligação o que implica que seja capaz de receber e enviar frames deste tipo. – Logo as implementações de servidores RARP encontram-se bastante ligadas a sistemas operativos específicos. • O RARP não permite o envio de outras informações de configuração importantes como a mascara de rede, o default router, os servidores de DNS etc. • Actualmente usa-se o DHCP em vez do RARP. Protocolo ICMP (Nível de rede) ICMP • O ICMP (RFC 950) é usado para transmitir mensagens de erro. • As mensagens de erro ICMP são produzidas pelas camadas IP, TCP ou UDP. • As mensagens ICMP são transmitidas dentro de datagramas IP. • Como o ICMP é encapsulado em datagramas IP tem as mesmas propriedades: – Não oferece garantias de que chegue um datagrama chegue ao destino. – É connectionless ou seja não é mantida qualquer informação de estado sobre datagramas sucessivos. Cada datagrama é tratado independentemente. Datagrama IP Cabeçalho IP (20) Mensagem ICMP Formato de mensagem ICMP tipo (8) código (8) checksum (16) Conteúdo dependendo do tipo e código . . • • • • Os primeiros 4 bytes de todos as mensagens ICMP são comuns. O restante depende do tipo e código de cada mensagem. Existem 15 tipos principais de mensagens. Alguns tipos de mensagem usam códigos para especificar com mais detalhe o tipo de condição que levou ao envio da mensagem. • O checksum cobre toda a mensagem ICMP e é calculado usando o mesmo método do checksum IP. • As mensagens de erro ICMP contêm: – O cabeçalho IP do datagrama IP que causou o erro. – Os primeiros 8 bytes de dados do datagrama IP que causou o erro. – Os 8 bytes de dados devem conter a maioria do cabeçalho L4 (TCP, UDP, etc) ICMP • Para evitar “broadcast storms” as mensagens de erro ICMP nunca são produzidas nas seguintes condições: – Em resposta a outra mensagem de erro ICMP. – Em resposta a um datagrama destinado a um endereço de broadcast ou multicast IP. – Em resposta a um datagrama enviado como broadcast do nível de ligação. – Em resposta a um fragmento que não seja o primeiro. – Em resposta um datagrama cujo endereço de origem não defina um sistema especifico. Tipos de mensagens ICMP Tipo Código 0 0 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Descrição Resposta de eco (usado pelo Ping) Destino não alcançável Rede não alcançável Sistema não alcançável Protocolo não alcançável Porta não alcançável Fragmentação necessária mas bit DF activo Falha de source routing Rede de destino desconhecida Sistema de destino desconhecido Sistema de origem isolado (obsoleto) Rede de destino proibida administrativamente Sistema de destino proibido administrativamente Rede não alcançável para o TOS especificado Sistema não alcançável para o TOS especificado Comunicação administrativamente proibida Precedência de sistema violada Cutoff de precedência em efeito Query Erro x x x x x x x x x x x x x x x x x Tipos de mensagens ICMP Tipo Código Descrição 4 0 Source quench (router ou sistema em sobrecarga) x 0 1 2 3 Redirecção Redirecção para rede Redirecção para sistema Redirecção para tipo de serviço e rede Redirecção para tipo de serviço e sistema x x x x 8 0 Pedido de eco (Usado pelo Ping) x 9 10 0 0 Anuncio de router Pedido de router x x 0 1 Tempo excedido Tempo de vida igual a zero durante transito Tempo de vida igual a zero na reassemblagem x x 0 1 Problema de parâmetros Cabeçalho IP errado Opção necessária não está presente x x 5 11 12 Query Erro Tipos de mensagens ICMP Tipo Código Descrição Query 13 14 0 0 Pedido de acerto de tempo (timestamp) Resposta de acerto de tempo (timestamp) x x 15 16 0 0 Pedido de informação (obsoleto) Resposta de informação (obsoleto) x x 17 18 0 0 Pedido de mascara Resposta de mascara x x Erro • Existem outros tipos de mensagens ICMP: • • • • Para o IPv6 Para mobilidade Para traceroute experimental com IP options Para aplicação experimental em protocolos de segurança AH e ESP para autenticidade e encriptação • etc … Pedido de mascara e resposta Tipo 17 ou 18 (8) Código 0 (8) Identificador (16) checksum (16) Numero de sequência (16) Mascara de rede (32) • É usado para obter a mascara de rede. • O pedido é enviado como um broadcast, varias respostas podem ser obtidas. • O identificador e numero de sequência podem ser qualquer valor e são usados pelo cliente para poder emparelhar pedidos com respostas. Pedido de acerto de tempo e resposta Tipo 13 ou 14 (8) Código 0 (8) Identificador (16) checksum (16) Numero de sequência (16) Timestamp de partida no cliente (32) Timestamp de recepção no servidor (32) Timestamp de transmissão no servidor (32) • É usado para obter o tempo corrente a partir de outros sistemas. • Retorna o tempo em milissegundos deste a meia noite em tempo universal coordenado (UTC). Não fornece a data. • Infelizmente varias implementações possuem problemas em termos de precisão. • É preferível usar o protocolo NTP para acertar o tempo. Destino não alcançável Tipo 3 (8) Código 0-15 (8) Identificador (16) checksum (16) Numero de sequência (16) Não usado conteúdo sempre 0 (32) Cabeçalho IP incluindo opções do datagrama IP que originou a mensagem ICMP mais os primeiros 8 bytes de dados do datagrama IP • As mensagens de destino não alcançável incluem parte do datagrama IP original, para que seja possível determinar qual o processo que originou o datagrama que provocou o erro de modo a entregar-lhe o diagnostico de erro. • Os bytes 9 e 10 pode ser usados pelas mensagens código 4 para indicar o MTU da interface (fragmentation needed but DF bit set) Ping • O Ping é um programa que serve para determinar se outro sistema está acessível na rede IP. • Usualmente se um sistema não for capaz de responder a um Ping também não será capaz de responder a protocolos de nível mais alto: – Esta afirmação pode não ser verdade para sistemas protegidos por firewalls. – A resposta a pedidos de echo ICMP pode estar inibida – Existem também alguns sistemas que carregam dinamicamente o suporte para TCP/IP (antigo MacOS). • A componente de server do Ping é implementada dentro do kernel. • O cliente Ping usa mensagens ICMP de pedido de eco dirigidas a um servidor. • O servidor responde a cada pedido de eco com uma resposta de eco ICMP. • O Ping permite também obter o round trip time entre dois sistemas Eco ICMP Tipo 0 ou 8 (8) Código 0 (8) Identificador (16) checksum (16) Numero de sequência (16) Dados opcionais • O identificador serve para identificar o processo cliente para o caso de existirem vários pings em execução simultânea. • O número de sequência é incrementado em cada instancia para cada mensagem de pedido de eco enviada. • O numero de sequência permite saber quando as mensagens são perdidas, duplicadas ou chegam fora de ordem. Ping • O Ping pode ser usado de varias formas: – Para testar se um sistema está alcançável enviando um único pedido de eco. – Para testar a conectividade medindo a perda de pacotes e o RTT enviando pedidos de eco segundo a segundo. – Para testar a conectividade medindo a perda de pacotes e o RTT mínimo, máximo e médio enviando novos pedidos de eco logo que as respostas aos anteriores chegam. – Verificar o MTU gerando pacotes de diferentes tamanhos • É frequente que o RTT para a primeira mensagem de ping seja mais lento devido: – À necessidade de usar ARP para obter o endereço de hardware do sistema de destino ou router. – Ao estabelecimento de entradas em tabelas de switches. – Ao estabelecimento de circuitos. – À abertura de linhas dialup. Opção de registo de rota • A opção IP de registo de rota (RR) faz com que cada router ao longo do percurso adicione o seu endereço IP da interface de saída a uma lista na área do datagrama reservada às opções. • O comando ping possui geralmente uma opção que permite activar a opção de registo de rota. • Quando o datagrama chega ao destino a lista de endereços IP é copiada para o datagrama de resposta de eco. • Infelizmente existem alguns problemas: – A suporte para a opção RR é opcional nos clientes, routers e servidores. – O numero de endereços podem ser registados é de apenas 9. • Estas insuficiências tornam a opção RR pouco útil. Código 7 (1) Compr. 39 (1) Ptr 4 - 40 (1) Ender IP 1 (4) Ender IP 2 (4) Ender IP 3 (4) ............... Ender IP 9 (4) Opção de registo de tempo • A opção IP de registo de tempo é similar à opção de registo de rota. Código 0x44 (1) Compr. 36 - 40 (1) Ptr 4 - 40 (1) OF FL (1) Tempo 1 (4) Tempo 2 (4) Tempo 3 (4) . . . . . . . . . . . .. . Tempo 9 (4) • O campo FL (flags) tem o seguinte significado: • 0 regista apenas o tempo por cada router que é atravessado. • 1 regista o tempo e o endereço IP de cada router. • 3 os campos são inicializados com 4 pares de endereços IP. Cada router compara o seu endereço com os endereços da lista, se for igual preenche o campo de tempo correspondente. • Se a lista encher, cada router incrementa o campo OF. • O formato do tempo é o numero de milissegundos desde a meia noite UTC Traceroute • O comando traceroute é uma ferramenta de debugging para redes IP que permite ver qual a rota que o tráfego segue entre dois sistemas. • O traceroute não usa a opção IP de registo de rota. • O comando traceroute funciona: – Enviando datagramas UDP para o host de destino usando uma porta UDP de destino potencialmente livre ( > 30000). – O que faz gerar um ICMP porta não alcançável quando chega ao destino. • O traceroute determina os routers que são atravessados: – Enviando 3 datagramas UDP com TTL começando em 1 e que são incrementado para cada conjunto de 3 datagramas. – Cada router decrementa o TTL e caso este seja 0 deita fora o datagrama enviando uma mensagem ICMP de tempo excedido. É assim possível obter os endereços dos routers pois estes são os endereço de origem das mensagem ICMP de tempo excedido. Traceroute • O traceroute permite também obter o RTT entre o sistema de origem e cada router intermediário até ao sistema de destino, através da cronometragem do envio de cada datagrama UDP até à recepção da mensagem de erro ICMP correspondente. • Atenção: – Como o routing IP é dinâmico não existe nenhuma garantia que todos os datagramas usados num traceroute sigam o mesmo percurso. – O percurso que as mensagens ICMP seguem pode ser diferente do percurso dos datagramas UDP (routing assimétrico). – Por estas razões não se pode tirar conclusões sobre o tempo de demora a alcançar um determinado router, porque não sabemos o tempo de cada um dos trajectos mas sim o somatório da ida e volta. – Para se determinar o caminho no sentido contrario é preciso: • pedir a alguém que esteja do outro lado para efectuar um traceroute no sentido inverso. • Usar loose source routing Traceroute $ traceroute www.google.com traceroute to www.google.com (74.125.77.147), 30 hops max, 60 byte packets 1 swlip01-lan.lip.pt (10.0.0.254) 0.522 ms 0.613 ms 0.702 ms 2 gtlip-routers.lip.pt (172.16.1.1) 2.352 ms 2.385 ms 2.412 ms 3 193.137.1.233 (193.137.1.233) 3.960 ms 3.998 ms 4.035 ms 4 ROUTER4.10GE.Lisboa.fccn.pt (193.137.0.20) 4.077 ms 4.115 ms 4.153 ms 5 fccn.rt1.mad.es.geant2.net (62.40.124.97) 13.460 ms 13.617 ms 13.716 ms 6 so-7-2-0.rt1.gen.ch.geant2.net (62.40.112.25) 36.140 ms 35.973 ms 36.536 ms 7 so-3-3-0.rt1.fra.de.geant2.net (62.40.112.70) 44.363 ms 42.977 ms 43.082 ms 8 TenGigabitEthernet7-3.ar1.FRA4.gblx.net (207.138.144.45) 43.478 ms 42.763 ms 42.832 ms 9 67.16.133.34 (67.16.133.34) 43.892 ms 44.030 ms 44.167 ms 10 google-1.ar4.fra3.gblx.net (64.208.110.14) 43.931 ms 43.483 ms 43.617 ms 11 209.85.255.172 (209.85.255.172) 51.503 ms 50.539 ms 209.85.255.170 (209.85.255.170) 55.306 ms 12 72.14.232.208 (72.14.232.208) 72.901 ms 209.85.248.182 (209.85.248.182) 74.347 ms 75.180 ms 13 64.233.175.246 (64.233.175.246) 83.199 ms 78.545 ms 78.182 ms 14 209.85.255.143 (209.85.255.143) 78.961 ms 72.14.239.197 (72.14.239.197) 79.665 ms 79.587 ms 15 209.85.255.110 (209.85.255.110) 79.509 ms 209.85.255.106 (209.85.255.106) 79.238 ms 79.644 ms 16 ew-in-f147.1e100.net (74.125.77.147) 80.580 ms 81.603 ms 81.060 ms mtr • • • • O mtr é similar ao traceroute mas melhor Combina a funcionalidade do traceroute e do ping numa única ferramenta Usa datagramas ICMP de eco Requer previlegios de root [root@pcjorge jorge]# mtr --report -c4 www.google.com HOST: pcjorge.lip.pt Loss% Snt Last Avg Best Wrst StDev 1. swlip01-lan.lip.pt 0.0% 4 0.4 0.5 0.4 0.5 0.0 2. gtlip-routers.lip.pt 0.0% 4 0.2 0.3 0.2 0.3 0.0 3. 193.137.1.233 0.0% 4 0.6 1.1 0.6 2.5 1.0 4. ROUTER4.10GE.Lisboa.fccn.pt 0.0% 4 0.5 0.5 0.5 0.5 0.0 5. fccn.rt1.mad.es.geant2.net 0.0% 4 12.3 12.3 12.3 12.4 0.0 6. so-7-2-0.rt1.gen.ch.geant2.n 0.0% 4 34.5 34.4 34.3 34.5 0.1 7. so-3-3-0.rt1.fra.de.geant2.n 0.0% 4 42.5 42.5 42.4 42.5 0.0 8. TenGigabitEthernet7-3.ar1.FR 0.0% 4 42.8 42.7 42.6 42.8 0.1 9. 67.16.133.34 0.0% 4 42.9 42.9 42.9 43.0 0.1 10. google-1.ar4.fra3.gblx.net 0.0% 4 42.8 42.9 42.8 42.9 0.1 11. 209.85.255.170 0.0% 4 49.8 45.3 43.0 49.8 3.1 12. 72.14.232.208 0.0% 4 75.5 76.7 73.9 81.8 3.5 13. 64.233.175.246 0.0% 4 162.6 99.9 77.8 162.6 41.8 14. 72.14.239.197 0.0% 4 78.9 79.3 76.5 83.9 3.2 15. 209.85.255.102 0.0% 4 79.0 81.0 75.8 91.6 7.2 16. ew-in-f99.1e100.net 25.0% 4 80.4 78.5 77.1 80.4 1.7 Opção de source routing • O routing IP é dinâmico com cada router a decidir qual o próximo router para onde enviar um determinado datagrama. • As aplicações não interferem no mecanismo normal de routing. • O source routing permite que seja o processo que envia os dados a especificar o caminho que deve ser percorrido até ao destino. • Existem duas formas de source routing: – Strict source routing: é especificado o caminho exacto a percorrer. Se um router encontrar na opção de source routing um próximo router que não esteja numa rede directamente conectada o datagrama é deitado fora e uma mensagem ICMP de falha de source routing é enviada. – Loose source routing: são especificados alguns dos routers pelos quais o datagrama tem de passar. O datagrama pode passar por mais routers do que os especificados e entre estes é usado routing normal. • Alguns versões de traceroute permitem o uso de source routing. Opção de source routing Código 0x83 0x89 (1) Compr. 39 (1) Ptr 4 - 40 (1) Ende r IP 1 (4) Ende rIP 2 (4) Ende r IP 3 (4) ............... Ende r IP 9 (4) • O formato da opção IP de source routing é idêntico ao formato da opção RR. O código é 0x83 para loose é 0x89 para strict. • Com funciona: – O host de origem remove a primeira entrada da lista e usa-a como endereço de destino. Toda a lista é movida para a esquerda uma posição. O endereço de destino original é guardado na ultima posição da lista à direita. – Cada router verifica se é o destino do datagrama. Se não for o destino e a opção for strict o datagrama é deitado fora e um erro é enviado, se for loose o datagrama é enviado seguindo as regras normais de encaminhamento. – Se o router for o destino a posição da lista indicada pelo ponteiro é usada como próximo destino. O endereço da interface de saída do router é guardada na posição indicada pelo ponteiro, e finalmente o ponteiro é incrementado 4 bytes. Traceroute • Anteriormente foi dito que para verificar o trajecto no sentido inverso se podia usar loose source routing juntamente com o traceroute. • O truque consiste em usar o endereço do host remoto a partir do qual pretendemos efectuar o traceroute como um endereço da lista de loose routers e o endereço da maquina de origem como destino final. 1 2 3 Origem R1 5 4 R2 Destino Fragmentação requerida Tipo 3 Código 4 checksum (8) (8) (16) Campo não usado (zero) MTU da interface causadora (16) (16) Cabeçalho IP incluindo opções do datagrama IP que originou a mensagem ICMP mais os primeiros 8 bytes de dados do datagrama IP • Esta mensagem de erro é enviada quando se conjuga: – datagrama com o bit de don’t fragment activo – datagrama demasiadamente grande para ser enviado sem fragmentação. • Este tipo de mensagem pode ser usado para determinar o MTU máximo suportado entre duas maquinas. • Alguns routers não preenchem o MTU da interface causadora. – Dificulta o uso do Path MTU discovery MTU de um trajecto • Existe um método de ajuste dinâmico do MTU (RFC 1191) que permite enviar datagramas com um tamanho máximo que não ultrapasse o MTU de um trajecto: – O método consiste em enviar datagramas com o bit de “don’t fragment” activo. – O primeiro datagrama possui uma tamanho igual ao MTU da interface da maquina de origem. – Se o datagrama ultrapassar o MTU de alguma interface ao longo do trajecto então uma mensagem de erro de fragmentação requerida é recebida. – Se mensagens de erro forem recebidas o tamanho dos datagramas é diminuído para o MTU especificado na mensagem de erro. – Caso o campo MTU da mensagem de erro esteja a zero o tamanho do datagrama é diminuído de acordo com uma tabela. – O MTU é recalculado para cada trajecto de 10 em 10 minutos. Router ou host em sobrecarga Tipo 4 (8) Código 0 (8) checksum (16) Campo não usado (zero) (32) Cabeçalho IP incluindo opções do datagrama IP que originou a mensagem ICMP mais os primeiros 8 bytes de dados do datagrama IP • Esta mensagem de erro é enviada quando um sistema (host ou router) recebe datagramas IP a um ritmo demasiado elevado para poderem ser processados. • Um sistema não é obrigado a enviar este tipo de mensagem. • Usualmente o TCP diminui o ritmo de envio de datagramas quando recebe esta mensagem. • Algumas implementações UDP passam a mensagem à aplicação que está a gerar os datagramas (o BSD original não o faz). Redirecção ICMP • Uma mensagem de redirecção ICMP é enviada por um router para o endereço IP de origem de um datagrama, quando o datagrama deveria ter sido enviado para outro router. • Por exemplo: – Uma maquina envia um datagrama para o default router. – O default router verifica a sua tabela de routing e determina que o datagrama deverá ser encaminhado para outro router. – Se o default router determina que a interface que deve usar para enviar o datagrama para o outro router é a mesma interface pela qual o datagrama foi recebido então: • O datagrama é encaminhado para o router. • Uma mensagem de ICMP redirect é enviada para o endereço IP da maquina de origem indicando que futuros datagramas devem ser enviados directamente para o outro router. Esta mensagem dá origem à adição de uma nova rota na maquina de origem. Redirecção ICMP A Router X Router Y • • • B O sistema A possui uma default route através do router X O sistema A envia um pacote IP para B através do router X O router X recebe o pacote e percebe que ele próprio não é a melhor rota porque : – Existe um router Y que anuncia melhor conectividade para a rota – O router Y é acessível através da interface pela qual o pacote foi recebido • • O router X envia uma mensagem de ICMP redirect para A indicando que o router correcto para a rota em questão e o router Y O sistema A recebe a mensagem ICMP e actualiza a sua tabela de routing Encaminhamento IP Nível de transporte (TCP, UDP etc.) ICMP Comando netstat ou route Sim Endereço IP de destino é um endereço de Não multicast ou broadcast, ? ou endereço de uma interface local ? Função IP de saída determinar próximo router Tabela de encaminhamento Processamento de opções IP Nível de ligação (driver de rede) Rede Processos de routing Comandos de routing Redirecção ICMP Tipo 5 (8) Código 0-3 (8) checksum (16) Endereço IP do novo router a ser usado (32) Cabeçalho IP incluindo opções + os 8 primeiros bytes dos dados transportados pelo datagrama • Existem 4 tipos de mensagens de redirecção: – – – – 0 redirecção para uma rede 1 redirecção para um host 2 redirecção para tipo de serviço mais rede 3 redirecção para tipo de serviço mais host Descoberta de routers com ICMP • Usando as mensagens ICMP de pedido e anuncio de router é possível definir automaticamente o default router nas maquinas de uma rede: – Quando o sistema faz boot envia um broadcast ou multicast 224.0.0.2 (all routers) pedindo aos routers da rede que enviem o endereço da sua interface. – Os routers respondem com mensagens de anuncio de router via broadcast ou multicast para 224.0.0.1 (all hosts). – Cada mensagem pode incluir vários endereços e cada endereço possui associado um valor de preferência. – Os valores de preferência devem ser configurados pelos administradores de sistema. – O sistema escolhe a rota com maior valor de preferência • Este sistema permite implementar uma forma simples de redundância na default route – Se um router for abaixo deixa de anunciar e outra rota anunciada por outro router poderá ser escolhida – O sistema pode verificar se a rota é valida através de informação proveniente do nível TCP, respostas ARP, ping etc. Descoberta de routers com ICMP • Periodicamente e de forma aleatória os routers enviam para a rede estas mesmas mensagens – Permite garantir que todos os sistemas possuem as suas tabelas de routing actualizadas – Permite que caso um router desapareça outro seja escolhido – Permite que caso surja uma melhor rota esta seja escolhida – TTL de cada router aprendido 30 é de minutos – Os anúncios são enviados aproximadamente de 7 em 7 minutos – Anuncio por broadcast ou multicast para o grupo 224.0.0.1 (all hosts) • Do lado dos hosts a funcionalidade deve ser implementada por um processo que deve correr permanentemente. • Não é praticamente usado pois o DHCP permite efectuar a configuração do default router Descoberta de routers com ICMP Solicitação de router Tipo 10 (8) Código 0 (8) checksum (16) Não é usado (valor zero) (32) Anuncio de router Tipo 9 (8) Nº de endereços (8) Código 0 (8) Tama. de endereço (8) checksum (16) Tempo de vida em segundos (16) Endereço IP do router (32) Nível de preferência (32) Protocolo UDP (Nível de transporte) Protocolo UDP • O UDP é um protocolo de transporte simples que não oferece garantia de chegada ao destino e sequência de chegada dos seus datagramas. • Em UDP cada operação de output de um programa gera exactamente um único datagrama UDP. • Os programas que utilizam UDP devem preocupar-se com o tamanho dos datagramas IP que são gerados a partir dos datagramas UDP de forma a não ultrapassar o MTU. • Se o MTU for excedido o datagrama será fragmentado. Encapsulamento UDP Cabeçalho IP (20) Cabeçalho UDP (8) DADOS UDP Protocolo UDP • Qual é então o tamanho máximo de dados que pode ser enviado num datagrama UDP: – Teoricamente o tamanho maximo de datagrama IP é 65535 bytes – Retirando o header IP (20 bytes) e o header UDP (8 bytes) sobram 65507 bytes para dados – Se o datagrama IP for superior ao MTU vai ocorrer fragmentação (deve-se evitar a fragmentação !!!) – Na prática: • O tamanho máximo de buffer UDP limita frequentemente a recepção dos segmentos. O tamanho máximo dos pacotes NFS são frequentemente o limite (8192 bytes em NFSv2, 32KB ou 54KB em versões mais recentes). • Deve-se ser muito cuidado com o tamanho dos datagramas especialmente em ligações WAN onde o MTU pode ser mais pequeno que na LAN. • Muitas aplicações limitam os dados UDP a 512 bytes ou menos para ficarem dentro do tamanho de datagrama IP garantido 576 bytes Protocolo UDP Porta de origem (16) Porta de destino (16) Tamanho (16) Checksum UDP (16) Dados • As portas identificam os processos de origem e destino. • O tamanho corresponde ao tamanho do cabeçalho UDP e dados. • O checksum UDP é opcional e cobre o cabeçalho e dados. – Como os dados podem ter um tamanho impar um byte a zero pode ser adicionado se necessário para efeitos de calculo de checksum. – O UDP (e TCP) incluem no calculo do checksum alguns campos do protocolo IP (IP pseudo header) para garantir a integridade do datagrama. Protocolo UDP • O facto de o protocolo IP e UDP poderem suportar datagramas de um determinado tamanho não quer dizer que todas as aplicações suportem esse tamanho. • Os APIs UDP permitem às aplicações definir qual o tamanho máximo de datagrama que desejam receber. • Quando um datagrama é superior ao máximo que uma aplicação deseja receber o resultado depende da implementação do API. – BSD: o datagrama é truncado e o excesso deitado fora. As versões mais recentes permitem notificar a aplicação da ocorrência da truncagem (Linux). – SVR4 socket API: Não trunca o datagrama e o excesso é retornado em chamadas subsequentes. A aplicação não é notificada. – TLI API: Não trunca o datagrama e o excesso é retornado em chamadas subsequentes. Uma flag indica ao programa que deve efectuar mais reads para obter o resto do datagrama. Servidores UDP • Para receber ou transmitir datagramas UDP um programa tem de se associar (efectuar o bind) a uma ou mais portas UDP. – Em sistemas com múltiplos endereços IP é possível especificar num programa qual o endereço utilizar para receber datagramas – Usualmente um programa quando efectua o bind este é feito sobre todos os endereços IP do sistema. • Os servidores UDP são normalmente iterativos ou seja processam um pedido de cada vez. • Associada a cada porta UDP em uso existe um fila de tamanho limitado para receber datagramas que depois são entregues ao processo. – Desta forma se vários clientes enviarem pedidos a um servidor estes ficam em fila de onde o servidor os vais ler. – Se muitos pedidos chegarem simultaneamente a fila enche, os próximos pedidos a chegar são perdidos e uma mensagem ICMP de sobrecarga é enviada para as maquinas que os originaram. Servidores UDP • Normalmente um programa servidor pode receber datagramas UDP de qualquer endereço IP. • É possível definir qual o endereço IP remoto e porta UDP remota dos quais um programa aceita receber datagramas UDP. • Resumindo: Local Remoto IP.porta IP.porta IP.porta *.* *.porta *.* Descrição da restrição de acesso Acesso restrito a um cliente Restrito a datagramas que cheguem a um endereço fixo Aceita todos os datagramas Servidores UDP • Processos UDP: $ netstat --udp -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address udp 0 0 *:syslog *:* udp 0 0 *:snmp *:* udp 0 0 *:sunrpc *:* udp 0 0 *:ipp *:* udp 0 0 *:ntp *:* Servidores UDP • Restrição de acesso: Proto Recv-Q Send-Q Local Address udp 0 0 127.0.0.1:ntp Foreign Address *:* Proto Recv-Q Send-Q Local Address udp 0 0 *:ntp Foreign Address 197.44.67.51:* Proto Recv-Q Send-Q Local Address udp 0 0 *:ntp Foreign Address 197.44.67.51:123 • Também é valido para o TCP • Implica que o programa tenha sido escrito para permitir este tipo de restrição • Na pratica as restrições são implementadas: – Nas firewalls – Por bibliotecas como o libwrap (TCP wrapper) nos processos servidores TFTP (Trivial File Transfer Protocol) TFTP • O TFTP é frequentemente usado para transferir o sistema operativo e ficheiros de configuração – Ex. durante o boot de dispositivos de rede. • O TFTP usa UDP para ser simples e compacto de modo a poder ser facilmente incorporado em BOOT ROMs. • Os comandos que um cliente pode enviar ao servidor são: – Leitura de um ficheiro – Escrita de um ficheiro • O TFTP não possui qualquer forma de autenticação ou segurança. – A maior parte dos servidores TFTP possuem a possibilidade de definir qual o directório ou directórios que podem ser acedidos remotamente. TFTP Mensagem TFTP Header IP (20) Opcodes 1 - Leitura 2 - Escrita 3 - dados 4 - ACK 5 - Erro Header UDP (8) opcode 1 ou 2 (2) Nome do ficheiro (n) opcode 3 (2) Numero de bloco (2) opcode 4 (2) Numero de bloco (2) opcode 5 (2) Numero de erro (2) Zero 0 (1) modo (n) Dados (0-512) Mensagem de erro (n) Zero 0 (1) Zero 0 (1) TFTP • Cada transferência entre cliente e servidor começa com o cliente enviando um pedido de leitura ou escrita de um ficheiro. • Na maior parte dos casos a transferência é uma leitura. • Os primeiros dois bytes de uma mensagem tftp possuem um código de operação que indica também qual é o restante formato da mensagem. • Para uma leitura ou escrita segue-se o nome do ficheiro terminado por um byte contendo zero. • Segue-se o modo de codificação dos dados que consiste numa sequencia de caracteres terminando num byte contendo zero. As duas possibilidades são: – “octet” : sequencia binária sem interpretação. – “netascii” : sequencia de linhas de texto ASCII terminadas por CRLF. • Cada pacote de dados contém um numero de bloco que é usado posteriormente para efectuar a notificação da chegada. TFTP • O protocolo funciona em modo “start-and-wait” – o transmissor envia um pacote de dados e espera pela confirmação de chegada (ACK) desse pacote antes de enviar o próximo. • Uma vez que o TFTP usa o protocolo UDP é necessária a existência de um mecanismo de timeout e retransmissão • Os dados são transferidos em blocos de 512 bytes de cada vez. • As mensagens de erro causadas por problemas de acesso aos ficheiros contêm: – um numero de erro – uma mensagem explicativa terminando num byte com zero. TFTP • De modo a poder lidar com vários clientes simultaneamente o protocolo TFTP prevê que: – O primeiro datagrama UDP contendo o pedido de leitura ou escrita seja enviado pelo cliente para a porta UDP 69 do servidor. – O servidor aloca para esta ligação uma porta efémera e responde ao cliente usando a porta efémera em vez da porta 69. – O cliente detecta que o servidor mudou de porta e está a usar uma porta efémera, a partir deste momento o cliente passa a enviar os datagramas para o servidor nesta nova porta UDP. Cliente Servidor 51357 69 51357 1039 51357 1039 51357 1039 BOOTP (Bootstrap Protocol) BOOTP • Tal como RARP o BOOTP permite que um sistema que não conheça o seu endereço IP, o possa obter através da rede. • O BOOTP possui vantagens sobre o RARP: – Permite obter informação adicional para além do endereço IP. – Como funciona sobre UDP pode atravessar varias redes físicas, o RARP não é encaminhado por routers e por isso precisa de um servidor em cada rede física. • O BOOTP funciona sobre UDP e é frequentemente usado em combinação com o TFTP. – O BOOTP obtém informação para efectuar a configuração de rede e o nome do ficheiro de boot. – O TFTP é usado para transferir o ficheiro de boot. Header IP (20) Header UDP (8) Pedido / Resposta BOOTP (300) BOOTP Opcode (8) Tipo de Hardware Comp.end. hardw Contador de salto (8) (8) (8) Identificador de transacção (32) Numero de segundos Não usado (16) (16) Endereço IP do cliente (32) Endereço IP resposta (32) Endereço IP do servidor (32) Endereço IP do router (32) Endereço de hardware do cliente (16bytes) Nome do servidor (64bytes) Nome do ficheiro de boot (128bytes) Outra informação (64bytes) BOOTP • Os campos de uma mensagem BOOTP são: – Opcode: Tipo de mensagem (1 pedido, 2 resposta). – Tipo de hardware: Tipo de rede local (1 ethernet). – Comp.end. Hardw: Comprimento do endereço de hardware (6 para ethernet). – Contador de salto: Inicializado a zero pode ser usado por um proxy. – Identificador de transacção: É inicializado pelo cliente e retornado pelo servidor. – Numero de segundos: É inicializado pelo cliente quando inicializa o processo de boot. Pode ser usado por um servidor secundário para que responda após um determinado intervalo de tempo em que não haja resposta do servidor primário. – Endereço IP do cliente: Se o cliente conhecer o seu endereço preenche-o caso contrario inicializa-o a zero. – Endereço IP reposta: Preenchido pelo servidor com o endereço IP do cliente quando o campo “Endereço IP do cliente” chega com valor zero. – Endereço IP do servidor: Endereço do servidor que responde. – Endereço IP do router: Se um proxy for usado deve preencher este campo com o seu endereço. – Endereço de hardware do cliente: Preenchido pelo cliente. BOOTP • Os campos de uma mensagem BOOTP são (continuação): – Nome do servidor: Opcionalmente preenchido pelo servidor. – Nome do ficheiro de boot: Opcionalmente preenchido pelo servidor. – Outra informação: Suporte para varias extensões. • O endereço de origem de um datagrama BOOTP é usualmente 0.0.0.0 e o endereço de destino 255.255.255.255. • O BOOTP usa duas portas UDP – 67 para o servidor – 68 para o cliente (o cliente não usa uma porta efémera). • A utilização de uma porta fixa pelo cliente deve-se ao facto de a resposta UDP poder ser um broadcast (embora usualmente não seja): – logo outras aplicações em outros sistemas usando a mesma porta poderiam receber a resposta BOOTP. – O cliente também não pode partilhar a porta do servidor porque nesse caso todos os servidores receberiam as respostas enviadas por outros servidores. BOOTP • O cliente BOOTP é normalmente disponibilizado na memoria ROM de dispositivos de rede sem disco. • Descrição do funcionamento do servidor : – Escuta por datagramas UDP com pedidos BOOTP na porta 67. – Consulta uma tabela local contendo informação sobre os clientes BOOTP. • A tabela é indexada através do endereço de hardware do cliente. – A resposta ao cliente apresenta um problema: • Normalmente para um datagrama ser enviado para o destino é necessário obter o endereço de hardware do destino através de uma tradução ARP. • Neste caso o destinatário do datagrama ainda não conhece o seu endereço IP. • A primeira solução consiste em responder com um broadcast em vez de responder directamente ao cliente. O cliente identifica que a resposta é para si através do “Identificador de transacção”. • A segunda solução consiste em usar o endereço de hardware do cliente contido no pedido, e criar uma entrada na tabela local de ARP do servidor com os endereços de hardware e IP do cliente. BOOTP • As mensagens BOOTP podem atravessar routers desde que esta funcionalidade seja suportada pelo router: – Um pedido BOOTP é um broadcast logo não atravessa redes IP. – Se o router suportar a funcionalidade de BOOTP proxy, então quando receber um pedido BOOTP na sua porta 67: • Aceita o pedido como se fosse um servidor. • Actualiza o campo do pedido correspondente ao “Endereço IP do router”. • Envia-o directamente para o servidor BOOTP em modo unicast. Podendo assim atravessar outros routers de forma transparente. – O verdadeiro servidor BOOTP recebe o pedido enviado pelo router e responde ao cliente indirectamente através do router. – O router recebe a resposta do servidor de BOOTP e envia-a ao cliente. • O BOOTP possui um campo de 64 bytes para a transmissão de informação complementar opcional. • Os primeiros 4 bytes deste espaço são inicializados com o endereço 99.130.83.99 para indicar que existem opções validas. BOOTP Fim da lista de opções • • • • Tipo=255 (1) Pad Tipo=0 (1) Mascara de Subnet Tipo=1 (1) Tam.=4 (1) Mascara de subnet (4) Offset temporal Tipo=2 (1) Tam.=4 (1) Tempo (4) Router Tipo=3 (1) Tam.=n (1) Router preferido (4) 2º router (4) ... O campo tipo identifica o conteúdo da opção. Podem existir múltiplas opções numa única resposta. O tipo 255 indica o fim da lista de opções. O tipo 0 é usado para alinhar as opções. BOOTP • Existem varias opções possíveis incluindo: – – – – – – – – – – – – – – Mascara de subnet. Offset temporal em segundos da rede do cliente em relação ao UTC. Lista de routers na rede do cliente por o ordem de preferência. Lista por ordem de preferência de servidores de tempo. Lista por ordem de preferência de servidores de DNS. Lista por ordem de preferência de servidores de logging. Lista por ordem de preferência de servidores de impressão. Nome do cliente. Tamanho do ficheiro de boot. Nome do domínio DNS do cliente. Endereço do servidor de swap. Pathname para um directório contendo a root do cliente. Endereço de broadcast. Etc. • O espaço de 64 bytes é demasiado curto para algumas aplicações – um novo protocolo baseado no BOOTP e designado DHCP foi criado. – O DHCP possui um espaço de 312 bytes para opções.