반응형

NetworkProgramming 18

C++ REST API 사용 강좌 : #2 HTTP POST (boost beast 활용)

이번에는 C++ boost beast를 활용하여 JSON을 인자로 REST API을 호출하여 데이터를 받는 예제를 살펴보도록 하겠습니다. 이 강좌는 C++ REST API 사용 강좌 : #1 HTTP GET (boost beast 활용)에서 이러지는 강좌로 설명 소스가 비슷한 관계로 해당 글에서 설명한 내용(UTF-8, 비동기 처리 등)은 이 글에 없는 관계로 해당 글도 꼭 참고 부탁드립니다. 이번에 살펴볼 소스는 아래와 같습니다. #include #include #include #include #include #include using namespace std; int main(int argc, char* argv[]) { boost::asio::io_context ioc; boost::asio::ip..

강좌 2022.05.12

C++ REST API 사용 강좌 : #1 HTTP GET (boost beast 활용)

근래에는 TCP/IP로 바로 통신하는 프로그램보다는 REST API를 이용하여 통신하는 프로그램이 대세인 듯 보입니다. 여기서는 C++로 REST API를 사용하는 방법을 알아보도록 하겠습니다. 강좌는 boost를 사용하였으며 boost에서 HTTP 통신 관련 상위 라이브러리인 boost beast를 사용합니다. REST API의 기본이 되는 GET 메소드를 이용하여 데이터를 가져오는 방법을 살펴보겠습니다. GET 메소드를 이용하여 데이터를 가져오는 소스는 아래와 같습니다. 소스를 보면서 계속 설명하겠습니다. #include #include #include #include #include #include using namespace std; int main(int argc, char* argv[]) { ..

강좌 2022.05.11

boost asio io_service(io_context)의 poll과 run의 활용

boost asio io_service(io_context)를 통하여 이벤트를 호출하는 방식은 크게 poll과 run으로 나눈다고 할 수 있습니다. 간단히 두 방식을 살펴보면 아래와 같습니다. poll은 이름 그대로 poll방식으로 이전 poll 호출 후 쌓인 socket 이벤트를 실행하고 제어권을 함수를 호출한 쪽에 넘깁니다. run은 socket 이벤트를 실행하고 제어권을 함수를 호출한 쪽으로 넘기지 않고 다음 이벤트를 기다립니다. poll로 run을 구현한다고 한다면 아마 아래와 같은 코드가 될 것입니다. while(true) { poll(); } 서버에 연결하는 클라이언트에서 사용된다면 아마도 poll이 좋은 선택이 될 것입니다. 문제는 서버와 같은 경우는 이 두가지 중 어느 방식을 사용할지는 서..

boost asio io_service(io_context)의 이해 및 활용

boost asio에서 io_service(io_context)는 객체의 이벤트 처리를 담당합니다. 이 객체는 좀 더 자세히 보면 실제적으로 socket과 바인드 되어 socket의 이벤트 처리를 담당합니다. 이 객체는 OS kqueue, /dev/poo/, epoll, iocp와 같은 비동기 socket IO나 select와 같은 동기 IO를 해당 객체를 호출한 쓰레드에서 이벤트를 처리하도록 직렬화합니다. 이를 활용하는 방법을 살펴보겠습니다. io_service(io_context)는 socket에 바인드 되는 관계로 socket 이벤트 처리 그룹을 만들 수 있습니다. io_service1(io_context)에는 socket1, socket2를 바인드하고 io_service2(io_context)에는..

NAT(Network Address Translation)의 역활

NAT(Network Address Translation)란? 우리가 일반적으로 인터넷 공유기라고 부르는 기계에서 하는 일로 사설IP를 사용하는 내부의 네트워크 기기(PC등등)들이 하나의 공유IP(Public IP)를 공유하도록 하여 N개의 Public IP로 N개 이상의 사설IP를 가진 기기들이 인터넷을 사용할 수 있도록 한다. 3 가지 모드 static Public IP와 Private IP를 매핑시킴 pooled 사용가능한 Public IP들을 풀(pool)로 가지고 있어 이들 중 하나를 필요에 따라 Private IP와 매핑 시킴 PAT (Port Address Translation) IP주소를 매핑하듯 Port를 매핑하여 Public IP에서의 Port활용성을 높임. PAT를 안할 경우 내부 I..

TCP Protocol MindMap

FreeMind 0.8.1로 만든 TCP 마인드맵입니다. 처음에는 공부한거 나중에 문서 일일이 찾기 싫어서 나중에 부분적으로 찾아보기 위하여 작성한 것인데, 만들다 보니 3363x3180 size의 이미지 크기로 커져버렸군요. 솔직히 이거 만드는데 거의 한달 걸렸습니다. 처음 의도는 기존의 알고있는 지식의 복습과 몇가지 헷갈리는 부분에 대해서 찾아보는 거였는데 RFC 문서와 Wikipedia 영문판 TCP관련 내용들 찾다보니 공부시간이 무한정 늘어나 버렸네요. 그래도 그동안 추상적으로 부분 부분 이해하던 TCP 메카니즘이 완전히 머리속에 들어온게 보람이라면 보람이겠네요. TCP의 메카니즘을 뿐아니라 MSDN에서 API같이 찾다보니 Window의 TCP구현에 대한 특징도 보이고 소켓관련 FAQ의 내용도 읽..

대역폭 지연 곱 (Bandwidth-delay product)

이글은 Wikipedia의 Bandwidth-delay product을 요약한 것입니다. 대역폭 지연 곱이란? 쉽게 말하여 선로의 최대 처리량을 말하는 것으로 주어진 시간에 최대로 선로에 있는 데이터량을 말합니다. 좀 더 쉽게 설명하자면 데이터를 보냈는데 상대편에서는 아직 안받은 상태인, 선로에서 이동 중 일 수 데이터의 최대양을 말합니다. 계산단위는 초당 비트 혹은 바이트입니다. 어디에 쓰는 물건인고? TCP와 같이 신뢰성 있는 프로토콜에서 중요한데, 이유는 데이터를 보냈는데 ACK를 받지 않아 메모리에 있을 수 있는 데이터 최대 양과 비교될 수 있기 때문입니다. (에러시 TCP와 같은 경우는 Retransmission등을 처리해야 하기 때문에 메모리 버퍼에 가지고 있어야 합니다.) 덧붙이면, 윈도우 ..

TCP ECN(Explicit Congestion Notification)

ECN(Explicit Congestion Notification) TCP Header의 Flag 알아보다가 찾게된 명시적 혼잡 통보 기술인 ECN, Window서버쪽에서는 차세대 기술로 구현은 되어있지만 기본적으로 사용되지는 않습니다. 혹, 관련 기술을 찾는 분들을 위하여 편하게 찾으시라고 글 남겨놓습니다. 참고로 ECN의 개념은 TCP Congestion Control 대신에 Network에서 TCP에 혼잡 상황을 알려주어 Congestion Control의 효율을 높이려는 방법으로 혼잡상황을 알려주는 주체가 종단기기들이 아닌 IP네트워크를 구성하는 Router들이 됩니다. TCP의 ECN 기능을 이용한 Differentiated Services의 Assured Service에서의 Fairness 향..

IP(Internet Protocol) Note #1

인터넷 계층은 아래와 같은 역활을 함 - 어드레싱(addressing) - 패키징(packaging) - 라우팅(routing) 인터넷 계층은 아래와 같은 핵심 프로토콜을 가지고 있음 - IP(Internet Protocol): IP 어드레싱과 패킷의 분해, 재조합을 책임지는 프로토콜 - ARP(Address Resolution Protocol): IP주소 MAC주소 변환 - ICMP(Internet Control Message Protocol): IP 패킷의 전달에 따른 오류나 상태를 리포트하고 진단하는 기능을 제공 - IGMP(Internet Group Management Protocol): IP 멀티캐스트(multicast) 그룹의 관리를 책임 IP는 신뢰성 없는 프로토콜인 관계로 아래와 같은 현상..

Overlapped I/O Note #2 서버개발전략

From NETWORK PROGRAMMING FOR MICRSOFT WINDOWS 대용량 데이터 처리(High Throughput) 대량의 데이터를 송수신하는 것을 목적으로 하며 해당 서버의 예로 FTP서버가 있다. 대용량 데이터 처리로 인하여 동시에 연결할 수 있는 연결 수가 제한될 수 있는 문제점이 있으며 아래와 같은 방법이 해결책이 될 수 있다. 제한된 수의 연결을 처리하는 동안 제한된 수의 연결을 처리하지 않고 큐에 넣어 대기시키게하며 제한된 수의 연결을 처리한 후에 대기하고 있던 연결을 꺼내어 처리한다. (뭐, 일종의 처리 연결수를 제한하는 전략인듯.. 책의 내용은 Accept를 위한 queue에서 대기시키라는 건지 별도의 User Level queue를 만들라는 건지 애매 모호함) overla..

Overlapped I/O Note #1

accept 1) backlog를 충분히 잡는다. 2) Win32 - AcceptEx a. What a) accept(..)가 Pending되며 1byte이상이 수신되었을 때 완료된다. b) 성능상의 이유로 AcceptEx에 할당된 커널모드 구조체는 소켓이 연결되었거나 listening socket이 닫히고 난후에 제거할 수 있다. b. How To Use a) 미리 생성된 socket을 accpet(..)에 걸어놓는다. b) 최대치의 개수를 정해놓고 일정수의 AcceptEx를 항상 걸어놓는다. c) 연결만을 걸어놓는 악의적인 접속이나 유효하지 않은 접속을 대비하기 위하여 getsockopt(SO_CONNECT_TIME)을 이용하여 주기적으로 소켓을 검사한다. d) AcceptEx호출이 값비싼 호출이기 ..

TCP Note #2 Gracefully Close(..)

From Chapter 6 내부구조, TCP/IP The Pocket Guide to TCP/IP Sockets C, MSDN closesocket function[winsock], 'Graceful Shutdown, Linger Options, and Socket Closure', NetworkProgramming For Microsoft Windows What? Gracefully Close란 TCP에서 4way-handshake를 정상으로 마친 그러니까 서로 FIN, ACK를 주고 받고 연결이 종료된 상태이다. Why Important? 이 Gracefully Close를 통하여 소켓의 close(..)를 호출한 쪽은 자신이 보내고자 하는 데이터가 정상적으로 상대편에 다 도착했음을 보장받는다. 이는..

TCP & UDP Note #1

From Chapter 6 내부구조, TCP/IP The Pocket Guide to TCP/IP Sockets C, MSDN, NetworkProgramming For Microsoft Windows Socket 소켓구조체 1) 내부의 소켓구조와 링크된 일종의 핸들(Handle) 2) 지역 및 원격 인터넷 주소와 포트, SendQueue, RecvQueue, TCP연결관련상태정보 TCP 1. Defensive Programming 1) Deadlock n bytes를 send(...)할 때, n=source SendQ size + destination RecvQ size + remained size n>source SendQ size + destination RecvQ size 클 경우 보낸 호스트는 ..

반응형