인터넷을 통해 피어 투 피어는 어떻게 작동합니까?


15

내가 이해 한 바에 따르면 라우터가 사용 하는 라우팅 메커니즘 을 알지 못하면 네트워크 외부에서 로컬 네트워크의 컴퓨터로 패킷을 보낼 수있는 방법이 없습니다 .

다음과 같은 설정이 있다고 가정합니다.

  1. 컴퓨터 -A, IP 192.168.1.2 (기본 게이트웨이 192.168.1.1)

  2. 컴퓨터 -B, IP 192.168.1.3 (기본 게이트웨이 192.168.1.1)

  3. 라우터 -C, IP 192.168.1.1 (외부 IP 1.1.1.1)

  4. 라우터 -D (외부 IP 2.2.2.2)

Computer-A, Computer-B 및 Router-C는 동일한 로컬 네트워크에 속합니다. Router-D는 Computer-A로 데이터를 보내려고하지만 Router-C를 거치지 않고는이를 수행 할 수 없습니다.

이제 Router-C는 대상 포트가 1000이면 패킷을 Computer-A로 전달하고 대상 포트가 2000이면 패킷을 Computer-B로 전달합니다. 그러나이 라우팅 메커니즘 을 알고있는 유일한 장치 는 Router-C 자체입니다! Computer-A 나 Computer-B조차도 그것에 대해 알지 못합니다.

따라서 Router-D는 포트 1000을 통해 Router-C로 패킷을 보내는 경우 Computer-A로 패킷을 보낼 수 있지만, Router-D는 포트 1001이 아니라 포트 1000을 통해 패킷을 보내는 것을 어떻게 알 수 있습니까?

Bittorrent와 같은 P2P 프로그램은 어떻게이 문제를 해결합니까? 내가 생각할 수있는 유일한 해결책은 Router-D가 모든 포트를 통해 Router-C로 패킷을 보내서 Computer-A로 전달되도록하는 것입니다. 그러나 더 나은 해결책이 있습니까?

답변:


9

혼란은 잘못된 가정에서 비롯됩니다.

그러나이 라우팅 메커니즘을 알고있는 유일한 장치는 Router-C 자체입니다! Computer-A 나 Computer-B조차도 그것에 대해 알지 못합니다.

왜, 왜‽ 그렇다면 라우터가 해당 포트를 해당 IP로 전달하도록 구성한 이유는 무엇입니까? 특정 포트를 사용하도록 P2P 클라이언트를 설정 한 다음 해당 라우터를 설정해야합니다.

그러나 Router-D는 포트 1001이 아닌 포트 1000을 통해 패킷을 보내는 방법을 어떻게 알 수 있습니까?

특정 포트 (해당 프로토콜의 표준 또는 비표준)를 사용하도록 P2P 클라이언트를 구성하기 때문입니다.

내가 생각할 수있는 유일한 해결책은 Router-D가 모든 포트를 통해 Router-C로 패킷을 보내서 Computer-A로 전달되도록하는 것입니다. 그러나 더 나은 해결책이 있습니까?

그것보다 훨씬 간단합니다. 클라이언트가 피어에 연결하면 사용할 포트를 지정하여 피어가 해당 포트의 데이터를 전송합니다.

흠, 그러나 Bittorrent는 라우터의 동작을 올바르게 변경하지 않습니까? superuser.com/a/187190/78897에 설명 된대로 일부 라우팅 메커니즘이 동적 일 수 있으므로 Computer-A는이를 어떻게 알 수 있습니까?

클라이언트는 라우터에 직접 영향을 미치지 않지만 클라이언트의 동작에 맞게 라우터를 구성 / 지능적으로 구성 할 수 있습니다. 라우터와 클라이언트 모두에서 UPnP 를 사용 하여 연결을 자동으로 구성 할 수 있으며 대부분의 라우터에는 포트 전달 메커니즘의 일부로 상태 저장 검사 기능이 있습니다.

즉, 임의의 포트에서 연결을 동적으로 만들 수 있으며 라우터는 모든 것을 임의의 의미없는 연결로 보는 대신 발생하는 상황을 추적 할 수 있습니다. 이렇게하면 필요에 따라 연결을 전달할 수 있습니다. 예를 들어 방금 발생한 다른 연결에 대한 응답 이기 때문입니다 .

동일한 프로그램을 사용하는 여러 시스템이있을 때 문제가 발생합니다. 여러 대의 시스템이 동일한 라우터에 연결되어 있고 동일한 IP를 공유하고 동적 포트를 사용하면 신속하게 관리 할 수 ​​없게되며 상태 저장 검사를 수행하더라도 올바르게 작동하는 것은 어렵지 않습니다. 이 경우 정적 포트 (기본값 또는 기타)를 사용해야합니다.


SmartSniff 또는 TCPView 와 같은 프로그램을 사용 하여 연결을 모니터링하는 경우 P2P 연결에는 일반적으로 들어오는 연결의 대상으로 구성된 포트 (또는 클라이언트의 기본값)와 기본 또는 사용자 정의 / 소스의 임의 포트, 발신 연결의 경우 그 반대.


흠, 그러나 Bittorrent는 라우터의 동작을 올바르게 변경하지 않습니까? superuser.com/a/187190/78897에 설명 된대로 일부 라우팅 메커니즘이 동적 일 수 있으므로 Computer-A는이를 어떻게 알 수 있습니까?
Pacerier

포트 포워딩. 미리 설정했습니다.
UtahJarhead

@Pacerier 라우터와 p2p 앱 모두 UPnP를 사용하는 경우 포트 전달을 동적으로 수행 할 수 있습니다. 이 경우, Bittorrent 라우터의 동작을 변경합니다.
zero2cx

@ zero2cx, 라우터의 동작을 변경하지 않고 피어 투 피어를 수행 할 수 있습니까?
Pacerier

당신이 NAT (연결을 공유하는 여러 시스템을) 갖고 싶어 @Pacerier, 당신은 해야한다 어떻게 든 기술적으로는 잘 (연결을 위치를 알고 라우터를 구성 할 수 당신이 제안처럼 모두가 모든 포트에 대한 모든 연결을 분출 가지고 있지만, 그것은 끔찍할 것입니다). 이를 정적으로 (IP 및 포트 구성) 또는 동적으로 (UPnP) 수행 할 수 있습니다.
Synetech

4

귀하의 질문은 인터넷의 핵심과 라우팅의 정의에 닿습니다. 귀하의 예에서 라우터 D는 다음 두 가지 전제에 따라 컴퓨터 A로 데이터를 보냅니다.

  • 컴퓨터 A에 데이터를 보내라는 메시지가 나타납니다.
  • 이미 컴퓨터 A의 데이터를 처리했습니다.

귀하의 시나리오는 첫 번째 옵션 인 라우터 D가 컴퓨터 A로 보내려고합니다. 그러나 어떻게 도착합니까? 라우터간에 공유되는 라우팅 테이블 을 사용하여 그렇게합니다 .

라우터 C는 라우터 D를 포함하여 "192.168. *"네트워크를 "알고"있다는 사실을 알고있는 모든 라우터에 정기적으로 업데이트를 보냅니다. 라우터 D는 이미 라우터 C가 해당 네트워크를 알고 있음을 알고 있습니다.

따라서 데이터가 컴퓨터 A로 향할 때는 먼저 네트워크에서 해결합니다. 따라서 라우터 D는 "192.168. * 네트워크를 찾아야합니다. 알고 있습니까? 아닙니까. 다른 사람을 알고 있습니까? 예. 라우터 C는 어떻게합니까? 라우터 2.2를 통해 라우터 C에 어떻게 가야합니까? 2.2 인터페이스. "

그런 다음 라우터 D는 데이터를 라우터 C로 보냅니다. 라우터 C는 데이터를 가져옵니다. "아, 라우터 D의 데이터는 있지만 192.168 네트워크 용입니다. 해당 네트워크를 알고 있습니까? 예, 내 192.168.1.1 네트워크를 통해" 전달합니다.

IP 및 MAC 주소 지정을 해결하기 위해 수행해야 할 다른 작업이 있지만 ARP 및 로컬 네트워킹이 아닌 라우팅 자체를 다루고 있습니다.

원격 라우터가 라우팅 메커니즘을 알아야한다는 첫 번째 가정이 여기에서 작동하지 않는다는 것을 알 수 있습니다. 라우터 C는 라우터 C가 EIGRP, RIP, RIPv2, OSPF 등을 사용하는지 상관하지 않습니다. 중요한 것은 업데이트가 있다는 것입니다. (물론이야, 방법 이 업데이 트를 가지고 다른 문제의 그, 다시 동기화에있는 두 개의 여행을 보장하는 것이 중요하다.하지만.)

두 번째 가정 (포트 번호가 라우팅의 요소 임)도 올바르지 않습니다. 라우터는 일반적으로 라우팅 정보를 결정하기 위해 포트 정보가 필요하지 않습니다. (이는 일부 새로운 네트워크 기술로 인해 약간 변경되었으며 주로 방화벽과 프록시에 적용되지만 여전히 더 넓은 가정이 여전히 "진정한"라우터에 적용됩니다.

예를 계속하면 라우터 C는 컴퓨터 A에 특정 포트의 데이터가있을 것으로 예상되는 서비스가있을 수 있으므로 (시나리오별로) 포트 1000에서 데이터를 전달합니다. 그러나 라우터 D가 포트 1000으로 전송했기 때문에해야 할 일이 있습니다. 데이터의 작성자가 해당 포트의 라우터 D로 전송했기 때문에 라우터 D는 해당 포트에서만 전송합니다.

귀하가 묻는 질문을 반영한 비트 토렌트 또는 P2P 프로그램의 포함을 이해하지 못합니다. 같은 설명이 적용됩니다. 라우터는 특정 장치 (또는 IP)를 특정 포트와 연결하는 포트 트리거링으로 구성 할 수도 있습니다. 트래픽이 포트 1234에 들어올 때 라우터는 장치 ABCD에 데이터를 보내는 것을 알고 있습니다. 일반적으로 발신 TCP 포트와 연결됩니다. 즉, 포트 7890에서 트래픽을 보내면 라우터는 들어오는 트래픽이 포트 1234에 있다는 것을 알고 나에게 보냅니다.

그러나 포트 트리거링은 (원격) 라우팅 결정과 관련이 없으며 라우터가 LAN에 사용하는 내부 MAC / IP 테이블과 관련이 있습니다.

업데이트 / 편집 : 귀하의 의견에 대한 답변과 정교화. 라우터 D는 IP 주소 (192.168.2.2)로만 컴퓨터 A를 알고 있습니다. 그러나 라우터 C는 IP 주소와 MAC 주소로 컴퓨터 A를 알고 있습니다. MAC (Media Access Control)은 국제 표준에 의해 정의 된 고유 한 (보통 ...) 48 비트 식별자입니다. LAN (유선 및 무선)에 연결된 모든 장치에는 고유 한 MAC 주소가 있어야합니다.

라우터 (라우터 C)는 IP 주소와 MAC 주소를 테이블 (MAC 주소 테이블)에 연결합니다. 따라서 트래픽이 라우터 C로 들어오고 라우터가 "로컬"을 인식하면 MAC 주소 테이블 조회를 수행합니다. 라우터는 말 그대로 프레임 주소 정보를 변경합니다.

컴퓨터 A의 대상 MAC 주소를 갖도록 계층 2 대상 정보를 재구성 (재기록)하지만 IP 주소 정보 (계층 3)는 동일하게 유지합니다.

경로가 MAC 주소를 모르는 경우 또는 표에 IP-MAC 관계가없는 경우 ARP (주소 확인 프로토콜)라고하는 "HEY,이 네트워크의 모든 사용자에게이 MAC 주소가 있습니까?"라고 묻습니다. 또는 때때로- "모두, 귀하의 MAC 주소는 무엇입니까?"). 적절한 장치 / 장치가 응답하고 라우터가 IP-MAC 테이블을 작성합니다.


따라서 Router-D는 포트 60000 (사전 구성된)을 통해 Router-C로 패킷을 전송하고 Router-C는 패킷을 수신하지만이 패킷이 Computer-A로 전달된다는 것을 어떻게 알 수 있습니까?
Pacerier

1
라우터 D는 이미 최종 목적지 인 컴퓨터 A를 알고 있습니다. 라우터 D는 IP 주소 192.168.2.2로만 컴퓨터 A를 알고 있습니다. 그러나 라우터 C는 IP 주소 (192.168.2.2)와 MAC 주소라는 두 가지 방법으로 컴퓨터 A를 알고 있습니다. 자세한 정보로 답변을 업데이트하겠습니다.
John

2

포트 트리거링. 웹 서버는 요청한 후 어떻게 웹 페이지를 보냅니 까? 당신이 요청했기 때문에. 요청하면 라우터는 응답을 기대하고 응답을 받으면 적절한 PC로 전달합니다. 일부 프로그램은 실제로 진행되고 있지 않더라도 특정 PC의 신호를 예상하여 시작되도록 트리거하기 위해 작성되었습니다.

일부 모델에는 기본 통신에 사용되는 중앙 서버가 있습니다. 예를 들면 다음과 같습니다.

  • Client1은 양방향 통신을 위해 서버에 로그인합니다.
  • Client2도 같은 내용으로 로그인합니다.

서버는 이제 Client1 및 Client2에있는 모든 파일을 알고 있습니다.

  • Client2가 "파일 X를 Client1에서 원합니다"라고 말합니다.
  • 서버는 Client1에게 "Client2는 X 파일을 원한다"고 알려줍니다.
  • 클라이언트 1은 가비지 조각 데이터를 Client2의 퍼블릭 IP로 전송하고 포트 트리거링을 설정하여 Client2의 응답을위한 포트를 엽니 다.
  • Client2는 초기 신호를 Client1의 공용 IP로 보냅니다.

Client1은 라우터가 Client2 용 포트를 열도록 속였습니다.

BitTorrent 또는 원래 Napster (iirc)와 같은 일부 경우 최적의 작동을 위해 라우터의 포트를 전달해야합니다.

처음에 연결할 포트를 아는 다른 클라이언트의 경우 클라이언트가 어떤 포트를 사용하는지에 대해 웜이나 서버에 말했기 때문입니다. BitTorrent는 트래커를 자주 사용하며 어떤 클라이언트가 어떤 포트를 사용하는지 추적합니다.


사용할 포트를 아는 한 특정 포트에서 수신 대기하도록 클라이언트를 구성합니다. 클라이언트는 어떤 포트에 어떤 포트가 있는지 (BitTorrent의 경우와 같이) 웜에 알려 다른 클라이언트가 무엇을 연결해야하는지 알 수 있습니다. PC가 그들에게 말했다.
UtahJarhead

내 첫 번째 부록이 작성되는 동안 답장을했다고 생각합니다. 옳은?
유타 Jarhead

그러나 라우터가 라우터 일 때 PC가 라우팅 메커니즘을 어떻게 알 수 있습니까? superuser.com/a/187190/78897
Pacerier

아니요, 라우팅을 알 필요가 없습니다. 대부분의 P2P 클라이언트가 제대로 작동하려면 라우터에서 포트 전달을 올바르게 구성해야합니다. 그것없이, 당신은 당신이 처음 이야기하는 다른 클라이언트와 통신 할 수 있습니다. 대화를 시작할 수 없습니다. 나는 나의 대답 (이후 마지막 문단)에서 간단히 이것을 만졌다
UtahJarhead

그러나 포트 포워딩은 관리자가 미리 구성한 경우에만 가능합니다. Bittorrent가 라우터를 재구성 한다고 말하는가 ?
Pacerier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.