반응형

학습자료(~2017)/네트워크 17

[네트워크] 윈속 프로그래밍 - IOCP 펌

윈속 프로그래밍 리뷰 - 1 앞으로 몇 회에 걸쳐 윈도우 기반의 서버 프로그래밍 기법에 대해 살펴볼 것이다. 개념적인 설명보다는 실무에 바로 적용될 수 있는 내용들 위주로 설명할 것이다. 이후 대량의 접속을 커버할 수 있는 실전 예제를 만들어 보는 것으로, 독자의 수준을 크게 한 단계 업그레이드시키는 것이 이 글의 궁극적인 목표이다. 독자가 아직 윈속 API나 멀티 쓰레드에 대해 익숙하지 않다면 참고 서적을 옆에 두고 따라오는 것이 좋을 것이다. 서버 프로그래밍을 하다 보면 정말 웃지 못할 사건들을 많이 접하게 된다. 클라이언트 접속이 1000개까지는 문제가 없다가 1001번째에 갑자기 크래시(crash)가 발생하기도 하고, 서버를 구동시킨 지 2~3일이 지난 시점부터 조금씩 리소스가 새기도 한다. 부지..

[네트워크] Nagle 알고리즘

Nagle 알고리즘 Nagle알고리즘? 네트워크 상에 패킷의 수를 줄이기 위해 개발된 알고리즘 1. 일반 네트워크 통신방법 - 일반적인 통신알고리즘은 데이터는 패킷으로 만들어 보낸다는 것이며 수신호스트는 이에 대한 ACK를 보낸다는 것입니다. 예를 들어, A,B 두 호스트가 통신을 합니다. A는 B에게 'Nagle'라는 데이터를 보내기 원하면, 먼저 'N'이라는 데이터를 패킷으로 만들어 출력버퍼로 보냅니다. 그리고 ACK를 받고 안받고 관계없이 'a'를 패킷으로 만들어 보내고 이어서 'g', 'l', 'e' 각 데이터를 패킷으로 만들어 보낼 것입니다. 수신호스트로부터의 ACK가 언제 오는가는 전혀 관계가 없고, 언제 오든지 오기만 하면 되는 것입니다. 2. Nagle 알고리즘 - 네트웍에서 Nagle 알..

HTTP Session Hijacking

HTTP Session Hijacking(혹은 Session ID Hijacking)이라는 공격 기법은 웹 브라우징시 세션 관리를 위해 사용되는 Session ID를 스니핑이나 무작위 추측 공격(brute-force guessing)을 통해서 도용하는 기법이다. 먼저 이러한 공격에 대한 기초적인 배경지식으로 HTTP 프로토콜의 특성 및 Session ID에 대해 이해해보도록 하겠다. HTTP 프로토콜의 특성 HTTP는 기본적으로 비연결유지(stateless) 프로토콜이다. 반면, telnet과 ftp와 같은 프로토콜은 클라이언트와 서버 사이에 하나의 연결(session)이 성립되어 통신하는 프로토콜이다. 따라서, 우리가 보통 웹 브라우저를 열어 URL을 입력하고 해당 홈페이지에 들어간다는 것은 해당 홈페..

IOCP

멀티스레드 윈속 서버 프로그램의 문제점은 사용자의 수가 많아지면 스레드의 동적 생성과 스레드간의 잦은 컨텍스트 스위칭으로 인한 오버헤드가 크다는 점이었다. 이러한 점을 극복하기 위해 도입된 것이 바로 IOCP이다. 방금 설명한 것처럼 이는 멀티스레드 프로그래밍에서 유용하게 사용할 수 있으며 그 중에서도 소켓이나 파일, 메일슬롯, 파이프와 같은 입출력 관련 프로그램에서 유용하게 사용할 수 있다. 필자는 IOCP를 파일 I/O가 많은 응용프로그램과 네트웍 I/O가 많은 윈속 프로그램에서 사용해봤는데 그냥 단순한 멀티스레드 프로그램을 작성하는 것보다 괜찮은 성능을 가짐을 알 수 있었다. 부하가 그리 크지 않다면 IOCP를 사용하나 사용하지 않으나 성능상에 큰 차이가 없다. 하지만 부하가 클 경우에는 (예를 들..

반응형