HTTP 프로토콜이란웹에서 이루어지는 통신에 사용되는 네트워크 프로토콜. TCP기반 소켓을 기반으로 구현된다. 프로토콜 구조HTTP 프로토콜에서 통신은 클라이언트 측이 요청(Request)을 보내면 서버가 그에 대한 응답(Response)을 보내 통신하는 방식을 사용한다. 요청과 응답은 CRLF(\r\n)를 사용해 개행을 구분한다.RequestRequest의 구조는 Startline, Header, Body로 나뉘어져 있다.Start lineex.) GET / HTTP/1.1메서드, 경로, HTTP 프로토콜 버전이 포함된다.Header Connection, Accept, Date등의 추가 정보가 포함되어 있다.Body: POST 메서드를 사용할 때 추가 정보를 담을 수 있다.GET / HTTP/1.1Ac..
network
이전에는 윈도우 진영에선 IOCP, 리눅스 및 UNIX진영에서는 epoll, kqueue 등을 사용하고 있었다.하지만 2010년대에 들어 구식 모델보다 더 향상된 차세대 IO모델이 발표되었다. 윈도우에서는 Windows Server 2012에 맞춰 IOCP의 확장 격인 RIO(Registered I/O)를 발표, 리눅스에선 커널 5.1 버전부터 io-uring을 사용할 수 있게 되었다. 윈도우의 RIO는 기존 IOCP에서 잦은 시스템콜과 유저모드와 커널모드 간 컨텍스트 스위칭이 잦아 CPU의 점유율이 높은 단점아닌 단점이 있었다. RIO는 이를 해결하기 위해 CP(Completion Port)를 '완료(Completion)'와 '요청(Request)'에 대한 원형 큐로 나누고, 유저모드와 커널모드간 공유..
IOCP Server ✨ 시작하기 전에 이번에 IOCP를 활용해 아무 클라이언트한테 수신을 받는 그대로 전송하는 에코서버(Echo Server)를 구현해 볼 것이다. 이전 글만으로 IOCP를 완전히 이해하는 것은 불가능하기 때문에 이 시리즈에서 천천히 IOCP를 활용해 볼 예정이다. 1. 오버랩 구조체를 상속받기 // 완료된 비동기 함수가 무엇인지 식별하기 위한 열거형 enum class EventType { Send, Recv } // 확장된 오버랩 구조체 struct AsyncEvent : OVERLAPPED { AsyncEvent(EventType eventType) : eventType(eventType) { // 오버랩 구조체의 내용물 비우기 ZeroMemory(this, sizeof(OVERL..
IOCP(I/O Completion Port) IOCP는 I/O Completion Port의 약어로, 윈도우에서 지원하는 비동기 입출력 통지 모델이다. 이 모델은 OVERLAPPED I/O(이하 오버랩)를 기반으로 하고 있지만 차이점으로는 완료통지 방식이 바뀌고, 멀티스레드를 통한 성능 향상이 있다. 이 글에서는 오버랩 모델과 '완료통지'라는 개념을 알고 있다는 것을 전제로 하기 때문에 먼저 오버랩을 공부하고 IOCP를 찾아보면 도움이 될 것이다. 오버랩 vs IOCP 오버랩 오버랩은 비동기 함수를 호출하고 작업이 완료되면 Alertable Wait 상태를 통해 완료통지를 얻어올 수 있다. 완료되면 이벤트 또는 Completion Routine이라는 콜백함수가 호출된다. IOCP IOCP은 기본적인 형..