Mais de 65536 conexões TCP no Linux


11

Estou preso tentando configurar mais de 65536 conexões TCP de saída de uma caixa Linux (RedHat5).

Já configurei as caixas de saída e de aceitação para permitir descritores de arquivos suficientes.

Não acredito que haja um problema no lado de aceitação - tenho várias caixas de destino, cada uma com vários endereços IP e estou usando várias portas.

No lado de saída, não acredito que estou atingindo um limite por endereço IP - estou usando vários endereços e portas IP (estou abrindo conexões das portas 30.000 - 60.000 para cada um dos vários endereços IP).

Há algum parâmetro ajustável do kernel do Linux que estou faltando? Ou algum limite fundamental no TCP?

A falha é que meu aplicativo para abrir as conexões está pendurado na chamada connect ().

Obrigado por qualquer ajuda NickB


Que limite você atingiu? Qual foi o erro quando você atingiu esse limite?
15/07/10

O connect () trava.
22410 NickB

1
O que há entre os IPs de origem e destino? Você está possivelmente preenchendo a tabela NAT de algum dispositivo?

Respostas:


10

Aqui está um blog onde alguém recebeu> 1.000.000 de limites de uma caixa.

  • Richard Jones, MetaBrew.com, 04/11/2008, Um aplicativo de cometa de um milhão de usuários com Mochiweb, parte 3 , seção Aumentando para 1 milhão (arquivado aqui .)

Na Parte 1, configuramos o intervalo para "1024 65535" - o que significa que existem 65535-1024 = 64511 portas não privilegiadas disponíveis. Alguns deles serão usados ​​por outros processos, mas nunca teremos mais de 64511 conexões de clientes, porque ficaremos sem portas.

...

Então, vamos apresentar 17 novos endereços IP, com a intenção de fazer 62.000 conexões de cada um - fornecendo um total de 1.054.000 conexões


Obrigado! Isso funciona para mim. Especificamente, os seetings sysctl a partir metabrew.com/article/... permitiu-me para configurar mais de 65.536 conexões TCP.
NickB

1

O protocolo TCP usa apenas 16 bits para a porta de destino e de origem. Não haverá como abrir mais de 65536 portas de uma só vez - nem mesmo com o Linux.


3
Isso é verdade apenas para um único endereço IP. Se você usar mais de um, cada endereço IP deverá ter 65536 portas abertas.

1
correto, é necessária uma porta local para cada conexão de saída. IIRC, nenhuma porta já em uso não pode ser usada para essas conexões. portanto, por exemplo, se você estiver executando telnet / ftp / http, as portas numeradas 21/23/80 não estarão disponíveis como portas locais.
KevinDTimm

1
Você também pode ter várias conexões com a mesma porta.
gtrak

@ Job - Sim, desde que o TCP é empilhado em cima de IP - eu estou falando apenas de um endereço IP.

4
Cada conexão é identificada por uma tupla que consiste no endereço e porta remotos e no endereço e porta local. Portanto, é possível> 65536 conexões de entrada de diferentes hosts remotos. > 65536 conexões de saída de uma única interface em um host não é possível e você estaria limitado a um pouco menos que isso, pois sempre haverá algumas portas em uso.
precisa

0

Nesse contexto, uma "interface única" significa um único cuidado de rede com um único endereço IP atribuído a ele. Cada conexão TCP de saída está vinculada a uma porta separada, portanto, seu exemplo não é possível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.