TCP가 65535 개 이상의 포트를 제공 할 수 있습니까? 시스템을 설정할

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

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



답변

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 이후의 수명

참고 문헌


답변

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

아니.

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

그런 다음이 필요합니다.

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

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

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

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


답변

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

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

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

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

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

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

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

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

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


답변

그래 넌 할수있어 !

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


답변