소켓통신 질문...
글쓴이: soylove / 작성시간: 수, 2005/04/20 - 6:39오후
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번 포트를 통해 연결하는 식으로 해야하나요?
궁금합니당;;;;;;;
(지금 프로그램은 짜고있지만;;;;;; 먼저 좀 알고싶네요;;;)
Forums:
웹서버가 80번 포트 하나로 서비스되는것 처럼 하나로 되겠죠.
웹서버가 80번 포트 하나로 서비스되는것 처럼 하나로 되겠죠.
A-B 연결 소켓 하나A-C 연결 소켓 하나B-C 연결 소켓 하나
A-B 연결 소켓 하나
A-C 연결 소켓 하나
B-C 연결 소켓 하나
이렇게 각각 따로 생기는 것이 맞습니다.
그리고 LISTENING SOCKET과 ESTABLISHED SOCKET의 차이점을 아시는 지 모르겠는데요.. 리스닝 소켓에 ACCEPT를 호출하면 새로운 소켓이 만들어지게 됩니다. 때문에 열어야 되는 포트는 하나이지만, CONNECTION이 맺어지는 소켓은 별도의 포트에 생성이 되게 되지요.
CONNECTION을 맺은 후에 netstat -na로 포트 상태를 살펴 보시길..
답변이 되었는지 모르겠습니다.
Re: 소켓통신 질문...
소켓 = IP 주소 + 포트번호
포트번호는 프로세스 구분을 위해 사용됩니다.
시스템의 해당 IP로 패킷을 수신하게 되면, 포트 번호를 보고
해당 프로세스에게 전달하게 됩니다.
listening 하는 소켓의 포트번호는 서비스를 위해 고정시켜 놓지만
accept후에 생성되는 소켓에서 포트 번호는 시스템 임의로
생성됩니다.
예를 들어, A와 B 지점에서 B가 80번 포트번호를 통해,
listening하고 있는 상황에서 A가 B에 연결되면
listening하고 있는 소켓이 아니라, 다른 소켓이 생성되어
B와 연결되는 것입니다. 다른 소켓이므로 포트번호도
다 달라지겠죠.
프로그램의 종류에 따라서 포트 넘버를 다르게 하시면 될 것 같습니다.
프로그램의 종류에 따라서 포트 넘버를 다르게 하시면 될 것 같습니다.
예를 들어 A->B, B->C 로 통신을 한다면
B는 30번 포트에서 listen하고 C는 31번 포트에서 listen 하는 식으로 하는게 좋을 것 같습니다. B,C 모두 30번 포트에서 listen 할 수도 있기는 하겠지만 혼동될 수 있기 때문에 다른 포트를 사용하는게 좋습니다. (C->A 통신도 있다면 A는 32번 포트에서 listen 하는 식으로...)
리스닝 소켓에 접속이 들어오면 accept() 함수에서 새로운 소켓을 생성하는 것은 맞으나
새로운 포트 넘버를 할당하는 건 아니라고 알고 있습니다.
소켓을 구분하는 값은 (원격지 주소, 원격지 포트넘버, 로컬 주소, 로컬 포트넘버)의 네개이기 때문에 다른 소켓이 생성되었다고 새로 포트넘버를 할당할 필요는 없습니다. 리스닝 소켓과 연결된 소켓(established socket)은 동일한 로컬 포트 넘버를 공유합니다.
댓글 달기