문제

에서 Copilot에 대한 Joel의 게시물:

직접 연결!우리는 Fog Creek Copilot이 방화벽이나 NATS에 상관없이 모든 네트워킹 상황에서 연결할 수 있도록 항상 최선을 다했습니다.이를 위해, 양 당사자는 서버에 아웃 바운드 연결을하여 자신을 대신하여 트래픽을 전달합니다.글쎄, 많은 경우에, 이것은 필요하지 않습니다.버전 2.0은 다소 영리한 일을합니다.서버를 통한 초기 연결을 설정하므로 100% 안정성으로 즉시 연결됩니다.그러나 일단 연결되면 모두 조용히 배경에서 직접 연결하는 방법을 찾습니다.할 수 없다면 큰 문제는 없습니다.당신은 우리 서버를 통해 계속 릴레이를합니다.직접 피어 투 피어 연결을 만들 수 있다면 데이터를 직접 연결로 조용히 이동시킵니다.아마도 훨씬 빠른 의사 소통을 제외하고는 아무것도 눈치 채지 못할 것입니다.

서버 연결을 P2P 연결로 어떻게 변경합니까?

도움이 되었습니까?

해결책

꽤 까다롭고 흥미롭습니다.세부 사항이 잘못되었다고 확신하지만 개요는 다음과 같습니다.

프로그램은 이미 Joel의 서버를 통해 서로 통신할 수 있으므로 서로 및 Joel의 서버와 정보를 교환할 수 있습니다.또한 Joel은 외부 IP 주소를 가지고 있으며 내부 IP 주소에 대한 Joel 정보를 제공합니다.

그들은 이 홀 펀치 기술을 시도하기로 결정했습니다.컴퓨터 A는 B의 외부 IP 주소를 사용하여 컴퓨터 B와 TCP 연결을 시작합니다.통과하지는 않지만 A의 라우터에게 주어진 포트에서 B로부터 들어오는 패킷을 허용해야 한다고 알려주는 것입니다.

컴퓨터 B는 동일한 작업을 수행하지만 A의 라우터가 B가 보낸 것과 일치하는 포트/IP 조합을 열었기 때문에 해당 메시지는 A로 전달됩니다(여기서 발생하는 포트 마술이 있습니다. 이는 사소하지는 않지만 실행 가능합니다).

B의 라우터는 B가 특정 포트 및 IP에서 A와 연결을 시작한 것을 기억하므로 A의 패킷은 이제 라우터를 통과하여 B로 올바르게 흐릅니다.

따라서 실제로는 매우 간단하지만 구현에는 특히 새로운 TCP 연결에 포트가 제공되는 방법과 NAT 라우터가 어떻게 할당되는지에 대한 세부 정보가 있습니다. 일반적으로 TCP 요청과 외부 포트에 매핑되는 방법을 처리합니다.이러한 세부 사항은 흥미롭고 어렵습니다.

-아담

다른 팁

"라는 기술이 있습니다.홀 펀칭"는 "Cone" NAT(Cone은 라우터의 기술 제품군)와 잘 작동합니다.100% 확실한 기술은 아니지만 현재는 라우터의 약 80%에서 UDP와 잘 작동합니다.

홀 펀칭을 실현하기 위한 몇 가지 라이브러리 구현이 있습니다. 충격 (위키피디아)

나는 간단한 버전이 서버 연결을 끊고 P2P 연결로 대체한다는 것이라고 생각합니다.

다음과 같은 내용이 있습니다.

  1. Machine1은 부조종사의 서버에 연결됩니다.
  2. Machine1은 부조종사의 서버에 연결됩니다.
  3. Machine1은 부조종사의 서버에 연결됩니다.
  4. 이후 Machine2가 연결되고 화면 공유가 시작됩니다.
  5. Machine2는 Machine1이 연결할 포트를 엽니다.
  6. Machine1은 Machine2의 현재 열려 있는 포트에 연결을 시도합니다.

이 연결이 설정된 경우:

  1. 부조종사 서버와의 연결이 끊어졌습니다.
  2. 대신 데이터는 두 시스템 간의 직접(P2P) 연결을 통해 전송됩니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top