
나는 포트의 실제 사용과 작동 방식을 어느 정도 이해하고 있습니다. 그러나 몇 가지 질문을 해결하고 싶습니다.
- 서버 소켓에 대한 포트를 지정하지 않고 요청을 보내면 어떻게 되나요?
- 프로세스가 특정 포트를 수신 대기하는 대신 내 IP 주소로 전송된 모든 요청이 동일한 프로세스에서 처리되도록 시스템을 설정하는 방법이 있습니까? 이 경우 클라이언트는 요청에서 포트를 생략할 수 있습니다.
- 질문 2를 토대로, Raspberry Pi와 같은 장치에서 일종의 서버를 실행하고 싶다면 내 IP 주소가 동일한 서버를 사용하여 들어오는 모든 네트워크 요청을 처리하는 내 RPi로 라우팅되도록 할 수 있습니까? ? 즉, 사람들은 내 서버에 연결하기 위해 포트 번호가 아닌 IP 주소에 연결하기만 하면 됩니다.
답변1
요청을 보낼 때 IP 외에 포트 번호를 제공해야 하는 이유는 무엇입니까?
TCP(및 UDP) 프로토콜이 이를 요구하기 때문입니다. 이는 프로토콜 사양의 일부입니다.
서버 소켓에 대한 포트를 지정하지 않고 요청을 보내면 어떻게 되나요?
포트 번호를 지정하지 않으면 아마도 API 호출의 해당 부분에 0이 있을 것입니다. 포트 0은 예약된 포트이며 일부 구현에서는 포트가 시스템에 의해 동적으로 할당된다는 의미로 이를 사용합니다.
프로세스가 특정 포트를 수신 대기하는 대신 내 IP 주소로 전송된 모든 요청이 동일한 프로세스에서 처리되도록 시스템을 설정하는 방법이 있습니까?
TCP나 UDP 전송 계층 프로토콜이나 이를 기반으로 구축된 애플리케이션 수준 프로토콜을 사용하는 경우에는 그렇지 않습니다. HTTP와 같은
일부 운영 체제에는 OS의 일부로 단일 프로세스가 있지만 특정 응용 프로그램에 대한 연결을 전달합니다.
내 IP 주소가 내 RPi로 라우팅되도록 할 수 있나요?
들어오는 모든 연결 요청을 rPi로 라우팅하도록 라우터를 구성할 수 있습니다.
사람들은 내 서버에 연결하기 위해 포트 번호 없이 IP 주소에 연결하기만 하면 됩니다.
HTTP와 같은 표준 프로토콜을 사용하지 않습니다.
Berkely Sockets과 같은 표준 API를 사용하는 것은 불가능하다고 생각합니다. 약간의 노력을 기울이면 자신이 고안한 다른 또는 새로운 전송 계층 프로토콜을 사용할 수 있다고 생각합니다. 그 모든 불편을 겪으려면 꽤 확실한 이유가 필요할 것입니다.
답변2
서버 소켓에 대한 포트를 지정하지 않고 요청을 보내면 어떻게 되나요?
소켓은 정의에 따라 IP + 포트입니다. 포트가 존재하는 이유는 시스템의 여러 프로그램이 트래픽을 보내고 받을 수 있고 포트는 양쪽 끝의 프로세스를 구별하는 데 사용되기 때문입니다.
프로세스가 특정 포트를 수신 대기하는 대신 내 IP 주소로 전송된 모든 요청이 동일한 프로세스에서 처리되도록 시스템을 설정하는 방법이 있습니까?
프로세스가 각 포트에 하나씩 65535개의 소켓을 열도록 할 수 있습니다. 아마도 직접 작성해야 할 일종의 이상한 중개 프로그램 없이는 작성되지 않은 기존 프로그램이 이 작업을 수행하도록 만들 수 없습니다.
iptables
Linux에서는 이 작업을 수행하거나 이에 상응하는 구성을 생성할 수 있습니다 .
Raspberry Pi와 같은 장치에서 일종의 서버를 실행하고 싶다면 내 IP 주소가 동일한 서버를 사용하여 들어오는 모든 네트워크 요청을 처리하는 내 RPi로 라우팅되도록 할 수 있습니까?
대부분의 표준 가정용 라우터의 기본 상황은 라우터가 외부에서 보내는 트래픽을 무시하는 것입니다.
거의 모든 라우터에서는 포트 전달을 수행할 수 있습니다. 이는 라우터가 특정 포트에서 들어오는 트래픽을 라우터 뒤의 개인 네트워크에 있는 특정 시스템으로 전달하도록 지시하는 것입니다.
원치 않는 수신 트래픽을 라우터 뒤의 개인 네트워크에 있는 특정 IP로 전달하도록 라우터에 지시할 수도 있습니다. 이곳을 DMZ라고 합니다.
답변3
포트는 여러 프로세스가 서버 간에 통신할 수 있도록 하는 프로토콜에 필수적입니다. 이는 실용적인 고려사항 그 이상입니다.
잘 알려진 서비스에는 DNS=53, HTTP=80, HTTPS=443, SMTP=25, Telnet=23, SSH=22, FTP=20&21 등의 포트가 할당되어 있습니다. 이러한 잘 알려진 서비스의 경우 포트를 지정할 필요가 없습니다. 서비스에 할당된 포트에서 실행 중인 경우 포트입니다. 할당된 포트는 Unix/Linux 플랫폼의 /etc/services에 나열됩니다.
- TCP와 UDP의 경우 포트가 없으면 연결할 수 없습니다. 헤더에는 소스 및 대상 포트에 대한 필드가 모두 포함됩니다. 이 필드에는 값이 0이더라도 항상 값이 있습니다.
- 인터페이스에 도착하는 모든 패킷을 캡처하는 것이 가능합니다. 이것이 tcpdump와 같은 도구가 작동하는 방식입니다.
- 1에서 설명한 것처럼 들어오는 모든 요청에는 포트 번호가 있습니다. SOHO 라우터는 일반적으로 DMZ를 지원하며 달리 라우팅되지 않은 모든 수신 요청을 DMZ에 할당된 IP 주소로 전달합니다. 대부분의 경우 서비스에 필요한 포트를 서버(Raspberry Pi)에 전달하기만 하면 됩니다. 이렇게 하면 서로 다른 서비스를 실행하는 여러 Raspberry Pi를 가질 수 있습니다.