Você está na página 1de 39

Tecnologias de Redes de

Computadores

Gustavo Sousa Pavani

Universidade Federal do ABC (UFABC)


2 Quadrimestre - 2016
Aula 15

Introduo ao UDP - 1

Protocolo de transporte sem conexes na Internet.

User Datagram Protocol (UDP).

Permite enviar datagramas IP encapsulados sem que seja necessrio


estabelecer uma conexo.
Descrito na RFC 768.

O UDP transmite segmentos que consistem em um


cabealho de 8 bytes, seguido da carga til.

Duas portas para identificar os pontos extremos nas mquinas de


origem e destino.
O campo UDP length inclui o cabealho de 8 bytes e os dados.
O campo UDP checksum opcional.

Gustavo S. Pavani

Introduo ao UDP - 2

O UDP no realiza:

Tudo isso cabe ao processo do usurio.

Controle de fluxo;
Controle de erros ; ou
Retransmisso aps a recepo de um segmento incorreto.

Fornece apenas um recurso adicional de multiplexao de vrios


processos que utilizam as portas.

Especialmente til em situaes cliente/servidor.

Pequena solicitao do cliente e pequena resposta do servidor.

Uso de timeout para gerenciar o problema de perdas.


Menor nmero de mensagens do que no caso de um protocolo que
exige uma configurao inicial.

Exemplo: servio DNS.

Cliente envia um pacote UDP contendo um nome de host para o


servidor DNS que responde com um pacote UDP que contm o
endereo IP.
Gustavo S. Pavani

Introduo ao UDP - 3
import java.net.*;
import java.io.*;
public class UDPClient{
public static void main(String args[]){
// args give message contents and server hostname
DatagramSocket aSocket = null;
try {
aSocket = new DatagramSocket();
byte [] m = args[0].getBytes();
InetAddress aHost = InetAddress.getByName(args[1]);
int serverPort = 6789;
DatagramPacket request = new DatagramPacket(m, args[0].length(), aHost, serverPort );
aSocket.send(request);
byte[] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
aSocket.receive(reply);
System.out.println("Reply: " + new String(reply.getData()));
}catch (SocketException e){System.out.println("Socket: " + e.getMessage());
}catch (IOException e){System.out.println("IO: " + e.getMessage());}
}finally {if(aSocket != null) aSocket.close();}
}
Gustavo S. Pavani
}
4

Introduo ao UDP - 4
import java.net.*;
import java.io.*;
public class UDPServer{
public static void main(String args[]){
DatagramSocket aSocket = null;
try{
aSocket = new DatagramSocket(6789);
byte[] buffer = new byte[1000];
while(true){
DatagramPacket request = new DatagramPacket(buffer, buffer.length);
aSocket.receive(request);
DatagramPacket reply = new DatagramPacket(request.getData(),
request.getLength(), request.getAddress(), request.getPort());
aSocket.send(reply);
}
}catch (SocketException e){System.out.println("Socket: " + e.getMessage());
}catch (IOException e) {System.out.println("IO: " + e.getMessage());}
}finally {if(aSocket != null) aSocket.close();}
}
}
Gustavo S. Pavani

Chamada de procedimentos remotos - 1

Em um certo sentido, enviar uma mensagem a um host


remoto e obter de volta uma resposta muito semelhante
a criar uma chamada de funo em uma linguagem de
programao.

Comea com um ou mais parmetros e recebe de volta um


resultado.
Por que no organizar interaes solicitao/resposta em redes no
formato de procedimentos?

Isso torna as aplicaes de rede muito mais fceis de programar e


mais familiares, pois todos os detalhes de redes ficam ocultos do
programador.

Trabalho seminal de Birrel e Nelson (1984).

Permitir que os programas chamassem procedimentos localizados


em hosts remotos.

Nenhuma passagem de mensagens visvel ao programador.


Gustavo S. Pavani

Chamada de procedimentos remotos - 2

Tcnica ficou conhecida como Remote Procedure Call (RPC).

O RPC tenta tornar uma chamada de procedimento


remoto o mais semelhante possvel a uma chamada local.

Tradicionalmente o processo que chama conhecido como cliente e


o procedimento chamado conhecido como servidor.

Na forma mais simples, para chamar um procedimento remoto, o


programa cliente deve estar vinculado a um pequeno
procedimento de biblioteca, chamado de stub do cliente, que
representa o procedimento do servidor no espao de endereos
do cliente.
De modo semelhante, o servidor est vinculado a um
procedimento chamado stub de servidor.
Esses procedimentos ocultam o fato de que a chamada de
procedimentos do cliente at o servidor no local.

Etapas na criao de uma RPC.


1 - Chamada do cliente ao stub do cliente. uma chamada de
procedimento local, com os parmetros colocados na pilha de
maneira convencional. Gustavo S. Pavani

Chamada de procedimentos remotos - 3


2 - O stub do cliente rene os parmetros em uma mensagem e efetua
uma chamada de sistema para enviar a mensagem. A reunio
desses parmetros chamada de empacotamento (marshalling).
3 - O ncleo envia uma mensagem da mquina cliente at a mquina
servidora.
4 - O ncleo passa o pacote recebido ao stub do servidor.
5 - O stub do servidor chama o procedimento servidor com os
parmetros j desempacotados.

Gustavo S. Pavani

Chamada de procedimentos remotos - 4

O procedimento cliente e o stub do cliente esto no mesmo espao


de endereos, de forma que os parmetros so repassados da
maneira convencional.

O mesmo acontece para o procedimento servidor e o stub do servidor.

Assim, a comunicao em rede feita simulando-se uma chamada


de procedimento convencional ao invs de utilizar soquetes.

Alguns problemas com o RPC.

Passagem de ponteiros impossvel, porque o cliente e o servidor


esto em espaos de endereos diferentes.

Uso de artifcios para tipos de dados simples, mas de difcil


implementao para estruturas de dados complexas.

Em linguagens de tipificao fraca, como C, pode ser possvel


escrever um procedimento que seja impossvel para o stub do
cliente empacotar os parmetros, pois ele no consegue
determinar o tamanho desses parmetros.
Gustavo S. Pavani

Chamada de procedimentos remotos - 5

Nem sempre possvel deduzir os tipos do parmetros, mesmo a


partir de uma especificao formal ou do prprio cdigo.
Uso de variveis globais no mais possvel.

RPC no JAVA.

Java tem o Remote Method Invocation (RMI), que permite a


invocao de chamadas remotas no estilo do RPC.

Pode passar objetos complexos como argumentos e valores de


retorno de mtodos.
Faz uso do mecanismo de serializao presente na plataforma JAVA.
Tutorial em: http://java.sun.com/docs/books/tutorial/rmi/index.html

Gustavo S. Pavani

10

O protocolo RTP - 1

Necessidade de se ter um protocolo de tempo real na


Internet.

Real-time Transport Protocol (RTP).


Descrito na RFC 1889.

O RTP ocupa uma posio estranha na pilha de protocolos.

Est no espao de usurio, executado sobre o UDP.


Operao:

Uma aplicao com vrios fluxos, que so armazenados na biblioteca


RTP. Essa biblioteca efetua a multiplexao dos fluxos e os codifica em
pacotes RTP, que so ento colocados em um soquete.
Na outra extremidade do soquete (no ncleo do sistema operacional), os
pacotes UDP so gerados e incorporados a pacotes IP.
Como consequncia dessa estrutura difcil dizer em qual camada est.
Tem aspectos semelhantes a um protocolo de aplicao e outros
aspectos semelhantes a um protocolo de transporte.
Gustavo S. Pavani

11

O protocolo RTP - 2

A funo bsica do RTP multiplexar diversos fluxos de


dados de tempo real em um nico fluxo de pacotes UDP.

O fluxo UDP pode ser enviado a um nico destino ou a vrios


destinos.
Gustavo S. Pavani

12

O protocolo RTP - 3

Cada pacote enviado em um fluxo RTP recebe um nmero


de unidade maior que o seu predecessor.

Permite ao destino descobrir se tem um pacote faltando.

Retransmisso no uma opo prtica, pois a informao do pacote


perdido pode j estar desatualizada.
Como consequncia, o RTP no tem nenhum controle de fluxo ou
controle de erros, nenhuma confirmao e nenhum mecanismo para
solicitar retransmisso.

A carga til do RTP pode ser codificada de qualquer forma


desejada pela aplicao.

Para facilitar a interoperao, o RTP define vrios perfis. Para cada


perfil pode ser permitidos vrios formatos de codificao.

Exemplo: um fluxo de udio pode ser codificado como amostras PCM


de 8 bits a 8 KHz, codificao delta, codificao proftica, codificao
GSM, e assim por diante.
Campo de cabealho no qual a origem pode especificar a codificao.
Gustavo S. Pavani

13

O protocolo RTP - 4

Marcao com timbre de hora.

A origem pode associar um timbre de hora com a primeira amostra


de cada pacote.

Isso permite o destino realizar alguma bufferizao e reproduzir


cada amostra depois de um nmero correto de milissegundos,
contados desde o incio do fluxo, independentemente de quando
chegou o pacote contendo a amostra.

Os timbres de hora so relativos ao incio do fluxo, de forma que os


valores absolutos no tem nenhum significado.

Alm de permitir reduzir os efeitos da flutuao, tambm permite a


sincronizao de vrios fluxos.

Cabealho do RTP:

Trs palavras de 32 bits e, potencialmente, algumas extenses.

Version: define a verso, que j est em 2.


Bit P: indica que o pacote foi completado at chegar um mltiplo de 4
bytes. O ltimo byte de preenchimento informa quantos bytes foram
acrescentados.
Gustavo S. Pavani
14

O protocolo RTP - 5

Bit X: indica que um cabealho de extenso est presente. A primeira


palavra da extenso fornece o comprimento.
CC: informa quantas origens de contribuio esto presentes, indo de
0 a 15.
Bit M: bit marcador especfico da aplicao. Pode ser usado para
marcar o comeo de um quadro de vdeo, de uma palavra em um
canal de udio ou qualquer outro elemento que a aplicao reconhea.
Payload type: informa que algoritmo de codificao foi usado.
Sequence number: contador incrementado em cada pacote RTP
enviado. usado para detectar pacotes perdidos.
Timestamp: produzido pela origem para anotar quando a primeira
amostra do pacote foi realizada.
Synchronization source identifier: informa a que fluxo o pacote
pertence. usado para multiplexar e de demultiplexar vrios fluxos de
dados em um nico fluxo de pacotes UDP.
Contributing source identifier: estaro presentes quando houver
misturadores (mixers) de udio no estdio. O misturador ser a origem
de sincronizao, com os fluxos mixados listados nesse campo.
Gustavo S. Pavani

15

O protocolo RTP - 6

Gustavo S. Pavani

16

O protocolo RTP - 7

Real-time Transport Control Protocol (RTCP).

Cuida do feedback, da sincronizao de fluxos e da interface com o


usurio, mas no transporta quaisquer dados.
A primeira funo pode ser usada para fornecer feedback sobre
retardo, flutuao, largura de banda, congestionamento e outras
propriedades de rede para as origens.

Essas informaes podem ser usadas pelo processo de codificao


para aumentar a taxa de dados quando a rede estiver funcionando bem
e para reduzir a taxa de dados quando houver problemas na rede.
Assim, os algoritmos de codificao podem ser adaptados
continuamente para oferecer a melhor qualidade possvel sob as
circunstncias atuais.
O campo Payload type usado para informar ao destino qual algoritmo
de codificao est sendo empregado no pacote atual.

O RTCP fornece um modo para nomear as diversas origens. Essa


informao pode ser exibida na tela do receptor, a fim de indicar
quem est se comunicando no momento.
Gustavo S. Pavani

17

Introduo ao TCP - 1

O Transmission Control Protocol (TCP) foi projetado


especificamente para oferecer um fluxo de bytes fim a fim
confivel em uma inter-rede no confivel.

Uma inter-rede diferente de uma nica rede porque suas


diversas partes podem ter topologias, larguras de banda, retardos,
tamanhos de pacote e outros parmetros completamente
diferentes.
O TCP foi projetado para se adaptar dinamicamente s
propriedades da inter-rede e ser robusto diante dos muitos tipos de
falhas que podem ocorrer.

Definido inicialmente na RFC 793. Depois atualizado (e corrigido) na


RFC 1122. Suas extenses so fornecidas na RFC 1323.

Cada mquina compatvel com o TCP tem uma entidade de


transporte TCP, que pode ser um procedimento de biblioteca, um
processo de usurio ou parte do ncleo.

Em todos os casos, ela gerencia fluxos e interfaces TCP para a


camada IP.
Gustavo S. Pavani

18

Introduo ao TCP - 2

Uma entidade TCP aceita fluxos de dados de usurios


provenientes de processos locais, divide-os em partes de, no
mximo, 64 KB (na prtica, temos 1.460 bytes para que possa
caber em um quadro Ethernet com os cabealhos IP e TCP) e
envia cada parte como um datagrama IP distinto.

Quando os datagramas IP que contm dados TCP chegam a uma


mquina, eles so enviados entidade TCP, que restaura os fluxos de
bytes originais.

A camada IP no oferece qualquer garantia de que os


datagramas sero entregues de forma apropriada.

O TCP deve administrar os timers e retransmitir os datagramas


sempre que necessrio.
Os datagramas tambm podem chegar fora de ordem, cabendo ao
TCP a tarefa de reorganiz-los em mensagens na sequncia
correta.
Gustavo S. Pavani

19

O modelo de servio do TCP - 1

O servio TCP obtido quando tanto o transmissor quanto o


receptor criam pontos extremos chamados soquetes.

Cada soquete tem um nmero de soquete (endereo) que consiste no


endereo IP do host e em um nmero de 16 bits local para esse host,
chamado de porta.

Um soquete pode ser utilizado por vrias conexes ao mesmo tempo.

Porta o nome usado pelo TCP para um TSAP.


As conexes so identificadas nas duas extremidades pelos identificadores
de soquetes. Nenhum nmero de circuito virtual ou qualquer outro
identificador usado.

As portas com nmeros abaixo de 1.024 so denominadas portas


bem conhecidas (well-known ports).

So reservadas para servios padro.


Exemplo, FTP na porta 21 do destino.
Lista de portas conhecidas: http://www.iana.org/assignments/port-numbers
Gustavo S. Pavani

20

O modelo de servio do TCP - 2

Port
Protocol
Use
21
FTP
File transfer
23
Remote login
Telnet
E-mail
25
SMTP
69
Trivial File Transfer Protocol
TFTP
Finger
Lookup info about a user
79
80
World Wide Web
HTTP
POP-3
110
Remote e-mail access
USENET news
119
NNTP
Normalmente, se tem um nico daemon, chamado de inetd (Internet
daemon) no UNIX que se associa a vrias portas e espera pela primeira
conexo de entrada.

Quando isso ocorre, o inetd ativa um novo processo e executa nele o daemon
apropriado, deixando esse daemon tratar a solicitao.
Dessa forma, os diferentes daemons de inetd s esto ativos quando h
trabalho para eles realizarem.
O inetd descobre que porta deve usar atravs de um arquivo de configurao.
Assim, o administrador de sistema pode configur-lo a ter daemons
permanentes nas portas mais ocupadas e inetd nas portas restantes.
Gustavo S. Pavani

21

O modelo de servio do TCP - 3

Todas as conexes TCP so full-duplex e ponto a ponto.

O TCP no admite os processos de multidifuso e difuso.

Uma conexo TCP um fluxo de bytes e no um fluxo de


mensagens.

As fronteiras das mensagens no so preservadas de uma


extremidade outra.

No h um meio de o receptor detectar a(s) unidade(s) em que os


dados foram gravados.

(a)

Quatro segmentos de 512 bytes enviados em datagramas IP


separados.
Os 2.048 bytes entregues aplicao em uma nica leitura.

(b)

Gustavo S. Pavani

22

O modelo de servio do TCP - 4

Quando uma aplicao repassa dados para a entidade TCP,


ela pode envi-los imediatamente ou armazen-los em um
buffer.

Em alguns casos, h ocasies em que a aplicao quer que os dados


sejam enviados de imediato.

Uso da flag PUSH, que informa ao TCP para no retardar a transmisso.

Dados urgentes.

Quando um usurio interativo pressiona a tecla DEL ou as teclas


CTRL-C para interromper um processo remoto j iniciado, a aplicao
adiciona algumas informaes de controle de fluxo de dados e o
entrega ao TCP juntamente com um flag URGENT.

Isso faz com que o servio TCP pare de acumular dados e transmita tudo
imediatamente.
Quando os dados urgentes so recebidos no destino, a aplicao
receptora interrompida (por um sinal) e pra tudo o que estiver fazendo
para ler o fluxo de dados e encontrar os dados urgentes. O final dos
dados urgentes marcado para que a aplicao saiba quando eles
terminam. Ou seja, esse esquema oferece um mecanismo de sinalizao
pouco sofisticado.
Gustavo S. Pavani
23

Cliente-servidor no TCP - 1
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main (String args[]) {
// arguments supply message and hostname of destination
Socket s = null;
try {
int serverPort = 7896;
s = new Socket(args[1], serverPort);
DataInputStream in = new DataInputStream( s.getInputStream());
DataOutputStream out = new DataOutputStream( s.getOutputStream());
out.writeUTF(args[0]);
// UTF is a string encoding see Sn 4.3
String data = in.readUTF();
System.out.println("Received: "+ data) ;
} catch (UnknownHostException e){ System.out.println("Sock:"+e.getMessage());
} catch (EOFException e){System.out.println("EOF:"+e.getMessage());
} catch (IOException e){System.out.println("IO:"+e.getMessage());}
} finally {
if(s!=null)
try {s.close(); }catch (IOExceptione){System.out.println("close:"+e.getMessage());}}
}
}
Gustavo S. Pavani

24

Cliente-servidor no TCP - 2
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main (String args[]) {
try{
int serverPort = 7896;
ServerSocket listenSocket = new ServerSocket(serverPort);
while(true) {
Socket clientSocket = listenSocket.accept();
Connection c = new Connection(clientSocket);
}
} catch(IOException e) {System.out.println("Listen :"+e.getMessage());}
}
}
// this figure continues on the next slide

Gustavo S. Pavani

25

Cliente-servidor no TCP - 3
class Connection extends Thread {
DataInputStream in;
DataOutputStream out;
Socket clientSocket;
public Connection (Socket aClientSocket) {
try {
clientSocket = aClientSocket;
in = new DataInputStream( clientSocket.getInputStream());
out =new DataOutputStream( clientSocket.getOutputStream());
this.start();
} catch(IOException e) {System.out.println("Connection:"+e.getMessage());}
}
public void run(){
try {
// an echo server
String data = in.readUTF();
out.writeUTF(data);
} catch(EOFException e) {System.out.println("EOF:"+e.getMessage());
} catch(IOException e) {System.out.println("IO:"+e.getMessage());}
} finally{ try {clientSocket.close();}catch (IOException e) {/*close failed*/}}
}
Gustavo S. Pavani

26

O protocolo TCP - 1

Uma funcionalidade chave do TCP, que domina o projeto


do protocolo, que cada byte em uma conexo TCP tem
seu prprio nmero de sequncia de 32 bits.

Problema com as taxas modernas de vazo da rede.

As entidades TCP de envio e de recebimento trocam


dados na forma de segmentos.

Um segmento TCP consiste em um cabealho de tamanho fixo


com 20 bytes (mais uma parte opcional) seguido de 0 ou mais
bytes de dados.
O software do TCP quem decide qual ser o tamanho do
segmento.

Ele pode acumular vrias escritas em um nico segmento ou pode


dividir os dados de uma escrita em vrios segmentos.
Cada segmento deve caber dentro da carga til de 65.535 bytes do IP.
Cada rede tem seu tamanho mximo de unidade de transferncia
(MTU maximum transfer unit) e cada segmento deve caber dentro
de uma MTU. Geralmente a MTU de 1.500 bytes (carga til do
Ethernet).
Gustavo S. Pavani

27

O protocolo TCP - 2

O protocolo usado pelas entidades TCP um protocolo de


janela deslizante.

Quando um emissor transmite um segmento, ele tambm comea


um timer. Quando um segmento chega no destino, a entidade TCP
receptora devolve um segmento (com ou sem dados) que
transporta um nmero de confirmao igual ao prximo nmero de
sequncia que ele espera receber.

Se o timer expira sem que o emissor tenha recebido a confirmao,


ento ele transmite o segmento novamente.

Problemas com esse protocolo.

Segmentos podem chegar fora de ordem.


Segmentos podem ser atrasados no caminho de tal forma, que o
emissor acaba por retransmiti-los.

As retransmisses podem ter intervalos de bytes diferentes, o que


dificulta o gerenciamento dos bytes recebidos.
Cada byte no fluxo tem o seu prprio deslocamento.
Gustavo S. Pavani

28

O cabealho do segmento TCP - 1

Todo segmento comea com um cabealho de tamanho


fixo de 20 bytes.

Depois desse cabealho fixo, podem se seguir as opes de


cabealho e at 65.535 20 20 = 65.495 bytes de dados.

Gustavo S. Pavani

29

O cabealho do segmento TCP - 2

Campos do cabealho TCP:

Source port e Destination port: identificam as extremidades da


conexo.
Sequence number: indica o nmero de sequncia (cada byte de dados
numerado).
Acknowledgement number: especifica o prximo byte esperado.
TCP header length: informa quantas palavras de 32 bits esto contidas
no cabealho TCP. Essa informao necessria por causa do campo
Options, que tem tamanho varivel. Acaba por informar onde os dados
comeam dentro do segmento.
Bit URG: habilitado se o ponteiro URGENT est em uso. O ponteiro
URGENT usado para identificar um deslocamento de bytes dentro
do nmero de sequncias atual onde dados urgentes devem ser
achados. Substitui mensagens de interrupo.
Bit ACK: habilitado indica que o Acknowledgement number vlido.
Caso contrrio, o segmento no contm uma confirmao, de forma
que o campo Acknowledgement number ignorado.
Gustavo S. Pavani

30

O cabealho do segmento TCP - 3

Bit PSH: indica dados PUSH. O receptor est sendo convidado a


entregar os dados para a aplicao no momento da chegada ao invs
de armazen-los no buffer e esperar que o buffer fique cheio para
entregar esses dados.
Bit RST: usado para reinicializar uma conexo que ficou confusa
devido a uma falha de host ou outra razo qualquer. tambm usado
para rejeitar um segmento invlido ou recusar uma tentativa de se
abrir uma conexo.
Bit SYN: usado para estabelecer uma conexo. Uma requisio de
conexo tem SYN = 1 e ACK = 0 (CONNECTION REQUEST). A
resposta da requisio da conexo tem SYN = 1 e ACK = 1
(CONNECTION ACCEPTED).
Bit FIN: usado para liberar uma conexo. Especifica que o emissor
no tem mais dados para transmitir. Ambos os segmentos SYN e FIN
tm nmeros de sequncia, o que garante o processamento na ordem
correta.
Window size: informa quantos bytes devem ser enviados, comeando
do byte confirmado. Quando esse campo tem tamanho 0, indica que o
receptor no mais capaz de receber dados, podendo dar permisso
no futuro. O TCP faz controle de fluxo com um tamanho de janela
varivel.
Gustavo S. Pavani

31

O cabealho do segmento TCP - 4

Checksum: fornecido para maior confiana. Valida o cabealho, os


dados e o pseudocabealho. Para isso, o campo Checksum do TCP
escrito com zeros e o campo de dados preenchido com bytes zero
adicionais se o seu comprimento um nmero mpar. O algoritmo de
validao calculada como o complemento de um da soma de todas
as palavras de 16 bits em complemento de um. Quando o receptor faz
o clculo do segmento inteiro, incluindo o campo Checksum, o
resultado deve ser zero.
O pseudocabealho contm os endereos IP de 32 bits da origem e do
destino, o nmero de protocolo do TCP (que igual a 6) e o contador
de bytes para o segmento TCP, incluindo o cabealho.

Gustavo S. Pavani

32

O cabealho do segmento TCP - 5

Options: prov uma maneira de se adicionar facilidades extras no


cobertas no cabealho.
A opo mais importante aquela que permite cada host especificar a
carga til TCP mxima que tem interesse em aceitar. Se um host no
usa essa opo, o padro uma carga til de 536 bytes, que cada
host Internet obrigado a aceitar, o que d um segmento TCP de 556
bytes. O tamanho mximo de segmento pode ser diferente em cada
direo do fluxo.
Outra opo a Window scale, que permite um emissor e um receptor
negociar um fator multiplicador para o tamanho da janela. Esse fator
possibilita deslocar o campo Window size em at 14 bits para a
esquerda, permitindo janelas de at 230 bytes.
Outra opo permite usar a retransmisso seletiva no lugar do
protocolo go back n. Faz uso de NAK para permitir que o receptor
pea por um ou mais segmentos especficos. Depois disso, ele pode
confirmar todos os dados armazenados, o que reduz a quantidade de
dados retransmitidos.

Gustavo S. Pavani

33

Estabelecimento de conexo TCP - 1

As conexes so estabelecidas em TCP usando o


handshake de trs vias.

Para estabelecer uma conexo entre o host 1 (cliente) e host 2


(servidor), o host 2 passivamente espera por uma conexo atravs
da execuo das primitivas LISTEN e ACCEPT.
O host 1 executa uma primitiva CONNECT, especificando o
endereo IP e a porta na qual ele deseja conectar, o tamanho
mximo de segmento TCP que ele aceita e opcionalmente algum
dado do usurio.

A primitiva CONNECT envia um segmento TCP com o bit SYN


habilitado e o bit ACK desabilitado e espera por uma resposta.

Quando o segmento chega no destino, a entidade TCP checa se


h um processo que fez um LISTEN na porta dada no campo
Destination port.

Caso contrrio, envia uma resposta com o bit RST habilitado para
rejeitar a conexo.
Gustavo S. Pavani

34

Estabelecimento de conexo TCP - 2

Se h algum processo escutando naquela porta, a esse processo


dado o segmento TCP.

Pode acontecer de os dois hosts tentarem simultaneamente


estabelecer uma conexo entre os mesmos soquetes.

Ele pode aceitar ou rejeitar a conexo.


Se aceita, um segmento de confirmao enviado de volta. Note que
o segmento SYN consome um byte do espao de sequncias, de
forma que ele pode ser confirmado sem nenhuma ambiguidade.

O resultado desse evento que somente uma conexo estabelecida


e no as duas, pois as conexes so identificadas por suas
extremidades. Somente h uma entrada na tabela.

O nmero de sequncia de uma conexo no zero.

Uso de um esquema baseado em relgio, que pulsa a cada 4 s.


Quando um host falha, ele no deve reinicializar at que o tempo de
vida mximo de um pacote no seja alcanado, o que garante que no
h pacotes de conexes prvias circulando pela Internet.
Gustavo S. Pavani

35

Estabelecimento de conexo TCP - 3

(a)
(b)

Sequncia normal de estabelecimento de uma conexo TCP.


Coliso de chamadas.
Gustavo S. Pavani

36

Liberao da conexo TCP

Cada direo da conexo deve ser liberada de forma


independentemente.

Quando ambos as direes forem fechadas, a conexo liberada.


Uso de um segmento FIN, com a confirmao ACK, para cada
direo.

Quatro segmentos TCP. Mas o segundo FIN pode estar contido no


mesmo segmento do primeiro ACK, reduzindo o total para trs.

Para evitar o problema dos dois exrcitos, se faz uso de


timers.

Se a resposta para um FIN no vier em duas vezes tempo mximo


de vida de um pacote, o emissor do FIN libera a conexo.
O outro lado vai perceber que ningum est o escutando e vai
expirar o timer, liberando tambm a conexo.

Gustavo S. Pavani

37

Gerenciamento de conexes TCP - 1

Mquina de estados finitos com 11 estados para


representar os passos no estabelecimento e liberao de
conexes.

Gustavo S. Pavani

38

Gerenciamento de conexes TCP - 2


Linha slida: cliente
Linha tracejada: servidor

Gustavo S. Pavani

39