소켓
소켓은 인터넷 어플리케이션을 개발할 때, 4계층이 제공하는 서비스를 이용할 수 있는 일종의 API 이다.
소켓을 이용하면 클라이언트 / 서버 어플리케이션을 만들 수 있다.
그리고 멀리 떨어진 두 프로세스는 소켓을 이용해서 서로 통신할 수 있다.
소켓을 사용하면 어플리케이션 계층에서 짤 비즈니스 로직에만 집중하고, 데이터가 어떻게 전송되는지는 신경쓰지 않아도 된다.
소켓에는 크게 UDP 소켓과 TCP 소켓이 있다.
UDP, TCP는 4계층의 프로토콜로, UDP는 신뢰성을 보장하지 않지만, 빠르고 가벼운 프로토콜이고 TCP는 경우에 따라 느려지기도 하고 무겁지만, 신뢰성을 보장해주는 byte stream-oriented (바이트 단위 전송) 프로토콜이다.
바이트 단위 전송이라는 뜻은 TCP가 어플리케이션을 자신이 원하는 크기대로 잘라서 보낼 수 있다는 것을 의미한다.
또는 필요한 경우, 어플리케이션 메세지 2개를 합쳐서 하나의 TCP 세그먼트로 보낼 수도 있다.
이는 TCP가 알아서 스스로 결정하기 때문에, 바꿔말하면 TCP는 어플리케이션이 보내고자 하는 메세지 단위로 전송하는 것을 보장하지 않는다는 것을 의미하기도 한다.
UDP 소켓
UDP는 컨넥션 설정이 필요없기 때문에 클라이언트는 서버에게 보내려는 데이터를 바로 보내기만 하면 된다.
(따라서 TCP와 달리 사전에 연결 설정을 위한 핸드 셰이크 과정도 필요하지 않다.)
UDP를 사용하여 데이터를 보낼 땐, 데이터에 명시적으로 목적지 IP주소와 포트 번호를 항상 붙여서 보낸다.
그리고 전송된 데이터는 유실되거나, 보낸 순서에 따라 도착하지 않을 수도 있다.
실제로 UDP 소켓을 통해 서버와 클라이언트가 통신하는 과정은 위와 같다.
서버는 먼저 다이어그램 타입의 소켓을 열고 기다린다.
클라이언트는 마찬가지로 데이터그램 소켓을 만들고 그 소켓을 통해 서버로 데이터를 보낸다.
서버는 기다리고 있던 소켓으로 들어온 데이터를 보고 클라이언트 정보를 파악한 뒤, 데이터를 적절히 처리해서 클라이언트에게 다시 응답을 보낸다.
클라이언트는 서버가 보낸 응답을 보고 자신의 할 일을 끝낸 뒤 소켓을 닫으면 하나의 통신이 종료된다.
TCP 소켓
TCP는 데이터를 보내기 전에 먼저 연결 설정을 하고나서 데이터를 보낸다.
서버가 먼저 소켓을 만들어두고 기다리면, 클라이언트는 자신의 소켓을 만들어서 서버에 접근한 뒤, 자신의 IP와 포트번호를 가지고 연결을 설정하도록 요구한다.
서버는 클라이언트의 요구를 들어주기 위해, 이 클라이언트와 통신하는 전용 소켓을 하나 따로 만들어둔다.
따라서 TCP 소켓 프로그래밍에서는 다른 클라이언트의 연결 설정 요청을 받아들이는 리스닝 서버와, 연결 설정이 되고나서 데이터를 실제로 주고받는 별도 서버의 소켓이 구분되어 있다.
TCP 소켓은 클라이언트의 IP와 포트마다 하나씩 만들어지기 때문에, 포트와 IP주소로 클라이언트를 구분할 수 있다.
TCP는 신뢰성있는 데이터 통신과 정해진 순서에 따른 데이터 송수신을 보장한다.
하지만 반드시 메세지 바운더리를 지켜서 보내주는 것은 아니다. TCP는 모든 것을 그냥 연속된 바이트의 흐름으로 여겨서, 이 연속된 바이트 스트림에서 알마만큼 잘라서 보낼지는 TCP가 결정한다.
위 이미지가 TCP 소켓 프로그래밍의 예시이다.
먼저 서버 소켓을 만들어두고, 클라이언트의 접근을 기다린다.
만약 클라이언트가 오면 연결을 설정하면서 새로운 connection 소켓을 만든다.
그리고 이후에 그 클라이언트와 소통할 때는 만들어둔 connection 소켓을 가지고 통신한다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
[컴퓨터 네트워크] 16. Transport Layer (2) : UDP (0) | 2024.04.20 |
---|---|
[컴퓨터 네트워크] 15. Transport Layer (1) : 트랜스포트 계층 개요 (0) | 2024.04.20 |
[컴퓨터 네트워크] 13. Application Layer (6) : Video Streaming And CDN (0) | 2024.04.18 |
[컴퓨터 네트워크] 12. Application Layer (5) : DNS (0) | 2024.04.18 |
[컴퓨터 네트워크] 11. Application Layer (4) : HTTP/2 (0) | 2024.04.16 |