소리바다와같은 p2p 프로그램의 검색과정이

jjjjrr의 이미지

안녕하세요

소리바다와같은 p2p 프로그램의 검색과정이

어떻게이루어지는지 궁금합니다

클라이언트가 특정파일검색을 요청하면

서버에서 접속된 전체 클라이언트에게 검색어를 전송하는것인가여

서버에 접속된 클라이언트의 수가 몇만명이 넘어서는경우

서버에 상당히 부담이 될것같은데

어떻게처리가 이루어지는지

원리를 알고싶읍니다

수만 수십만의 클라이언트에게 특정검색어를 전달하는방법에대해서

알고싶읍니다

당나귀같은p2p프로그램에서의 검색도 아주궁금합니다

아시는분 조언부탁드립니다

즐거운하루되세요

jiee의 이미지

* 파일 목록 전송 *
1. 클라이언트가 서버에 접속하면 클라이언트는 자신이 보유한 파일 목록을 전송합니다.
2. 서버는 그 파일 목록과 해당 클라이언트의 정보(IP)를 묶어 하나의 전체 파일 목록으로 관리합니다.

* 파일 검색 *
1. 사용자가 서버에 접속해 파일을 검색하면 현재 서버에서 유지하고 있는 전체 파일 목록을 검색해 그 파일을 가지고 있는 클라이언트의 IP를 사용자에게 알려줍니다.

* 파일 다운 *
1. 확인된 IP로 접속해 파일을 전송받음.

대충 이렇게 구현했습니다.

그리고, 구글에서 "soribada index server" 이렇게 검색하면 괜찮은 문서가 있을 겁니다.

덧붙여서 computer network 책의 application layer보시면 P2P방식에 관해 나와 있는 책들이 있습니다. 한 번 찾아보시면 유익할 듯 합니다. : )

토나오게...

keizie의 이미지

당시 어디선가 구한 문서인데, 참고가 되실지 모르겠습니다.

myroot의 이미지

소리바다의 경우 피어 리스트를 모든 클라이언트가 가지고 있습니다.
그래서 검색 요청을 하면
자기가 가지고 있는 모든 피어들에게 udp로 메시지를 보내구요

메시지를 받은 클라이언트는 자신에게 있는 파일일 경우 응답을 보내서 검색한 사용자에게 알려줘요..

그리고 파일 받는거는 tcp로 ftp비슷한 방법으로 전송하구요...

완전 p2p라서 이런 방법을 서버가 있으면 좀더 효율적일텐데...

암튼 완전 단순하죠!

http://abyss.jaram.org/wiki/wiki.php/HY%BC%D2%B8%AE%B9%D9%B4%D9

jjjjrr의 이미지

답변감사합니다
근데
"소리바다의 경우 피어 리스트를 모든 클라이언트가 가지고 있습니다"
이부분이 이해가 안됩니다
피어리스트를 어떻게 모든클라이언트가 가질수있나요
클라이언트의 숫자가 몇만개가 될경우
몇만개의 리스트를 클라이언트 개개인이
다가지고있다는건가여?
피어리스트란개 몇개의 리스트를 말하는것같은데여
좀 구체적인 설명좀 부탁드립니다
어떻게 피어리스트들이 연결되어서
전체피어들에게 전달되는지 알고싶읍니다
즐거운하루되세요

myroot의 이미지

전체 피어 리스트 목록을 각 클라이언트가 관리하는 방식이에요
물론 전체가 전체가 아니라 어느 일부 이겠지만요..

몇 만개의 리스트라고 하더라도 4바이트*만 39kbyte밖에 안되지요..
그리구 몇만은 안되고..

피어 그룹에 들어가는거는 처음 웹을 통해 슈퍼피어 리스트를 얻어오고 ( 약 50개? )
그 목록에 있는 피어들에게 특정패킷(hello같은..)을 보내면 그 슈퍼피어가 가지고 있는 다른 피어들의 ip주소를 보내줘요..
그럼 새로 받은 ip주소에 대해서 같은 작업을 반복해서 피어 목록을 늘려가는거죠..

저도 분석한지가 오래되고 완벽히 분석했던게 아니라서 정확히 이렇다고 확신은 안되네요 ^^;;

확실한건 검색을 릴레이해서 전체로 전송하지는 않은것 같아요. 단지 자기가 가지고 있는 피어 목록에 대해서만 검색어를 보내는거 같아요

someone의 이미지

중앙 서버가 모든 파일 리스트를 다 가지고 있을 수도있고

중앙 서버 없이 각각 노드들이 주변 노드들의 파일 리스트를 가지고 있을 수도있고..

쿼리 형식으로 주변 노드들한테 파일 검색 명령을 보낼 수 도 있구요.. 파일을 자기가 가지고 있으면 응답하면서..

노드 구성 방법도 워낙 많으니 그에 따라서 파일을 어떻게 검색할지도 다양한 방법이 있겠죠..

user를 향해서... +_+

user를 향해서... +_+

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.