Pilha TCP/IP

Propaganda
Pilha TCP/IP
Walter Fetter Lages
[email protected]
Universidade Federal do Rio Grande do Sul
Escola de Engenharia
Departamento de Engenharia Elétrica
Programa de Pós-Graduação em Engenharia Elétrica
ELE00002 Sistemas de Automação
Copyright (c) Walter Fetter Lages – p.1
Modelo OSI × TCP/IP
•
•
•
Usualmente as camadas físicas e enlace são
implementadas através de uma rede Ethernet
(IEEE-802.3)
Camada de rede: IP
Camada de transporte: TCP ou UDP
• TCP: Serviço com conexão
• UDP: Serviço sem conexão
Copyright (c) Walter Fetter Lages – p.2
Conjunto de Protocolos TCP/IP
Copyright (c) Walter Fetter Lages – p.3
Protocolos
IP: Protocolo de rede
TCP: Protocolo de transporte com conexão
UDP: Protocolo de transporte sem conexão
ICMP: Protocolo de controle
IGMP: Protocolo de gerencimanto de multicasting
ARP: Protocolo de mapeamento de IP em MAC
RARP: Protocolo de mapeamento de MAC em IP
Copyright (c) Walter Fetter Lages – p.4
Outros Protocolos
Aplicativo
Ping
Traceroute
RIP
ICMP
√
UDP
√
√
TCP
√
√
BGP
BOOTP
√
DHCP
√
NTP
√
SMTP
√
FTP
√
HTTP
√
DNS
√
√
NFS
√
√
RPC
√
√
Copyright (c) Walter Fetter Lages – p.5
Conexão
•
Three-way-handshake
Copyright (c) Walter Fetter Lages – p.6
Desconexão
Copyright (c) Walter Fetter Lages – p.7
Troca de Dados
Copyright (c) Walter Fetter Lages – p.8
Endereçamento
•
•
•
Na camada IP, cada interface possui um endereço
• 32 bits, na versão 4
• 128 bits, na versão 6
• Normalmente escrito na forma QDN
Nas camadas TCP ou UDP, os endereços são
denominados portas
• 32 bits
Socket
• Ponto inicial e final da troca de dados
• Par de endereços IP e TCP ou IP e UDP
Copyright (c) Walter Fetter Lages – p.9
Retidores, Pontes e Roteadores
Copyright (c) Walter Fetter Lages – p.10
Protocolo IP
•
•
•
•
•
•
•
Serviço de datagrama não confiável
Endereçamento Hierárquico
Facilidade de Fragmentação e Remontagem de
pacotes
Identificação da importância do datagrama e do
nível de confiabilidade exigido
Identificação da urgência do datagrama
Roteamento adaptativo
Descarte e controle do tempo de vida dos pacotes
Copyright (c) Walter Fetter Lages – p.11
Endereços IP
•
•
•
•
•
Números com 32 bits (IPv6 tem 128 bits)
Normalmente escritos como 4 octetos (em
decimal)
• 143.54.29.90
Podem identificar uma rede ou um host
Endereços de rede tem o campo de identificação
do host = 0
Difusão para todos os hosts de uma sub-rede:
todos os bits do campo de host = 1
Copyright (c) Walter Fetter Lages – p.12
Endereços IP
•
•
Endereço com todos os bits = 1 corresponde a um
endereço por difusão para a rede do host origem
Endereço 127.0.0.0 é reservado para teste
(loopback) e comunicação entre processos na
mesma máquina
Copyright (c) Walter Fetter Lages – p.13
Classes de Endereços
•
Classe A 0 rede (7 bits) host (24 bits)
• Bit mais significativo é 0 e os outros 7 bits
identificam a rede (primeiro campo varia de 0
a 127)
• 24 bits restantes identificam o endereço local
• 126 redes, 16 M hosts
Classe B 10 rede (14 bits) host (16 bits)
• Dois octetos para o número da rede e dois
para endereços de host
• Endereços de rede de 128.1 a 191.255 (16 K
redes e 64 K hosts)
Copyright (c) Walter Fetter Lages – p.14
Classes de Endereços
•
Classe C 110 rede (21 bits) host (8 bits)
• Três octetos para identificação da rede e um
para host
• Redes de 192.1.1 a 223.254.254 (endereços
acima de 223 foram reservados para uso
futuro), ou seja, 2M redes e até 254 hosts
Copyright (c) Walter Fetter Lages – p.15
Endereços IP
Copyright (c) Walter Fetter Lages – p.16
Endereços IP especiais
Copyright (c) Walter Fetter Lages – p.17
Exemplo
•
Computador A terá endereço IP 200.1.2.1 e
também endereço Ethernet (6 bytes, ex:
02:FE:87:4A:8C:A9)
Copyright (c) Walter Fetter Lages – p.18
Endereços IP: sub-redes
•
Uso de máscaras (ex: 255.255.255.196)
Copyright (c) Walter Fetter Lages – p.19
Problemas
•
Número de endereços de estações é muito
diferente entre endereços classe C e B:
• 254 estações na classe C e 65534 estações na
classe C
• Como fazer com redes médias ?
Copyright (c) Walter Fetter Lages – p.20
Sub-Redes
Copyright (c) Walter Fetter Lages – p.21
Mapeamento de Endereços
•
•
Resolução através de vinculação dinâmica usando
protocolo ARP (Address Resolution Protocol)
• Permite obter o endereço de rede de outro
host na mesma sub-rede
• Ex: obtenção de endereço Ethernet a partir do
endereço IP
Protocolo RARP (Reverse Address Resolution
Protocol): permite a descoberta de endereços IP
Copyright (c) Walter Fetter Lages – p.22
Formato do Datagrama IP
Copyright (c) Walter Fetter Lages – p.23
Formato do Datagrama IP
vers: Versão do protocolo IP
hlen: Tamanho do cabeçalho IP
service type: Qualidade do serviço
total length: Tamanho do datagrama
time to live: Limita o tempo de transmissão
protocol: Protocolo de transporte
header checksum: CRC do cabeçalho
source: IP de origem
destination: IP de destino
IP options: Informações de segurança, roteamento
na origem, relatórios de erro, depuração, etc.
Copyright (c) Walter Fetter Lages – p.24
Fragmentação e Remontagem
•
•
Tamanho máximo permitido para pacotes pode
variar de uma tecnologia de rede para outra
• ex: Ethernet 1500 bytes, Arpanet ˜1000 bytes
Campo flags
• Bits DF (don’t fragment) e MF (more
fragments)
• Quando DF=1 roteadores não podem
fragmentar
Copyright (c) Walter Fetter Lages – p.25
Roteamento
•
•
•
•
Roteamento inter-redes é a principal função do
protocolo IP
Roteamento é usualmente feito por gateways
(roteadores)
Cada computador possui tabela com entradas do
tipo endereço de rede/endereço de roteador
Roteador default: recebe as mensagens quando
rota específica não é encontrada
Copyright (c) Walter Fetter Lages – p.26
Roteamento
Copyright (c) Walter Fetter Lages – p.27
User Datagram Protocol
•
Basicamente uma interface para o IP
Source Port Destination Port
Length
Checksum
Data
Copyright (c) Walter Fetter Lages – p.28
Transmission Control Protocol
•
•
•
•
Projetado para funcionar com base em um
serviço de rede com conexão e com confirmação
Interface de processos de aplicação com TCP:
chamadas semelhantes a funções de sistemas
operacionais
TCP é capaz de transmitir uma cadeia de octetos
nas duas direções, entre seus usuários
Normalmente o TCP decide o momento de parar
de agrupar os octetos e transmitir o segmento
formado. Isto pode ser influenciado pelo usuário
com comando ’push’
Copyright (c) Walter Fetter Lages – p.29
Transmission Control Protocol
•
•
•
Cada octeto é transmitido associado a um número
de seqüência
Cada octeto transmitido carrega o número de
seqüência esperado no sentido inverso
Segmentos transmitidos são armazenados para
eventual retransmissão (caso recepção seja
reconhecida, segmento é descartado)
Copyright (c) Walter Fetter Lages – p.30
Transmission Control Protocol
•
•
•
Receptor pode determinar janela de transmissão
(baseada na janela de recepção do receptor)
TCP receptor usa numeração para ordenar os
quadros recebidos
TCP utiliza o conceito de porta. Processos de
aplicação sendo atendidos possuem porta
associadas
Copyright (c) Walter Fetter Lages – p.31
Transmission Control Protocol
•
•
•
Para identificação unívoca um endereço TCP:
porta + IP = socket
Associação de portas a processos pode ser
dinâmica, porém processos servidores que são
muito usados (ftp, telnet) possuem portas fixas.
Conexão é identificada pelo par de sockets de
suas extremidades
Copyright (c) Walter Fetter Lages – p.32
Transmission Control Protocol
•
•
TCP assume que opera como módulo do sistema
operacional e assume que interface com rede é
controlada por device driver
Interface oferecida baseia-se em funções (open,
close, send, receive, ...)
Copyright (c) Walter Fetter Lages – p.33
Socket
Primitiva
Significado
SOCKET
Cria um novo ponto final de comunicação
BIND
Associa um endereço local à um soquete
LISTEN
Anuncia a intenção de aceitar conexões; determina
o tamanho da fila
ACCEPT
Bloqueia até que uma conexão chegue
CONNECT
Tenta estabelecer uma conexão
SEND
Envia dados
RECEIVE
Recebe dados
CLOSE
Libera a conexão
Copyright (c) Walter Fetter Lages – p.34
Socket
Copyright (c) Walter Fetter Lages – p.35
Quadro TCP
Copyright (c) Walter Fetter Lages – p.36
Quadro TCP
•
•
•
•
Número de seqüência e confirmação de
’piggyback’: numerar quadros e confirmar
recebimento
Tamanho do cabeçalho: indica o número de
palavras de 32 bits contidas no cabeçalho
URG: ponteiro urgente
SYN: conexões
• pedido: SYN=1 e ACK= 0
• resposta: SYN=1 e ACK=1
Copyright (c) Walter Fetter Lages – p.37
Quadro TCP
•
•
•
•
•
•
FIN: liberação conexão
RST: reiniciar conexão
EOM: fim de mensagem
Soma de verificação
Tamanho da janela: TCP usa janela deslizante
Opções: informar tamanho dos buffers
Copyright (c) Walter Fetter Lages – p.38
Exemplo
•
•
Servidor
• Aguarda conexão na porta passada como
argumento
• Aguarda recepção
• Imprime a string
• Devolve a string passada como argumento
• Encerra a conexão
Cliente
• Conecta-se ao servidor e portas passados
como argumento
• Envia string passada como argumento
• Aguarda resposta
• Imprime resposta
• Encerra a conexão
Copyright (c) Walter Fetter Lages – p.39
Servidor
#include
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<string.h>
<unistd.h>
<arpa/inet.h>
<sys/socket.h>
int main(int argc,char *argv[])
{
int listenfd;
struct sockaddr_in serveraddr;
int connectfd;
struct sockaddr_in clientaddr;
int len;
char buffer[128];
socklen_t clientlen;
Copyright (c) Walter Fetter Lages – p.40
Servidor
if(argc != 3)
{
printf("TCP server\n");
printf("Usage: %s tcp_port reply_message\n",
argv[0]);
return -1;
}
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
serveraddr.sin_port=htons(atoi(argv[1]));
bind(listenfd,(struct sockaddr *)&serveraddr,
Copyright (c) Walter Fetter Lages – p.41
sizeof(serveraddr));
Servidor
listen(listenfd,1024);
clientlen=sizeof(clientaddr);
connectfd=accept(listenfd,
(struct sockaddr *)&clientaddr,&clientlen);
len=read(connectfd,&buffer,sizeof(buffer));
printf("%.*s\n",len,buffer);
write(connectfd,argv[2],strlen(argv[2]));
close(connectfd);
close(listenfd);
return 0;
}
Copyright (c) Walter Fetter Lages – p.42
Cliente
#include
#include
#include
#include
#include
#include
#include
#include
<errno.h>
<netdb.h>
<stdio.h>
<stdlib.h>
<string.h>
<unistd.h>
<arpa/inet.h>
<sys/socket.h>
int main(int argc,char *argv[])
{
int socketfd;
struct sockaddr_in serveraddr;
struct hostent *serverent;
char buffer[128];
Copyright (c) Walter Fetter Lages – p.43
Cliente
if(argc != 4)
{
printf("TCP client\n");
printf("Usage: %s servername tcpport message\n",
argv[0]);
return -1;
}
socketfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serverent=gethostbyname(argv[1]);
inet_pton(AF_INET,serverent->h_addr,
&serveraddr.sin_addr);
serveraddr.sin_port=htons(atoi(argv[2]));
Copyright (c) Walter Fetter Lages – p.44
Cliente
if(connect(socketfd,(struct sockaddr *)&serveraddr,
sizeof(serveraddr)))
{
perror(argv[1]);
return -errno;
}
write(socketfd,argv[3],strlen(argv[3]));
read(socketfd,buffer,sizeof(buffer));
printf("%.*s\n",(int)sizeof(buffer),buffer);
close(socketfd);
return 0;
}
Copyright (c) Walter Fetter Lages – p.45
Referências
[1] W. Buchanan. Computer Busses. Arnold,
London, 2000.
[2] W. R. Stevens. UNIX Network Programming,
volume 1. Prentice Hall PTR, Upper Saddle
River, NJ, second edition, 1998.
Copyright (c) Walter Fetter Lages – p.46
Download