#.다수의 클라이언트에게 동일한 데이터를 전송하는 일조차 서버와 네트워크의 트래픽 측면에서는 매우 부정적 - TCP 기반의 경우 : 클라이언트 수만큼 소켓연결을 유지해야 함 - UDP 기반의 경우 : 클라이언트 수만큼 데이터 전송이 필요 => 이러한 상황에서의 해결책으로 "멀티캐스트" 라는 기술이 존재 #.멀티캐스트 - UDP를 기반으로 함 - UDP 서버/클라이언트의 구현방식과 차이점이 있다면, UDP에서의 데이터 전송은 하나의 목적지를 두고 이루어지나, 멀티캐스트에서의 데이터 전송은 특정 그룹에 가입(등록)되어 있는 다수의 호스트가 목적지가 됨. 즉,단 한번에 데이터 전송으로 다수의 호스트에 데이터를 전송할 수 있음. #.멀티캐스트의 데이터 전송방식과 멀티캐스트 트래픽 이점 - 멀티캐스트 서버는 특정..
#.send & recv. 리눅스 기반에서도 윈도우 기반의 send, recv 함수가 존재하며, 이둘은 차이가 나지 않는다. 리눅스의 write, read 함수와 다른 점은 옵션을 넣어줄 수 있다는 점이다. #.send 함수 소개. #include // 성공 시 전송된 바이트 수, 실패 시 -1 반환 ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); - sockfd : 데이터 전송 대상과의 연결을 의미하는 소켓의 파일 디스크립터 전달, - buf : 전송할 데이터를 저장하고 있는 버퍼의 주소 전달. - nbytes : 전송할 바이트 수 전달. - flags : 데이터 전송 시 적용할 다양한 옵션 전달. #.recv 함수 소개 #in..
#.멀티플렉싱 기반의 서버 멀티프로세스 서버의 단점과 대안 이전 Chapter에서는 다중접속 서버의 구현을 위해 클라이언트의 연결요청이 있을 때마다 새로운 프로세스를 생성하였다. 이는 실제 사용되는 방법이지만 문제가 전혀 없는 방법은 아니다. 프로세스의 생성에는 상당히 많은 대가를 지불해야 하기 때문이다. 많은 양의 연산이 요구되며, 필요한 메모리 공간도 비교적 큰 편이다. 또한 프로세스마다 별도의 메모리 공간을 유지하기 때문에 상호간에 데이터를 주고받으려면 다소 복잡한 방법을 택할 수밖에 없다. 프로세스의 생성을 동반하지 않으면서 다수의 클라이언트에게 서비스를 제공할 수 있는 방법으로 IO멀티플렉싱 서버가 있다. 하지만 이 모델은 구현하고자 하는 서버의 특성에 따라서 구현방법이 달리 결정되어야 한다. ..
#.프로세스간 통신의 기본 개념 프로세스간 통신의 기본 이해 프로세스는 완전히 별개의 메모리 구조를 지닌다. 따라서 fork 함수 호출을 통해서 생성된 자식 프로세스 조차 부모 프로세스와 메모리 공간을 조금도 공유하지 않는다. 그래서 프로세스간 통신은 별도로 마련된 방법을 통해서만 이뤄질 수 있다. #.파이프(PIPE) 기반의 프로세스간 통신 다음 그림은 프로세스간 통신의 방법으로 사용되는 파이프 기법의 구조적 모델을 보이고 있다. 위 그림에서 보이듯이 두 프로세스간 통신을 위해서는 파이프라는 것을 생성해야 한다. 이 파이프는 프로세스에 속하는 자원이 아니다. 이는 소켓과 마찬가지로 운영체제에 속하는 자원이다. 운영체제가 마련해 주는 메모리 공간을 통해서 두 프로세스는 통신을 하게 된다. #include..
프로세스의 이해와 활용 #.다중 접속 서버의 구현 방법들 네트워크 프로그램은 CPU의 연산을 필요치 않는 데이터의 송수신 시간이 큰 비중을 차지하므로, 둘 이상의 클라이언트에게 동시에 서비스를 제공하는 것이 CPU를 보다 효율적으로 사용하는 방법이 된다. 때문에 우리는 둘 이상의 클라이언트에게 동시에 서비스를 제공하는 다중접속 서버에 대해 논의하고자 한다. 다음은 대표적인 다중접속 서버의 구현 모델 및 구현 방법이다. #.프로세스(Process)의 이해 프로세스는 간단히 다음과 같이 정의할 수 있다. "메모리 공간을 차지한 상태에서 실행중인 프로그램" 하드디스크에 저장되어 있는 상태는 프로그램이라고 한다. 이 프로그램이 메인 메모리(Main Memory)라는 곳으로 이동해서 실행을 위한 준비를 마치게 되..
소켓에는 다양한 특성이 존재하는데, 이러한 특성은 소켓의 옵션변경을 통해서 변경이 가능하다. #.Protocol Level 소켓의 옵션은 계층별로 분류된다. IPPROTO_IP 레벨의 옵션들은 IP프로토콜에 관련된 사항들이며, IPPROTO_TCP 레벨의 옵션들은 TCP 프로토콜에 관련된 사항들이다. SOL_SOCKET레벨의 옵션들은 소켓에 대한 가장 일반적인 옵션들로 생각하면 된다. #.getsockopt & setsockopt 거의 모든 옵션은 설정상태의 참조(Get) 및 변경(Set)이 가능하다. 그리고 옵션의 참조 및 변경에는 다음 두 함수를 사용한다. #include int getsockopt(int sock, int level, int optname, void* optval, socklen_t..