p2p 프로그램인 당나귀의 검색기능 구조를 알고싶은데

jjjjrr의 이미지

안녕하세요
네트웍프로그램에 검색기능을 넣으려구합니다
p2p 프로그램인 당나귀의 검색기능 구조를 알고싶은데
조언부탁드립니다
소스를 구해서 봤는데 기본원리를 잘모르니
이해하는데 상당히 어렵읍니다

제가 알고싶은부분은
각각의 컴들이 어떻게 서로 연결상태를 유지하는가 하는부분입니다
그리구
연결되었다가 어느한컴이 종료했을경우
그컴의 공백을 어떻게 매꾸어주는냐하는부분입니다

대충이라도 알면 소스보는데 도움이될것같읍니다
조언부탁드립니다

File attachments: 
첨부파일 크기
PDF icon SuperPeer.pdf770.22 KB
익명 사용자의 이미지

...

notexist의 이미지

당나귀 보시면 서버가 있습니다.
내컴이 서버로 검색어를 던지면...서버에서 클라이언트들에게 검색어를 뿌려서
매치되는 것이 있는 클라이언트는 내컴으로 검색결과를 보내는 걸로 알고 있습니다.

서버가 있으니까...서로 클라이언트끼리 연결을 열심히(?) 유지할 필요가 없습니다.
평상시에는 클라이언트 하나가 종료되는 경우에도 아무 문제가 없습니다.
파일을 전송 중인 도중에도 파일전송이 종료될뿐입니다.
당나귀의 경우에는 하나의 클라이언트로부터 파일을 받는것이 아니고
1개 이상의 클라이언트에게 동시에 분할다운로드 합니다. 연결이 끊겨도
동일한 파일을 다른 클라이언트가 가지고 있는 경우 다른 클라이언트에게는
계속 받습니다.
결과적으로 공백이라는 것이 있다고 하기도 뭐 합니다.
(chord같은 structured overlay에서는 임의로 종료시에 검색에 문제가
생길수도 있는데... 일정 기간마다 반복적으로 갱신해서 해결합니다.)

*Mule들의 경우에는 kademlia같은 structured overlay프로토콜도 지원하는 놈들이 있는 것 같은데... 이에 대해서는 구글에서 알고리즘을 때리면
해당 논문이 나오니...찾아보시면 될 거 같습니다.

There is more than one way to do it...

익명 사용자의 이미지

notexist
답변해주시는 분의 아바타가 심상치 않군염. ㅎ

jjjjrr의 이미지

안녕하세요
답변감사합니다
제생각에는
서버가 있다고하더라도
서버가 전체 클라이언트의 명단을 관리하지는
못할것같은데여

클라이언트가 검색을 하면
서버에서 받아서 다른클라이언트에 뿌려주는 형식...
근데
서버 하나에서 전체의 클라이언트로 뿌려줄수가 있을까여

서버명단을 보면 서버끼리 서로 연결되는모양인데여
서버끼리는 어떻게 상호연결이 가능할까여

그러니까
클라이언트에서 검색어를 넣어서 자기가 연결된서버에
제출하면
어떤과정을 거쳐서
전클라이언트까지 연결이되느냐하는부분을 알고싶읍니다
부탁합니다

새해복많이받으세요

keizie의 이미지

소리바다2 나올 때 나온 문서인데, 자세히 본 적은 없습니다. 다른 P2P에 대해서도 연구 문서가 있을 겁니다.

댓글 첨부 파일: 
첨부파일 크기
PDF icon 0바이트
jjjjrr의 이미지

SuperPeer에 대한 PDF
를 올려놓으셨나여
제가 링크를 못찿는건가여

ole2000의 이미지

클라이언트를 하나하나 검색하는것이 아니라

서버에서 이미 연결된 클라이언트의 파일목록을 가지고 있지 않을까요??

공유폴더가 있으니까..

서버접속시 공유폴더 목록을 서버에 올리고..

검색시 서버에 올려진 모든 공유폴더목록을 검색해서..

다운로드 요청시에 그 클라이언트로 접속이 이루어지는 방식이 아닐까요?

Be cool...

notexist의 이미지

서버에서는 자신에게 접속한 클라이언트의 명단만을 관리합니다.
다른 서버에 속한 클라이언트는 알 수가 없죠.
당나귀는 기본적으로 자신이 접속한 서버에 속한 클라이언트들만
검색해주는 것으로 알고 있습니다.

확장으로 다른 서버검색도 해주는데...이것은 다른 서버에
속한 클라이언트들도 검색을 하는데...
(그렇다고 세상모든 당나귀 클라이언트나 내 컴퓨터 서버목록에 있는 모든 서버의 클라이언트는 아닙니다.)
서버 또는 자신(어느쪽인지 잘 모르겠습니다.)이 다른 서버에게 검색어를 보내어 검색합니다..

그리고 다른 서버로 검색을 확장하는 경우에도 모든 서버에서 검색이 이루어지는 것은 아닙니다.

서버들도 각각 자신만의 서버목록을 가지고 있습니다.
이 서버목록은 클라이언트랑 마찬가지로 설정해주는 겁니다.
내컴의 서버목록에 A,B,C서버가 등록되있지만...
사실 다른 D,E란 서버가 등록되 있을 수도 있는거죠.
위와 같은 경우에도 A,B,C서버에만 검색이 이루어집니다.

서버는 클라이언트의 파일이름과 해시값을 관리한다고 합니다.
(잘못 알았던 것이라 수정합니다.)

마지막으로 당나귀는 그리 튼튼한 구조를 가지고 있지 않고 가질 필요가 없습니다.
어떤 호스트가 fault가 나면 그냥 해당 링크를 끊습니다. 그리고 모든 서버들이 서로 연결되있을 필요도 구지 없고요.
(기존 p2p들 보면 데이타를 가진 클라이언트가 나가면 이어받는게 불가능했지만...당나귀는 안 그렇죠...)

모든 서버들이 연결되있다면 굳이 기다란 서버목록을 클라이언트에서 유지할 필요가 없지 않을까 생각됩니다.

superpeer를 쓰는 것은 kazaa같은 것이 있는데...얘는 서버개념이 없고 super peer라는 개념을 씁니다. 사전에 정해진 서버가 존재하지 않으며 검색 메시지를 전체로 flooding하지 않고 접속된 peer들 중에서 성능(컴퓨팅/네트워크)이 우수한 놈이 super peer가 되서 2단계의 계층 구조를 만들어서 동작하고 kazaa의 경우에 super peer는 파일목록의 관리를 안 합니다.

jjjjrr wrote:
안녕하세요
답변감사합니다
제생각에는
서버가 있다고하더라도
서버가 전체 클라이언트의 명단을 관리하지는
못할것같은데여

클라이언트가 검색을 하면
서버에서 받아서 다른클라이언트에 뿌려주는 형식...
근데
서버 하나에서 전체의 클라이언트로 뿌려줄수가 있을까여

서버명단을 보면 서버끼리 서로 연결되는모양인데여
서버끼리는 어떻게 상호연결이 가능할까여

그러니까
클라이언트에서 검색어를 넣어서 자기가 연결된서버에
제출하면
어떤과정을 거쳐서
전클라이언트까지 연결이되느냐하는부분을 알고싶읍니다
부탁합니다

새해복많이받으세요

There is more than one way to do it...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.