Provided by: manpages-pt_20040726-2_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)