두 서버가 동일한 포트를 바인딩할 수 있습니까?

두 서버가 동일한 포트를 바인딩할 수 있습니까?

제가 관리하는 두 서버가 개발 중에 동시에 포트 3000에서 수신 대기할 수 있다는 사실에 놀랐습니다.

첫 번째 서버가 실행 중일 때 netstat에 다음이 표시됩니다.

  ▶ sudo netstat -nap tcp | grep 3000
  tcp6       0      0  ::1.3000               *.*                    LISTEN     
  tcp4       0      0  127.0.0.1.3000         *.*                    LISTEN     

둘 다 실행하십시오.

  ▶ sudo netstat -nap tcp | grep 3000
  tcp4       0      0  *.3000                 *.*                    LISTEN     
  tcp6       0      0  ::1.3000               *.*                    LISTEN     
  tcp4       0      0  127.0.0.1.3000         *.*                    LISTEN     

이에 대한 설명은 첫 번째 서버는 localhost(127.0.0.1)에 대해 포트 3000만 바인딩하고 두 번째 서버는 "모든"(0.0.0.0) 주소에 대해 포트 3000을 바인딩했다는 것입니다. 맞아?

이 동작은 첫 번째 서버가 다른 서버가 특별히 타겟팅하는 트래픽을 대체하는 것으로 보이며 http://localhost:3000이는 타당하다고 생각합니다. 나는 단지 이 다소 놀라운 상황에 대한 나의 이해를 확인하고 싶었을 뿐이고, 해당 포트에 대한 주소가 이미 바인딩된 경우 "모든" 주소를 수신하려는 시도가 실패할 것이라고 생각했을 것입니다.

답변1

첫 번째 서비스의 경우 귀하의 가정이 정확합니다. 이는 localhost및 를 수신합니다 locahost6. 두 번째는 위와 다르게 호스트의 IP를 듣고 있는 것 같습니다. 하지만 두 번째로 들어보는 것도 가능합니다 localhost. 둘 다 중지하고 두 번째 것만 시작하면 확인할 수 있습니다.

겸손한 제안을 하자면: 서비스 1과 서비스 2의 포트를 분리하십시오. 예를 들어 포트를 3001과 3002로 설정하십시오.

관련 정보