TCP가 65535 개 이상의 포트를 제공 할 수 있습니까?


50

65,535 개 이상의 포트를 제공하도록 Linux 시스템을 설정할 수 있습니까? 의도는 주어진 시스템에서 65k 이상의 데몬을 수신하는 것입니다.

분명히 사용되는 포트가 있으므로 이러한 이유로 인해 불가능한 것이므로 TCP가 이와 같은 작업을 제한하는 위치를 이해하려는 이론적 인 연습으로 생각하십시오.


11
이 질문에 대한 동기는 무엇입니까? 왜 그렇게 많은 데몬을 듣고 싶습니까?
Warren Young

1
또한 많은 프로세스를 시작하는 데 어려움 을 겪을 것 입니다. (데몬 당 하나의 프로세스를 의미한다고 가정합니다.)
Warren Young

13
공식적으로 한 번에 65 쌍의 바지를 입는 것을 제한하는 것은 없지만 실제로 시도하는 것은 바보입니다. 10,000 개의 TCP 포트를 동시에 처리 할 수있는 머신을 보여줄 수 있다면 이것은 흥미로운 추상 질문 일 수 있습니다.
msw

13
이 Q의 특성은 완전히 이론적 인 것이며 TCP의 한계와 포트 수를 이해하는 것 이외의 다른 목적은 아닙니다.
slm

1
그러나 64k + 데몬 프로세스에 필요한 RAM 공간과 관련된 다양한 실제 문제와 관련이 있습니다. 리스너 한계에 도달하기 전에 현재 또는 향후 10 년 정도의 모든 시스템에 RAM이 부족합니다. TCP 리스너에 대해서만 이야기하도록 질문을 바꾸어 데몬에 대한 이야기를 완전히 없애면 문제는 사라집니다. 예를 들어 각 단일 스레드 이벤트 중심 데몬에 수천 개의 소켓을 할당하여 스택 공간을 상각 할 수 있습니다.
워렌 영

답변:


84

TCP 용 RFC : RFC 793-Transmission Control Protocol 을 보면 TCP 헤더가 소스 / 대상 포트 필드에 대해 16 비트로 제한되어 있기 때문에 대답이 없을 것 같습니다.

    ss # 1

IPv6가 개선합니까?

IPv6이 32 비트 대 128 비트보다 훨씬 더 큰 IP 주소 공간을 제공하더라도 포트 번호에 대해 16 비트의 TCP 패킷 제한을 개선하려고 시도하지는 않습니다. 흥미롭게도 IPv6을위한 RFC : IPv6 ( Internet Protocol, Version 6) Specification , IP 필드를 확장해야했습니다.

TCP가 IPv6에서 실행될 때 RFC 2460에 따라 체크섬을 계산하는 데 사용되는 방법이 변경됩니다 .

체크섬 계산에 IP 헤더의 주소를 포함하는 모든 전송 또는 기타 상위 계층 프로토콜은 32 비트 IPv4 주소 대신 128 비트 IPv6 주소를 포함하도록 IPv6을 통해 사용하도록 수정해야합니다.

                 ss # 2

그렇다면 어떻게 더 많은 포트를 얻을 수 있습니까?

한 가지 방법은 더 많은 인터페이스를 사용하여 추가 IP 주소를 쌓는 것입니다. 시스템에 여러 개의 NIC가있는 경우이 방법이 더 쉽지만 단일 NIC로도 가상 인터페이스 ( 별칭 )를 사용하여 필요한 경우 더 많은 IP를 할당 할 수 있습니다.

참고 : 대신 별칭을 iproute2사용하여 단일 인터페이스 (예 :)에 IP 주소를 쌓을 수 있습니다 eth0.

$ sudo ip link set eth0 up
$ sudo ip addr add 192.0.2.1/24 dev eth0
$ sudo ip addr add 192.0.2.2/24 dev eth0
$ ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc
      pfifo_fast state DOWN qlen 1000
    link/ether 00:d0:b7:2d:ce:cf brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.1/24 brd 192.0.2.255 scope global eth1
    inet 192.0.2.2/24 scope global secondary eth1

출처 : iproute2 : ifconfig 이후의 수명

참고 문헌


3
대상 포트만 사용하여 65,536 개 이상의 데몬 중에서 선택할 수는 없지만 메모리와 대역폭이 무제한 인 경우 들어오는 모든 포트의 고유 한 TCP 주소로 32,000 개 이상의 연결을 가질 수 있습니다.
supercat

7

65,535 개 이상의 포트를 제공하도록 Linux 시스템을 설정할 수 있습니까?

아니.

의도는 주어진 시스템에서 65k 이상의 데몬을 수신하는 것입니다.

그런 다음이 필요합니다.

  • iptables트래픽 콘텐츠를 리디렉션 하는 구성 또는

  • "서비스 브로커 서비스"또는 "멀티플렉서 서비스"는 단일 포트에서 들어오는 연결을 수락하고 "이 뒤에있는"적절한 데몬으로 라우팅합니다. 표준 프로토콜이 수정되지 않은 상태로 전달되도록하려면이 멀티플렉서 서비스에서 IDS 또는 계층 7 방화벽이 분석되는 방식으로 프로토콜 스니핑 / 인식을 구현해야합니다. 대부분의 프로토콜로 완전히 가능합니다.

두 번째 항목 당, 원하는 경우 2 ^ 16 개 이상의 "포트"를 처리하도록이 서비스를 설계 할 수 있습니다. 2 ^ 16 + 리스너의로드에 비해 성능에 미치는 영향이 최소화 될 것이라고 확신합니다.

Linux의 데몬은 파일 시스템에있는 유닉스 소켓에서 수신 대기 할 수 있으므로 "멀티플렉서 서비스"는 외부 포트 <-> 내부 유닉스 소켓의 내부 매핑을 유지할 수 있습니다. 최신 파일 시스템에서 inode가 부족해지기 전에 커널 프로세스 제한 (32Kbyte 프로세스?)에 빠질 수 있습니다.


나는 그것이 불가능하다고 말했기 때문에 이것을 하향 투표했다. 그런 다음 매우 혼란스러운 로터리 방법에도 불구하고 여러 IP와로드 밸런싱을 사용하여 그것을 수행하는 방법을 계속 설명하십시오.
suprjami

2
단일 시스템에서 64K 이상의 포트가 불가능합니다. 64K 이상의 리스너 가 가능할 수도 있지만 올바른 실제 "백엔드"리스너로 들어오는 연결을 "분할"하는 프록시 또는 프론트 엔드 리스너가 있어야합니다. 예를 들어 내부 NAT와 같이 여러 내부 IP 주소에 미친 것을 할 수 있습니다.
LawrenceC

2
잘못된. 사람들은 단일 시스템에서 50 만 개의 동시 연결을 얻었습니다. 그렇습니다. 여러 IP 및로드 밸런서 (동일한 시스템에있을 필요는 없음)가 필요하지만 단일 시스템은 64k 개 이상의 포트와 64k 개 이상의 리스너를 올바르게 열 수 있습니다.
suprjami

2

좋은 대답이 없기 때문에 차임하고 싶었습니다.

이를위한 한 가지 방법은 포트 확장을 지정하는 IP 옵션을 추가하는 것입니다. 이 옵션은 IP 헤더의 선택적 부분에 맞도록 설계되어야하며 알 수없는 홉으로 건너 뜁니다.

이 옵션과 정보 정보를 사용하여 소스, 대상 또는 두 포트 번호를 모두 확장 할 수 있습니다.

제한 사항은 옵션을 추가하는 것만으로 기존 소프트웨어에서 자동으로 작동하지 않습니다. 구현 방법에 관계없이 옵션을 활용하려면 기존 소프트웨어 및 방화벽이 패킷을 무시하거나 평소와 같이 처리합니다. 소스 및 대상 포트 필드의 값을 사용합니다.

요컨대, 사용하기 쉽지 않으며 재사용 가능한 단일 리스너와 패킷의 페이로드에 포함 된 데이터를 사용하여 더 잘 수행 할 수 있습니다.

또한 소프트웨어에서 포트 재사용을보다 쉽게 ​​허용 할 수 있으며, 이는 여러 클라이언트 연결에 서버 포트를 재사용함으로써이 제한을 극복하는 데 도움이 될 수 있습니다.

예를 들어 Rtsp는 IP 패킷의 페이로드에서 다양한 다른 헤더와 함께 SessionId 헤더를 사용하여 요청이 발행 된 연결을 결정하고 그에 따라 메시지가 전달 된 소켓이 소켓의 소켓과 동일하지 않은 경우 이에 따라 작동 할 수 있습니다 세션에 해당하는 원격 주소가 있으면 세션을 처리하기 위해 새 소켓으로 세션을 업데이트하거나 메시지를 거부하거나 응용 프로그램에 따라 다양한 다른 작업을 수행 할 수 있습니다.

Http 서버는이 서버 나 다른 유형의 서버도 수행 할 수 있습니다.

포트 재사용을 기억할 때 기억해야 할 중요한 점은 소스 IP 주소도 고려해야한다는 것입니다.


-2

그래 넌 할수있어 !

예를 들어 Edgehill 암호화 서버와 같이 온라인에서 실행되는> 25.000.000 데몬이 있습니다.


9
OP가 어떻게이를 달성 할 수 있는지에 대한 지침, 답변을 뒷받침하는 문서 또는 관련 설명을 포함하도록 답변을 확장하십시오.
HalosGhost

이 진술에 대한 참조를 제공 할 수 있습니까? 빠른 검색을 통해 이것이 많은 컴퓨터에 배포되어있는 것이 무엇이든 믿을 수 있습니다.
Thomas Guyot-Sionnest
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.