하나 이상의 TCP / IP 포트를 http 전용으로 사용하는 것이 왜 합리적이지 않습니까? 당연히 순진하지만 서버 성능이 어떻게 든 향상 될 수 있다고 생각하는 것이 직관적이지 않습니까?
하나 이상의 TCP / IP 포트를 http 전용으로 사용하는 것이 왜 합리적이지 않습니까? 당연히 순진하지만 서버 성능이 어떻게 든 향상 될 수 있다고 생각하는 것이 직관적이지 않습니까?
답변:
포트 80은 잘 알려진 포트이므로 일반적으로 HTTP 서버를 찾는 위치로 잘 알려져 있습니다. HTTP / 1.1 RFC에 문서화되어 있습니다 .
기본값을 사용하면 URI를 사용하여 웹 브라우저에 기본값을 입력 할 필요가 없으므로 정확하게 유용합니다. 비표준 포트에서 HTTP 서버 (또는 사실상 모든 서비스)를 실행하는 경우 클라이언트가 선택한 임의의 16 비트 숫자를 기억하고 입력해야합니다.
이러한 친숙 함 외에도 성능상의 이점은 없습니다. 포트는 (dst ip:port, src ip:port)
TCP 연결을 고유하게 식별하는 4- 튜플의 일부일뿐입니다 . 두 개의 연결이를 공유 dst ip:port
한다고해서 시스템 리소스를 공유한다는 의미는 아닙니다. 서로 다른 스레드 또는 다른 프로세스에 상주 할 수 있습니다.
당신은 모두 논리적으로 다른 서비스가있는 경우 이제 일이 HTTP를 사용하는을, 어떤이없는 문제를 다른 포트에 그들을 실행하는가. URI를 조금 더 추하게 만듭니다.
서버는 하나 이상의 포트에서 연결을 처리하여 리소스를 낭비하지 않습니다. 연결을 처리하기 위해 서버 리소스가 할당되며 포트 번호는 특정 프로그램을 특정 연결에 연결하는 방법입니다.
예를 들어, HTTP 서버는 포트 80으로 들어오는 연결을 수신한다는 것을 알고 있습니다. 그리고 서버는 포트 80에서 요청을받을 때마다 http 서버로 처리한다는 것을 알고 있습니다. 그 후 http 서버는 통신을 처리 한 다음 리소스를 소비합니다.
포트를 실제 무언가로 생각하는 것 같습니다. 16 비트 부호없는 숫자 (0-65535)는 IP 패킷의 헤더에있는 레이블입니다. 응용 프로그램 수준의 다중화에 도움이됩니다. 들어오는 패킷이 네트워크 카드에 도착하면 OS가 알림을받습니다. 들어오는 패킷이 향한 포트를 확인한 다음 패킷을 올바른 응용 프로그램에만 전달합니다. 포트 80에서 수신 대기하도록 웹 서버 (nginx)를 실행중인 경우 nginx 만 포트 80으로 패킷을 보냅니다.
클라이언트 (IP : 100.200.100.200)가 서버 (55.55.55.55)에 HTTP 요청을하면 서버 (55.55.55.55:80)의 대상 포트 80으로 요청을하지만 소스 포트는 임의로 웹 브라우저 용 OS (45490과 같은 것) 웹 서버의 HTTP 응답은 (55.55.55.55:80)에서 왔지만 대상 (사용자의 IP) (100.200.100.200:45490)으로 전송됩니다. 컴퓨터의 OS는 포트 45490 (55.55.55.55:80에서)으로 들어오는 패킷이 요청을 한 웹 브라우저에 제공되어야한다는 것을 알고 있습니다. 클라이언트에서 웹 사이트에 대한 각각의 고유 한 연결은 고유 한 임의 포트를 가져 오므로 동일한 웹 사이트에 여러 웹 브라우저를 연결하고 한 브라우저에서 페이지를 다시로드 할 때 다른 창에는 영향을 미치지 않습니다.
각 IP 패킷에는 헤더에서 사용할 수있는 소스 및 대상 IP 주소와 포트가 모두 있습니다. OS와 응용 프로그램 (웹 브라우저 또는 웹 서버)은 둘 다를 사용하여 패킷을 처리하는 방법에 대한 적절한 조치를 알아낼 수 있습니다.
포트 80 및 443은 HTTP / HTTPS의 "기본"포트입니다.
이는 웹 브라우저를 사용할 때 포트 ( http://www.example.com:80 , https://www.example.com:443 ) 를 지정할 필요가 없음을 의미 합니다.
웹 서버가 다른 포트에서 수신 대기하도록하려면 사용자가 포트를 URL에 수동으로 추가하거나 특정 포트에 대한 링크로 인코딩해야합니다.
또한 대부분의 프록시 및 방화벽은 특별히 구성하지 않는 한 해당 포트에 대한 연결을 허용하지 않습니다 (구성이 없으면 나가는 프록시가 기본 포트가 아닌 포트를 수신하지 않으므로 요청이 웹 서버에 전달되지 않지만 방화벽은 단순히 비 TCP80 / 443 연결 시도 차단)
이 모든 것이 TCP / IP 레벨에서 수행 할 수있는 작업을 제한합니다
성능을 향상시키는 한 가지 방법은로드 밸런싱 장치 / 서비스가 TCP80 / 443을 수신 대기하도록하여 요청을 다른 포트 및 / 또는 ip (로컬 밸런싱) 또는 다른 원격 사이트 (글로벌 밸런싱)의 서버로 리디렉션하는 것입니다. 그러나 이것은 완전히 또 다른 주제입니다
다른 물리적 연결이나 더 높은 네트워크 대역폭 또는 서버 처리 성능을 위해 다른 포트를 착각하지 마십시오. 서버가받는 것은 주소의 일부로 포트 번호를 갖는 TCP 또는 UDP 패킷입니다. 그들은 여전히 동일한 전선을 통해오고 동일한 네트워크 인터페이스 하드웨어 및 드라이버 등을 거치게됩니다.
서버에 두 개의 패킷을 보내려는 경우 서버가이 두 개의 패킷을 처리하는 데 소비하는 리소스 측면에서 두 포트 중 하나에 다른 포트 번호 또는 동일한 포트 번호가 있는지 여부는 중요하지 않습니다. 동일에 가깝다.
따라서 이는 성능을 향상시키는 방법이 아닙니다.
이것에 대한 유일한 예외는 동시에 실행되는 두 개의 다른 악마 (또는 동일한 사본 두 개)를 두 개의 다른 포트 번호에 연결하고 이러한 악마 각각이로드에 따라 매우 크게 확장되지 않는 경우입니다. 일반적으로 그렇지 않습니다.
Remi가 언급했듯이 포트 80 및 443은 HTTP / HTTPS의 "기본"포트입니다.
대부분의 네트워크 및 방화벽은이 포트를 통과하는 트래픽을 차단하지 않습니다. 따라서 방화벽이 서비스를 차단하는 것에 대해 걱정할 필요가 없기 때문에이 포트를 사용하는 것이 더 쉽습니다. 그렇지 않으면 방화벽 규칙을 재구성하고 규정 준수 / 보안의 승인을 받아야합니다.
여기에있는 다른 사람들이 말했듯이 집에서 호스팅하지 않는 한 기본적으로 포트 80 이외의 다른 포트에서 웹 서버를 호스팅하는 것은 의미가 없습니다. 많은 ISP가 아웃 바운드 TCP / UDP 포트 80 및 443 ( IANA 는 각각 HTTP 및 HTTPS 로 정의 )을 제한하며,이 경우 해당 포트를 사용하면 사이트 로딩 속도 등이 저하됩니다. 그러나 IANA 는 3 개의 HTTP-ALT 포트를 할당 했습니다. TCP와 UDP 모두. 이 포트는 591, 8008 및 8080입니다.이 포트를 사용하는 것도 가능하지만 서버 관리자의 수명을 연장시킬 수 있습니다.
포트 번호 소스 : https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml