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

컴퓨터 네트워크 34장 - 소켓 시스템 콜 -

by ChocoPeanut 2017. 5. 7.

컴퓨터 네트워크 34

- 소켓 시스템 콜 -

 

운영체제에서 구현되는 전송 계층 프로토콜인 TCPUDP를 사용하려면 소켓 시스템 콜이라는 라이브러리 함수를 이용한다. 소켓은 통신을 원하는 프로세스에 할당되는 자원이며, 고유의 소켓 주소가 부여된다. 소켓 주소는 소켓 시스템 콜을 통해 사용되며 이를 지원하는 다양한 함수들이 존재한다.


제공되는 다양한 함수들에 대해 자세히 알아보자.


socket()함수소켓을 생성하며, 생성된 소켓의 디스크립터를 반환하는 기능을 수행한다. 사용할 프로토콜의 도메인을 의미하는 domain과 서비스 유형에 대한 값인 type과 적절한 프로토콜을 선택하도록 설정하는 protocol 값을 매개변수로 갖는다. protocol은 보통 0으로 지정한다. domain영역에 AF_UINXAF_INET의 값들이 오게 되고 type 영역에는 SOCK_STREAM, SOCK_DGRAM 등이 나오게 된다.



bind()함수생성된 소켓에 주소를 부여한다. socket()함수가 리턴한 디스크립터를 받는 s 값과 바인드할 소켓 주소를 표기하는 name , name에 보관된 주소 공간의 크기를 나타내는 namelen 값을 매개변수로 갖는다. 컴퓨터마다 정수형 데이터를 처리하는 방법이 다를 수 있으므로 주소 변환을 해주는 기능을 수행하는 함수도 있다. 데이터를 전송하기 전에 개별 컴퓨터의 바이트 순서를 네트워크 바이트 순서로 변환하는 함수를 htonl()함수와 htons()함수라고 하고 이와 반대로 네트워크 바이트 순서를 개별 컴퓨터 바이트 주소로 변환하는 함수가 ntohl()함수와 ntohs()함수이다.



listen()함수소켓에서 대기할 수 있는 연결 요청의 개수를 지정하는 역할을 수행한다. 또한 첫 번째로 매개변수로 표시한 소켓을 활성화한다. backlog라는 연결 요청 개수를 나타내는데 일반적인 환경에서 5로 설정한다.



accept()함서버 프로그램에서 클라이언트의 연결 요청을 대기하는 역할을 수행한다. socket함수가 생성한 연결형 서비스용 소켓인 s 값과 연결을 요청한 클라이언트의 소켓 주소를 반환하는 addr 값을 매개변수로 가진다. 서버 프로세스는 시스템 관리자의 개입이 없으면 영원히 종료되지 않고 수행되므로 while 문을 사용하여 클라이언트 프로세스와 연결이 이루어지면 하위의 자식 프로세스를 생성해 클라이언트와 통신할 수 있도록 하고, 자신은 accept()함수에서 다시 대기한다.



connect()함수클라이언트 프로그램에서 서버에게 연결 요청을 수행하는 함수이다. socket()함수가 생성한 연결형 서비스용 소켓을 나타내는 s 값과 연결하고자 하는 서버의 소켓 주소인 name을 매개변수로 가지게 된다. 주소의 변환 방식에서 10진수와 2진수 사이의 변환이 필요하기 때문에 다른 함수들이 사용된다. inet_addr()함수는 10진수 형식을 2진수 형식으로 변환하고 inet_ntoa()함수는 2진수 형식을 10진수 형식으로 변환한다.



send()함수연결형 서비스에서 데이터를 송신하는 역할을 한다. 이와 비슷한 함수에 sendto()함수가 있는데 이 함수는 비연결형 서비스에서 데이터를 송신한다. send()함수의 경우 생성한 소켓을 의미하는 s 값과 송신할 데이터인 msglen 값을 매개변수로 가지고 sendto()함수의 경우에는 send()함수의 매개변수를 포함해서 비연결형 서비스 수신자 주소 값인 to 값을 매개변수로 갖는다.



recv()함수연결형 서비스에서 데이터를 수신하는 역할을 한다. 비연결형 서비스에서 데이터 수신은 recvfrom()함수가 있다. recv()함수는 생성한 소켓을 나타내는 s 값과 수신할 데이터를 저장할 공간인 buf 값을 매개변수로 가진다. recvfrom()함수는 이에 더해 from이라는 비연결형 서비스에서 송신자 주소를 나타내는 값도 가진다.




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