[리눅스] 소켓 프로그래밍

Jaehwan Lee·2021년 4월 22일
1
post-thumbnail

소켓(Socket) 이란?

소켓이란 네트워크 상에서 동작하는 프로그램 간 양방향 통신의 종단 지점(end point)이다. 즉, 프로그램이 네트워크에서 데이터를 통신할 수 있도록 연결해주는 연결부라고 할 수 있다. 따라서 소켓의 정의를 검색해보면 사전적으로 구멍, 연결, 콘센트 등의 의미를 가진다. 그 중에서 우리는 네트워크 프로그래밍을 위한 소켓 다시 말해, 네트워크 환경에 연결할 수 있게 만들어진 연결부를 네트워크 소켓 또는 간단히 소켓이라고 한다. 소켓은 인터넷과 프로세스 사이에 놓여 둘을 연결하는 역할을 한다.


소켓 프로그래밍(Socket Programming)이란?

소켓(Socket)을 사용하여 네트워크 통신 기능을 구현하는 과정을 소켓 프로그래밍이라고 한다.
OSI 7계층과 TCP/IP 5계층에서 계층이 필요한 이유 중 1가지는 네트워크에서 작동하는 프로그램이나 장비에 개발을 쉽게 하기 위해서이다. 계층을 나눔으로써 개발자는 몇 개의 프로토콜만 이용해서 프로그램을 개발할 수 있지만 프로토콜 구현 코드가 있어야지 프로그램을 만들 수 있다. 소켓 API는 이미 만들어진 이러한 코드들을 제공한다. API에서 제공하는 다양한 함수들은 인터넷 프로토콜 사양들을 지원하기 때문에 굳이 힘들게 밑바닥부터 만들 필요 없이 이미 존재하는 소켓 함수들을 가져다 쓰면 된다.
네트워크 프로그램 개발자는 TCP/IP 5계층에서 전송 층에 있는 프로토콜인 TCP와 UDP 프로토콜을 개발하고 나머지는 신경 쓸 필요 없다. 프로토콜은 일종의 명세서일 뿐 실제로 통신을 위해서는 구체적인 구현 함수가 필요하다. C 기반인 소켓 API를 사용하여 이 함수를 구현할 수 있다.
서로 통신할 수 있는 두 프로그램을 Client와 Server라고 부른다. Client는 데이터를 서버로부터 요청하고 Server는 Client로부터 요청 받은 정보를 제공한다. 이 둘을 소켓을 통해 연결하여 서로 데이터를 주고 받을 수 있다. 각각에서 사용되는 소켓을 클라이언트 소켓, 서버 소켓이라고 한다. 소켓 프로그래밍을 하려면 따라서 양 쪽의 코드를 모두 구현해야 한다. 소켓 통신을 위한 소켓 API의 흐름은 아래의 그림과 같다.

이미지 출처: https://recipes4dev.tistory.com/153
profile
느리더라도 꾸준히 멈춤 없이

0개의 댓글