저는 UDP 소켓으로 프로그래밍하고 있습니다 C
. 포트에서 수신 대기하려면 라우터에서 포트를 전달해야 합니다. 제 질문은 이 작업을 피하면서도 인터넷을 통해 계속 통신할 수 있는 방법입니다. 소켓을 사용하여 통신할 수 없는 경우 가능한 가장 낮은 수준은 무엇입니까? 즉, 모든 장치는 http 서버를 수신할 수 있으므로 http 서버를 잠금 해제하는 유일한 방법입니까?
답변1
일반적으로 ISP는 IP 주소를 제공하며 홈 라우터도 IP 주소를 제공합니다.네트워크 주소 해석(NAT) 홈 네트워크의 모든 장치가 라우터 자체와 동일한 주소를 가진 단일 장치인 것처럼 ISP에게 가장합니다.
따라서 누군가 외부에서 홈 네트워크에 연결하려는 경우 라우터는 서비스를 실행 중인 홈 네트워크의 장치로 "포트를 전달"해야 합니다. 외부에서 볼 수 있는 유일한 IP 주소는 라우터의 IP 주소이기 때문입니다.
이 작업을 원하지 않는 경우 유일한 옵션은 라우터에서 직접 서비스를 실행하거나 ISP에서 라우터 연결을 끊고 서비스를 실행하는 컴퓨터를 직접 연결하는 것입니다(하드웨어가 있는 경우).
어떤 프로토콜을 사용하더라도 다른 방법은 없습니다.
ISP에 비용을 지불하여 여러 IPv4 주소를 제공할 수도 있습니다(비용이 많이 들 수 있음). 또는 ISP가 IPv6 전역 접두사를 제공하는 경우 홈 네트워크의 각 장치는 외부에서 접근할 수 있는 자체 IPv6 주소를 갖게 됩니다. 따라서 NAT나 포트 전달이 필요하지 않지만 IPv6에서만 작동합니다.
OTOH, 포트 포워딩 설정은 흑마술이 아니므로 그냥 하세요.
편집하다
"웹사이트를 방문"하면 로컬 http고객원격 http에 접속할 것입니다섬기는 사람, 라우터의 NAT는 개인 장치 주소에서 나가는 패킷의 소스 주소를 ISP의 IP 주소로 다시 씁니다. 또한 로컬 장치가 나가는 연결을 열었음을 기억하고 해당 연결에 속하는 수신 패킷이 도착하면 대신 대상 주소를 다시 작성하여 로컬 장치로 보냅니다. NAT입니다.
그래서나가는로컬 장치에서 연결하는 경우 포트 전달이 필요하지 않습니다. NAT가 이를 처리해 드립니다. ~을 위한들어오는연결(예: http를 실행하는 경우)섬기는 사람, 라우터에 "포트 80을 다음 로컬 장치로 전달하십시오"라고 알려야 합니다.
라우터 설정에 액세스하지 않고 포트를 여는 방법은 무엇입니까?
~을 위한들어오는연결할 수 없습니다. 내가 설명하려고 노력한 것처럼.
편집하다
UDP용 예제 프로그램을 Google에 검색하면 항상 하나가 있을 것입니다.섬기는 사람청취 포트 및고객청취하는 대신 서버에 연결됩니다(서버와 클라이언트 모두 양방향으로 패킷을 교환할 수 있음). 그래서 "포트를 듣지 않고 정보를 수신하는 방법"은 서버가 아닌 클라이언트를 작성하면 서버가 클라이언트에 데이터를 보낼 수 있으므로 클라이언트가 "정보를 수신"하는 것입니다.
포트 포워딩이 없으면 NAT 뒤에서 서버를 실행할 수 없습니다. 그게 다야. 몇 번이나 물어봐도 마찬가지입니다. TCP도 아니고 UDP도 아니고 "저수준 프로토콜 사용"도 아닙니다.
라우터의 GUI에서 포트 전달을 활성화하지 않으려는 경우: 많은 라우터에서는 UPnP를 통해 때로는 일시적으로 포트 전달을 설정할 수 있습니다. 귀하의 라우터에 이 기능이 있을 수도 있고 없을 수도 있습니다.
일반적인 유형의 서버에 먼저 접속한 다음 NAT 뒤의 다른 피어와 연결을 설정하는 것과 같은 다른 트릭도 있습니다(예:현기증규약).
하지만 NAT 뒤에 있다면먼저 서버에 접속해야 합니다"진짜" 인터넷에서. 서버는 포트에서 수신 대기하지만 클라이언트는 수신하지 않습니다. 또는 포트에서 수신 대기하는 서버가 있는 경우 포트 전달을 설정해야 합니다. 다른 옵션은 없습니다. 그것으로 살아라.