TCP

Na Galipedia, a Wikipedia en galego.
Protocolos de Internet
Capa de Aplicación HTTP, HTTPS, SMTP, FTP, SSH, SNMP, IRC,NNTP,
POP3, IMAP, Telnet, BitTorrent, IRC,...
Capa de Transporte TCP, UDP, SCTP, RTP, DCCP,...
Capa de Rede Protocolo IPv4, Protocolo IPv6, ARP, ICMP,...
Capa de Ligazón Ethernet, 802.11 WiFi, Token ring, FDDI, PPP,...
Capa Física RS-232, EIA-422, RS-449, EIA-485,...
editar

O TCP (acrónimo para o inglés Transmission Control Protocol) é un dos protocolos baixo os cales asenta o núcleo da Internet nos días de hoxe. A versatilidade e robustez deste protocolo tornouno adecuado para redes globais, xa que este verifica se os dados se envían de forma correcta, na secuencia apropiada e sen erros, pola rede.

O TCP é un protocolo do nivel da capa de transporte (capa 4) do Modelo OSI e é sobre o cal asentan a maioría das aplicacións cibernéticas, como o SH, FTP, HTTP — polo tanto, a World Wide Web.

Características técnicas[editar | editar a fonte]

Cabezallo dunha trama TCP
+ Bits 0 - 3 4 - 9 10 - 15 16 - 31
0 Porto na orixe Porto no destino
32 Número de secuencia
64 Número de confirmación (ACK)
96 Offset Reservados Flags Fiestra
Window
128 Checksum Punteiro de urxencia
160 Opcións (opcional)
Padding (ata 32)
224  
Datos
 
Detalle do campo Flags
+ 10 11 12 13 14 15
96 UrgPtr ACK Push RST SYN FIN

As características fundamentais do TCP son:

  • Orientado á conexión - A aplicación envía un pedido de conexión para o destino e usa a "conexión" para transferir dados.
  • Punto a punto - unha conexión TCP é estabelecida entre dous puntos.
  • Confiabilidade - O TCP usa varias técnicas para proporcionar unha entrega confiábel dos paquetes de dados, que é a gran vantaxe que ten en relación ao UDP, e motivo do seu uso extensivo nas redes de computadores. O TCP permite a recuperación de paquetes perdidos, duplicados, a recuperación de dados corrompidos, e pode recuperar a ligazón en caso de problemas no sistema e na rede.
  • Full duplex - É posíbel a transferencia simultánea en ambas direccións (cliente-servidor) durante toda a sesión.
  • Handshake - Mecanismo de estabelecemento e finalización de conexión a tres e catro tempos, respectivamente, o que permite a autenticación e encerramento dunha sesión completa. O TCP garante que, no final da conexión, todos os paquetes foron ben recibidos.
  • Entrega ordenada - A aplicación fai a entrega ao TCP de bloques de dados cun tamaño arbitrario nun fluxo (ou stream) de dados, tipicamente en octetos. O TCP parte estes dados en segmentos de tamaño especificado polo valor MTU. Porén, a circulación dos paquetes ao longo da rede (utilizando un protocolo de encamiñamento, na capa inferior, como o IP) pode facer con que os paquetes non cheguen ordenados. O TCP garante a reconstrución do stream no destinatario mediante os números de secuencia.
  • Control de fluxo - O TCP usa o campo fiestra ou window para controlar o fluxo. O receptor, á medida que recebe os dados, envía ACK, que pode especificar o tamaño do buffer no campo (fiestra) do segmento TCP, en que determina a cantidade de bytes que o lado trasmisor do ACK pode recibir. O transmisor pode transmitir segmentos cun número de bytes que deberá estar confirmado con tamaño da fiestra permitido.

Descrición do funcionamento[editar | editar a fonte]

Fig. 1 - Neste exemplo considérase o backlog preenchido para forzar o timeout no cliente para que o paquete SYN sexa reenviado. Porén, o primeiro paquete podía terse perdido debido a erros na rede.

O protocolo TCP especifica tres fases durante unha conexión: estabelecemento da ligazón, transferencia e finalización da ligazón. O estabelecemento da ligazón faise en tres pasos, en canto que o término faise en catro. Durante a inicialización inicialízanse algúns parámetros, como o Sequence Number (número de secuencia) para garantir a entrega ordenada e robustez durante a transferencia.

Estabelecemento da ligazón[editar | editar a fonte]

Tipicamente, nunha ligazón TCP existe aquel designado de servidor (que abre un socket e espera pasivamente por ligazóns), nun extremo, e o cliente no outro. O cliente inicia a ligazón enviando un paquete TCP coa flag SYN activa e espérase que o servidor acepte a ligazón enviando un paquete SYN+ACK. Se, durante un determinado espazo de tempo, ese paquete non for recibido ocorre un timeout e o paquete SYN reenvíase. O estabelecemento da ligazón é concluído por parte do cliente, confirmando a aceptación do servidor respondéndolle cun paquete ACK.

Durante estas trocas, trócanse números de secuencia iniciais (ISN) entre os interlocutores que irán servir para identificar os dados ao longo do fluxo, ben como servir de contador de bytes transmitidos durante a fase de transferencia de dados (sesión).

No final desta fase, o servidor inscribe o cliente como unha ligazón estabelecida nunha táboa propia que contén un limite de conexións, o backlog. No caso do backlog ficar preenchido a ligazón rexeitase ignorando (silenciosamente) todos os subsecuentes paquetes SYN.

Transferencia de datos (sesión)[editar | editar a fonte]

Durante a fase de transferencia o TCP está equipado con varios mecanismos que aseguran a fiabilidade e robustez: números de secuencia que garanten a entrega ordenada, código detector de erros (checksum) para detección de fallas en segmentos específicos, confirmación de recepción e temporizadores que permiten o axuste e contorno de eventuais atrasos e perdas de segmentos.

Como se pode observar polo cabezallo TCP, existen permanentemente un par de números de secuencia, de agora en diante referidos como número de secuencia e número de confirmación (ACKnoledg). O emisor determina o seu propio número de secuencia e o receptor confirma o segmento usando como número ACK o número de secuencia do emisor. Para manter a fiabilidade, o receptor confirma os segmentos indicando que recibiu un determinado número de bytes contiguos. Unha das mellorías introducidas no TCP foi a posibilidade do receptor confirmar bloques fóra da orde esperada. Esta característica designase por selective ACK, ou apenas SACK.

A reasemblaxe ordenada dos segmentos faise usando os números de secuencia, de 32 bit, que reinician a cero cando sobrepasan o valor máximo, 231-1, tomando o valor da diferenza. Así, a escolla do ISN tórnase vital para a robustez deste protocolo.

O campo checksum permite asegurar a integridade do segmento. Este campo é expreso en complemento para un consistindo na suma dos valores (en complemento para un) da trama. A escolla da operación de suma en complemento para un débese ao feito de esta poder calcularse da mesma forma para múltiplos dese lonxitude - 16 bit, 32 bit, 64 bit, etc - e o resultado, cando encapsulado, será o mesmo. A verificación deste campo por parte do receptor faise coa recomputación da suma en complemento para un que dará -0 caso o paquete teña sido recibido intacto.

Esta técnica (checksum), aínda que moito inferior a outros métodos detectores, como o CRC, é parcialmente compensada coa aplicación do CRC ou outros testes de integridade mellores ao nivel da capa 2, logo abaixo do TCP, como no caso do PPP e Ethernet. Con todo, isto non torna este campo redundante: con efecto, estudos de tráfico revelan que a introdución de erro é bastante frecuente entre hops protexidos por CRC e que este campo detecta a maioría deses erros.

As confirmacións de recepción (ACK) serven tamén ao emisor para determinar as condicións da rede. Dotados de temporizadores, tanto os emisores como receptores poden alterar o fluxo dos dados, contornar eventuais problemas de conxestión e, nalgúns casos, prevenir o conxestión da rede. O protocolo está dotado de mecanismos para obter o máximo de performance da rede sen a conxestionar — o envío de tramas por un emisor máis rápido que calquera un dos intermediarios (hops) ou mesmo do receptor pode inutilizar a rede. Son exemplo a fiestra deslizante, o algoritmo de inicio-lento

Adecuación de parámetros[editar | editar a fonte]

Neste simple exemplo só está a considerarse a fiestra do servidor. O cliente ten a percepción do estado da fiestra do servidor a cada ACK recibido.

O cabezallo TCP posúe un parámetro que permite indicar o espazo libre actual do receptor (emisor cando envía a indicación): a fiestra (ou window). Así, o emisor fica a saber que só poderá ter en tránsito aquela cantidade de información ata esperar pola confirmación (ACK) dun dos paquetes - que pola súa vez traerá, con certeza, una actualización da fiestra. Curiosamente, a pilla TCP no Windows foi concebida para se auto-axustar na maioría dos ambientes e, nas versións actuais, o valor patrón é superior en comparación con versións máis antigas.

Porén, debido ao tamaño do campo, que non pode ser expandido, os limites aparentes da fiestra varían entre 2 e 65535, o que é bastante pouco en redes de alto débito e hardware de alto rendemento. Para contornar esa limitación úsase unha opción especial que permite obter múltiplos do valor da fiestra, chamado escala da fiestra, ou TCP window scale; este valor indica cantas veces o valor da fiestra, de 16 bit, debe operarse por movemento de bits (para a esquerda) para obter os múltiplos, podendo variar entre 0 e 14. Así, tórnase posíbel obter fiestras de 1 gigabyte. O parámetro de escala defínese unicamente durante o estabelecemento da ligazón.

Término da ligazón[editar | editar a fonte]

Término de conexión.

A fase de finalización da sesión TCP é un proceso de catro fases, no que cada interlocutor responsabilízase pola finalización do seu lado da ligazón. Cando un deles pretende finalizar a sesión, envía un paquete coa flag FIN activa, polo cal deberá recibir unha resposta ACK. Pola súa vez, o outro interlocutor irá proceder da mesma forma, enviando un FIN que deberá ser respondido un ACK.

Pode ocorrer, no entanto, que un dos lados non conclúa a sesión. Chámase a este tipo de evento conexión semi-aberta. O lado que non concluiu a sesión poderá continuar a enviar información pola conexión, mais o outro lado non.

Portos ou servizos[editar | editar a fonte]

O TCP introduce o concepto de porto tipicamente asociado a un servizo (capa aplicación)/ligazón específica. Así, cada un dos intervenientes na conexión dispón dun porto asociado (un valor de 16 bit) que dificilmente será o mesmo do interlocutor. Algúns servizos (que fan uso de protocolos específicos) son tipicamente accesíbeis en portos fixos, coñecidos como portos ben coñecidos, que son aqueles numerados do 1 ao 1023. Alén destes, existen aínda dúas gamas de portos, rexistrados e privados ou dinámicos. Os portos ben coñecidos son atribuídos pola Internet Assigned Numbers Authority (IANA) e son tipicamente utilizados por procesos con dereitos de sistema ou superusuario. Nestes portos atópanse en escoita pasiva os servizos triviais, como HTTP, SH, FTP, etc. Todos os protocolos da suite IP se atopan rexistrados dentro desta gama.

A gama de portos privados segue regras de atribución específicas do sistema operativo e serve para abrir ligazóns a outras máquinas, como surfar na rede, por exemplo.

Implementacións[editar | editar a fonte]

Artigo principal: Implementacións do TCP.

Utilización do IP para entrega de dados[editar | editar a fonte]

Artigo principal: TCP/IP.

O TCP, tal como o UDP, usa o IP para a entrega dos datagramas á rede, e os puntos de acceso á aplicación identifícanse por portas accedidas por multiplexing, tal como acontece co UDP, o que permite múltiplas ligazóns en cada host. As portas poden asociarse cunha aplicación (Proceso).

O IP trata o paquete TCP como dados e non interpreta calquera contido da mensaxe do TCP, sendo que os dados TCP viaxan pola rede en datagramas IP. Os routers que interligan as redes apenas verifican o cabezallo IP, cando fan o envío dos datagramas. O TCP no destino interpreta as mensaxe do protocolo TCP.

Véxase tamén[editar | editar a fonte]

Ligazóns externas[editar | editar a fonte]