중간 서버없이 TCP 또는 UDP를 통해 진정한 P2P 통신을 설정하는 방법이 있습니까? 두 대의 컴퓨터가 공인 IP 주소만을 가지고 있지만 NAT 라우터 나 사설망 뒤에 있다면 까다 롭습니다. 사실 더 자세히 살펴볼수록 더 많은 것 같습니다. 평범한 것은 불가능하다. 나는 STUN, TURN 및 ICE 프로토콜과 구멍 펀칭을 발견했다. 그러나 나는 그들이 적어도 연결을 설정하기 위해 일종의 서버를 필요로한다는 것을 이해한다. 나는 겉으로보기에는 너무 단순하기 때문에 무언가가 놀랍다. 나는 무엇인가 놓치고 있는가? 이상적으로 나는 Golang을 사용하여 솔루션을 찾고 있는데, C++의 도움이나 예제도 유용 할 것입니다. 감사합니다.P2P TCP/UDP 연결 설정 (NAT 통과)
0
A
답변
1
이것은 엄격한 Go 질문이 아닙니다. 일반적인 네트워킹 질문입니다.
이렇게 어려운 이유는 인터넷이 NAT를 지원하도록 설계되지 않았기 때문에 NAT가 방금 발생했으며 많은 기능을 무력화했기 때문입니다. 문제의 깨끗한 해결책은 NAT가없는 IPv6로 전환하는 것이지만 가능하지 않을 수도 있습니다.
NAT 상자가 NAT-PMP 또는 uPNP를 지원하는 경우이를 사용할 수 있습니다. 가장 간단한 방법은 libminiupnpc
에 대한 cgo 바인딩을 만들거나 네이티브 Go 라이브러리를 위해 낚시를 갈 수 있습니다.
NAT가 이러한 프로토콜 중 하나를 지원하지 않는다면 구멍 펀칭은 깨지기 쉽고 구현하기 어려운 기술 일 수 있으므로 운이 좋지는 않을 것입니다.
관련 문제
- 1. NAT 뒤의 UDP P2P 연결
- 2. P2P 연결을위한 NAT 트래버스 구현
- 3. (android?) p2p 응용 프로그램에서 NAT 통과 기술 구현 예
- 4. Android - Java TCP 연결 NAT 통과
- 5. P2P 개념을 이해하는 Nat Punchthrough
- 6. UDP, NAT 및 설정 "연결"
- 7. NAT, P2P 및 멀티 플레이어
- 8. 파이썬 P2P 네트워킹 (NAT Punchtrough)
- 9. NAT 통과 및 IPv6
- 10. 의 IPSec NAT 통과
- 11. 외부 서버가없는 NAT 통과
- 12. UDP NAT 통과
- 13. 인터넷을 통한 Android P2P (직접 연결) (NAT 뒤)
- 14. NAT 통과 - STUN을 사용한 성공 확률
- 15. P2P 연결 설정 또는 다른 사람에게 "소켓 전달"
- 16. NAT 뒤에 TCP 연결
- 17. 외부에서 캐리어 기반 NAT (및 홈 NAT) 내부의 피어에 연결 하시겠습니까?
- 18. 여러 기기 유형에서 방화벽 및 NAT 뒤의 P2P 전송 방법
- 19. P2P 연결 및 C#
- 20. P2P 연결 만들기 iOS
- 21. 포트 포워딩 (P2P 연결)
- 22. 서버가없는 P2P 서버
- 23. NAT 뒤에있는 클라이언트에 서버 연결
- 24. FTP 방해 NAT 서버 연결
- 25. p2p 모델의 모바일 네트워크에서의 NAT 펀치 - 스루 (punch-through)?
- 26. P2P 애플리케이션 개발
- 27. 연결 WiFi p2p android, WIFI_P2P_CONNECTION_CHANGED_ACTION
- 28. C#에서 P2P 연결 수립
- 29. ActionScript 3.0 암호화없이 P2P 연결?
- 30. Android : NAT 순회?
'라우터 뒤에있는 경우'주요 문제는 NAT에 있으며 이는 결국 IPv4에 주소가 없기 때문입니다. NAT가 없다면 간단 할 것입니다. 세 번째 호스트가 없으면이 작업을 수행 할 수 없습니다 (IPv4의 경우). 한쪽 끝에서 연결을 시작해야하며 다른 라우터는 뒤에 어떤 호스트가 대상인지 알 길이 없습니다. – deviantfan
[libp2p] (https://github.com/libp2p/go-libp2p)를 보았습니까? –
@ChristopherWaldon 흥미롭게 보이지만 여전히 WIP이며 ICE가 제공하지 않는 것, 즉 다른 연결 유형을 사용할 수없는 경우에도 여전히 서버 릴레이에 빠져 있습니다. 그래도 고마워. – ChrysmPsy