책정리/윈도우 네트워크 프로그래밍 10

10장 소켓 입출력 모델(II)

Overlapped 모델(1) Overlapped 모델은 지금까지 배운 다른 소켓 입출력 모델과는 근본적으로 다른 입출력 방식으로, 고성능을 제공한다. 또한 동작 방식에 따라 크게 두 종류의 작성 방법을 지원한다. 동작 원리 원래 Overlapped 입출력 방식은 윈도우 운영체제에서 고성능 파일 입출력을 위해 제공하는데, 이를 소켓 입출력에서도 사용할 수 있게 만든 것이 Overlapped 모델이다. 위의 그림은 동기 입출력(synchronous I/O)라고 부른다. 애플리케이션은 입출력 함수를 호출한 후 입출력 작업이 끝날 때까지 대기한다. 입출력 작업이 끝나면 입출력 함수는 리턴하고 애플리케이션은 입출력 결과를 처리하거나 다른 작업을 진행할 수 있다. Select, WSAAsyncSelect, WSA..

9장 소켓 입출력 모델(I)

개요 좀더 많은 클라이언트 접속을 효율적으로 처리하려면 새로운 입출력 모델이 필요하다. 소켓 모드 소켓은 소켓 함수 호출 시 동작 방식에 따라 블로킹(blocking)과 넌블로킹(nonblocking)소켓으로 구분하며, 이를 소켓 모드(socket mode)라고 부른다. 블로킹 소켓 특징 소켓 함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태(wait state)가 된다. 대표적인 소켓 함수와 리턴 조건은 다음과 같다. 소켓 함수리턴 조건accept( )클라이언트가 접속했을 때send( ), sendto( )송신 버퍼에 데이터를 모두 복사했을 때recv( ), recvfrom( )수신 버퍼에 도착한 데이터가 있을 때이러한 조건이 만족되지 않으면 소켓 함수는 리턴하지 않으..

7장 소켓 옵션

개요 소켓 프로그래밍이란 아래 그럼에서 보는 것과 같이 소켓을 통해 간접적으로 TCP, IP등과 같은 하부 프로토콜을 다룸으로써 애플리케이션을 작성하는 것을 의미한다. 이와 같은 관점에서 보면, 애플리케이션은 소켓 코드가 제공하는 인터페이스인 소켓 함수를 호출함으로써 하부 프로토콜이 제공하는 다양한 기능을 사용하는 것이다. 지금까지 다룬 모든 소켓 애플리케이션은 특별한 변경 없이 소켓 함수를 그대로 호출함으로써 구현하였다. 그러나 다양한 애플리케이션을 작성하다보면, 동일한 소켓 함수를 호출하더라도 소켓 코드나 프로토콜 구현 코드의 동작이 달라지도록 할 필요가 생긴다. 소켓 옵션(socket option)을 적용하면 소켓 함수의 기본 동작을 변경할 수 있으며, 이를 이용하여 애플리케이션은 소켓 코드와 프로..

6장 UDP 서버/클라이언트

UDP 서버/클라이언트 구조 TCP와 UDP 프로토콜은 전송 계층 프로톸ㄹ이라는 점에서 다음과 같은 공통점을 지닌다 포트 번호를 이용하여 주소를 지정한다 두 애플리케이션이 통신하기 위해 반드시 포트 번호를 결정해야 한다 데이터 오류를 체크한다 IP가 제공하는 오류 체크 기능은 프로토콜 동작을 위해 반드시 필요한 부분에만 국한된다. 즉 IP헤더에 대한 오류는 체크하지만 데이터에 대한 오류는 체크하지 않는다. 반면, TCP와 UDP는 헤더와 데이터에 대한 오류를 체크한다. TCP와 UDP의 차이점은 다음과같다. 항목 TCP UDP 1 연결형(connection-oriented) 프로토콜 연결이 성공해야 통신 가능 비연결형(connectionless) 프로토콜 연결 없이 통신 가능 2 데이터 경계를 구분하지 ..

5장 멀티스레드

멀티스레드 기초 4장에서 다룬 TCP 서버/클라이언트 예제는 다음과 같은 문제가 있다 두 개 이상의 클라이언트가 서버에 접속할 수 있으나, 서버가 동시에 두 개 이상의 클라이언트에 대한 서비스를 할 수 없다. 서버와 클라이언트의 send( ), recv( )함수 호출 순서가 서로 맞아야 한다. 데이터를 보내지 않은 상태에서 양쪽에서 동시에 recv( )함수를 호출할 경우 교착 상태가 발생할 수 있다. 여기서 교착 상태(deadlock)란 영원히 일어나지 않을 사건을 두 프로세스가 기다린느 상황을 뜻한다. 아래 경우 두 프로세스가 recv( )함수에서 빠져 나가지 못하고, 이로 인해 send( )함수를 호출할 수 없으므로 교착 상태가 발생한다. 첫 번째 문제점에 대한 해결책과 각각의 장단점은 다음과 같다 ..

4장 TCP 서버/클라이언트 구조

TCP 서버/클라이언트 구조 PC에서 사용하는 대표적인 웹 클라이언트인 인터넷 익스플로러는 사용자가 입력한 주소를 참조하여 접속 대기 중인 웹 서버에 접속한 후, HTTP를 이용하여 요청 메시지를 보낸다. 웹 서버는 이 데이터를 분석한 후 HTTP를 이용하여 응답 메시지를 다내 보낸다. 익스플로러는 웹 서버가 보낸 데이터를 받아 화면에 표시한다. HTTP는 TCP에 기반한 프로토콜이므로 웹 서버/클라이언트는 대표적인 TCP 서버/클라이언트 애플리케이션이라고 할 수 있다. TCP 서버/클라이언트 동작 방식은 다음과 같다 서버는 먼저 싱행하여 클라이너트가 접속하기를 기다린다(listen) 클라이언트가 서버에 접속(connet)하여 데이터를 보낸다(send) 서버는 클라이언트 접속을 수용하고(accept), ..

3장 소켓 주소 구조체 다루기

소켓 주소 구조체 정의 소켓 주소 구조체(socket address structures)는 네트워크 프로그램에서 필요로 하는 주소 정보를 담고 있는 구조체로, 다양한 소켓 함수의 인자로 사용한다. 여러 소켓 주소 구조체 중 가장 기본이 되는 것은 SOCKADDR로 구조체 정의는 다음과 같다 typedef struct sockaddr { u_short sa_family; CHAR sa_data[14]; } SOCKADDR, *PSOCKADDR, *LPSOCKADDR; sa_family 주소 체계를 나타내며, 부호 없는 16비트 정수값을 사용한다. 예를 들어, TCP/IP프로토콜을 사용한다면 이 값은 AF_INET이 된다. sa_data[14] 해당 주소 체계에서 사용하는 주소 정보를 담고 있다. 주소 체계..

2장 윈도우 소켓 시작하기

오류 처리 네트워크 프로그램에서는 여러 원인으로 인해 오류가 발생할 수 있으며, 발생 활률 또한 비교적 높은 편이다. 따라서 함수 호출 시 오류 처릴르 철저히 하는 것은 물론, 구체적인 오류 내용을 사용자에게 알려주는 것은 매우 중요하다. 윈속 함수는 오류 처리 방법에 따라 다음과 같이 세 가지 유형으로 나눌 수 있다. 오류 처리를 할 필요가 없는 경우 리턴값이 없거나 호출 시 항상 성공하는 일부 소켓 함수 리턴값으로 오류를 처리하는 경우 WSAStartup() 함수 리턴값으로 오류 발생을 확인하고, 구체적인 내용은 오류 코드를 이용하여 확인하는 경우 대부분의 소켓 함수 소켓 함수 호출 결과 오류가 발생했다면 WSAGetLastError( ) 함수를 이용하여 오류 코드를 얻을 수 있다. int WSAGe..

1장 네트워크와 소켓 프로그래밍

TCP/IP 개요 TCP/IP 프로토콜 구조 인터넷을 통해 통신을 수행하는 개체는 크게 종단 시스템과 라우터로 나눌 수 있다. 종단 시스템(end-system)은 최종 사용자(end-user)를 위한 애플리케이션을 수행하는 주체가 되며, 인터넷에 연결된 PC, 워크스테이션, PDA, 휴대폰 등이 여기에 속한다. 라우터(router)는 종단 시스템이 속한 네트워크와 다른 네트워크를 연결함으로써 서로 다른 네트워크에 속한 종단 시스템끼리 상호 데이터를 교환할 수 있도록 하는 장비다. 종단 시스템과 라우터간, 라우터와 라우터간, 그리고 종단 시스템과 종단 시스템간 통신을 수행하기 위해서는 정해진 절차와 방법을 따라야 하는데 이를 프로토콜(protocol)이라 부른다. 1~4는 모두 상호 약속한 프로토콜을 이용..

목차

Part1. 준비 학습 : 소켓 프로그래밍 입문 Chapter01 네트워크와 소켓 프로그래밍 TCP/IP 개요 TCP/IP 프로토콜 구조 패킷 전송 원리 IP 주소, 포트 번호 클라이언트/서버 모델 소켓의 개념 데이터 타입 통신 종단점 네트워크 프로그래밍 인터페이스 윈도우 소켓 특징 구조 윈속 어플리케이션 맛보기 Chapter02 윈도우 소켓 시작하기 오류 처리 윈속 초기화와 종료 소켓 생성과 닫기 소켓 생성 소켓 닫기 Chapter03 소켓 주소 구조체 다루기 소켓 주소 구조체 정의 바이트 정렬 함수 IP 주소 변환 함수 도메인 이름 시스템과 이름 변환 함수 Part2. 기본 학습 : 소켓 프로그래밍 기본 Chapter04 TCP 서버/클라이언트 TCP 서버/클라이언트 구조 동작 원리 [실습] 간단한 ..