O cabeçalho IP

Propaganda
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.
Download