Provided by: manpages-pt_20040726-5_all bug

NOME

       tcp - protocolo TCP.

SINOPSE

       #include <sys/socket.h>
       #include <netinet/in.h>
       tcp_socket = socket(PF_INET, SOCK_STREAM, 0);

DESCRIÇÃO

       Esta  é  uma  implementação  do  protocolo  TCP  definida nas RFC793, RFC1122 e RFC2001, com as extensões
       NewReno e SACK.  Ela fornece uma conexão confiável, orientada a fluxo e full duplex  entre  dois  sockets
       sobre  ip(7).   O  TCP  garante  que  os dados chegam em ordem e retransmite pacotes perdidos. Ele gera e
       verifica um checksum por pacote para pegar erros de transmissão. O TCP não preserva divisas de registros.

       Um socket TCP fresco não tem endereço remoto ou local, e não está completamente especificado.  Para criar
       uma conexão TCP de saída, use connect(2) para estabelecer  uma  conexão  para  outro  socket  TCP.   Para
       receber  novas  conexões  de  entrada,  faça  um  bind(2) no primeiro socket para um endereço e uma porta
       locais, e então chame listen(2) para pôr o socket no estado de escuta. Depois que  um  novo  socket  para
       cada conexão de entrada pode ser aceito, usando-se accept(2).  Um socket que teve um accept ou um connect
       chamado  com  sucesso  é  especificado  completamente  e  pode  transmitir dados.  Os dados não podem ser
       transmitidos em sockets de escuta ou que ainda não foram conectados.

       O Linux 2.2 suporta as extensões TCP de alta performance da RFC1323.  Isto  inclui  janelas  TCP  grandes
       para  suportar  links  com  grande  latência  ou largura de banda.  Para fazer uso delas, os tamanhos dos
       buffers de envio e recepção devem ser incrementados. Eles podem ser setados globalmente  com  os  sysctls
       net.core.wmem_default  e  net.core.rmem_default  , ou em sockets individuais através do uso das opções de
       socket SO_SNDBUF e SO_RCVBUF.  Os tamanhos máximos para buffers de sockets são  limitados  pelos  sysctls
       globais net.core.rmem_max e net.core.wmem_max.  Veja socket(7) para mais informações.

       O  TCP  suporta  dados urgentes. Dados urgentes são usados para sinalizar ao receptor que alguma mensagem
       importante é parte do fluxo de dados e que deve ser processado o mais breve possível.  Para enviar  dados
       urgentes,  especifique a opção MSG_OOB para send(2).  Quando dados urgentes são recebidos, o kernel envia
       um sinal SIGURG para o processo de leitura, ou para o processo ou grupo de processos que foi setado  para
       o  socket, usando os ioctls FIOCSPGRP ou FIOCSETOWN.  Quando a opção de socket SO_OOBINLINE é habilitada,
       dados urgentes são postos no fluxo normal de dados (e podem ser testados pelo ioctl  SIOCATMARK  ),  caso
       contrário eles podem ser somente recebidos quando a flag MSG_OOB é setada para sendmsg(2).

FORMATOS DE ENDEREÇO

       O TCP é montado acima do IP (veja ip(7)).  Os formatos de endereço definidos por ip(7) se aplicam ao TCP.
       O TCP suporta apenas comunicação ponto-a-ponto; broadcasting e multicasting não são suportados.

SYSCTLS

       Estes sysctls podem ser acessados pelos arquivos /proc/sys/net/ipv4/* ou com a interface sysctl(2).  Além
       disso, muitos sysctls IP também se aplicam ao TCP; veja ip(7).

       tcp_window_scaling
              Habilita escalamento de janela TCP da RFC1323.

       tcp_sack
              Habilita o Reconhecimento Seletivo TCP da RFC2018.

       tcp_timestamps
              Habilita timestamps TCP da RFC1323.

       tcp_fin_timeout
              Quantidade  de  segundos  a  se  esperar  pelo  pacote  final  FIN antes de o socket ser encerrado
              forçadamente. Esta é estritamente uma violação da especificação TCP, mas é requerida para prevenir
              ataques de negação de serviço.

       tcp_keepalive_probes
              O máximo de provas de keep-alive do TCP a ser  enviado  antes  de  desistir.  Os  keep-alives  são
              enviados apenas quando a opção de socket SO_KEEPALIVE estiver habilitada.

       tcp_keepalive_time
              O  número  de  segundos  sem  que  nenhum  dado  seja  transmitido,  antes  que um keep-alive seja
              transmitido em uma conexão. O padrão é de 10800 segundos (3 horas).

       tcp_max_ka_probes
              Quantas provas de keep-alive são  enviada  por  execução  de  temporizador  lento.  Para  prevenir
              rajadas, este valor não deve ser muito alto.

       tcp_stdurg
              Habilita  a  interpretação estrita da RFC793 para o campo urgent-pointer do TCP. O padrão é usar a
              interpretação compatível com BSD, apontando para  o  primeiro  byte  depois  do  dado  urgente.  A
              interpretação da RFC793 é para se apontar para o último byte do dado urgente. Habilitar essa opção
              pode levar a problemas de interoperabilidade.

       tcp_syncookies
              Habilita  syncookies do TCP. O kernel precisa ser compilado com CONFIG_SYN_COOKIES.  Os syncookies
              protegem um socket contra sobrecarga quando muitas conexões tentam chegar. Máquinas clientes podem
              não ser mais capazes de detectar uma  máquina  sobrecarregada  com  um  timeout  curto  quando  os
              syncookies são habilitados.

       tcp_max_syn_backlog
              Comprimento  da fila de backlog por socket. Como no Linux 2.2, o backlog especificado em listen(2)
              somente especifica o comprimento da fila de backlog de sockets já estabelecidos.  A fila máxima de
              sockets ainda não estabelecidos (no estado SYN_RECV ) por socket  de  escuta  é  setado  por  este
              sysctl. Quando mais conexões pedem chegada, o Linux começa a perder pacotes. Quando syncookies são
              habilitados, os pacotes ainda são respondidos e este valor é efetivamente ignorado.

       tcp_retries1
              Define  quantas  vezes  uma  resposta  a  uma  requisição  de conexão TCP é retransmitida antes de
              desistir.

       tcp_retries2
              Define quantas vezes um pacote TCP é retranmitido no estado estabelecido antes de desistir.

       tcp_syn_retries
              Define quantas vezes tenta enviar um pacote SYN inicial para um host remoto antes  de  desistir  e
              retornar  um  erro.  Deve ser menor que 255. Este é somente o timeout para conexões de saída; para
              conexões de entrada, o número de retransmissões é definido por tcp_retries1.

       tcp_retrans_collapse
              Tenta enviar pacotes de tamanho máximo durante a retransmissão. Isto é usado para contornar falhas
              de TCP em algumas pilhas.

OPÇÕES DE SOCKET

       Para setar ou obter uma opção de socket do TCP,  chame  getsockopt(2)  para  ler  ou  setsockopt(2)  para
       escrever  a  opção  com o argumento da família de socket setado em SOL_TCP.  Além disso, muitas opções de
       socket SOL_IP são válidas em sockets TCP. Para mais informações, veja ip(7).

       TCP_NODELAY
              Desliga o algoritmo Nagle. Isto significa que os pacotes sempre  são  enviados  tão  breve  quanto
              possível,  e não são introduzidos atrasos desnecessários, ao cutso de se ter mais pacotes na rede.
              Espera um flag booleano inteiro.

       TCP_MAXSEG
              Seta ou recebe o tamanho máximo de segmento para pacotes TCP de saída.  Se  esta  opção  é  setada
              antes  do  estabelecimento  da  conexão,  ela  também  muda  o valor de MSS anunciado para a outra
              extremidade no pacote inicial. Valores maiores que o MTU da interface  são  ignorados  e  não  têm
              efeito.

       TCP_CORK
              Se  habilitado,  não  envia quadros parciais.  Todos os quadros parciais enfileirados são enviados
              quando a opção é apagada novamente.  Isto é útil para cabeçalhos precedentes antes da  chamada  de
              sendfile(2),  ou  para  otimização  do  fluxo  de  saída.  Esta  opção  não pode ser combinada com
              TCP_NODELAY.

IOCTLS

       Estes ioctls podem ser acessadas usando-se ioctl(2).  A sintaxe correta é:

              int value;
              error = ioctl(tcp_socket, ioctl_type, &value);

       FIONREAD
              Retorna a quantidade de dados não lidos enfileirados no buffer  de  recepção.  O  argumento  é  um
              ponteiro para um inteiro.

       SIOCATMARK
              Retorna  verdadeiro  quando  todos  os dados urgentes já foram recebidos pelo programa do usuário.
              Isto é usado junto com SO_OOBINLINE.  O argumento é um ponteiro para um inteiro para  o  resultado
              do teste.

       TIOCOUTQ
              Retorna, no ponteiro de valor inteiro passado, a quantidade de dados não enviados que está na fila
              de envio do socket.

MANIPULAÇÃO DE ERROS

       Quando  ocorre  um erro de rede, o TCP tenta reenviar o pacote. Se ele não é bem-sucedido depois de algum
       tempo, é reportado ETIMEDOUT ou o último erro recebido nesta conexão.

       Algumas aplicações requerem uma notificação de erro mais rápida.  Isto pode ser habilitado com a opção de
       socket IP_RECVERR  de  nível  SOL_IP  opção  é  habilitada,  todos  os  erros  de  entrada  são  passados
       imediatamente para o programa do usuário.  Use esta opção com cuidado - ela torna o TCP menos tolerante a
       mudanças de roteamento e outras condições normais da rede.

NOTAS

       Quando  ocorre  erro  na  configuração  da  conexão de uma escrita em socket, SIGPIPE somente é levantado
       quando a opção de socket SO_KEEPOPEN é configurada.

       O TCP não tem dados reais para "out-of-band" (fora de banda); ele tem  dados  urgentes.  Em  Linux,  isto
       significa  que  se a outra extremidade envia dados out-of-band mais novos, os dados urgentes mais antigos
       são inseridos como dados normais no fluxo (mesmo quando SO_OOBINLINE não está  setado).  Isto  difere  de
       pilhas baseadas no BSD.

       O Linux usa a interpretação compatível com o BSD para o campo de ponteiro urgente, por padrão. Isto viola
       a  RFC1122,  mas  é  requerido para interoperabilidade com outras pilhas. Ele pode ser mudado pelo sysctl
       tcp_stdurg

ERROS

       EPIPE  A outra extremidade encerrou o socket inesperadamente, ou uma leitura é  executada  em  um  socket
              desligado.

       ETIMEDOUT
              A outra extremidade não reconheceu os dados retransmitidos depois de algum tempo.

       EAFNOTSUPPORT
              Tipo de endereço de socket passado em sin_family não era AF_INET.

       Qualquer erro definido pelo ip(7) ou pela camada genérica do socket também pode ser retornada para o TCP.

PROBLEMAS

       Nem todos os erros são documentados.

       O IPv6 não é descrito.

       As opções de proxy transparente não são descritas.

VERSÕES

       Os sysctls são novos no Linux 2.2.  IP_RECVERR é uma nova implementação no Linux 2.2.  TCP_CORK é novo no
       2.2.

VEJA TAMBÉM

       socket(7), socket(2), ip(7), sendmsg(2), recvmsg(2).
       RFC793 para a especificação TCP.
       RFC1122 para os requerimentos do TCP e uma descrição do algoritmo Nagle.
       RFC2001 para alguns algoritmos do TCP.

TRADUZIDO POR LDP-BR em 21/08/2000.

       Rubens  de Jesus Nogueira <darkseid99@usa.net> (tradução) André L. Fassone Canova <lonelywolf@blv.com.br>
       (revisão)

Linux Man Page                                     25/04/1999                                             TCP(7)