본문 바로가기
TIL & WIL

[TIL] 크래프톤 정글 7주차 - Socket이란?

by 적용1 2024. 5. 6.
728x90

Socket

- 소켓은 프로세스들이 서로 통신할 수 있게 하는 창구 역할을 한다고 볼 수 있다.

 

- 네트워크에 연결하기 위한 소켓은 정해진 프로토콜에 맞게 만들어져야 한다.

 

주로 OSI 7 layer의 네 번째 계층인 Transport Layer 상에서 동작하는 소켓을 사용하는데, TCP 상에서 동작하는 소켓은 TCP socket(또는 stream socket), UDP 상에서 동작하는 소켓은 UDP socket(또는 datagram socket)이라 부른다.

Datagram Socket (UDP socket)

- UDP(User Datagram Protocol)를 사용한다.

 

- 비연결성(connectionless)를 지향한다 : 연결을 맺지 않고 데이터를 전송한다.

 

데이터를 보내기 전에 수신자와의 연결을 설정할 필요가 없다.

 

- 신뢰성 없음(unreliable) : 전송된 데이터의 도착을 보장하지 않으며, 데이터의 순서도 보장하지 않는다.

 

- 속도가 빠름 : 연결 과정이 없고, 오버헤드가 적기 때문에 상대적으로 빠른 데이터 전송이 가능하다.

 

- 용도 : 실시간 애플리케이션(게임, 스트리밍 등)에 적합하다.

Stream socket (TCP socket)

- TCP(Transmission Control Protocol)를 사용한다.

 

- 연결성(Connection)을 지향한다 : 데이터 전송 전에 통신할 상대방과 연결을 맺는다. 이 연결은 데이터 전송이 끝날 때까지 유지된다.

 

- 신뢰성 있음(reliable) : 데이터가 오류없이, 순서대로 도착하는 것이 보장된다. 만약 전송된 데이터가 손실되었다면, 해당 데이터는 재전송된다.

 

- 속도보다 신뢰성 중시 : 정확한 데이터의 전송을 위해 필요한 오버헤드 때문에 Datagram socket보다 상대적으로 느리다.

 

- 용도 : 이메일, 웹 페이지 전송 등, 데이터의 정확성이 중요한 애플리케이션에 적합하다.

 

 

reference : https://velog.io/@orcasuit/Datagram-Socket-vs-Stream-Socket   

소켓의 종류

  • 통신 연결 요청을 보내는지 또는 요청을 받아들이는지에 따라 소켓의 역할이 나뉘게 된다.

  • 전자에 사용되는 소켓을 클라이언트 소켓(Client Socket), 후자에 사용되는 소켓을 서버 소켓(Server Socket)이라 부른다.

  • 두 소켓은 동일한 구조이지만, 역할에 따라 처리되는 흐름이 다르다.

  • 소켓 연결이 완료된 다음, 두 소켓이 직접 데이터를 주고 받는 것이 아닌, 연결이 완료됨으로써 만들어지는 새로운 소켓을 통해 데이터 송수신이 이루어진다.

소켓 통신 과정

출처 : https://recipes4dev.tistory.com/153

서버 소켓

1. 소켓을 생성한다.(socket())
2. 서버가 사용할 IP 주소와 port 번호를 생성한 소켓에 결합시킨다.(bind())
3. 클라이언트로부터 연결 요청이 수신될 때까지 대기한다.(listen())
4. 요청이 수신되면 요청을 받아들이고(accept()), 데이터 통신을 위한 새로운 소켓을 생성한다.
5. 연결 후 데이터를 송수신한다.(send() / recv())
6. 데이터 송수신이 완료되면, 소켓을 닫는다.(close())

클라이언트 소켓

1. 소켓을 생성한다.(socket())

2. 서버 측에 연결을 요청한다.(connect())

3. 서버 소켓에서 연결이 받아들여지면 데이터를 송수신한다.(send() / recv())

4. 모든 처리가 완료되면 소켓을 닫는다.(close())

 

- 최종적으로 클라이언트 소켓과 연결이 만들어지는 소켓은 서버 소켓이 아니라, accept API 내부에서 새로 만들어지는 소켓이다.

 

따라서 해당 소켓과 실질적으로 데이터 송수신이 일어나게 되고, 닫히게 되는 것도 그 소켓이다.

728x90