Socket
은 포트에 연결되어 동시에 여러 명을 처리할 수 있는 접속장치를 말한다.
즉, 소켓이 동시에 접속할 수 있는 클라이언트의 수를 결정할 수있다.- 예를들어, http://www.naver.com 서버에 80번 포트를 이용해서 접속할 경우 socket이 없다면 여러사람들이 해당 웹 페이지를 이용할 수 없다. 즉, 서버 프로그램에 대해 여러명의 클라이언트가 사용할 수 있도록 서비스를 제공하는 것이다.
이때
Port
는전송계층만의 주소
라고 할수 있다.
📌 예를 들어, 택배의 경우 아파트 단지 주소(000동)와 상세주소(000호)가 필요하듯이 컴퓨터 통신의 경우도 컴퓨터의 주소(Ip)와 컴퓨터에서 실행되고 있는 응용프로그램에 대한 주소(Port)가 필요하다.
컴퓨터에서는 게임, 카카오톡, 크롬 등 다양한 SW가 실행될 수 있는데 어떤 응용프로그램에 전달되는 데이터인지 구분하기 위해 필요한 것이 Port인 것이다.
Client Socket은 통신 연결 요청을 보낼 때 사용된다.
통신 흐름
1. 소켓을 생성(create)한다.
2. 서버측에 연결(connect)을 요청한다.
3. 서버 소켓에서 연결이 받아들여지면 데이터를 송수신(send/recv)함
4. 모든 처리가 완료되면 소켓을 닫음(close)
Server Socket은 요청을 받아들일때 사용된다.
- 소켓을 생성(create)한다.
- 서버가 사용할 IP, Port를 생성한 소켓에 결합(bind)함
- 클라이언트로부터 연결 요청이 수신되는 주시(listen)함
- 요청이 수신되면 요청을 받아(accept) 데이터 통신을 위한 새로운 소켓 생성
- 연결 후 데이터를 송수신(send/recv)
- 데이터 송수신이 완료되면, 소켓을 닫음(close)
- 소켓이 연결된 후 클라이언트 소켓과 서버 소켓이 직접 데이터를 주고 받는 것이 아니다.
즉, 클라이언트의 connect()를 받아주는 것은 서버의 accept()함수이기 때문에 connect()이전에 accept()가 준비되어있어야한다. 따라서서버쪽 코드를 먼저 실행시키고 난 후 클라이언트 코드를 실행시켜야 정상적으로 작동
한다는 것이다.
또한 클라이언트는 언제 요청할지 모르기 때문에 서버는 무한적으로 요청할 준비가 되어야한다. 그래서 서버쪽 프로그램을 데몬이라고 부르는 것이다.
- Socket 통신은 Server와 Client가 Port를 통해서
실시간으로 양방향 통신을 하는 방식
이다. Client가 필요한 경우에 요청을 보내는 HTTP통신과달리, Socket 통신은Server도 Client로 요청을 보낼수 있고, 연결을 유지
합니다. 예를들어, 실시간 Streaming 동영상 중계 나 실시간 채팅과 같이 즉각적으로 정보를 주고받는 경우에 사용됩니다.