소켓통신 질문...

soylove의 이미지

A,B,C 3개가 TCP통신을 하려고 합니다
A에서 B로 메세지를 보내주면 B가 C로 그 메세지를 전해줄라고 하는데요
B에서는 A와 통신할 포트랑, C와 통신할 포트를 각각 달리 해야하는게 맞나요?;;;; 너무 초보적인 질문인가요?

만약에 A,B,C를 동그랗게 묶는다고 하면(A-C간 통신도 가능하다면)
A-B에는 30번포트를 열고 B-C에는 31번포트, C-A간에는 32번 포트를 통해 연결하는 식으로 해야하나요?

궁금합니당;;;;;;;
(지금 프로그램은 짜고있지만;;;;;; 먼저 좀 알고싶네요;;;)

익명 사용자의 이미지

웹서버가 80번 포트 하나로 서비스되는것 처럼 하나로 되겠죠.

happycat의 이미지

A-B 연결 소켓 하나
A-C 연결 소켓 하나
B-C 연결 소켓 하나

이렇게 각각 따로 생기는 것이 맞습니다.

그리고 LISTENING SOCKET과 ESTABLISHED SOCKET의 차이점을 아시는 지 모르겠는데요.. 리스닝 소켓에 ACCEPT를 호출하면 새로운 소켓이 만들어지게 됩니다. 때문에 열어야 되는 포트는 하나이지만, CONNECTION이 맺어지는 소켓은 별도의 포트에 생성이 되게 되지요.

CONNECTION을 맺은 후에 netstat -na로 포트 상태를 살펴 보시길..

답변이 되었는지 모르겠습니다.

kihongss의 이미지

soylove wrote:
A,B,C 3개가 TCP통신을 하려고 합니다
A에서 B로 메세지를 보내주면 B가 C로 그 메세지를 전해줄라고 하는데요
B에서는 A와 통신할 포트랑, C와 통신할 포트를 각각 달리 해야하는게 맞나요?;;;; 너무 초보적인 질문인가요?

만약에 A,B,C를 동그랗게 묶는다고 하면(A-C간 통신도 가능하다면)
A-B에는 30번포트를 열고 B-C에는 31번포트, C-A간에는 32번 포트를 통해 연결하는 식으로 해야하나요?

궁금합니당;;;;;;;
(지금 프로그램은 짜고있지만;;;;;; 먼저 좀 알고싶네요;;;)

소켓 = IP 주소 + 포트번호

포트번호는 프로세스 구분을 위해 사용됩니다.
시스템의 해당 IP로 패킷을 수신하게 되면, 포트 번호를 보고
해당 프로세스에게 전달하게 됩니다.
listening 하는 소켓의 포트번호는 서비스를 위해 고정시켜 놓지만
accept후에 생성되는 소켓에서 포트 번호는 시스템 임의로
생성됩니다.
예를 들어, A와 B 지점에서 B가 80번 포트번호를 통해,
listening하고 있는 상황에서 A가 B에 연결되면
listening하고 있는 소켓이 아니라, 다른 소켓이 생성되어
B와 연결되는 것입니다. 다른 소켓이므로 포트번호도
다 달라지겠죠.

kane의 이미지

프로그램의 종류에 따라서 포트 넘버를 다르게 하시면 될 것 같습니다.
예를 들어 A->B, B->C 로 통신을 한다면
B는 30번 포트에서 listen하고 C는 31번 포트에서 listen 하는 식으로 하는게 좋을 것 같습니다. B,C 모두 30번 포트에서 listen 할 수도 있기는 하겠지만 혼동될 수 있기 때문에 다른 포트를 사용하는게 좋습니다. (C->A 통신도 있다면 A는 32번 포트에서 listen 하는 식으로...)

리스닝 소켓에 접속이 들어오면 accept() 함수에서 새로운 소켓을 생성하는 것은 맞으나
새로운 포트 넘버를 할당하는 건 아니라고 알고 있습니다.
소켓을 구분하는 값은 (원격지 주소, 원격지 포트넘버, 로컬 주소, 로컬 포트넘버)의 네개이기 때문에 다른 소켓이 생성되었다고 새로 포트넘버를 할당할 필요는 없습니다. 리스닝 소켓과 연결된 소켓(established socket)은 동일한 로컬 포트 넘버를 공유합니다.

댓글 달기

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