other languages
other sections
TCP(7) | Manual do Programador Linux | TCP(7) |
NOME¶
tcp - protocolo TCP.SINOPSE¶
#include <sys/socket.h>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.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_stdurgERROS¶
- 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.
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).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)25/04/1999 | Linux Man Page |