Linux에서 65536 개 이상의 TCP 연결


11

Linux (RedHat5) 상자에서 65536 개 이상의 나가는 TCP 연결을 설정하려고합니다.

충분한 파일 디스크립터를 허용하도록 발신 및 수락 상자를 이미 구성했습니다.

수용 측에 문제가 있다고 생각하지 않습니다. 각각 여러 개의 IP 주소를 가진 여러 개의 대상 상자가 있으며 여러 포트를 사용하고 있습니다.

나가는 쪽에서는 IP 주소 당 한도에 도달하지 않는다고 생각합니다. 여러 IP 주소와 포트를 사용하고 있습니다 (여러 IP 주소 각각에 대해 포트 30,000-60,000에서 연결을 시작하고 있습니다).

누락 된 Linux 커널 조정 가능 매개 변수가 있습니까? 아니면 TCP의 근본적인 한계는 무엇입니까?

실패는 연결을 여는 응용 프로그램이 connect () 호출에 걸려 있다는 것입니다.

도움을 주셔서 감사합니다 NickB


당신은 어떤 한계에 부딪 쳤습니까? 한도에 도달했을 때 어떤 오류가 발생 했습니까?
nos

connect ()가 중단됩니다.
NickB

1
소스와 대상 IP 사이에 무엇이 있습니까? 장치의 NAT 테이블을 채우고 있습니까?

답변:


10

누군가가 상자에서> 1,000,000 이상의 아웃 바운드를 얻은 블로그입니다.

  • Richard Jones, MetaBrew.com, 2008-11-04, Mochiweb을 사용한 백만 명의 사용자 혜성 응용 프로그램, 3 부 , 섹션 1 백만으로 설정 ( 여기에서 보관 됨 )

Part 1에서는 범위를 "1024 65535"로 설정했습니다. 즉, 65535-1024 = 64511의 권한이없는 포트를 사용할 수 있습니다. 이들 중 일부는 다른 프로세스에서 사용되지만 포트가 부족하여 64511 개 이상의 클라이언트 연결을 얻지 못합니다.

...

따라서 각각 62,000 개의 연결을 만들기 위해 17 개의 새로운 IP 주소를 가져 와서 총 1,054,000 개의 연결을 제공합니다.


감사! 그것은 나를 위해 작동합니다. 특히 metabrew.com/article/… 에서 sysctl을 통해 65,536 개 이상의 TCP 연결을 설정할 수있었습니다.
NickB

1

TCP 프로토콜은 대상 포트와 소스 포트 모두에 16 비트 만 사용합니다. Linux를 사용하지 않고 한 번에 65536 개 이상의 포트를 열 수있는 방법이 없습니다.


3
이것은 하나의 단일 IP 주소에만 해당됩니다. 둘 이상을 사용하는 경우 각 IP 주소는 65536의 열린 포트를 가질 수 있어야합니다.
Job

1
올바른 경우, 나가는 각 연결마다 로컬 포트가 필요합니다. IIRC, 이미 사용중인 포트는이 연결에 사용할 수 없습니다. 예를 들어 telnet / ftp / http를 실행중인 경우 21/23/80 번호의 포트는 로컬 포트로 사용할 수 없습니다.
KevinDTimm

1
동일한 포트에 여러 연결을 가질 수도 있습니다.
gtrak

@Job-예. TCP는 IP 위에 쌓이기 때문에 하나의 IP 주소에 대해서만 이야기하고 있습니다.

4
각 연결은 원격 주소 및 포트와 로컬 주소 및 포트로 구성된 튜플로 식별됩니다. 따라서 다른 원격 호스트에서> 65536 인바운드 연결이 가능합니다. > 호스트의 단일 인터페이스에서 65536 아웃 바운드 연결을 수행 할 수 없으며 사용중인 포트가 항상 있기 때문에 어쨌든 그보다 약간 적게 제한됩니다.
Len Holgate

0

이와 관련하여 "단일 인터페이스"는 단일 IP 주소가 할당 된 단일 네트워크 관리를 의미합니다. 각 아웃 바운드 TCP 연결은 별도의 포트에 바인드되므로 예제를 사용할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.