피어 투 피어 : 피어를 찾는 방법
전용 중앙 서버를 사용하지 않고 피어를 찾는 알려진 방법이 있습니까?
예 : 인터넷 연결을 끊었다가 다시 연결하지만 매번 새 IP 주소를받는 피어가 있고 등록 할 전용 서버를 설정하지 않고 연결하고 싶습니다.
피어 이메일 주소를 사용하여 일종의 타임 코드와 함께 연결된 피어의 매니페스트를 주기적으로 전송하여 전용 서버의 필요성을 없애는 방법을 생각하고있었습니다. 이전에 알려진 모든 피어 주소를 시도한 후 연결할 수있는 피어가없는 경우 이는 폴백입니다. 그러나 동료를 찾는 기존 모델이 바람직합니다.
더 많은 것을 발견하기 위해 적어도 하나의 초기 피어를 알아야하는 방법은 없습니다. Gnutella 또는 Gnutella2 또는 더 간단한 Overnet (Storm Worm으로 유명 함)과 같은 완전한 P2P 프로토콜은 몇 명의 피어의 시작 목록을 가진 각 클라이언트를 기반으로합니다. 예를 들어 웹 기반 자동 추적기에서 이러한 정보를 얻을 수 있습니다. 클라이언트는 예를 들어 파일 검색을 위임 할 때 다른 피어에게 더 많은 주소를 요청하여 전체 네트워크 또는 그 일부를 검색합니다.
어떤 종류의 중앙 집중식 리소스도 가질 수없는 경우 최선의 방법은 브로드 캐스트 된 메시지를 통해 첫 번째 피어를 찾고 궁극적으로 IP 주소 검색을하는 것입니다. 첫 번째 방법은 의미가 있지만 98 % 이상의 경우 결과가 나오지 않습니다. 물론 이후의 접근 방식은 대부분의 국가에서 불법 일뿐만 아니라 인터넷을 남용하는 것입니다.
나는 정말로 일종의 중앙 추적기를 갖는 것을 다시 생각할 것입니다. 웹 서버의 PHP 스크립트처럼 간단 할 수 있습니다 (오늘날 gnutella 네트워크는 서로 알지도 못하는 사람들이 호스팅하는 10 개의 스크립트에 의해 유지됩니다). 그리고 이것은 확실히 이메일보다 더 가볍습니다 (적어도 스팸 필터로 인해 어쨌든 작동하지 않을 것입니다).
인트라넷 내의 제한된 피어의 경우 피어가 다시보고하도록 요청하는 브로드 캐스트 UDP 메시지를 알려진 포트로 보낼 수 있습니다.
데이터를 게시 할 수있는 기존 포럼을 활용하십시오. 비밀 IRC 채널을 생각하고, 사진에 데이터를 삽입하고 사진 공유 사이트 4chan에 게시합니까?, 애플리케이션이 captia 로그인없이 데이터를 게시하고 로그인 할 수있는 모든 사이트를 생각하십시오.
http://chatzilla.hacksrus.com/faq/#password
또 다른 전략은 디지털 통화 거래에 메시지를 삽입하는 것입니다. 맴돌고있을 것 같은 값싼 동전을 골라라 ... DOGE 또는 MOON 동전 일 수도있다. 앱에 지갑 기능을 구축하십시오. 앱이 제어하는 주소간에 마이크로 트랜잭션을 게시 할 수 있습니다. 여전히 광부 수수료가 있지만 이것은 동전의 일부에 불과합니다. 나중에 거래에 메타 데이터 추가를 금지하더라도 MOON의 IP 주소에 해당하는 거래를 할 수 있고 앱에 MOON 코인의 가상 주소를 사용할 수 있습니다. 새로운 노드가 온라인 상태가되면 블록 체인에서 무엇을 검색해야하는지 2daMOON % bootStr @ pM3을 알게됩니다. SEND-104.003021133 MOON IP = 104.3.21.133 값 비싼 제안이 아닙니다.
BitcoinQT 클라이언트는 노드를 찾기 위해 다양한 방법을 사용하며, 그중 일부는 사용자에게 유용 할 수 있습니다.
IRC는 더 이상 사용되지 않지만 구현하기 가장 쉬울 수 있습니다.
0.6.x 버전부터 비트 코인 클라이언트는 더 이상 기본적으로 IRC 부트 스트랩을 사용하지 않으며 버전 0.8.2부터 IRC 부트 스트랩에 대한 지원이 완전히 제거되었습니다. 아래의이 문서는 대부분의 이전 버전에 대해 정확합니다.
자신의 주소를 학습하고 공유하는 것 외에도 노드는 IRC 채널을 통해 다른 노드 주소에 대해 학습했습니다. irc.cpp를 참조하십시오 .
자신의 주소를 학습 한 노드는 자신의 주소를 닉네임으로 사용할 문자열로 인코딩했습니다. 그런 다음 # bitcoin00과 # bitcoin99 사이의 IRC 채널에 무작위로 가입했습니다. 그런 다음 WHO 명령을 내 렸습니다. 스레드는 채널에 나타난 줄을 읽고 채널에있는 다른 노드의 IP 주소를 디코딩합니다. 노드가 종료 될 때까지 영원히 루프에서이를 수행했습니다.
클라이언트가 IRC에서 주소를 발견했을 때 주소의 타임 스탬프를 현재 시간으로 설정했지만 51 분의 "페널티"를 사용했습니다. 이는 실제로 거의 한 시간 전에 본 것처럼 보였습니다.
세 가지 방법, 내 머리 위에 있지만 옵션 3을 사용하지 않는 한 연결을 시작하려면 항상 중앙 서버가 필요합니다.
- 연결 유지와 함께 알려진 피어 목록을 유지하는 중앙 서버.
- 일부 공통 리소스 피어를 유지하는 하나 이상의 중앙 서버는 서로를 검색하는 데 사용할 수 있지만 일단 연결되면 피어가 연결되어있는 한 더 이상 중앙 서버가 필요하지 않습니다 (BitTorrent와 같은 것). 피어링 된 연결도 연결할 수 있습니다.
- 포트 / IP 스캔 ( 권장하지 않음 ).
귀하의 예에서 피어가 등록되는 일종의 중앙 서버가 여전히 있습니다. 프로토콜이 유일한 차이점입니다.
오래된 질문이지만 나는이 문제에 대해 스스로 생각하고 있으므로 2 센트를 광고 할 것입니다. 요컨대, 노드가 하나 이상의 유효한 피어를 인식하는 경우 중앙 서버가 필요하지 않습니다. 새 노드는 현재 구성원에 의해 네트워크에 추가되어야합니다 (예 : 초대되거나 노드가 애플리케이션에 따라 다른 노드를 생성 함).
다음을 가정합니다.
에이전트는 동료를 추적합니다. 이 주소록의 크기와 항목 관리 방법은 시스템의 특성에 따라 다릅니다. 예 : 피어가 안정적인 주소를 사용하는 경우 피어가 연결되어있는 기간
에이전트는 다른 피어와 피어 정보를 공유합니다.
적어도 일부 에이전트는 주소록을 업데이트하기 위해 네트워크에 연결되는 주파수 노드에 비해 상대적으로 오랜 시간 동안 사용 가능합니다 (또는 노드에 안정적인 주소가 있음).
피어 주소 외에도 가용성 정보도 추적됩니다 (시스템에 따라 여기에 여러 옵션이 있습니다. 예를 들면 다음과 같습니다. 모두 다 아는)
새 에이전트는 하나 이상의 유효한 피어로 초기화됩니다 (중앙 노드 일 필요는 없으며 유효한 노드 일 수 있음).
악의적 인 동료가 가능성이있는 경우 신뢰 메커니즘이 필요합니다.
피어가 온라인 상태가되면 피어 테이블의 피어를 쿼리하여 활성 상태 인 피어를 검색하고 만료 된 동적 주소를 제거합니다. 노드는 피어 정보를 교환하고 스스로 연결될 수 있습니다. 이 피어 발견 / 교환은 충분한 크기 및 / 또는 품질이있는 경우 피어 목록까지 특정 수의 홉 또는 랜덤 워크를 통해 계속 될 수 있습니다.
몇 가지 추가 세부 정보 :
노드는 노드 주소가 변경되는 빈도와 관련된 빈도로 피어 정보를 연결하고 공유하므로 주소록이 오래되지 않고 노드 연결이 끊어집니다. 이전 피어가 마지막으로 알려진 주소에서 사용 가능하지 않기 때문입니다.
노드는 가장 안정적인 노드 주변의 중앙 집중화 경향을 피하기 위해 허용하는 피어 수를 제한해야 할 수 있습니다.
노드는 유지하는 피어에 대해 선택해야합니다. 즉, 데이터를 교환 할 가능성이 더 높은 데이터 (예 : 히스토리 기반 가중치)
노드 링크는 애플리케이션에 따라 비대칭 또는 대칭 일 수 있습니다.
간단히 말해서 중앙 서버 없이는이 작업을 수행 할 수 없습니다.
이 작업을 수행하려면 동적 DNS 여부에 관계없이 하나 이상의 중앙 서버가 필요합니다. 클라이언트는 연결해야 할 위치를 찾을 수있는 방법이 필요하며,이를 수행하는 유일한 방법은 자신의 서버를 사용하는 것입니다. 가장 간단한 시나리오에서는 응답으로 IP 주소 만 보내면됩니다.
가상 서버는 월 $ 15 정도에 구입할 수 있으며, IMO는 다른 사람의 대역폭을 사용하거나 남용하는 것보다 훨씬 저렴합니다.
[편집하다].
간단히 말하면 다음과 같은 또 다른 방법이 있습니다.
Upon reflection I think what I'd do is to designate a set of peers as cluster controllers and use a dynamic DNS service to allow other peers to discover the cluster controllers.
Choose a dynamic DNS provider I'll call it myc.ath.cx (I Use http://www.dyndns.com/).
Each peer has to be capable of becoming a cluster controller. A cluster controller will contain a list of all the other peers connected.
When a peer is started it looks up myc.ath.cx and attempts to connect. If connection cannot be made within a period, say 30 seconds, it takes over the registration of the DNS entry.
Any peer wishing to discover other peers can simply query myc.ath.cx and a list will be provided
All peers are responsible for periodically downloading the list of peers, in case they need to cluster controller.
The cluster controller will periodically query the DNS entry - if has changed from it's IP address then it knows that it is no longer the cluster controller - so it will contact the cluster controller that currently has the DNS entry and provide it's list of known hosts.
The cluster controller will periodically contact hosts on the list to ensure that they are still valid.
Your method of sending email does use a dedicated server, though; the peer's email server, to be precise.
Roughly, I don't think it's possible without using some sort of dedicated storage or server (which the email approach does, albeit obliquely) UNLESS you are able to characterize the connectivity to the internet that your peers are using.
Basically, if you have a set of X number of peers, that connect for Y amount of time, and they are then off the grid for Z amount of time... essentially, you can construct a probability equation about how likely it is that the set of peers that you last contacted is still available; where that probability approaches 1 (for a given set of X, Y, and Z above), you can most likely sustain a peer-to-peer network without using storage.
Possibly more in the spirit; instead of having a "dedicated central server", use simple online free service to specify a peer list. Set up a yahoo group, or something like that; clients can automatically look it up and get a peer address from which to query a set of peers; the client can be coded with the authentication to post to the group, and can post periodically its IP address so that others can request the set of known active peers.
If you want to get really tricky, you can start using basically steganographic methods to hide peer location information. I.e. get a google search for "blah"; find the first site listed in the results that has an unprotected (no CAPTCHA) message board; find the third (or whatever) post that starts with "Indubitably" (or whatever), and find the header of the first message there, and there's the IP address of a peer. If that doesn't work, go down the list of search terms to the next one.
But that's sneaky. :-)
Could you re-use an existing dedicated server for the purpose?
I am thinking in particular of registering each of the peers with a Dynamic DNS, but if you were willing to get a bit uglier, sharing access to a known Hotmail account or Google Doc or the like.
You can either use a central directory or some sort of broadcast protocol for service discovery. Assuming that you could get them indexed by Google, you could conceive of a system whereby each peer runs a web site with some unique, rare words contained on a specific page. You could then use Google search results based on these words to identify potential peers. This would essentially be a (noisy and slow) internet broadcast.
If the page structure was a well known pattern or contained identifiable connection information for that peer, it would be easy to distinguish them in the search results. Using such a public directory leaves you open to compromised nodes in the network that is formed, but this is pretty much true of any P2P network absent some security mechanism.
Getting the web sites crawled and highly ranked by Google (or some other search engine) for your particular arcane set of search terms would be the trick. I can think of a couple of ways, but they aren't ones that I would use. For a legitimate service, I'd rather spend the money or find a free web site that could function as a directory.
What about another P2P system built specifically to track online peers of other P2P systems?
Then we reduce the problem of finding peers for any new P2P system to simply finding peers for the 'main' P2P system, which will give you the addresses of online peers for the system you're interested in using...
This is a typical use of a distributed hash table algorithm. I'd suggest looking at something like pastry. It uses a overlay network (Application layer network) on top of other layers.
Each node has a GUID which is used to route requests across the peer network.
If you're loooking for an already established central server then see the metaserver entry on page here:
http://martindevans.appspot.com/
You can register peers on there and then other peers can find them. Obviously this is a central server, but it requires no maintenance on your part.
ReferenceURL : https://stackoverflow.com/questions/310607/peer-to-peer-methods-of-finding-peers
'IT TIP' 카테고리의 다른 글
사용자 에이전트 HTTP 헤더의 운영 체제 (0) | 2020.12.25 |
---|---|
SQLite를 사용하는 LINQ (linqtosql) (0) | 2020.12.25 |
Func를 얻을 수 있습니까? (0) | 2020.12.25 |
Java, BigDecimal의 소수 부분 만 추출 하시겠습니까? (0) | 2020.12.15 |
자바 스크립트에서 긴 숫자를 축약 된 문자열로 변환합니다. (0) | 2020.12.15 |