Network Programing/Network 개념 썸네일형 리스트형 소켓 입출력 모델 - 4. Overlapped 모델과 IOCP 4. Overlapped 모델과 IOCP - 기본적으로 Overlapped 와 IOCP를 따로 구분하긴 애매하다. IOCP는 Overlapped 모델을 기반으로 확장한 것이기 때문이다. - Overlapped I/O는 중첩 입출력 or 비동기 입출력(Asynchronous I/O)라고도 부른다. - 어플리케이션은 입출력 함수를 호출한 후 입출력 작업의 완료 여부와 무관하게 다른 작업을 진행 - 입출력 작업이 끝나면 운영체제는 작업완료를 어플리케이션에 알려준다. - 이때 어플리케이션은 다른 작업을 중단하고 입출력 결과를 처리한다. ※ 소켓 입출력 작업이 완료되면, 운영체제는 어플리케이션이 등록한 함수를 자동으로 호출한다. - 쉽게 이야기한다면 IO를 요청했다는 정보가 Device로 날라가게 되며 더이상 쓰.. 더보기 소켓 입출력 모델 - 3. WSAEventSelect 모델 3. WSAEventSelect 모델 - WSAEventSelect() 함수가 핵심적인 역할을 한다는 뜻에서 붙은 이름 - 이벤트 객체를 통해 네트워크 이벤트를 감지 - 각 소켓에 대해 이벤트 객체를 생성하고, 이 이벤트 객체를 관찰함으로써 멀티스레드를 사용하지 않고 여러 개의 소켓을 처리 할 수 있다. - 동작원리 ㆍ각 소켓마다 이벤트 객체를 하나씩 생성하여 짝지어두면, 네트워크 이벤트가 발생할 때마다 이벤트 객체는 신호 상태가 된다. ㆍ따라서 이벤트 객체의 신호 상태를 통해 네트워크 이벤트 발생을 감지 ㆍ그러나 이것만으로는 구체적으로 어떤 종류의 이벤트가 발생했는지 혹은 어떤 오류가 발생했는지 알수 없다는 문제가 있다. 더보기 소켓 입출력 모델 - 2. WSAAsyncSelect 모델 2. WSAAsyncSelect 모델 - WSAAsyncSelect() 함수가 핵심적인 역할을 하며 윈도우 메시지 형태로 소켓과 관련된 네트워크 이벤트를 처리 할 수 있다. - 모든 소켓과 관련된 메시지는 하나의 윈도우, 즉 하나의 윈도우 프로시저로 전달되므로 멀티스레드를 사용하지 않고도 여러 소켓을 처리할 수 있다. - 동작원리 ㆍWSAAsyncSelect() 함수를 이용하여 소켓을 위한 윈도우 메시지와 처리할 네트워크 이벤트를 등록 ㆍ등록한 네트워크 이벤트가 발생하면 윈도우 메시지가 발생하고 윈도우프로시저가 호출 ㆍ윈도우 프로시저에서 받은 메시지의 종류에 따라 적절한 소켓 함수를 호출하여 처리 더보기 소켓 입출력 모델 - 1.Select 모델 소켓 입출력 모델의 경우 1. Select 모델 2. WSAAsyncSelect 모델 3. WSAEventSelect 모델 4. Overapped 모델들이 있다. 1. Select 모델 - Select()함수가 핵심적인 역할을 하며 소켓모드(블로킹, 넌블로킹)에 관계없이 여러 소켓을 한 스레드로 처리 할 수 있다. - Select 모델이 제공하는 기능을 소켓 함수를 호출해야 할 시점을 알려줌으로써 함수 호출 시 항상 성공하도록 하는 것 - 동작원리 ㆍ세 개의 소켓 셋(Socket set)을 준비 해야 하며 ㆍ소켓 셋은 소켓 디스크립터의 집합으로써 해당 소켓으로 하고자 하는 작업의 종류를 나타낸다. *만약 어떤 소켓의 recv()함수를 호출해야 할 시점을 알고 싶으면 읽기 셋에 넣고, Send()함수를 호.. 더보기 소켓 모드 와 동기/비동기 란? 1. 소켓 모드 1.1 블로킹 소켓(blocking) - 소켓 함수 호출 시 조건이 만족 되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태이다. - 소켓 함수는 리턴하지 않으면 멀티스레드를 사용하여 다른 작업을 하지 않는 한 어플리케이션이 더 는 진행 할수 없다. - Socket() 함수는 기본적으로 블로킹 소켓이다. 1.2 넌 블로킹 소켓(Non-blocking) - 소켓 함수 호출 시 조건이 만족되지 않더라도 함수가 리턴하므로 해당 스레드는 계속 진행 할 수 있다. - ioctlsocket()함수를 호출해야만 넌블로킹 소켓으로 바꿀수 있다. - 넌 블로킹 소켓은 WSAEWOULDBLOCK으로 항시 체크하여 다시 소켓 함수를 호출하여야 한다. ※ listen_sock이 넌블로킹이면 client.. 더보기 쓰레드 동기화 기법 1. 동기화의 두 가지 관점 - 실행 순서의 동기화 ㆍ쓰레드들이 정해진 특정 순서로 실행되어야 할때 필요 - 메모리 접근의 동기화 ㆍ멀티 쓰레드 기반시 메모리에 접근 할떄 사용 ㆍ크리티컬섹션(Critical Section), 뮤텍스(Mutex), 세마포어(Semaphore) 등이 있따. 2. 동기화 주체로 나누어 본 두 가지 방법 2.1 유저 모드 동기화 - 커널의 힘을 빌리지 않는 동기화 기법이지만 커널의 전환이 불필요해서 성능상 이점이 있지만 그만큼 기능상의 제한이 있다. - 종류로는 ㆍInterlockedXXX 계열 함수, Critical Section, SpinLock 2.2 커널 모드 동기화 - 커널에서 제공하는 동기화 기능을 활용하는 방법 - 커널 오브젝트를 생성하고 이를 조작하는 함수 호출로.. 더보기 동기(Sync) 와 비동기(ASync) (단순한 동기 비동기)1. 동기(Synchronous)- 로직 A와 B가 있다면 동기는 A에 대한 응답을 받은 후 완료 처리를 한후 B의 응답을 받아 B의 행동을 하는 것- 데이터 저농 방법 : 한 문자 단위가 아니라 미리 정해진 수 만큼의 문자열을 한 묶음으로 만들어서 일시에 전송하는 방법(이 방법은 데이터와는 별도로 송수시측이 하나의 기준 클록으로 동기신호를 맞춰야함)- 송신측에서 전송된 데이터를 수신측에서 정확히 수신하기 위해, 보내는 측과 받는 측의 각 비트가 동일한 타이밍에 취해져야 하는데 이떄 송,수신측의 타이밍을 일치시키는 것을 동기식 전송 - 좋은점? ㆍ동기식 전송은 비동기식에 비해 전송효율이 높다는 것이 장점 but 수신측에서 비트 계산을 해야하면, 문자를 조립하는 별도의 기억장치가 필요.. 더보기 Nagle알고리즘 이란? Nagle알고리즘? 네트워크 상에 패킷의 수를 줄이기 위해 개발된 알고리즘 1. 일반 네트워크 통신방법 - 일반적인 통신알고리즘은 데이터는 패킷으로 만들어 보낸다는 것이며 수신호스트는 이에 대한 ACK를 보낸다는 것입니다. 예를 들어, A,B 두 호스트가 통신을 합니다. A는 B에게 'Nagle'라는 데이터를 보내기 원하면, 먼저 'N'이라는 데이터를 패킷으로 만들어 출력버퍼로 보냅니다. 그리고 ACK를 받고 안받고 관계없이 'a'를 패킷으로 만들어 보내고 이어서 'g', 'l', 'e' 각 데이터를 패킷으로 만들어 보낼 것입니다. 수신호스트로부터의 ACK가 언제 오는가는 전혀 관계가 없고, 언제 오든지 오기만 하면 되는 것입니다. 2. Nagle 알고리즘 - 네트웍에서 Nagle 알고리즘은 "가능하면 .. 더보기 이전 1 다음