Protocolo TCP: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Linha 53: Linha 53:


====Estabelecimento de conexão TCP====
====Estabelecimento de conexão TCP====
Na fase de estabelecimento de conexão, são inicializadas as variáveis do protocolo TCP, como os números de sequência inicial e o tamanho de ''buffers''. O processo cliente é o que inicia o estabelecimento da conexão, sendo o servidor contatado pelo cliente.  
Na fase de estabelecimento de conexão, são inicializadas as variáveis do protocolo TCP, como os '''números de sequência''' inicial e o tamanho de ''buffers''. O processo cliente é o que inicia o estabelecimento da conexão, sendo o servidor contatado pelo cliente.  


O estabelecimento da conexão se dá em três passos, conforme mostrado na figura:
O estabelecimento da conexão se dá em '''três passos''', conforme mostrado na figura:


[[Arquivo:AberturaConexao.png]]
[[Arquivo:AberturaConexao.png]]
#O lado cliente do TCP envia um '''segmento de sincronização''', chamado '''SYN''' (com o '''''flag'' Syn''' setado em 1), ao lado servidor do TCP, especificando um '''número de sequência''' inicial escolhido aleatóriamente (Seq=X).
#O servidor recebe o SYN, aloca ''buffers'' e inicializa variáveis, e envia uma mensagem de '''reconhecimento da conexão''', chamada '''SYNACK''' (com o '''''flags'' Syn''' e '''Ack''' setados em 1), onde reconhece o pedido de conexão e especifica seu '''número de sequência''' inicial (Seq=Y, Ack=X+1).
#Uma vez recebido o reconhecimento da conexão pelo servidor, o cliente confirma o recebimento com um segmento chamado '''ACK''' (''flag'' Syn agora em 0 e '''''flag'' Ack''' setado em 1 indicando um reconhecimento válido) e também aloca buffers e inicializa variáveis da conexão (Seq=X+1, Ack=Y+1).


<!--
<!--

Edição das 13h38min de 27 de março de 2015

Protocolo TCP

O protocolo TCP (RFC 793), como o Protocolo UDP, também oferece a multiplexação/demultiplexação de aplicações através das portas e o mecanismo de detecção de erros. A grande diferença é que o TCP é um protocolo orientado a conexão e com transferência garantida, onde os dois processos devem acordar entre eles uma abertura de conexão para que os dados possam ser transferidos. Além destas características, o TCP integra ainda um serviço de controle de fluxo, que assegura que nenhum dos lados da comunicação envie pacotes rápido demais, pois uma aplicação em um lado pode não conseguir processar a informação na velocidade que está recebendo, e um serviço de controle de congestionamento ajuda a prevenir congestionamentos na rede.

Formato do segmento TCP

O cabeçalho do segmento TCP, além dos números de porta origem e destino e Checksum, que também existem no UDP, há outros campos com informações necessárias a implementação do serviço de transferência garantida, controle de fluxo e controle de congestionamento.

   0                   1                   2                   3   
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          Source Port          |       Destination Port        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Sequence Number                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Acknowledgment Number                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Data |           |U|A|P|R|S|F|                               |
  | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
  |       |           |G|K|H|T|N|N|                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Checksum            |         Urgent Pointer        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Options                    |    Padding    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                             data                              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Os campos fundamentais do segmento TCP são os seguintes:

  • Porta origem e porta destino (Source Port e Destination Port);
  • Número de seqüência e reconhecimento, utilizado para o emissor e receptor implementarem o serviço de transferência garantida (Sequence Number e Acknowledgment Number).
  • Tamanho da janela do receptor, usado para o controle de fluxo, e indica o número de bytes que o receptor é capaz de receber (Window).
  • Seis bits de flags: o Ack é usado para indicar que o campo de reconhecimento é válido; o Rst, Syn e Fin são usados para abertura e encerramento de conexão, o Psh indica que o receptor deve passar imediatamente os dados para a camada superior e o Urg indica urgente (pouco usado).
  • Tamanho do cabeçalho (Data Offset), especifica o tamanho da cabeçalho, que pode variar em funções do campo de opções; tipicamente o cabeçalho contém as 5 primeiras linhas, totalizando 20 bytes.
  • O checksum é usado para detecção de erros.
  • O campo de opções (Options) é usado quando o emissor e receptor precisam negociar o tamanho máximo de segmento (MSS).
  • O Padding é utilizado para completar o campo opções (se necessário).

Tamanho do segmento TCP

O campo de dados da aplicação (data) do segmento TCP, contém um fragmento ou pedaço dos dados da aplicação, cujo tamanho máximo, chamado de MSS (Maximum Segment Size), não considerando o cabeçalho.

O valor do MSS é acertado entre o emissor e o receptor na abertura de conexão TCP.

Em geral o valor de MSS é escolhido para evitar a fragmentação do datagrama IP na camada inferior. Ou seja:

MSS + headers ≤ MTU

O valor MTU (Maximum Tranfer Unit) é a unidade máxima de transferência da camada enlace. Um valor típico para MTU nas redes locais Ethernet é 1500 Bytes. Considerando que tanto o TCP quanto o IP tenham cabeçalho padrão de 20 Bytes, um valor comum para MSS é 1460 Bytes.

Conexão TCP

Para trocarem segmentos de dados utilizando o TCP o emissor e o receptor devem estabelecer uma conexão TCP através da troca de pacotes de controle entre si. Isto é chamado de procedimento de estabelecimento de conexão (handshaking), onde se estabelecem os parâmetros para a comunicação. Uma vez concluído o handshaking a conexão é dita estabelecida e os dois sistemas terminais podem trocar dados.

O cliente solicita a estabelecimento de conexão em uma porta bem conhecida do servidor (por exemplo, porta 80 de um servidor Web) e informa a porta origem para receber as respostas, além de ajustar outros parâmetros para implementar a transferência garantida.

Estabelecimento de conexão TCP

Na fase de estabelecimento de conexão, são inicializadas as variáveis do protocolo TCP, como os números de sequência inicial e o tamanho de buffers. O processo cliente é o que inicia o estabelecimento da conexão, sendo o servidor contatado pelo cliente.

O estabelecimento da conexão se dá em três passos, conforme mostrado na figura:

  1. O lado cliente do TCP envia um segmento de sincronização, chamado SYN (com o flag Syn setado em 1), ao lado servidor do TCP, especificando um número de sequência inicial escolhido aleatóriamente (Seq=X).
  2. O servidor recebe o SYN, aloca buffers e inicializa variáveis, e envia uma mensagem de reconhecimento da conexão, chamada SYNACK (com o flags Syn e Ack setados em 1), onde reconhece o pedido de conexão e especifica seu número de sequência inicial (Seq=Y, Ack=X+1).
  3. Uma vez recebido o reconhecimento da conexão pelo servidor, o cliente confirma o recebimento com um segmento chamado ACK (flag Syn agora em 0 e flag Ack setado em 1 indicando um reconhecimento válido) e também aloca buffers e inicializa variáveis da conexão (Seq=X+1, Ack=Y+1).

--Evandro.cantu (discussão) 17h12min de 20 de março de 2015 (BRT)