non-blocking I/O에 대해서 알아보다가 Socket개념이 나왔다.
Socket이 어떤 역할을 하고 어떻게 생겨나게 되는지 궁금하여 공부해 보게 되었다.
1. 소켓이란 ?
'A socket is one endpoint of a two-way communication link between two programs running on the network. A socket is bound to a port number so that the TCP layer can identify the application that data is destined to be sent to.'
간단히 말하자면 소켓은 two-way 네트워크 연결의 엔드포인트이다. 연결부이다.
소켓에 포트 넘버가 바인딩 되어 있기 때문에 TCP계층에서 어떤 어플리케이션이 데이터를 보냈는지 알 수 있게 한다
2. 소켓의 생성과정
- 일반적으로 서버는 특정 port넘버에 바인딩된 소켓을 가진다. 그리고 그 소켓을 통해 클라이언트의 연결 요청을 리스닝하며 기다린다.
- 클라이언트는 서버가 실행 중인 기기의 호스트네임과, 서버가 리스닝하고 있는 포트번호를 통해 서버와 연결을 시도한다.
이 과정에서 클라이언트는 서버에게 자신을 식별 시켜주어야 하기 때문에, 소켓 연결 중 사용할 클라이언트 소켓을 로컬 포트 번호에 바인딩 한다. 보통 시스템에 의해 포트번호가 지정되지만 getsockname이라는 method를 통해 지정해 줄 수 도 있다고 한다.
- 이 과정이 순조롭게 이뤄진다면 서버는 연결을 수락하게 된다.
이후 곧바로 서버는 클라이언트의 로컬 포트에 바인딩된 새로운 소켓을 얻게 되며 클라이언트의 주소와 포트로 세팅된 리모트 엔드포인트를 가지게 된다.
서버에 별개의 새로운 소켓이 필요한 이유는, 연결 완료된 클라이언트의 요청을 처리하면서 동시에 기존의 소켓을 통해서는 지속적으로 다른 연결 요청을 받아야 하기 때문이다. 덕분에 다수의 연결을 가질 수 있게 된다.
- 클라이언트쪽에서는 연결이 수락되면 소켓이 성공적으로 생성되며 서버와 통신하기 위한 소켓을 사용할 수 있게 된다.
클라이언트와 서버는 소켓을 쓰거나 읽음으로서 통신할 수 있게 된 것.
+ 엔드포인트는 IP주소와 포트넘버의 조합으로 이루어 진다.
+ TCP 계층에서 어떤 어플리케이션이 데이터를 보냈는지 서버의 소켓에 바인딩된 port넘버를 통해 확인할 수 있다.
참고사이트
https://www.ibm.com/docs/en/zos/2.3.0?topic=services-what-is-socket
https://docs.oracle.com/javase/tutorial/networking/sockets/definition.html
'Frontend Study - 1 > Socket' 카테고리의 다른 글
WebSocket이란 무엇인가? Socket과의 차이점, HTTP와의 차이점 (0) | 2023.02.27 |
---|