프로세스간 통신이 가능하다는 것은 서로 다른 두 프로세스가 데이터를 주고 받을 수 있다는 것을 의미한다. 이것이 가능하려면, 함께 공유하는 메모리가 존재해야 한다. 아래 그림은 프로세스간 통신의 방법으로 사용되는 파이프 기법의 구조적 모델이다. 파이프는 프로세스에 속하는 자원이 아닌, OS에 속하는 자원이다. 따라서, fork에 의한 복사 대상이 아니다. 파이프 생성에 사용되는 함수는 다음과 같다. #include int pipe(int filedes[2]); filedes[0] : 데이터를 수신하는데 사용 filedes[1] : 데이터를 송신하는데 사용 이 함수가 호출되면, OS는 서로 다른 프로세스가 함께 접근할 수 있는 메모리 공간을 만들고, 이 공간의 접근에 사용되는 fd를 반환한다. int ma..
둘 이상의 클라이언트에게 동시에 서비스를 제공하는 다중접속 서버에 대해 알아보자. 대표적인 다중접속 서버의 구현 방법에는 다음과 같은 것들이 있다. 멀티프로세스 기반 서버 다수의 프로세스를 생성하는 방식으로 서비스 제공 멀티플렉싱 기반 서버 입출력 대상을 묶어서 관리하는 방식으로 서비스 제공 멀티쓰레딩 기반 서버 클라이언트의 수만큼 쓰레드를 생성하는 방식으로 서비스 제공 프로세스(Process) 멀티프로세스 기반 서버의 서비스 주체가 되는 프로세스를 먼저 이해해보자. 프로세스란, 메모리 공간을 차지한 상태에서 실행중인 프로그램을 의미한다. 멀티프로세스 운영체제는 둘 이상의 프로세스를 동시에 생성 가능하다. 여기서 프로세스는 생성되는 형태에 상관없이 OS로부터 ID를 부여 받는데, 이를 가리켜 “프로세스 ..
지금까지는 소켓을 생성해서 별다른 조작없이 바로 사용해 왔다. 이러한 경우는 기본적으로 설정되어 있는 소켓의 특성을 바탕으로 데이터를 송수신하게 된다. 하지만, 소켓의 특성을 변경시켜야만 하는 경우도 흔히 발생한다. 다양한 소켓의 옵션 중 일부 위의 표에서 보이듯이 소켓의 옵션은 계층별로 분류된다. IPPORTO_IP 레벨의 옵션들은 IP프로토콜에 관련된 사항들이며, IPPORTO_TCP 레벨의 옵션들은 TCP 프로토콜에 관련된 사항들이다. SOL_SOCKET 레벨의 옵션들은 소켓에 대한 가장 일반적인 옵션들로 생각하면 된다. getsockopt & setsockopt 소켓의 옵션을 확인할 때 호출하는 함수는 getsockopt이다. #include int **getsockopt**(int sock, i..
Domain Name System(DNS) 도메인 이름이란, 기억하기도 좋고 표현하기도 좋은 형태로 IP주소에 부여하는 것으로 IP주소를 대신한다. 실제 접속에 사용되는 주소는 아니고, 이 정보는 IP로 변환이 되어야 접속이 가능하다. 도메인 이름은 해당 서버에 부여된 가상의 주소이지 실제주소가 아니다. DNS 서버 도메인 이름을 IP로 변환해주는 서버이다. 모든 컴퓨터에는 디폴트 DNS 서버의 주소가 등록되어 있는데, 이를 통해서 도메인 이름에 대한 IP주소 정보를 얻게 된다. 도메인 이름을 이용해서 서버에 접속하면, 접속 이전에 DNS 서버에 해당 도메인의 IP주소를 묻게 되고(이 때 모른다면, 다른 DNS 서버에 물어서라도 가르쳐준다.), 그 결과로 얻게 된 IP를 이용해서 서버에 접속하게 된다. ..
TCP에서는 연결과정보다 중요한 것이 종료 과정이다. 종료 과정에서는 예상치 못한 일이 발생할 수 있기 때문이다. 일방적인 연결종료의 문제점 close 함수호출은 완전 종료를 의미한다. 완전 종료라는 것은 데이터를 전송하는 것은 물론 수신하는 것조차 더 이상 불가능한 상황을 의미한다. 상대방의 상태에 상관없이 일방적인 종료의 형태를 띤다. 때문에 한쪽에서의 일방적인 close 함수호출은 경우에 따라 좋지 못하다. 위 그림은 양방향으로 통신하고 있는 두 호스트의 상황을 나타낸 그림이다. Host A가 마지막 데이터를 전송하고 나서 close함수의 호출을 통해 연결을 종료하였다. 그래서 그 이후부터는 Host A는 Host B가 전송하는 데이터를 수신하지 못한다(데이터 수신과 관련된 함수의 호출 자체가 불가..
네트워크 프로그래밍이란, 네트워크로 연결된 둘 이상의 컴퓨터 사이에서의 데이터 송수신 프로그램의 작성을 말한다. 소켓(Socket)은 네트워크(인터넷)의 연결 도구이며 OS에 의해 제공되는 소프트웨어적인 장치이다. 또한, 소켓은 프로그래머에게 데이터 송수신에 대한 물리적, 소프트웨어적으로 자세한 내용을 신경 쓰지 않게 한다. 소켓 프로그래밍에서 사용되는 함수들을 서버와 클라이언트 측으로 나누어 간단하게 살펴보자. Server socket TCP 소켓은 전화기에 비유될 수 있다. 소켓은 socket함수의 호출을 통해 생성한다. #include int socket(int domain, int type, int protocol); //성공 시 파일 디스크립터, 실패 시 -1 return bind 전화기에 전화..