카카오톡은 p2p 방식인가요? 서버를 통하는 방식인가요?

pogusm의 이미지

카카오톡 문자, 보이스톡 음성, 페이스타임 영상.
위 3가지는 p2p 방식인가요? 아니면 서버를 통하는 방식인가요?

카카오톡의 mVoIP 가 서버를 통하는 방식이라면,
사용자가 늘어날수록 카카오톡 서버도 계속 커져야하는건가요?

만약 그렇다면, 현재 음성통화량의 10%만 카카오톡이 수용한다고 해도 서버유지비용이 엄청나게 늘어날거 같은데... 그럼 무료서비스를 유지하기도 어려울거 같은데... 맞나요?

익명 사용자의 이미지

적어도 지금 카톡 서비스들은 서버를 통할겁니다. p2p를 쓰는 기술론 보이지 않습니다.
물론 사용자가 늘어나면 서버 부담은 늘어나는 게 정상입니다.
mVOIP쪽은 기술을 잘 모르는데 아마 비슷하지 않나 싶습니다만...뭐 그래도 카카오톡은 카카오톡나름대로 광고나 판매 등 수익을 올릴 방침을 찾아나가고 있고, 스카이프같은데가 멀쩡히 돌아가는 걸 보면 그다지 문제는 없지 않나 싶습니다.

pogusm의 이미지

좋은 답변 감사합니다.

unsouled의 이미지

확실하진 않지만 P2P 방식일 수도 있습니다.

일단, 카톡 등의 서비스들은 메시지의 경우, apns 나 c2dm 까지의 network latency 를 줄이기 위해.. 가능한 환경( 카톡의 경우, 번개 마크가 떠 있는 상황 ) 에서 자체 작성한 푸시 서버에서 응답을 줍니다.

이 자체 작성한 푸시 서버가 p2p 로 되어있다면, p2p 로 동작이 가능합니다.

mVoip 와 페이스타임은 p2p 일겁니다.

그리고 p2p 라고 해도 사용자가 늘어나면 서버는 늘어날 수 밖에 없습니다.

서비스는 무료라고 해도 기타 방법( 카톡은 플러스친구의 광고료나 선물하기 기능 등의 수수료) 으로 수익을 얻고 있습니다.

익명 사용자의 이미지

우선 mVoIP는 우리가 일반적으로 알고 있는 인터넷전화의 모바일판입니다.
그리고 사용자가 전화를 걸게 되면 User-User로 연결 되는 방식입니다.
설명을 드리면 다음과 같습니다.
1. User1이 User2에게 카톡mVoIP를 요청한다
2. 카톡mVoIP서버는 User2가 통화 가능상태인지를 확인한후 통화 가능 상태이면 User2에게 연결을 시키고 그렇지 않을 경우 User1에게 통화불가 신호를 보내줍니다. 그리고 통화가 연결되면 카톡mVoIP서버가 하는 일은 여기 까지입니다. 여기까지 카톡서버가 관여합니다. 즉 User1-카톡서버-User2에 대한 네트워크가 연결 됩니다.
3. User1과 User2가 연결 되면 이때부터 통화가 끝날때까지 사용자끼리 연결되며 인터넷 트래픽도 User1-User2끼리 연결됩니다. 그리고 VoIP특성상 실시간성으로 트래픽이 계속 발생합니다.
4. 통화가 끝나면 User1과 User2는 카톡mVoIP서버에 각각 통화가 끝나고 현재 상태가 어떤지를 통보해줍니다.
이런 식으로 연결됩니다.
참고 바랍니다.

pogusm의 이미지

근데 오늘 갑자기 생각났는데,

카카오톡은 p2p 방식이 아닌거 같다라는 생각이 듭니다.
p2p 로 연결하려면 ip:port 로 연결되어야 하는데, 카카오톡은 방화벽(공유기)을 통해 연결되어 있어도 연결이 잘 됩니다.

p2p 방식으로 연결되는 당나귀, 토렌트 프로그램들은 대부분 공유기에서 포트 설정을 해야 가능한것과는 달리 말입니다.

제가 잘못 알고 있는건가요?

kid1402의 이미지

공유기에서 따로 포트포워딩이나 DMZ설정을 하지 않는 이상 p2p면 포트가 막히는게 맞겟죠..

근데 안막힌다면 아마 카톡으로 전달되는 음성 데이터가 (예를 들자면) http나 ftp같은 프로토콜로 통신하는게 아닐까요..?

막 던져 봅니다 ㅎㅎ

익명 사용자의 이미지

제대로 알고 계신 게 맞습니다. 그런데 모든 단말기가 항상 NAT 아래에 있는 것을 아니죠. 3G 로 서로 통신할 경우도 있고..

그렇기 때문에 보통의 im 프로토콜에서는 network 구성을 알아오는 방법을 지원합니다.

그래서 NAT 인지 아닌지 확인하고, 어떻게든 p2p 로 맺을 수 있는 환경에서는 p2p 로 메시지를 주고 받고, 그 외의 경우에서 서버에서 중계를 합니다.

NAT 환경에서 어떻게 p2p 를 동작하게 하는지에 대해서는 hole punching 이라는 키워드로 구글링해보세요.

pogusm의 이미지

p2p로 연결이 가능하다면 p2p로 연결해서 서버의 부담을 줄이고
그렇지 못할 경우에만 서버가 중계를 하는 똑똑한 방식이 사용되고 있는거군요.

kid1402의 이미지

홀펀칭이 그런거였군요.. 저도 좋은 정보 감사합니다!

댓글 달기

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