[네트워크 프로그램] UNIX 유닉스 소켓 프로그래밍 : Network API, 시스템콜

 

애플리케이션과 직접 연결하는 통로 역할을 하는 것이 바로 소켓(socket)이다.

포트 번호를 쫒아온 메세지는 포트에 연결되어 있는 소켓을 통과하여 특정 애플리케이션으로 전달된다.

 

유닉스 소켓 프로그래밍
빨간색 동그라미가 소켓의 위치이다.

 

IP 프로토콜과 TCP 혹은 UDP 프로토콜을 통과한 패킷은 목적지로 향하는 포트에 도착한다. 이후 애플리케이션과 연결된 소켓에 전달된다. OS는 메세지가 소켓에 도착하면 애플리케이션에게 이 내용을 안내하고 애플리케이션이 메세지를 받을 수 있도록 한다.

 

반대로 애플리케이션이 소켓을 통해 메세지를 송신하는 경우 애플리케이션은 소켓에 메세지를 기록하여 OS에게 메시지를 보낼 준비가 끝났다는 사실을 알려준다. 이후 OS는 즉시 프로토콜을 통해 메세지를 전송한다.

 

 

소켓은 버클리 소켓 인터페이스(Berkeley Sockets Interface)의 준말이다. 버클릿 소켓 인터페이스는 UNIX 운영체제에서 기본적인 Network API(Application Programming Interface)이며 다른 OS에서도 지원하는 API 이다. UNIX 상에서 소켓 프로그래밍은 대부분의 시스템 콜(System Call)이 C언어로 작성되어 있어 C에 대한 이해가 필요하다.

 

Network API(Application Programming Interface)란 응용프로그래밍 인터페이스라고도 하며 다른 프로그램에서 제공하는 기능에 대한 함수를 묶어놓은 형태로 제공된다. Network 처리에 대해 일일이 프로그래밍 할 필요 없이 다양한 TCP, UDP 통신 등 구조적인 부분을 함수 및 라이브러리 형태로 쉽게 사용할 수 있다.

 

Network API
모든 네트워크 동작을 직접 구현하기에는 너무 복잡하고 매우 많은 시간이 소요되는 작업이다.

위에서 언급한 시스템 콜(System Call)은 OS만이 직접 제어할 수 있는 작업(예를 들어 파일 시스템 접근, 메모리 접근 등)을 처리할 수 있도록 만들어둔 집합을 의미한다. 시스템 콜 역시 함수형태로 제공되며 OS는 이러한 시스템 콜을 필수적으로 제공해야 OS 베이스의 작업을 애플리케이션 단에서 제어하고 호출, 연계할 수 있다. 이러한 OS가 제공한 시스템 콜 함수들을 이용하여 프로그램을 작성하는 것을 시스템 프로그래밍이라고 한다.

+ Recent posts