Socket

Socket은 둘 사이의 연결을 위한 연결부라는 의미를 가진다.

특히 전자기기의 연결에서 많이 사용된다.


네트워크 분야에서 소켓 또한 비슷한 의미를 가진다.

소켓은 네트워크를 통해 데이터가 이동할 수 있도록 만들어진 연결부 라고 말할 수 있다.

소켓은 규격이 맞는 연결부에만 연결 할 수 있다.

네트워크에서의 소켓 또한 그에 맞는 규격이 존재한다.


이 규격을 Protocol이라고 하며,

소켓을 통한 통신을 위해서는 소켓이 Protocol을 지키며 제작되어야 한다.


Client와 Server 사이의 소켓 통신에 대해 알아보도록 하자.

Client와 Server가 소켓을 이용하여 통신하기 위해서 Protocol(규격)을 지켜야 하는데,

이 역할을 하는 것이 Port 번호이다.


지정된 Port 번호를 사용하면 소켓 통신을 위한 통로가 연결이 되고,

잘못된 Port 번호를 사용하면 연결을 거부한다.

222.222.222.222 를 IP 주소로 가정하자.

1) Client -> Server

  • Client가 Server에 연결하기 위해 222.222.222.222의 주소로 연결을 시도한다.

    이 때, 소켓 통신을 위한 Port 번호로 8000을 사용한다.

    222.222.222.222 : 8000 의 형태이다.


2) Client <- Server

  • 연결을 시도한 Client가 입력한 Port 번호가 올바른지 파악하여 연결을 결정한다.

    만약, Client가 8000이 아닌 다른 Port 번호, 7000을 사용했다면

    Server는 이 연결을 무시하고 Client <-> Server의 연결 통로는 만들어지지 않는다.


3) Client <-> Server

  • Client가 올바른 Port 번텍스트호를 사용했다면, Server와 Client 사이의 소켓을 통한

    통로가 생성되게 된다.

    이를 이용하여 Client와 Server는 데이터 통신을 주고 받을 수 있다.


Client와 Server의 소켓 통신이 이루어지는 과정

Socket : Client와 Server의 Socket을 생성한다.

Setsockopt, Bind : Server는 Socket의 Option을 만들고, 서버의 주소와 Bind한다.

Connect : Client가 소켓을 통해 Connect(연결)를 시도한다.

Listen : Server는 Client의 연결 시도를 받아 이를 확인한다.

Accept : Client가 지정된 Port 번호를 사용하여 올바른 연결을 시도했다면,
Server는 해당 연결을 허용한다.
만약 잘못된 Port 번호를 사용했다면, 해당 연결을 무시한다.

Send/Recv : Client와 Server가 연결된 통로를 이용하여 데이터를 교환한다.

Close : 데이터의 송수신이 필요 없어지면, Socket 연결 통로를 닫고 연결을 중지한다.

그림에는 표현되어있지 않지만, Socket 연결 이후 연결을 끊는 것도 중요하다.

profile
개발자 지망생입니다.

0개의 댓글