본문 바로가기
컴퓨터 네트워크

컴퓨터 네트워크 33장 - 소켓의 주소 체계와 서비스 -

by ChocoPeanut 2017. 5. 7.

컴퓨터 네트워크 33

- 소켓의 주소 체계와 서비스 -

 

소켓이라는 통신 프로그램을 쉽게 개발할 수 있게 해주는 API의 일종이다. 인터넷 응용 프로그램을 작성하려면 C 언어를 포함한 고급 프로그래밍 능력이 필요하듯이 네트워크 기능을 위한 데이터 전송을 위해서는 반드시 소켓 프로그래밍을 할 수 있어야한다. 소켓은 네트워크 통신에서 종단의 교신점 역할을 한다. 예를 들어 우편배달을 하는 경우에는 우체통이라는 도구가 교신점 역할을 할 것이고 전화 서비스를 생각하면 전화기가 교신점 역할을 할 것이다.


프로토콜의 종류에 따라 사용하는 주소 체계가 다르다. 일반적으로 한 호스트에 존재하는 프로세스 사이의 통신을 지원하는 AF_UNIX와 다른 호스트에 존재하는 프로세스 사이의 통신을 지원하는 AF_INET가 존재한다. AF_UNIX의 주소 체계는 파일 시스템의 경로명을 기반으로 한다. 구조체를 보게 되면 sun_family 필드는 유닉스 주소 체계를 의미하는 AF_UNIX 값을 가지고 sun_path 필드에는 소켓을 구분하는 주소를 표시하기 위해 파일 시스템의 경로명을 기록한다.



AF_INET는 인터넷 주소 체계로 다른 호스트에 존재하는 프로세스 사이의 통신을 지원한다. 주소 체계는 32비트 IP주소와 16비트 포트 번호를 기반으로 한다. 구조체를 살펴보면 sin_family 필드는 인터넷 주소 체계를 의미하는 AF_INET 값을 가지고 sin_addrsin-port 필드에 주소를 표시한다.



프로토콜마다 주소 체계를 지원하는 문법 구조가 다르기 때문에 문법 구조상 하나의 함수에서 다양한 주소 체계를 지원하는데 어려움이 있다. 따라서 모든 주소 체계를 수용할 수 있는 공통 주소 체계가 필요한데 이것이 통합 주소 체계이다. sockaddr 구조체에 의해 소켓 주소를 표현 방법을 정의할 수 있다.



소켓의 유형은 3가지로 분류할 수 있다. SOCK_STREAM, SOCK_DGRM, SOCK_RAW로 구성된다. SOCK_STREAM은 연결형 서비스를 지원하며 AF_INET에서는 TCP 프로토콜을 사용한다. SOCK_DGRM은 비연결형 서비스를 지원하며 AF_INET에서는 UDP 프로토콜을 사용한다. SOCK_RAWIP 프로토콜을 직접 사용한다.


소켓 주소는 소켓 시스템 콜을 통해 사용되는데 이때 사용하는 다양한 함수들이 존재한다.


socket함수는 매개변수로 지정한 유형에 따라 소켓을 생성하고 생성된 소켓을 가리키는 파일 디스크립터를 리턴한다. bind함수는 소켓에 소켓 주소를 부여한다. listen함수는 소켓을 활성화 시키고 accpet함수는 클라이언트/서버 환경에서 서버가 대기하는 역할을 하고 클라이언트의 connect()함수와 만나면 소켓 연결을 설정한다. connect함수는 클라이언트/서버 환경에서 클라이언트의 연결 설정 요청을 수행하고 send함수는 연결이 설정된 소켓에 데이터를 송신하는 역할을 한다. 전송 데이터는 msg가 가리킨다. recv함수는 연결이 설정된 소켓에서 데이터를 수신한다. 수신 데이터는 buf가 가리키는 공간에 저장된다. 서비스에 대한 자세한 내용은 34장에서 다룰 것이다.



출처 - 데이터 통신과 컴퓨터 네트워크