2017-04-03 9 views
1

그래서 NAT-Punchthrough를 읽었습니다. 나는 아이디어를 얻고있는 것 같지만 그것을 구현하는 데 어려움을 겪고있다. 나는 여기서 한 걸음도 놓치고 있다고 느낀다. 인터넷 기반 연결과 관련하여 환경을 제어 할 수있는 권한이 없기 때문에이 기능을 테스트하는 것은 어렵습니다.P2P 개념을 이해하는 Nat Punchthrough

서버와 클라이언트의 외부 주소와 외부에서 볼 수있는 포트를 유지하는 "촉진자"로 실행할 SQL 서버가 있습니다. - 서버/클라이언트 IP/포트를 저장하는 웹 요청 (PHP 스크립트)을 통해 SQL 서버에 연결합니다. - 둘 다 알고있는 경우 클라이언트와 서버가 모두 연결을 시도합니다 (서버 호스트 설정된 포트에서 클라이언트가 설정된 포트를 통해 연결) - 아무런 의미가 없습니다.

여기에 2 개의 알 수없는 점이 있으며 사용자와 함께 확인하고 싶습니다. NAT-Punchthrough가 정확한 (내부/LAN) 포트를 가지고 첫 번째 단계를 수행해야한다는 것은 사실입니까? 그 다음 단계에서 연결할 계획입니까?

그렇다면 내 서버가 수중에서 작동하는 방법을 정확히 모르기 때문에 연결에 사용할 초기 고정 포트를 더 필요로할지 모르지만 적어도 힌트를 제공합니다.

누구든지이 문서에 대해 더 알고 있다면 알려 주시기 바랍니다.

출처 :
Programming P2P application
http://www.mindcontrol.org/~hplus/nat-punch.html

답변

1

NAT는 교육 추측의 원칙에 작품을 통해 펀치. 보통 IP 마스커레이딩을하는 장치와의 연결을 생성하는 데 사용됩니다. 이것은 대부분의 가정용 인터넷 모뎀에서 NAT가 IP Masquerading을 나타 내기 위해 상호 교환 적으로 사용되는 지점에서 사용되는 기술입니다.

가정용 모뎀과 같은 NAT 시스템 뒤에있는 장치에서 연결할 때. 인터넷으로의 아웃 바운드 연결에 사용될 포트를 제어 할 수 없습니다. 그러나 이러한 장치 중 많은 수가 특정 패턴을 사용하여 포트를 할당합니다. 예를 들어, 증분 숫자.

NAT punch through는 독립 NAT 장치 뒤에있는 두 개의 원본 시스템을 직접 연결하는 과정입니다. 세 번째 시스템 인 "facilitator"는 현재 아웃 바운드 연결에서 두 NAT 장치가 할당 한 출발지 포트 번호에 대한 탐지기 역할을합니다. IP 주소와 함께 원본 포트 번호가 다른 당사자에게 전송됩니다.

이제 영리한 질문에 답하십시오. 직접 연결하려는 두 시스템 모두 다른 시스템과 통신을 시작합니다. 그들은 facilitator가 탐지 한 알려진 포트 번호를 중심으로 포트 범위에 연결을 시도합니다. 이것은 추측입니다.

소스 시스템이 인터넷 연결을 허용하는 로컬 장치에 NAT 세션을 설정하기 때문에 두 원본 시스템이 연결을 시작해야합니다. 두 원본 장치 중 하나가 해당 NAT 세션 포트 번호 중 하나를 올바르게 추측하면 연결 설립되었습니다.

현실적으로 NAT 펀치를 사용하는 조직의 엔지니어는 아마도 더 많은 NAT 포트 할당 알고리즘을 검사하고 소프트웨어를 조정하는 데 시간을 할애했을 것입니다. NAT 장치를 통한 연결을 제어 할 수 있다면 몇 가지 테스트를 설정하고 다른 서버에 대한 연결간에 포트 번호가 어떻게 변경되는지 쉽게 확인할 수 있습니다.

+0

그래서 짧은 이야기가 짧습니다. 단지 1 포트 또는 선형 증분으로 우리 자신의 NAT- 펀치 스루를 만들 수 있다고 생각하는 것은 순진한 일이며 따라서 대신 우리에게이 "마법"비트를 제공하는 서비스를 찾아야합니다. – Smileynator

+0

시도 할 수없는 이유는 없지만 [이전 연구] (http://www.brynosaurus.com/pub/net/p2pnat/)에 따르면 일부 기술을 사용하면 성공률이 60 % 정도가 될 수 있다고합니다. 시도하고 결과를 얻는다면 - 다른 사람들이 자신이 한 일을 알면 커다란 피드백이 될 것입니다. –

+1

우리는 최소한 생산에 90 %까지 도달 할 수 있어야하므로이 문제로부터 벗어날 것입니다. NAT-Punchtrough를 제공 할 수있는 서비스가 있습니다. 그러나 내 지식에 그들은 모두 물건처럼 소켓을 할, 그래서 당신은 리눅스 serverto 실행이 붙어 있어이 마술을 할. 그들은 대략 90 % 성공을 주장한다. 100 %의 신뢰성을 원한다면 RELAY 서버를 사용하여 붙어 있습니다. RELAY 서버는 Photon Networking과 비슷합니다. 이것은 종종 비용이 많이 들고, 특히 우리가 보내고 자하는 데이터의 부하 때문에. 소규모 팀에 오기가 너무 어렵습니다! #지연 – Smileynator