Você está na página 1de 124

O Protocolo TCP

O Nvel de Transporte
Implementa um servio de comunicao fima-fim:
Protocolos de transporte rodam nos sistemas finais e permitem que aplicaes em uma mquina enviem mensagens individuais para aplicaes parceiras, localizadas em qualquer outra mquina da internet.

Prov uma comunicao lgica entre processos de aplicao rodando em diferentes hosts.

Comunicao Fim-a-Fim
application transport network data link physical network data link physical network data link physical

network data link physical

network data link physical

network data link physical application transport network data link physical

Servios de Transporte na Internet


A arquitetura TCP/IP implementa dois protocolos de transporte com caractersticas distintas: o TDP e o UCP. TCP (Transmission Control Protocol ):
Protocolo de transporte fim-a-fim, orientado a conexo, que fornece um servio de transferncia confivel de dados entre aplicaes parceiras. Garante que os dados so entregues livres de erro, em seqncia e sem perdas ou duplicao.

UDP (User Datagram Protocol ):

Servios no fornecidos no TCP/UDP:

Protocolo do nvel de transporte que implementa um servio do tipo best-effort (no confivel, sem garantia de entrega dos dados). Tempo real, garantia de banda passante e multicast confivel.

TCP - Transmission Control Protocol


Especificao original: RFC 793 [Postel 1981].
Outras RFCs: 1122, 1323, 2018 e 2581

Protocolo de transporte fim-a-fim, orientado a conexo, que fornece um servio de transferncia confivel de dados entre aplicaes parceiras. Garante que os dados so entregues livres de erro, em seqncia e sem perdas ou duplicao.

Localizao e Principais Clientes

Encapsulamento

Caractersticas Gerais
Usa o conceito de sockets para caracterizar uma conexo. Permite estabelecer uma conexo entre um par de sockets de acordo com parmetros de qualidade de servio e segurana previamente especificados. Prov comunicao do tipo full-duplex entre os dois sockets da conexo. Esta comunicao sempre unicast e ponto-a-ponto.
Uma conexo definida univocamente por um par de sockets. Socket = endereo IP + porta

Caractersticas Gerais

(cont.)

O estabecimento de conexes negociado (uso do mecanismo de three-way handshaking). Admite o trmino negociado ou abrupto de conexes. Implementa temporizao na entrega de dados. Realiza a entrega ordenada de dados. Permite a sinalizao de dados urgentes. Permite o relato de falha de servio. Permite a entrega obrigatria de dados (flag push).
Handshaking = troca de mensagens de controle.

Caractersticas Gerais

(cont.)

Controle de fluxo baseado no uso de janelas deslizantes com alocao de crditos. Controle de erros atravs do uso de nmeros de seqncia e do clculo do checksum para todo o segmento. Recuperao de erros para dados perdidos e duplicados. Demultiplexao entre mltiplas aplicaes em um dado host destino. Segmentao de dados para aumentar a eficincia da transmisso.

O Conceito de Porta
Para cada nvel da arquitetura existe um campo no protocolo da camada que indica para quem os dados encapsulados devem ser entregues.

De maneira similar, para distinguir dentre as vrias aplicaes, o nvel de transporte associa um identificador a cada processo de aplicao. Esse identificador chamado de Porta (port number).

No nvel de enlace, o campo Type indica qual o protocolo que est encapsulado no frame Ethernet (p.ex., um valor igual a 0x0800 indica que os dados devem ser passados para o IP). No nvel de rede, o campo Protocol no cabealho do IP identifica o protocolo para o qual o datagrama deve ser repassado (p.ex., 17 para o UDP e 6 para o TCP).

Porta

(cont.)

Porta

(cont.)

Uma porta um objeto abstrato, codificado por um nmero inteiro de 16 bits, usado para identificar processos de aplicao. Para uma aplicao poder falar com uma outra numa mquina remota, preciso conhecer no apenas o endereo IP da mquina destino mas tambm a porta associada aplicao parceira. O UDP e o TCP fornecem um conjunto de portas que permite a mltiplos processos dentro de uma nica mquina usarem os servios de comunicao providos pelo UDP e TCP simultaneamente.

Portas

(cont.)

Nmeros de portas origem e destino so includos no cabealho do TCP e do UDP.

32 bits source port # dest port #

other header fields

application data (message)

TCP/UDP segment format

Well-Known Ports
Nmeros de portas referentes a servios especficos, pblicos e globais, conhecidos de todas as aplicaes.

Modelo de Comunicao do TCP


O TCP opera segundo o modelo cliente-servidor. A comunicao entre aplicaes modelada como um stream ordenado de bytes, fluindo em direo aplicao destino. Quando o TCP recebe dados da aplicao ele os armazena (adiciona) em um buffer de transmisso.
No existe o conceito de registro ou de qualquer message boundary. A aplicao servidora espera por pedidos de conexo das aplicaes clientes.

Modelo de Comunicao

(cont.)

O TCP retira ento parte desses dados do buffer e adiciona um cabealho, formando um segmento. O segmento constitui a PDU da camada de transporte.

Modelo de Comunicao

(cont.)

Buffer de transmisso

Dados recebidos

Vazio

TCP Header Data

Segmento

Segmento
A unidade de dados trocada entre as entidades de transporte denominada de Segmento. Cada segmento entregue ao IP para transmisso em um nico datagrama. Entretanto, a fragmentao pode ser necessria no nvel de rede. Como um protocolo orientado a byte o TCP livre para dividir o stream de bytes em segmentos de qualquer tamanho para transmisso.
O segmento a unidade bsica de transferncia de dados do TCP.

Segmento

(cont.)

application-layer data segment header


Ht M Hn segment

P3

receiver
M M

P4 P2

P1
M

application transport network

application transport network

application transport network

Segmento

(cont.)

O tamanho de cada segmento independente dos blocos de dados que a aplicao fornece. Normalmente, o TCP espera juntar uma quantidade razovel de dados no buffer antes de formar um segmento. Segmentos de tamanho grande permitem um uso mais eficiente das facilidades de transmisso. Entretanto, no so adequados para certas aplicaes, como as interativas.

Segmento

(cont.)

Nmeros de Seqncia Cada byte de um segmento de dados enviado em uma conexo TCP visto como tendo um nmero de seqncia. O cabealho do TCP contm o nmero de seqncia do primeiro byte do segmento. Cada lado de uma conexo TCP possui o seu prprio conjunto de nmeros de seqncia.

Nmeros de Seqncia

(cont.)

[205] [204] [203] [202] [201] [200] [400] [401] [402] [403] [404] [405]

Nmero de Seqncia

(cont.)

O primeiro nmero de seqncia para cada lado de uma conexo especificado no estabelecimento da conexo. Para que uma conexo seja estabelecida os dois lados devem se sincronizar (concordar) com o nmero de seqncia inicial de cada lado.

Portas TCP
O TCP usa o conceito de porta para identificar a aplicao destino. Os nmeros das portas TCP variam de 0 a 65535. Portas de 0 a 1023 so reservadas para o acesso a servios padro, como FTP e Telnet (well-known ports). As portas permitem que vrios processos dentro de uma estao utilizem simultaneamente as facilidades de transmisso do TCP. A associao de portas aos processos tratada independentemente em cada estao.

Decimal 1 5

Description TCP Multiplexer Remote Job Entry Echo Discard Active Users Daytime Who is up? Quote of the Day Character Generator File Transfer Protocol (data) File Transfer Protocol (control) Telnet Simple Mail Transport Protocol Time Resource Location Protocol Host Name Server Who Is Domain Name Server

Well-Known Ports do TCP

7 9 11 13 15 17 19 20 21 23 25 37 39 42 43 53

Well-Known Ports do TCP


(cont.)

Decimal 67 68 69 75 77 79 101 102 103 104 111 113 139

Description Bootstrap Protocol Server Bootstrap Protocol Client Trivial Filter Transfer Any Private Dial-out Server Any Private RJE Service Who is on System NIC Host Name Server ISO-TSAP X.400 Mail Service X.400 Mail Sending SUN Remote Procedure Call Authentication Service Net Bios Session Service

Sockets
Um socket definido pela combinao de um endereo IP e uma porta, sendo escrito sob a forma nmero IP.nmero da porta
Ex: 128.1.50.30.23 130.2.15.8.2219

Um socket prov toda a informao de endereamento que um cliente ou um servidor necessita para identificar seu parceiro na comunicao. Uma conexo TCP caracterizada univocamente por dois sockets, um em cada lado da conexo.

Sockets

(cont.)

O exemplo abaixo mostra uma sesso TCP de um cliente, identificado pela porta 2219 e endereo IP 130.2.15.8, para a porta padro Telnet (23), na mquina 128.1.50.30.
> netstat -na Active Internet connections (including servers) Proto .......... Local Address Foreing Address

(state) Established

tcp

..........

128.1.50.30.23 130.2.15.8.2219

Sockets

(cont.)

Sockets permitem diferenciar entre mltiplas conexes.

TCP Connection of Two Hosts Connection Source IP Address 1 2 192.9.218.97 192.9.218.97 TCP Port Destination IP Address 1234 1235 192.9.218.96 192.9.218.96 TCP Port 23 Telnet 23 Telnet

Sockets
host A

(cont.)

source port: x dest. port: 23

server B

Web client host C

source port:23 dest. port: x

port use: simple telnet app

Source IP: C Dest IP: B source port: y dest. port: 80

Source IP: C Dest IP: B source port: x dest. port: 80

Web client host A

Source IP: A Dest IP: B source port: x dest. port: 80

Web server B port use: Web server

Controle de Fluxo
Tcnica usada para garantir que a estao transmissora no envia mais dados do que a estao receptora pode processar. Quando dados so recebidos, a estao gasta um certo tempo com o seu processamento e somente depois que libera o buffer e fica apta a receber mais dados. Na ausncia do controle de fluxo, os buffers de recepo poderiam encher enquanto ainda se estivesse processando dados antigos no buffer. Tcnicas de controle de fluxo:
Pra-e-Espera (Stop-and-Wait) Janelas Deslizantes (Sliding Windows)

Stop-and-Wait
a forma mais simples de controle de fluxo (no o esquema usado no TCP!). Os blocos de dados so numerados, alternadamente, como 0 e 1. Inicialmente, a entidade origem transmite o bloco de dados 0. Aps a recepo, a entidade destino indica o seu desejo de aceitar um outro bloco enviando de volta uma confirmao de recebimento (Ack) do bloco 0.
Geralmente, Ack1 confirma o recebimento do bloco 0 e solicita a transmisso do bloco de nmero 1, e Ack0 confirma o recebimento do bloco 1 e solicita a transmisso de um bloco de nmero 0.

A entidade origem sempre aguarda a recepo do Ack correspondente antes de enviar o prximo bloco. Desta forma, a estao destino pode controlar o fluxo de dados simplesmente retardando o envio do Ack.

Janela Deslizante (Sliding Window)


A essncia do problema do controle de fluxo oferecido pelo protocolo Stop-and-Wait que apenas um bloco de dados pode transmitido por vez (baixo desempenho). A soluo bvia permitir mltiplos blocos estarem em trnsito num dado momento. O nmero de blocos que podem ser transmitidos sem esperar pelo recebimento de um ACK define o tamanho da janela.
Agora, a estao receptora aloca N buffers, ao invs de apenas um, podendo assim aceitar N blocos. A estao transmissora, por sua vez, pode enviar N frames sem esperar por um Ack.

Mecanismo empregado no TCP.

Janela Deslizante (Sliding Window)

(cont.)

Janela Deslizante (Sliding Window)

(cont.)

Janela Deslizante (Sliding Window)

(cont.)

Controle de Erros
Refere-se aos mecanismos usados para detectar e corrigir erros que ocorrem em uma transmisso de dados. Normalmente so considerados dois tipos de erro:
Bloco danificado: o bloco chega estao destino mas alguns dos seus bits possuem erros (foram alterados durante a transmisso). Bloco perdido: o bloco no chega estao destino. Pode ter sido descartado em um roteador ou um rudo pode t-lo danificado numa extenso tal que o receptor no est ciente de que ele tenha sido enviado.

As tcnicas mais comuns para so baseadas em alguns ou em todos os seguintes ingredientes:


Deteco de erros: tipicamente usada a tcnica de CRC. Ack positivo: a estao destino retorna um Ack positivo para indicar um bloco recebido com sucesso, livre de erros.

Controle de Erros

(cont.)

Retransmisso aps timeout: a estao origem retransmite um bloco que no tenha sido confirmado aps certo tempo. Ack negativo com retransmisso: a estao destino retorna um Ack negativo para aqueles blocos onde erros foram detectados. A estao origem ento retransmite-os.

Coletivamente, esses mecanismos so referidos como tcnicas ARQ (Automatic Repeat Request). As trs verses mais comuns dessas tcnicas so:
Stop-and-wait ARQ Go-back-N ARQ Selective-reject ARQ

Todas essas tcnicas so baseadas no uso dos esquemas de controle de fluxo anteriormente descritos (Stop-andWait e Sliding Windows).

Stop-and-Wait ARQ

Stop-and-Wait ARQ

(cont.)

Go-Back-n ARQ
Mecanismo usado no TCP, em conjunto com o esquema de janelas deslizantes. A janela possui tamanho N, significando que at N blocos consecutivos so permitidos na janela. Os blocos de dados so numerados em seqncia mod N
Ex: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ... (para N=8)

Ack(n):
Reconhece todos os blocos at o de nmero de seqncia n-1.

Existe um timer associado a cada bloco em trnsito. Na ocorrncia de timeout(n):


Retransmite o bloco n e todos os outros com nmero de seqncia maior que n na janela.

Go-Back-N em Ao

Formato do Segmento TCP


32 bits URG: urgent data (generally not used) ACK: ACK # valid PSH: push data now (generally not used) RST, SYN, FIN: connection estab (setup, teardown commands) Internet checksum (as in UDP)

source port #

dest port #

sequence number acknowledgement number


head not UA P R S F len used

counting by bytes of data (not segments!) # bytes rcvr willing to accept

rcvr window size ptr urgent data

checksum

Options (variable length)

application data (variable length)

Nmero das Portas Origem e Destino Identificam a aplicao transmissora e receptora, cada uma delas associada a um ponto da conexo. Esses dois valores, juntamente com os endereos IP de origem e destino, presentes no cabealho IP, identificam univocamente a conexo. Conexo = par de sockets.

Nmero de Seqncia

Identifica o nmero do primeiro byte dentro do stream de bytes que est sendo transmitido naquele segmento. Assume valores entre 0 e 232-1.

Nmero do Acknowledgement Como cada byte numerado, esse campo identifica o prximo nmero de sequncia (prximo byte) que se espera receber do host remoto. Esse valor igual ao nmero do ltimo byte recebido + 1. O campo vlido somente se o flag de ACK estiver ligado.

Nmero do Acknowledgement

(cont.)

Alguns segmentos carregam somente Ack enquanto outros carregam dados ou solicitaes para estabelecer ou encerrar uma conexo. Uma vez estabelecida a conexo, este campo ter sempre algum valor e o flag de ACK estar sempre ligado. Observao:
O TCP no faz Ack Seletivo nem tampouco Ack Negativo de bytes.

Tamanho do Cabealho Informa o tamanho do cabealho do segmento, medido em palavras de 32 bits. A informao de tamanho necessria porque o campo de Options do TCP possui tamanho varivel. Com 4 bits, o tamanho do cabealho limitado a 60 bytes. Sem opes, o tamanho default de 20 bytes.

Campo de Flags Os flags identificam o propsito e o contedo de cada segmento. Existem seis flags:
URG, ACK, PSH, RST, SYN e FIN.

Um ou mais podem podem estar ligados num certo momento.

Bit URG ACK PSH RST SYN FIN

Significado
Indica a presena de dados urgentes no segmento (urgent pointer vlido). Vale 1 para todos os segmentos, exceto p/ segmento SYN inicial (aknowledgement number vlido). Transmissor notifica ao receptor para que ele passe todos os dados que possui no seu buffer para o processo de aplicao. Resseta a conexo. Sincroniza os nmeros de seqncia no setup da conexo. Transmissor solicita trmino normal da conexo (parou de enviar dados).

Tamanho da Janela
Para implementao do seu mecanismo de controle de fluxo (sliding window), o TCP requer que cada um dos lados anuncie o tamanho da sua janela de recepo. O tamanho da janela determina o nmero de bytes que se est disposto a aceitar, iniciando-se com o valor definido no campo ack number. limitado ao valor 65.535 (0 a 216-1).

Checksum e Urgent Pointer


O campo de checksum cobre todo o segmento TCP (cabealho + dados). Emprega um esquema de clculo semelhante ao do UDP, que inclui um pseudo-header extrado do cabealho do IP. Urgent pointer um offset positivo que deve ser adicionado ao campo de nmero de seqncia, para indicar a posio do ltimo byte dos dados urgentes. a maneira que o transmissor tem para transmitir dados de emergncia .

TCP Options e a Opo MSS


A especificao original do TCP (RFC 793) define cinco opes. As RFCs mais novas (por exemplo, a RFC 1323) definem opes adicionais. A opo mais comum o MSS (Maximum Segment Size). O valor do MSS especifica o maior tamanho de segmento que o n est disposto a receber. Normalmente, cada lado da conexo especifica o valor do MSS no estabelecimento da conexo (na troca de segmentos SYN).

Lista de TCP Options

Estabelecimento de Conexo Passive Open no especificada


Aguarda tentativa de conexo de qualquer estao remota, com nveis de segurana e precedncia especificados.

Passive Open completamente especificada


Aguarda tentativa de conexo de uma estao remota especfica, com nveis de segurana e precedncia especificados.

Estabelecimento de Conexo Active Open

(cont.)

Solicita conexo a uma estao remota especfica, com nveis de segurana e precedncia especificados.

Active Open com dados


Solicita conexo a uma estao remota especfica, com nveis de segurana e precedncia especificados. Contm dados do usurio.

Estabelecimento de Conexo

(cont.)

As conexes podem ser estabelecidas no modo passivo ou ativo. No modo passivo, o usurio solicita ao TCP que aguarde pedidos de conexo (via primitiva Passive Open). Na Passive Open completamente especificada o usurio especifica um socket remoto do qual ele aceitar conexes. Uma conexo ento estabelecida quando uma Active Open executada na porta remota.

Estabelecimento de Conexo

(cont.)

Na Passive Open no especificada o usurio declara o seu desejo de estabelecer conexo com qualquer outro usurio. No modo ativo, usando a primitiva Active Open, o usurio solicita uma conexo com um socket especfico. A conexo pode ser aberta se existir uma primitiva Passive Open no socket remoto ou se o socket remoto tiver emitido um Active Open.

Estabelecimento de Conexo
Primitivas

(cont.)

Requisitos p/ a abertura da conexo

Active Open, Active Open Os endereos de destino em cada primitiva referem-se ao outro socket. Parmetros de segurana so idnticos. Active Open, Passive Open completamente especificada Os endereos de destino em cada primitiva referem-se ao outro socket. Parmetro de segurana na Active Open est dentro da faixa especificada pela Passive Open. O parmetro de segurana na Active Open est dentro da faixa especificada pela Passive Open.

Active Open, Passive Open no especificada

Primitivas de Resposta de Servio


Um pedido de estabelecimento de conexo pode receber as seguintes respostas:
Open ID
Informa ao usurio o nome atribudo conexo solicitada atravs da primitiva Open.

Open Failure
Relata falha de um pedido de Active Open.

Open Success
Relata a concluso de um pedido de Active Open ou Passive Open pendente.

Relacionamento entre as Primitivas


Passive Open Open ID Active Open Open ID Mecanismo Three-Way Handshaking

Open Success Open Success

Three-Way Handshake
O TCP se utiliza do mecanismo de three-way handshake para estabelecer uma conexo. Este mecanismo garante a correta sincronizao entre os usurios da conexo de transporte. O three-way handshake envolve a troca de trs segmentos (isto , o mecanismo possui trs passos).

Three-Way Handshake
A

(cont.)

Passive Open Active Open


SYN(x)

Open ID

Open ID
SYN(y), ACK(x+1)

Open Success
ACK(y+1)

Open Success

Handshake #1
Quando um socket local estabelecido, o TCP envia um segmento SYN inicial para o TCP remoto, seta um timer de retransmisso e espera at que o timer expire ou que receba um ACK do socket remoto. O segmento de handshake #1 identificado pelo bit SYN no campo de Flag e carrega o nmero de seqncia inicial (x).

Handshake #1

(cont.)

Handshake #2

(cont.)

O segmento de handshake #2 tem tanto o bit SYN quanto o bit ACK ligados, confirmando o recebimento do segmento de handshake #1 e indicando a continuao do processo de handshaking. Quando o segmento chega ao socket remoto, o TCP verifica se o flag SYN est presente e se o checksum est ok. O TCP do lado passivo (servidor) guarda o nmero de seqncia inicial do lado ativo e envia um segmento SYN+ACK. Um timer de retransmisso tambm ligado.

Handshake #2

(cont.)

Handshake #3
O segmento de handshake #3 possui somente o bit ACK ligado, podendo ou no conter dados. usado para informar ao destino que ambos os lados concordam que uma conexo foi estabelecida. Quando o TCP recebe o segmento SYN+ACK do lado servidor (passivo), ele confirma o recebimento enviando um segmento ACK. Somente quando o lado servidor recebe este segmento de ACK a conexo estabelecida.

Handshake #3

(cont.)

Caso o timer de retransmisso estoure antes do recebimento do segmento SYN+ACK, o TCP retransmite o segmento inicial SYN e reinicia o timer. O TCP abandona a conexo aps um nmero pr-definido de retransmisses. Nesse caso, o TCP envia mensagem ao seu usurio e libera os recursos alocados.

Handshake #3

(cont.)

Encerramento de Conexo O encerramento de conexo no TCP pode ser feito de uma das duas formas:
Normal, para encerramento negociado. Abrupta, para encerramento unilateral, no negociado.

Encerramento de Conexo As primitivas de pedido de servio de encerramento de conexo so:


Close
Fecha a conexo normalmente, de forma negociada.

Abort
Fecha a conexo de forma abrupta, sem qualquer negociao.

Encerramento de Conexo

(cont.)

As primitivas de resposta de servio de encerramento de conexo so:


Closing
Informa ao processo de aplicao remoto que a aplicao cliente, usuria do TCP, emitiu um pedido de trmino normal de conexo (Close) e que todos os dados enviados por esta aplicao j foram entregues.

Terminate
Informa que a conexo foi encerrada, sendo fornecida uma descrio da razo do encerramento.

Close / Closing
client server

Close

Dados pendentes de A para B

Closing

Close / Terminate
client server

Dados pendentes de B para A

Close

Terminate Terminate

Encerramento Negociado de Conexo

A primitiva Close informa que o lado cliente completou a transferncia dos dados. Implicitamente, obriga a execuo da funo push, isto , o envio de todos os dados armazenados no buffer de transmisso.

Encerramento Negociado de Conexo

(cont.)

A primitiva Close dispara a seguinte seqncia de eventos:


O TCP local (lado cliente, ativo) transmite todos os dados do buffer e sinaliza ao TCP remoto (lado servidor, passivo) que est fechando a conexo. O TCP remoto entrega todos os dados disponveis aplicao remota e a informa do pedido de Close emtindo a primitiva Closing. Se desejar, a aplicao remota pode enviar dados pendentes e, ento, emitir a primitiva Close.

Encerramento Negociado de Conexo

(cont.)

O TCP remoto transmite todos os dados pendentes e sinaliza ao TCP cliente que est pronto para encerrar a conexo. O TCP cliente entrega os dados pendentes aplicao local e emite para esta uma primitiva Terminate, informando-a que encerrou a conexo no lado cliente. O TCP cliente tambm sinaliza ao TCP remoto que encerrou a conexo. Para isso, envia-lhe um segmento especfico. Ao receber esse ltimo segmento, o TCP remoto emite para a aplicao remota a primitiva Terminate, encerrando a conexo no lado servidor.

Encerramento Negociado de Conexo

(cont.)

Observe que, num esquema de encerramento de conexo negociado, aps a emisso da primitiva Close, o usurio do TCP local obrigado a continuar recebendo dados pela conexo at que o TCP remoto termine de enviar todos os seus dados e, posteriormente, tambm decida encerrar a conexo.

client

server

Close

Encerramento Negociado de Conexo (cont.)

Dados pendentes de A para B

Closing Close

Dados pendentes de B para A

Terminate Terminate

Encerramento Abrupto de Conexo


Ocasionalmente, podem ocorrer condies anormais que forcem uma aplicao ou o TCP a terminar abruptamente a conexo. O processo de aplicao encerra a conexo de forma abrupta emitindo a primitiva de pedido de servio Abort. A partir desse ponto, a aplicao no aceita mais dados pela conexo e, portanto, dados em trnsito sero perdidos. Quando a aplicao solicita o trmino abrupto da conexo o TCP local sinaliza ao TCP remoto que a conexo foi abortada enviando um segmento especfico (com o bit RST ligado) para o TCP do lado remoto.

Encerramento Abrupto de Conexo

(cont.)

O TCP remoto informa esse fato aplicao destino atravs da primitiva Terminate. Ele responde imediatamente abortando a conexo. O TCP tambm informa aplicao local sobre tal ocorrncia, emitindo uma primitiva Terminate. Os recursos alocados, tais como buffers, so liberados.

Troca de Segmentos no Encerramento da Conexo O encerramento normal da conexo envolve a troca de 4 segmentos. Atravs desse mecanismo, o TCP permite que um lado sinalize o trmino da sua transmisso, enquanto ainda permite que ele receba dados do outro lado da conexo. Uma vez encerrada a conexo em uma certa direo, o TCP no aceita mais dados naquele sentido. Esse mecanismo conhecido como Half-Close.

Troca de Segmentos no Encerramento da Conexo


(cont.)

Ao receber a primitiva de encerramento de conexo do usurio local, o TCP finaliza a transmisso enviando os dados pendentes e espera receber os correspondentes acks. Em seguida, o TCP envia um segmento FIN. O TCP remoto responde com um ACK do segmento FIN e informa aplicao do seu lado que no h mais dados disponveis.

Troca de Segmentos no Encerramento da Conexo


(cont.)

Troca de Segmentos no Encerramento da Conexo


(cont.)

client

server

Troca de Segmentos no Encerramento da Conexo (cont.)

Close

Dados pendentes de A para B

FIN(x) ACK(x+1)
Dados pendentes de B para A

Closing Close

Terminate

FIN(y), ACK(x+1) ACK(y+1)

Terminate

Transferncia de Dados Se inicia aps o trmino do Three-way handshake. Cada segmento contm no campo Ack o nmero de seqncia do prximo byte esperado do parceiro.

Transferncia de Dados
client

(cont.)

data 100, ack 301 data 301, ack 201 data 201, ack 401 data 301, ack 401 data 401, ack 401 no data, ack 501

server

Transferncia de Dados
client

(cont.)

data 501, ack 401

server

data 601, ack 401

Timeout!

data 501, ack 401 no data, ack 701

Delayed Ack Normalmente, o TCP no envia o Ack no instante em que ele recebe dados. Ao contrrio, ele retarda o envio do Ack esperando que tenha dados para enviar na mesma direo. Esse mecanismo conhecido como Piggyback (confirmao por carona). A maioria das implementaes usa um delay de 200ms.

Transferncia de Dados Primitivas de pedido de servio:


Send
Transfere dados atravs da conexo identificada pelo parmetro nome da conexo local (retorno da primitiva OpenId).

Allocate
Solicita ao TCP aumento da rea alocada para a recepo dos dados (negociada no estabelecimento da conexo).

Transferncia de Dados

(cont.)

Send usada pelo processo de aplicao para enviar dados atravs de uma conexo TCP/IP. Por meio da primitiva Send , os blocos de dados da aplicao so entregues ao TCP, que os coloca no buffer de transmisso. Se o push flag estiver ligado na primitiva Send, todos os dados contidos no buffer so enviados imediatamente, em um ou mais segmentos; seno, tenta-se maior eficincia.

Transferncia de Dados

(cont.)

Dados que chegam atravs da conexo so armazenados no buffer de recepo. Na recepo, se o push flag estiver ligado os dados do buffer so imediatamente entregues ao usurio, atravs da primitiva Deliver. Deliver: relata a chegada de dados. Se o push flag no estiver ligado, tenta-se minimizar as interrupes do sistema.

Transferncia de Dados

(cont.)

Aos dados tambm pode estar associado um urgent flag, existente na primitiva Send. Nesse caso, o usurio destino recebe um indicador urgent junto com os dados, sendo sua responsabilidade process-los to rpido quanto possvel. A primitiva Allocate utilizada para informar ao TCP sobre a quantidade de bytes que o usurio espera receber.

Estado da Conexo
Primitiva de Servio: Status
Solicita o estado atual da conexo. Parmetros: nome (Id) da conexo local.

Primitiva de resposta de servio: Status Response

Relata o estado atual da conexo. Parmetros: nome da conexo local, porta origem e destino, end. origem e destino, estado da conexo, janela de recepo e transmisso, nmero de acks aguardando, nmero de recepes aguardando, estado de urgncia, etc.

Relatrio de Erros da Conexo


Primitiva de Resposta de Servio: Error Relata erros de pedidos de servio ou erros internos. Usada para informar ao usurio TCP sobre os pedidos ilegais de servios relativos conexo ou sobre os erros relacionados s estaes envolvidas na conexo.

Active Open Simultneo: FSM

Close Simultneo: FSM

Mquina de Estados do TCP


Stevens - Fig.18.2

O Estado 2MSL (Time_Wait)


MSL (Maximum Segment Lifetime) a maior quantidade de tempo que um segmento pode existir na rede antes de ser descartado. Recorde que segmentos so trasmitidos como datagramas IP e que estes possuem um valor de TTL que limita o tempo de vida dos datagramas. A RFC 793 especifica um valor de MSL de 2 minutos. Valores comuns implementados so: 30 segundos, 1 minuto e 2 minutos.

O Estado 2MSL (Time_Wait)

(cont.)

Quando o TCP executa um Close e envia o Ack final, a conexo deve permanecer no estado Time_Wait por um tempo igual a 2xMSL. Isso permite ao TCP reenviar o Ack final no caso desse Ack se perder (em cujo caso ocorre timeout e outro lado da conexo retransmite o segmento final FIN).

Tamanho da Janela (Window Size)

Tamanho da Janela (Window Size)

(cont.)

O tamanho da janela de recepo definido por cada um dos lados no estabelecimento da conexo. Um anncio de alterao deste valor pode ser feito a qualquer momento, por qualquer um dos lados. O resultado um mecanismo simples de controle de fluxo. O valor do tamanho da janela relativo (tem como byte inicial) ao acknowledge sequence number.

A Janela Deslizante (Sliding Window)


A janela vai se fechando medida que dados vo sendo enviados e reconhecidos (chegam os acks correspondentes). A janela vai se abrindo, permitindo que mais dados sejam enviados, medida que o processo receptor no lado remoto l os dados j reconhecidos (que j foi dado ack), liberando espao no buffer de recepo do TCP.

O Valor do MSS (Maximum Segment Size)


O tamanho do MSS tambm informado no estabelecimento da conexo. Ele especifica o maior tamanho de segmento que se est disposto a receber. Mesmo que uma interface de rede de um dos lados tenha uma MTU maior do que o valor do MSS informado pelo lado remoto, o valor do MSS que limita o tamanho do segmento que pode sair (atravessar) por aquela interface.

Controle de Fluxo no TCP: Exemplo


Stevens - Fig.20.1

Transferncia de 8192 bytes da mquina svr4, porta 1056, para a mquina bsdi, porta 7777, em oito blocos de 1024 bytes.

Controle de Fluxo no TCP: Um Exemplo


No exemplo da figura anterior:

(cont.)

Os valores da janela de recepo anunciados (win 4096) so iguais, bem como os valores do maximum segment size (<mss 1024>), do transmissor e receptor. Como visto anteriormente, o valor do mss indica que no se quer receber segmentos maior do que esse limite. Os valores 1305814529 e 1367249409 vistos nos Segmentos 1 e 2 indicam o nmero de seqncia inicial do lado svr4 e bsdi, respectivamente. Os valores entre parnteses indicam o nmero de bytes no campo de dados. Assim, 1305814529:1305814529 (0) indica que o nmero de seqncia do segmento 1305814529 e que o nmero de bytes no segmento zero.

Controle de Fluxo no TCP: Um Exemplo


No exemplo da figura anterior:

(cont.)

No Segmento 3, Ack 1 indica que a mquina svr4 espera agora receber o byte 1 de dados. Nos segmentos 4, 5 e 6, PSH 1:1025(1024) indica a transmisso de um segmento de tamanho 1024, comeando no byte 1 e terminando no byte 1025. O segmento 7 reconhece dois segmentos apenas (Ack 2049). Observe que o mecanismo de delayed ackest sendo usado no exemplo. Observe que no anncio de tamanho da janela do Segmento 8, est refletido o fato de que 1024 bytes ainda esto no buffer de recepo para serem lidos pelo processo de aplicao na mquina bsdi.

Controle de Fluxo no TCP: Um Exemplo


(cont.)

Controle de Fluxo no TCP: Fast Sender, Slow Receiver

O Flag PUSH
uma notificao enviada pelo TCP transmissor para o TCP receptor para que este passe imediatamente todos os dados que tiver no seu buffer para o processo receptor. Na especificao original do TCP, era assumido que a interface de programao permitiria ao processo transmissor dizer ao TCP quando setar o bit de PUSH. Permitir que a aplicao cliente diga ao TCP transmissor que ligue seu flag PUSH significa:
Uma notificao de que o processo cliente no quer que o seu TCP fique esperando pela chegada de dados adicionais da aplicao no seu buffer para ento enviar segmentos para o lado remoto (servidor). Uma notificao ao TCP remoto (lado servidor) para que, se ele receber um segmento com o PUSH flag ligado, passar imediatamente os dados existentes no seu buffer para o processo servidor e no ficar esperando que mais dados cheguem ao seu buffer ento para isso acontecer.

Atualmente, a maioria das APIs no fornece uma maneira da aplicao dizer ao TCP quando setar o flag PUSH. assumido que uma boa implementao do TCP sabe determinar quando setar este bit por si mesma.

O Mecanismo Slow Start

O Protocolo UDP [RFC 768]


Ao contrrio do TCP, o UDP prov um servio de transao simples, com um mnimo de overhead. Oferece um servio de entrega best-effort:
Segmentos de dados podem ser perdidos Segmentos de dados podem ser entregues fora de ordem

um protocolo no orientado a conexo (connectionless):


No existe nenhum handshaking entre origem e destino. Cada segmento UDP completamente independente dos outros.

No existe o envio ou recebimento acknowledgments, mecanismo usado quando se deseja garantir a confiabilidade do servio.

Caractersticas
rpido
No existe estabelecimento de conexo (que uma fonte de delay). No mantm o estado da conexo na origem e no destino. Apresenta um pequeno cabealho. No implementa nenhum mecanismo de controle de congestionamento, de fluxo ou de erros. Permite adio de confiabilidade com a introduo de mecanismos de recuperao de erros especficos da aplicao (o que pode ser visto como uma vantagem).

simples

Transferncia confivel sobre o UDP

Caractersticas Adicionais ao IP
Possui a habilidade de demultiplexar dados para um processo de aplicao baseado no nmero da porta destino.
Permite que os datagramas sejam direcionados para a aplicao apropriada na camada superior.

Apresenta um checksum que permite detectar erros que porventura ocorram quando dados so transmitidos de uma fonte a um destino.

Aplicaes UDP
O UDP ideal para aplicaes de monitoramento, gerncia, debugging e testes. tambm adequado para aplicaes de broadcast e multicast. freqentemente usado em aplicaes multimdia, que so tolerante a erros e sensveis taxa de transmisso. Principais usurios:
NFS - sistema de arquivos SNMP - gerncia de redes TFTP - transferncia de arquivos DNS - servio de nomes

Nmeros de Portas UDP


Portas de 0 a 1023 so reservadas para servios padro (well-known ports). Portas acima de 1023 so alocadas para as aplicaes de rede dos clientes. O uso de well-known-ports permite ao cliente identificar servios gerais que ele quer acessar. Os nmeros das portas UDP e TCP so independentes.
DNS: 53, FTP: 21, Telnet: 23, HTTP: 80 Os nmeros dos well-known-ports so atribudos pelo IANA.

Select UDP Port Numbers

Nmeros de Portas UDP (cont.)

Decimal 5 7 9 11 13 15 17 19 37 39 42 43 53 67 68 69 79 111 123 161

Description Remote Job Entry Echo Discard Active Users Daytime Who is up or NETSTAT Quote of the Day Character Generator Time Resource Location Protocol Host Name Server Who Is Domain Name Server Bootstrap Protocol Server Bootstrap Protocol Client Trivial Filter Transfer Finger Sun Microsystems' RPC Network Time Protocol SNMP Message

Formato do Cabealho UDP

Formato do Cabealho
Source Port
Identifica a porta associada ao processo remetente.

Destination Port
Identifica a porta do processo destino. Campo que permite demultiplexar segmentos entre os processos de aplicao da mquina destino.

Length
Indica o tamanho (nmero de bytes) da mensagem UDP, incluindo o cabealho.

Checksum
Cobre cabealho e dados, sendo opcional (no TCP mandatrio).

Observaes
O IP s faz o checksum do cabealho. Logo, o checksum do UDP pode ser a nica forma de garantir a integridade dos dados. Para evitar problemas com um possvel valor de checksum igual a zero, o UDP checksum usa o complemento de um. Nesse caso, existem dois valores para zero (todos os bits zero e todos os bits 1). O valor com todos os bits 1 usado se o checksum for realmente Zero.