[통신]socket Full Duplex와 half-close 필요성 질문

kjw7945의 이미지

환경 : Linux Redhat

1. socket
: TCP 통신을 하고 client와 server 1:1 통신 상황

- server socket : socket 2개를 create
- client socket : socket 1개를 create

server socket no.1 : client가 connect 요구시 연결 요청 대기 상태 두기 위한 소켓(listen)
server socket no.2 : client가 연결 대기 상태에서 연결 수락 상태로 두기 위한 소켓(accept), 이 소켓으로 data 송수신 시작
client socket : 연결 요청을 위한 소켓(connect), 이 소켓으로 data 송수신 시작

---- echo 서버 구현시 이런식으로 소켓의
사용 용도를 이해했습니다. (현재 echo서버까지 이해^^)

그러면 한가지 의문점이 있는데 전송을 위한 socket이 각각
하나씩 존재한다면 서로 Full duplex mode가 어떻게 가능
한지 궁금하네요. 적어도 통신을 위한 소켓은 각각의 client와
server사이에 두개씩은 있어야 Full duplex mode가 가능할
거라 생각하거든요. 가령 upload socket 하나와 download
socket 하나씩 각각 서버와 클라이언트에 하나씩이요.

그게 아니라면 소켓 하나로 Full duplex가 가능한 mechanism
으로 구성되었는지 궁금합니다..

----------------------------------

2. socket 종료시 HALF-CLOSE의 필요성에 관해..
socket을 반만 닫는 이유를 이해가 안되네요..
송수신을 완료하고 난 다음에 연결을 종료해 주어도 되고,
종료하자는 의미로 약속된 기호를 주고 받아도 될 듯 하는데

소켓을 반만 닫는 필요성에 대해 ... 이 기능이 왜 필요한지
궁금합니다..

mach의 이미지

1. socket은 full duplex입니다.
- 논리적인 통신장치입니다.
- 파일로 볼 수 있습니다.(파일을 한번 열어서 읽기/쓰기가 되나?!)
- 심지어, 물리적으로 half duplex인 장치에 대해서도 socket은 full duplex를 구현하도록 되어 있습니다.
-- 물리 회선은 유한하나, 이를 다수개의 논리회선이 공유하게 할 수 있습니다. 마치 기차만이(고유회선을가지는..) 통신수단인 것은 아니고, 복선아닌, 단선 기차라도 왕복이 가능합니다. 간이역....
-- 멀티플렉싱이라는 것에 대해 조금 조사를 해보셔도... TDM, PDM, CDM, SDM, FDM등 시간, 패킷, 코드, 공간, 주파수등을 파라메터로 특정회선을 공유할 수 있습니다.
-- 도로에 왜 차량이 여러대가 다닐 수 있나? 심지어 편도 1차선도 차량이 왕복이 되나?
- 왜냐고요? 그냥, 그렇게 만들었습니다. 저도 가끔은 자동차 바퀴를 왜 4개로 했는지 의문이 있기는 합니다. 밥은 왜 3번 먹을까? 잠은 왜 밤에 잘까?

2. half close

Quote:
송수신을 완료하고 난 다음에 연결을 종료해 주어도 되고,

tcp socket 이 그렇게 합니다.
Quote:

종료하자는 의미로 약속된 기호를 주고 받아도 될 듯 하는데

tcp socket 이 그렇게 합니다.
Quote:
소켓을 반만 닫는 필요성에 대해 ...

필요성이라기 보다는......어쩔 수 없이 그렇게 합니다.
TCP/IP는 비동기통신이므로 그러합니다.
동기를 맞춰야 통신(대화가 통하겠지요)이 되므로, 보내고 응답받고를 반복적으로 해야합니다. 연속적으로 송신하고 응답할지라도, 하여간 송신내용에 대한 확인응답을 지속적으로 수행합니다.
양단간에 완전하게 동시에(????) 연결을 끊을 수 없기 때문이기도 합니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

정태영의 이미지

mach wrote:
- 파일로 볼 수 있습니다.(파일을 한번 열어서 읽기/쓰기가 되나?!)

open 시스템콜의 man 페이지를 보면 다음과 같습니다

man open wrote:
The parameter flags is one of O_RDONLY, O_WRONLY or O_RDWR which
request opening the file read-only, write-only or read/write, respec-
tively, bitwise-or'd with zero or more of the following:

O_RDWR 플래그와 함께 파일을 open 하면 한 번 열어서 읽기/쓰기 가 가능합니다 :twisted:

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

kjw7945의 이미지

답변 모두 감사합니다.

댓글 달기

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