단일 프로세스가 모든 포트를 수신할 수 있습니까?

단일 프로세스가 모든 포트를 수신할 수 있습니까?

내 이해에 따르면 포트에서 수신 대기한다는 것은 운영 체제에 1-65535 범위의 특정 번호를 할당하도록 요청하는 것을 의미합니다. 처음 1024개 포트는 수퍼유저 프로세스로 제한됩니다.

내가 아는 한, IP 요청을 수행하는 모든 프로세스는 포트에서 수신 대기하고 요청에 대한 응답을 얻을 것으로 예상되는 포트를 지정해야 합니다. 하지만 프로세스가 가능한 모든 포트를 동시에 선언하면 어떻게 될까요? 운영 체제에서 이를 허용합니까? 그렇다면 대부분의 다른 프로그램이 작동을 멈춘다는 뜻인가요?

답변1

적어도 소켓 API를 사용하지 않고 가능한 모든 포트를 동시에 선언하는 방법은 없다고 생각합니다. 그러나 프로그램은 가능한 모든 포트를 차례로 바인딩하려고 시도할 수 있습니다. 리소스가 부족하지 않으면 사용 가능한 모든 포트를 바인딩할 수 있으며, 일단 완료되면 다른 프로그램은 동일한 수신 주소에 해당 포트를 바인딩할 수 없습니다.

난 그렇게 생각하지 않아최대프로그램은 포트 바인딩을 시도하므로 대부분의 다른 프로그램은 작동을 중지해서는 안 됩니다. 영향을 받는 유일한 프로그램은 바인딩된 포트를 사용해야 하는 프로그램입니다.IP 소켓을 사용하려고 시도하는 모든 프로그램입니다.

Cloudflare가 패치를 제안하고 있습니다이를 통해 BPF 프로그램은 모든 포트에서 수신 대기할 수 있으며 BPF 프로그램은 모든 포트를 효과적으로 나열할 수 있습니다.반점그리고LPC 다가오는 프레젠테이션.

관련 정보