capítulo 23 comunicação entre processos

80
23.1 Capítulo 23 Comunicação entre Processos: UDP e TCP Prof. Rodrigo Ronner [email protected] rodrigoronner.blogspot.com Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.

Upload: faculdade-mater-christi

Post on 18-Dec-2014

813 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Capítulo 23   comunicação entre processos

23.1

Capítulo 23

Comunicação entre

Processos:

UDP e TCP

Prof. Rodrigo Ronner [email protected]

rodrigoronner.blogspot.com

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.

Page 2: Capítulo 23   comunicação entre processos

23.2

23-1 Comunicação entre Processos

A camada de transporte é responsável pelo processo a processo de

entrega a entrega de um pacote, que faz parte de uma mensagem, de

um processo para outro. Dois processos se comunicam em uma

relação cliente / servidor, como veremos :

Paradigma Cliente/Servidor

Multiplexação e Demultiplexação

Serviços sem conexão Versus Orientando a Conexão

Confiável Versus Não-confiável

Três Protocolos

Topicos Discutidos:

Page 3: Capítulo 23   comunicação entre processos

23.3

A camada de transporte é responsável

pela comunicação entre processos.

Note

Page 4: Capítulo 23   comunicação entre processos

23.4

Figure 23.1 Tipos de comunicação de dados

Page 5: Capítulo 23   comunicação entre processos

23.5

23-1 Paradigma Cliente/Servidor

• Embora existam várias maneiras de se realizar a comunicação entre processos, a mais comum

delas é por meio do paradigma cliente/servidor.

• Um processo no host local, denominado cliente, solicita serviços a outro processo, normalmente

localizado no host remoto, denominado servidor.

• Ambos os processos (cliente e servidor) têm o mesmo nome. Por exemplo, para obtermos o dia e

horário de uma máquina remota, precisamos de um processo cliente denominado Daytime, em

execução no host local e um processo servidor Daytame, em execução em uma máquina remota.

• Os sistemas operacionais atuais oferecem suporte tanto a ambientes multiusuários como

multiprogramação.

• Um computador remoto pode executar vários programas servidor simultaneamente, da mesma

forma que computadores locais podem executar um ou mais programas clientes.

1 – Host Local

2 – Processo Local

3 – Host remoto

4 – Processo remoto

Page 6: Capítulo 23   comunicação entre processos

23.6

23-1 Endereçamento

• Toda vez que precisamos transmitir algo para um destino específico entre vários existentes,

necessitaremos de um endereço.

• Na camada de enlace de dados, utilizaremos o endereço MAC para escolher um nó entre vários

nós.

• Na camada de Rede, utilizaremos o endereço IP para escolher um host entre milhões. Um

datagrama na camadada de Rede precisa de um endereço IP de destino para sua entrega e de

um endereço IP de origem para a resposta do destino

• Na camada de transporte, utilizaremos o endereço de camada de transporte, denominado

número de porta , para escolher entre vários processos que estão em execução no host de

destino. O número da porta de destino é necessário para entregar; o número de porta de origem

é necessário para resposta.

• Um computador remoto pode executar vários programas servidor simultaneamente, da mesma

forma que computadores locais podem executar um ou mais programas clientes.

1 – Host Local

2 – Processo Local

3 – Host remoto

4 – Processo remoto

Page 7: Capítulo 23   comunicação entre processos

23.7

Figure 23.2 Port numbers

Page 8: Capítulo 23   comunicação entre processos

23.8

Figure 23.3 Endereço IP versus números de portas

Page 9: Capítulo 23   comunicação entre processos

23.9

Figure 23.4 IANA Faixa

Page 10: Capítulo 23   comunicação entre processos

23.10

23-5 Endereços Socket

• Para se estabelecer uma conexão virtual que permita a comunicação entre processos finais,

necessitamos de dois identificadores, o endereços IP e o número da porta.

• A combinação entre um endereço IP e um número de porta é conhecida como endereço socket.

• O endereço socket no cliente define o processo cliente de forma exclusiva, da mesma forma que

o endereço socket no servidor estabelece o processo servidor de modo exclusivo(ver a figura

23.5)

• Os protocolos da camada de transporte precisa de um par de endereços socket: o endereço

socket no cliente e o endereço socket no servidor.

• Essas informações fazem parte do cabeçalho IP e do cabeçalho do protocolo de camada de

transporte.

• O cabeçalho IP contém os endereços IP; o cabeçalho UDP ou TCP contém os números das

portas.

Page 11: Capítulo 23   comunicação entre processos

23.11

23-1 Multiplexação e Demultiplexação

• Multiplexação

No lado do emissor, podem existir vários processos que precisem transmitir

pacotes. Entretanto, há somente um protocolo de camada de transporte em

execução em dado instante.

Trata-se de uma relação um vários-para-um e que requer a multiplexação.

• Demultiplexação

No lado receptor, a relação é de um-para-vários e requer demultiplexação. A

camada de transporte recebe os datagramas da camada de rede. Após verificação

de erros e a eliminação do cabeçalho, a camada de transporte entrega cada

mensagem para o processo usuário apropriado baseado no número de portas.

Page 12: Capítulo 23   comunicação entre processos

23.12

Figure 23.6 Multiplexação e Demultiplexação

Page 13: Capítulo 23   comunicação entre processos

23.13

Figure 23.7 Error control

Page 14: Capítulo 23   comunicação entre processos

23.14

Figure 23.8 Position of UDP, TCP, and SCTP in TCP/IP suite

Page 15: Capítulo 23   comunicação entre processos

23.15

23-2 USER DATAGRAM PROTOCOL (UDP)

O User Datagram Protocol (UDP) é chamada de sem conexão,

protocolo de transporte não confiável. Ele não adiciona nenhum

controle adicional aos serviços de entrega IP, exceto pelo fato de

implementar a comunicação entre processos, em vez da comunicação

entre hosts. Da mesma forma, a verificação de erros é implementada

de forma muito limitada.

Portas conhecidas no UDP

Datagramas de Usuários

Checksum

Operação do UDP

Uso do UDP

Topicos Discutidos:

:

Page 16: Capítulo 23   comunicação entre processos

23.16

Table 23.1 Well-known ports used with UDP

Page 17: Capítulo 23   comunicação entre processos

23.17

• Em UNIX, as portas conhecidas são armazenados em um arquivo

chamado / etc / services. • Cada linha neste arquivo dá o nome do servidor e o número de porta

conhecido.

• Podemos usar o grep utilitário para extrair a linha correspondente à

aplicação desejada. • O seguinte mostra a porta para o FTP. Note-se que FTP pode usar a

porta 21 com UDP ou TCP.

Example 23.1

Page 18: Capítulo 23   comunicação entre processos

23.18

Example 23.1 (continued)

SNMP usa dois números de porta (161 e 162), cada um para uma finalidade

diferente,

Page 19: Capítulo 23   comunicação entre processos

23.19

23-2 Datagramas de Usuário

Os pacotes UDP, denominados datagramas de usuário, possuem um cabeçalho de tamanho fixo 8

bytes.

Portas origem: Esse campo especifica o número da porta usada pelo processo em execução no host

de origem.

Ele tem 16 bits de comprimento, significando que o número da porta pode variar de 0 a 65535.

Portas destino: Esse campo especifica o número da porta usado pelo processo em execução no host

de destino. Ele também tem 16 bits de comprimento.

• Se o host de destino for um servidor (um cliente transmitindo uma solicitação), o número da

porta, na maioria dos casos, é um número de porta conhecido.

• Se o host de destino for um cliente (um servidor transmitindo sua resposta), o número da

porta, na maioria das vezes, é um número de porta efêmero.

Comprimento: Esse campo de 16 bits define o comprimento total de um datagrama UDP,

compreendendo cabeçalho mais dados. Os 16 bits podem definir um comprimento total entre 0 a 65535

bytes. Entretanto, o comprimento total deve ser menos, pois um datagrama UDP deve ser repassado

em um datagrama IP de comprimento total igual a 65535 bytes.

Checksum: Esse campo de 16 bits é usado para detectar erros na transmissão de datagrama UDP

(Cabeçalho mais dados).

Page 20: Capítulo 23   comunicação entre processos

23.20

Figure 23.9 Formato de um datagrama UDP

Page 21: Capítulo 23   comunicação entre processos

23.21

Comprimento de um datagrama UDP=

Comprimento total IP – Comprimento do

cabeçalho IP

Note

Page 22: Capítulo 23   comunicação entre processos

Serviços sem conexão: Isso significa que cada datagrama de usuário enviado pelo UDP é um datagrama independente. Não existe nenhuma relação entre os diferentes datagramas de usuário, mesmo se eles forem provenientes do mesmo processo de origem e tiverem o mesmo programa de destino.

• Os datagramas não são enumerados;

• Não existe mecanismo para estabelecer e/ou terminar uma conexão virtual, ao contrário do que acontece com o TCP.

23.22

Operação do UDP

Page 23: Capítulo 23   comunicação entre processos

Controle de Fluxo e de erros: UDP é um protocolo de transporte muitos simples e não confiável. Não implementa controle de fluxo e, portanto, nenhum mecanismo de janelamento. O Receptor pode ser inundado com um número excessivo de mensagens que chegam a ele.

• Não implementa controle de erros exceto checksum, Isso significa que o emissor não sabe se uma mensagem foi perdida ou duplicada.

• Quando receptor detecta um erro por meio do cheksum, o datagrama de usuário é descartado de maneira imperceptível.

• A ausência de controle de fluxo e de controle de erros significa que um processo de aplicação usando UDP deve implementar esses mecanismos.

23.23

Operação do UDP

Page 24: Capítulo 23   comunicação entre processos

Encapsulamento e Desencapsulamento: Para transmitir uma mensagem de um processo a outro, o protocolo UDP encapsula e desencapsula mensagens em um datagrama IP.

Formação de Filas: Quando um processo no lado cliente é iniciado, este solicita para o sistema operacional um número de porta. Algumas implementações criam tanto uma fila de chegada como uma de saída associada a cada processo, outras criam apenas uma fila de chegada associada a cada processo.

• Mesmo que um processo quiser se comunicar com vários processos, ele obterá apenas um número de porta e, finalmente, uma fila de chegada e outra de saída.

• As filas abertas pelo cliente são, na maioria dos casos, identificadas pelos números de porta efêmeros.

• As filas funcionam enquanto o processo está em execução. Quando processo termina, as filas são desalocadas da memória.

23.24

Operação do UDP

Page 25: Capítulo 23   comunicação entre processos

23.25

Figure 23.12 Queues in UDP

Page 26: Capítulo 23   comunicação entre processos

O UDP é adequado para um processo que requeira comunicação solicitação-resposta simples com pouca preocupação com controle de erros e de fluxo.

O UDP é adequadp para um processo que implemente mecanismos internos de controle de fluxo e de erros. Por exemplo TFTP (Trivial File Transfer Protocol) implementa mecanismos internos de controle de fluxo e de erros. Ele pode usar o UDP de maneira fácil.

O UDP é muito utilizado no gerenciamento de redes, protocolo SNMP.

O UDP é usado em alguns protocolos de roteamento para atualização de rotas como o RIP.

23.26

Uso do UDP

Page 27: Capítulo 23   comunicação entre processos

23.27

23-3 TCP

O TCP é um protocolo orientado a conexão, ele cria

uma conexão virtual entre dois TCPs para enviar

dados. Além disso, o TCP utiliza o fluxo e mecanismos

de controle de erros no nível de transporte.

Serviços TCP

Características TCP

Segmentos

Conexão TCP

Controle de Fluxo

Controle de Erro

Topicos Discutidos:

Page 28: Capítulo 23   comunicação entre processos

23.28

Tabela 23.2 Portas conhecidas TCP

Page 29: Capítulo 23   comunicação entre processos

O TCP, diferente do UDP, é um protocolo orientado a fluxo de dados.

No UDP, um processo envia mensagens, com delimitadores predefinidos, para o UDP, para serem transmitidas.

O UDP acrescenta seu próprio cabeçalho a cada uma dessas mensagens e as entregas para transmissão pelo IP.

Cada mensagem do processo é denominado datagrama de usuário e se torna, finalmente, um datagrama IP.

Nem o IP nem o UDP estabelecem relação entre os datagramas.

23.29

Serviço de Entrega de Fluxo de dados

Page 30: Capítulo 23   comunicação entre processos

23.30

Figure 23.13 Entrega de Fluxo de Dados

• O TCP possibilita a um processo enviar dados Na forma de um fluxo de bytes.

• O TCP cria um ambiente no qual os dois processos Parecem estar conectados

por um “canal” imaginário Que transporta dados pela internet.

Page 31: Capítulo 23   comunicação entre processos

Como existe a possibilidade dos processos de transmissão e de recepção não gerarem ou lerem dados em uma mesma velocidade, o TCP precisa de Buffers para seu armazenamento;

Existem dois buffers, um buffer de transmissão e um buffer de recepção, um em cada direção;

Uma forma de implementar um buffer é usar uma matriz circular de posições.

23.31

Buffers de transmissão e Recepção

Page 32: Capítulo 23   comunicação entre processos

EMISSOR:

No lado emissor, o buffer possui três tipos de câmaras.

A parte branca na figura 23.14 contém câmaras vazias que podem ser preenchidas pelo processo transmissor.

A área cinza armazena bytes que foram enviados, mas ainda não confirmados pelo receptor.

O TCP mantém esses buffers até o receber uma confirmação.

A área colorida contém bytes a serem enviados pelo transmissor TCP.

RECEPTOR:

A operação no buffer no lado do receptor é mais simples.

O buffer circular é dividido em duas áreas (segmentos brancos e coloridos).

O segmento branco possui câmaras vazias a serem preenchidas por bytes recebidos da rede.

As seções coloridas contém bytes recebidos que podem ser lido pelo processo receptor.

Quando um byte é lido pelo processo receptor, a câmara é limpa e acrescentado ao pool de câmaras vazias.

23.32

Buffers de transmissão e Recepção

Page 33: Capítulo 23   comunicação entre processos

23.33

Figura 23.14 Buffers de transmissão e recepção

Page 34: Capítulo 23   comunicação entre processos

Embora o sistema de buffers trate da disparidade entre as velocidades dos processos de geração e leitura de dados, precisamos de mais um passo antes de podermos efetivamente transmitir dados.

A camada IP, como provedora de serviço para o TCP, precisa enviar dados em pacotes, não na forma de um fluxo de bytes.

Na camada de transporte, o TCP agrupa determinado número de bytes em pacotes, denominados segmentos.

O TCP acrescenta um cabeçalho a cada segmento (para fins de controle) e entrega o segmento para a camada IP para sua transmissão.

Os segmentos são encapsulados em datagramas IP e transmitidos.

23.34

Segmentos

Page 35: Capítulo 23   comunicação entre processos

23.35

Figura 23.15 Segmento TCP

Page 36: Capítulo 23   comunicação entre processos

O TCP oferece serviços full duplex no qual dados podem fluir em ambos as direções simultaneamente;

Cada processo TCP implementa um buffer de transmissão e um de recepção e os segmentos trafegam e ambas as direções.

23.36

Comunicação Full-Duplex

Page 37: Capítulo 23   comunicação entre processos

O TCP, diferente do UDP, é um protocolo orientado a conexão. Quando um processo no ponto A quer enviar e receber dados de outro processo no ponto B, ocorre o seguinte:

Os dois processos TCPs estabelecem uma conexão entre eles;

Os dados são trocados em ambos os sentidos;

A conexão é encerrada.

Observe que esta é uma conexão virtual, e não uma conexão física;

Um segmento TCP é encapsulado em um datagrama IP e pode ser recebido fora de ordem, perdido ou corrompido e, em seguida, precisa ser reenviado;

Cada um deles pode ser transmitido por um caminho diferente até atingir o destino;

Não existe conexão física;

O TCP cria um ambiente orientado a fluxo de dados no qual ele assume a responsabilidade de entregar na ordem correta os bytes para outro ponto.

23.37

Serviços Orientados a conexão

Page 38: Capítulo 23   comunicação entre processos

Sistema de numeração:

Embora o software TCP mantenha controle sobre os segmentos que estão sendo transmitidos ou recebidos, não há nenhum campo especifico para indicar o número de um segmento no cabeçalho.

Em vez disso, existem dois campos genéricos denominados de número de sequência e número de confirmação.

Esses dois campos de referem ao número de bytes e não o número do segmento.

Número de Bytes:

Este se refere à quantidade de bytes de dados TCP que são transmitidos em uma conexão.

A numeração é independente para cada sentido de transmissão.

Quando o TCP recebe bytes de dados de um processo, ele os armazena no buffer de transmissão e os numera.

A numeração não é iniciada necessariamente, a partir de 0. Em vez disso, o TCP gera um número randômico entre 0 e 2^32 – 1 como número inicial para primeiro byte.

Por exemplo, se por acaso o número randômico for 1.057 e o total de dados a serem transmitidos for 6.000 bytes, os bytes são numerados de 1.057 a 7.056.

23.38

Recursos do TCP

Page 39: Capítulo 23   comunicação entre processos

Número de sequência:

Após os bytes terem sido numerados, o TCP atribui um número de sequência para cada segmento que está sendo transmitido.

O número de sequência para cada segmento é identificado pelo número do primeiro byte transportado no segmento.

Exemplo 23.3

Suponha que uma conexão TCP esteja transferindo um arquivo de 5.000 bytes. O primeiro deles recebe a numeração 10.001. Quais são os números de sequência para cada segmento se os dados foram enviados em cinco segmento, cada um deles transportando 1.000 bytes?

23.39

Recursos do TCP

Page 40: Capítulo 23   comunicação entre processos

23.40

A seguir, são apresentados os números de sequência de

cada segmento:

Example 23.3

Page 41: Capítulo 23   comunicação entre processos

Número de Confirmação:

Cada parte enumera os bytes, normalmente, com um número de byte inicial diferente.

O número de sequência em cada direção identifica o número do primeiro byte transportado pelo segmento.

Cada parte também usa um número de confirmação para confirmar os bytes que recebeu.

Entretanto, o número de confirmação identifica o número do próximo byte que a parte espera receber.

Além disso, o número de confirmação é cumulativo, significa que a parte pega o número do último byte recebido, são e salvo, incrementa 1 a ele e anuncia essa soma como número de confirmação.

O termo cumulativo, nesse caso, significa que, se uma parte usa 5.643 como número de confirmação, ela recebeu todos os bytes do inicio até 5.642. Note que isso não significa que a parte tenha recebido 5.642 bytes, porque o número do primeiro byte nem sempre começa em 0.

23.41

Recursos do TCP

Page 42: Capítulo 23   comunicação entre processos

Controle de Fluxo:

O TCP, diferente do UDP, implementa controle de fluxo. O receptor pode controlar a quantidade de dados que é enviada pelo emissor.

Isso é feito para evitar que o receptor fique sobrecarregado com uma quantidade excessiva de dados.

O sistema de controle de sequência possibilita que o TCP use um controle de fluxo orientado a bytes.

Controle de Erros:

Para fornecer um serviço de transporte confiável, o TCP implementa controle de erros.

Embora controle de erros considere o segmento como a unidade de dados para fins de detecção de erros (segmento corrompido ou perdido), o controle de erros é orientado a bytes.

Controle de Congestionamento:

O TCP, diferente do UDP, leva em conta o nível de congestionamento da rede.

A quantidade de dados que podem ser transmitidos por um emissor não é controlada apenas pelo receptor (controle de fluxo), mas também pelo nível de congestionamento na rede.

23.42

Recursos do TCP

Page 43: Capítulo 23   comunicação entre processos

23.43

Figure 23.16 O Formato de um segmento TCP

Page 44: Capítulo 23   comunicação entre processos

Endereço de porta de Origem/Destino :

Trata-se um campo de 16 bits que identifica o número da porta do programa de aplicação tanto no host emissor como no host receptor.

Número de sequência:

Identifica a posição deste segmento no fluxo de dados e cada conexão possui um fluxo de dados particular

Número de confirmação:

Utilizado para confirmar o recebimento de segmentos enviados anteriormente e especifica o próximo segmento aguardado

Comprimento do cabeçalho:

Esse campo de 4 bits identifica a quantidade de palavras de 4 bytes de um cabeçalho.

O comprimento do cabeçalho tem entre 20 e 60 bytes. Consequentemente, o valor desse campo pode ser entre 5 (5x4=20) e 15 (15x4=60).

Reservado:

Trata-se de um campo de 6 bits reservado para uso futuro.

Controle:

Esse campo define 6 bits de controle (flags) distintos.

23.44

Cabeçalho TCP

Page 45: Capítulo 23   comunicação entre processos

23.45

Figure 23.17 Control field

Page 46: Capítulo 23   comunicação entre processos

23.46

Table 23.3 Description of flags in the control field

Page 47: Capítulo 23   comunicação entre processos

Tamanho da Janela:

Esse campo define o tamanho de uma janela TCP, em bytes, que a outra parte deve manter, observe que o comprimento desse campo é de 16 bits, significando que o tamanho máximo de uma é de 65.535 bytes.

Normalmente, esse valor é conhecido como janela receptora (rwnd) e é determinado pelo receptor.

Nesse caso, o emissor deve obedecer àquilo que está configurado pelo receptor.

Checksum:

Verificação de erros

Urgent Point:

É válido apenas se a flag URG (Urgente) estiver ativo, é usado quando um segmento contém dados urgentes.

Opções:

Esse campo pode conter um total de até 40 bytes de informações opcionais que serão inclusas ao cabeçalho TCP. ( Não trataremos dessas opções aqui; consulte a lista de referência para mais informações).

23.47

Cabeçalho TCP

Page 48: Capítulo 23   comunicação entre processos

Estabelecimento da conexão:

O TCP transmite dados no modo full-duplex.

Quando dois processos TCPs em duas máquinas estão conectados, eles estão aptos a transmitir segmentos entre si, simultaneamente.

Isso implica que cada parte deve inicializar a comunicação e obter a aprovação da outra parte antes que quaisquer dados possam ser transferidos.

23.48

Conexão TCP

Page 49: Capítulo 23   comunicação entre processos

Handshaking de três vias:

O estabelecimento de uma conexão no TCP é denominado handshaking de três vias (three-way handshaking).

O processo começa com o servidor. O programa servidor informa ao TCP que está pronto para aceitar uma conexão.

Isso é chamado de uma abertura passiva.

Embora o servidor TCP esteja pronto para aceitar conexão de qualquer máquina do mundo, ele não é capaz de estabelecer, por si só, uma conexão.

23.49

Conexão TCP

Page 50: Capítulo 23   comunicação entre processos

23.50

Figure 23.18 Connection establishment using three-way handshaking

Page 51: Capítulo 23   comunicação entre processos

23.51

Exemplo Prático usando Wireshake (SYN)

Page 52: Capítulo 23   comunicação entre processos

23.52

Exemplo Prático usando Wireshake (SYN+ACK)

Page 53: Capítulo 23   comunicação entre processos

23.53

Exemplo Prático usando Wireshake (ACK)

Page 54: Capítulo 23   comunicação entre processos

23.54

Exemplo Prático usando Wireshake (FIN)

Page 55: Capítulo 23   comunicação entre processos

Transferência de Dados:

A figura 23.19 mostra um exemplo. Neste exemplo, após a conexão ser estabelecida (não mostrado na figura), o cliente transmite 2.000 bytes de dados em dois segmentos.

O servidor transmite então 2.000 bytes em um único segmento.

O cliente transmite mais um segmento.

Os três primeiros segmentos transportam dados, bem como confirmações, porém o último segmento de dados pelo cliente tem flag PSH (push) ativo, de modo que o servidor TCP saiba que deve entregar dados para processo servidor imediatamente, assim que eles forem recebidos.

23.55

Conexão TCP

Page 56: Capítulo 23   comunicação entre processos

23.56

Figure 23.19 Data transfer

Page 57: Capítulo 23   comunicação entre processos

Encerramento de uma conexão:

Qualquer umas das partes envolvidas na troca de dados (cliente ou servidor) pode encerrar uma conexão, embora esta tenha sido, normalmente, iniciada pelo cliente.

Atualmente, a maioria das implementações permite duas opções para encerramento de uma conexão: o three-way handshaking (handshaking de três vias) e o four-wat handshakig (handshaking de quatro vias) com opção de semi-encerramento.

Three-way Handshaking:

1 – Em uma situação normal, um cliente TCP, após receber um comando de encerramento do processo cliente, envia o primeiro segmento, um segmento FIN no qual a flag FIN está ativo. Como trata-se de apenas um segmento de controle, ele consumirá somente um número de sequência.

23.57

Conexão TCP

Page 58: Capítulo 23   comunicação entre processos

Three-way Handshaking:

2 – O servidor TCP, após receber um segmento FIN, informa a seu processo TCP sobre essa situação e transmite o segundo segmento, um segmento FIN+ACK, para confirmar o recebimento do segmento FIN do cliente e, ao mesmo tempo, para anunciar o encerramento da conexão na outra direção.

Esse segmento também pode conter o último bloco de dados do servidor. Se não estiver transportando dados, ele consumirá apenas um número de sequência.

3 – O cliente TCP transmite o último segmento, um segmento ACK, para confirmar o recebimento do segmento FIN do servidor TCP.

Esse segmento contém o número de confirmação, que é 1 mais o número de sequência recebido no segmento FIN do servidor.

Esse segmento pode transportar dados e não consome nenhum número de sequência.

23.58

Conexão TCP

Page 59: Capítulo 23   comunicação entre processos

23.59

Figure 23.20 Connection termination using three-way handshaking

Page 60: Capítulo 23   comunicação entre processos

Semi-encerramento:

No TCP, um lado pode interromper a transmissão de dados enquanto ainda recebe dados, Isso é denominado semi-encerramento.

Embora ambos os lados possam transmitir um semi-encerramento, normalmente ele é iniciado pelo cliente.

Ele pode ocorrer quando o servidor precisa de todos os dados antes de poder iniciar o processamento.

Um bom exemplo é a ordenação. Quando um cliente transmite dados para um servidor para serem ordenados, o servidor precisa receber todos os dados antes de iniciar o processo de ordenação dos mesmos.

23.60

Conexão TCP

Page 61: Capítulo 23   comunicação entre processos

23.61

Figure 23.21 Half-close

Page 62: Capítulo 23   comunicação entre processos

Janela Deslizante:

O TCP utiliza a técnica de janela deslizante (slidding Window), para implementar controle de fluxo.

A figura 23.22 mostra um bom exemplo de janela deslizante no TCP.

A Janela abrange parte do buffer, que contém os bytes recebidos do processo.

Os bytes dentro da janela são bytes que podem estar em trânsito; ele podem ser enviados sem se preocupar coma confirmação.

A janela imaginária possui duas paredes: uma à direita e outra à esquerda.

Uma janela pode ser aberta, fechada ou reduzida. Essas três atividades, como veremos, estão sob controle do receptor, não do emissor.

O emissor tem de obdecer às ordens de receptor.

23.62

Controle de Fluxo (Pág 728)

Page 63: Capítulo 23   comunicação entre processos

Janela Deslizante:

Abrir uma janela significa deslocar a parede direita mais para a direita.

Isso permite um número maior de bytes novos no buffer, candidatos a serem transmitidos.

Fechar uma janela significa deslocar a parede da esquerda mais para a direita.

Isso significa que alguns bytes foram confirmados e o emissor não precisa mais se preocupar com eles.

Reduzir a janela significa deslocar para esquerda a janela da direita, isso é veementemente desencorajado e não permitido em algumas implementações, pois significa renunciar à elegibilidade de alguns bytes para transmissão.

Este é um problema, caso o emissor já tenha enviado esses bytes.

23.63

Controle de Fluxo (Pág 728)

Page 64: Capítulo 23   comunicação entre processos

Em (a) é mostrada a representação da perspectiva do transmissor. O retângulo sombreado diz respeito aos quadros a serem enviados;

Cada vez que um quadro é enviado, o retângulo sombreado diminui da esquerda para a direita;

Quando ocorre o reconhecimento (ACK) de um quadro recebido pelo receptor, o retângulo aumenta da esquerda para a direita;

Os quadros antes da barra vertical são os quadros enviados e confirmados, não necessitando de armazenamento em buffer;

O quadro de índice 3, após a barra vertical, indica o quadro transmitido, mas ainda não confirmado e que precisa estar em buffer caso precise ser reenviado.

Em (b) é mostrada a perspectiva do receptor;

O retângulo sombreado representa os quadros a serem recebidos;

À medida que os quadros são reconhecidos (ACK), o retângulo diminui da esquerda para a direita;

À medida que os quadros são recebidos, o retângulo aumenta da esquerda para a direita.

23.65

Outro Exemplo com Janela Deslizante

Page 65: Capítulo 23   comunicação entre processos

23.66

Outro Exemplo com Janela Deslizante

Page 66: Capítulo 23   comunicação entre processos

23.67

Uma janela deslizante é usada para

implementar maior eficiência à

transmissão, bem como controle de fluxo

de dados, de modo que o destino não fique

sobrecarregado com dados. As janelas

deslizantes no TCP são orientadas a bytes.

Note

Page 67: Capítulo 23   comunicação entre processos

23.68

Qual é o valor da janela do receptor (rwnd) para o host A

se o receptor, host B, tem um tamanho do buffer de 5000

bytes e 1000 bytes de dados recebidos e não processados?

Example 23.4

Solução

O valor da rwnd = 5000 - 1000 = 4000. Host B pode

receber apenas 4000 bytes de dados antes de transbordar

seu buffer. Host B anuncia este valor em seu segmento ao

lado A.

Page 68: Capítulo 23   comunicação entre processos

23.69

Qual é o tamanho da janela para o host A se o valor de

rwnd é 3000 bytes e o valor do cwnd é de 3500 bytes?

Example 23.5

Solução

O tamanho da janela é o menor dos rwnd e cwnd, que é

de 3000 bytes.

Page 69: Capítulo 23   comunicação entre processos

23.70

Figura 23,23 mostra um exemplo não real de uma janela

deslizante. O remetente enviou bytes até 202. Assumimos

que cwnd é de 20 bytes (na realidade este valor é milhares

de bytes). O receptor enviou o número de confirmação de

200 com uma rwnd de 9 bytes (na realidade este valor é

milhares de bytes). O tamanho da janela do remetente é o

mínimo de rwnd e cwnd, ou 9 bytes. Bytes 200-202 são

enviadas, mas não reconhecido. Bytes 203-208 pode ser

enviado sem se preocupar com reconhecimento. Bytes 209

e acima não podem ser enviados.

Example 23.6

Page 70: Capítulo 23   comunicação entre processos

23.71

Figure 23.23 Example 23.6

Page 71: Capítulo 23   comunicação entre processos

23.72

Alguns Pontos Sobre TCP Janela deslizante: ❏ O tamanho da janela é o valor mínimo entre rwnd e

cwnd.

❏ A origem não deve enviar uma janela de dados

completa.

❏ A janela pode ser aberta ou fechada pelo receptor,

porém, não pode ser reduzida.

❏ O destino pode enviar uma confirmação a qualquer

instante desde que não resulte na redução de uma

janela.

❏ O receptor pode fechar temporariamente uma

janela; O emissor, entretando, sempre pode transmitir

um segmento de 1 byte após a janela ter sido fechada.

Note

Page 72: Capítulo 23   comunicação entre processos

O TCP é um protocolo de transporte confiável. Isso significa que um programa de aplicação, que entrega o fluxo de dados para o TCP, depende do TCP para entregar em ordem o fluxo inteiro para programa de aplicação na outra ponta, sem erros, e sem qualquer informação perdida ou duplicada.

Checksum

Cada segmento inclui um campo de checksum que é usado para validar a existência de um segmento corrompido;

Se o segmento estiver corrompido, ele será descartado pelo TCP de destino e considerado com perdido;

O TCP usa o campo de checksum de 16 bits, que é obrigatória em todos os segmentos.

23.73

Controle de Erros (Pág 731)

Page 73: Capítulo 23   comunicação entre processos

Confirmação

O TCP usa confirmação para validar o recebimento do segmento de dados;

Um segmento de controle que não transporta dados, mas que usa número de sequência, também deve ser confirmado;

Um segmento ACK jamais necessita de confirmação.

Retransmissão

O cerne do controle de erros é a retransmissão de segmentos;

Quando um segmento estiver corrompido, perdido ou com atraso, ele é retransmitido;

Em implementações modernas, um segmento é retransmitido em duas ocasiões: Quando o tempo do timer de retransmissão se esgota ou quando o emissor recebe três ACKs duplicados.

23.74

Controle de Erros

Page 74: Capítulo 23   comunicação entre processos

Retransmissão após RTO (Retransmission time-out)

As implementações recentes do TCP mantém um time RTO para todos os segmentos pendentes (transmitidos, mas não confirmados);

Quando vence o time-out, o primeiro segmento pendente é retransmitido, muito embora a falta de um ACK recebido possa ser enviado a um segmento com atraso, um ACK com atraso ou uma confirmação perdida;

Não existe um timer ativo para segmento que transporta apenas confirmação, significando que nenhum segmento desse tipo poderá ser reenviado;

O valor de RTO é dinâmico no TCP e é atualizado tomando-se como base RTT (Round-Trip Time, em inglês, tempo de ida e volta) do segmento;

O RTT é o tempo necessário para um segmento atingir o destino e uma confirmação ser recebida.

23.75

Controle de Erros

Page 75: Capítulo 23   comunicação entre processos

Retransmissão Após Três Segmentos ACK Duplicados

A regra anterior sobre a retransmissão de um segmento é suficiente se o valor de RTO não for muito grande. Algumas vezes, porém, um segmento é perdido e o receptor recebe um número tão grande de segmentos fora de ordem a ponto deles não poderem ser salvos (o tamanho do buffer é limitado).

Para amenizar essa situação, a maioria das implementações atuais segue a regra dos três ACKs duplicados e retransmite imediatamente um segmento faltante. Esse recurso é conhecido como retransmissão rápida.

23.76

Controle de Erros

Page 76: Capítulo 23   comunicação entre processos

Segmentos Fora de Ordem

Quando segmento estiver atrasado, perdido ou tiver sido descartado, os segmentos após este, chegarão fora de ordem. Originalmente, o TCP foi desenvolvido para descartar todos os segmentos fora de ordem, resultando na retransmissão de todos os segmentos faltantes e dos segmentos seguintes.

Hoje em dia, a maioria das implementações de TCP não descarta segmentos fora de ordem. Elas os armazenam, temporariamente, em um buffer e colocam uma flag indicando como segmentos fora de ordem até a chegada dos segmentos faltantes.

O TCP garante que os dados são entregues, em ordem, para processo receptor.

23.77

Controle de Erros

Page 77: Capítulo 23   comunicação entre processos

23.78

Figure 23.24 Operação Normal

Page 78: Capítulo 23   comunicação entre processos

23.79

Figure 23.25 Segmento Perdido

Page 79: Capítulo 23   comunicação entre processos

23.80

O receptor TCP entrega apenas dados

ordenados para o processo.

Note

Page 80: Capítulo 23   comunicação entre processos

23.81

Figure 23.26 Retransmissão Rápida