728x90

Network 21

UDP와 브로드캐스트

UDP 프로토콜 특징 연결, 상태 개념이 없음 흐름제어 , 송/수신 보장 혹은 확인에 관한 기능 없음 개발자 스스로 tcp 구현가능하다 영상 및 게임에서 많이 쓰이게 된다. //소켓 생성. SOCK_DGRAM 타입을 사용한다! SOCKET hSocket = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (hSocket == INVALID_SOCKET) ErrorHandler("UDP 소켓을 생성할 수 없습니다."); //원격지로 메시지를 전송하는 스레드 함수. DWORD WINAPI ThreadSendto(LPVOID pParam) { //송신을 위한 UDP 소켓을 하나 더 개방한다. SOCKET hSocket = ::socket(AF_INET, SOCK_DGRAM,..

서버 성능 개선

IOCP 모델 Proactor 방식 고속 입/출력 모델 입출력이 끝날 때까지 대기를 계속하는것이 아니라 callback 처럼 입출력이 끝날시에 어떤것을 해줘! 하는 방식 비동기 I/O 통지(Callback) 구조 사용자 요청에 대한 처리 스레드 풀을 OS가 직접관리 사용자가 스레드풀을 만들어서 처리하는것이 아님 커널영역에서 사용자 메모리 영역을 공유해 불필요한 메모리 복사 방지 입/ 출력 처리시 관련 메모리에 대해 페이지 단위 Lock/Unlock Callback 함수는 사용자 모드 함수이나 커널에서 호출하며 이때마다 스위칭 VMS의 특정 메모리에 쓸 data를 쓰고 I/O request가 IOCP queue에 들어가게 되면 kernel io작업을 할때 특정 메모리를 Lock을 잡아서 오염되지 않게 하고..

파일 송/수신과 프로토콜 설계

파일 송/수신 서비스 구조 설계 파일 송/수신 프로토콜 정의 기본 헤더와 확장헤더로 나눠서 정의 기본 헤더는 이어지는 확장 헤더 를 결정하기 위한 코드 값 포함 코드 값에 따른 switch case 각 경우에 대한 함수(처리기) 및 해석 방법 적용 json으로 was에서 처리할것이 아니라면 native c++ 에서는 위와 같은 구조를 갖는게 일반적이다. send 1회 recv multiple이 일반적이다. 받을 때는 끊어내는 구조로 가야한다. 응용 프로그램 프로토콜 디자인 header에 맞는 구조체를 recv(&mcd) 로 읽어와서 Code를 읽어와서 Ext1,2,3 중 어떤 case인지 판별하여 진행하게 된다. 프로토콜이 적용된 파일 송신 서버 제작 //MYCMD 구조체의 nCode 멤버에 적용될 수 ..

파일 송/수신

기본 구조에 대한 설명 client 의 운영체제 의 수신속도 (kernel -> application ) 가 application 의 read 속도 보다 빠르면 장애가 날 확률이 높다. 파일 송신 서버 제작 (프로토콜이 없는 파일 송신) //파일송신 char byBuffer[65536];//64KB int nRead, nSent, i = 0; while ((nRead = fread(byBuffer, sizeof(char), 65536, fp)) > 0) { //파일에서 읽고 소켓으로 전송한다. //전송에 성공하더라도 nRead와 nSent 값은 다를 수 있다!!! nSent = send(hClient, byBuffer, nRead, 0); printf("[%04d] 전송된 데이터 크기: %d\n", ++..

TCP 채팅 서버 - 성능 개선

I/O 멀티플렉싱 채팅 서버로 개선 여러 입/출력 요청이 한 채널에 동시에 혼재 할 수 있는 입/출력 구조 개발자 관점에서 보면 송신과 수신이 동시에 발생하는 것 모든 입/출력은 프로세스가 아니라 OS가 주도 한다는것이 핵심 https://tonylim.tistory.com/465 비동기 I/O는 callback , Event 같은 방식으로 디스크 쓰기 가 완료되었다는 것을 알려준다. 멀티플렉싱에서는 OS가 채널에 정보가 들어오는것을 알고 있기때문에 모종의 방식으로 user에게 어떤 채널에 정보가 준비되었는지 알려주게 된다. 중첩된 파일 입/출력에서 한 파일의 여러 다른 부위에 비동기적으로 write요청을 보낼시 순차적으로 될지 알 수가 없다. I/O 멀티플렉싱 서버 - 변화 감시 //5. 소켓의 변화를..

TCP 채팅 서버 - 기본 이론

멀티스레드 채팅 서버 구조와 이론 멀티스레드 기반 에코 서버의 확장형 한 클라이언트 TCP 세션을 관리하는 개별 스레드가 클라이언트 수 만큼 존재 연결된 모든 클라이언트를 관리하기 위한 자료구조가 필요하며 스레드 동기화 보다 강도 높은 안정성이 요구됨 멀티스레드 기반 채팅 서버 //새로 연결된 클라이언트의 소켓을 리스트에 저장한다. BOOL AddUser(SOCKET hSocket) { ::EnterCriticalSection(&g_cs);//임계영역 시작 //※ 이 코드는 오직 한 스레드만 수행한다는 것이 보장된다! g_listClient.push_back( hSocket ); ::LeaveCriticalSection(&g_cs);//임계영역 끝 return TRUE; } client socket들을 ..

소켓 옵션과 필수 이론

소켓 입/출력 버퍼 bps = bit per sec pps = packet per sec mtu = 1500bytes 정도하는데 패킷을 꽉채우지 않고 pps 만 늘면 별로 좋지 않다. bps가 높아야 좋다고 볼 수 있다. Nagle algorithm = pps를 줄이고 한번에 패킷을 꽉채워서 보내자 , tcp 수준에서 기본적으로 적용되는 알고리즘 결국은 buffered i/o에서 하고자 하는것은 i/o 신호가 올때마다 매번 반응하는것이 아니라 한꺼번에 한번씩 보내자 tcp implementation 이 엄청많다. (딱히 언제까지 기다릴것인가에 대한 규약이 정해져있지않다.) //소켓의 '송신' 버퍼의 크기를 확인하고 출력한다. int nBufSize = 0, nLen = sizeof(nBufSize); i..

TCP 소켓 프로그래밍 입문

소켓의 본질에 대한 이해 소켓은 OS커널에 구현 되어 있는 프로토콜 요소에 대한 추상화된 인터페이스 장치 파일의 일종으로 이해할 수 있음 일반 파일에 대한 개념이 대부분 적용됨 TCP 상태 다이어그램과 적절한 상태 전이 파란색이 server이고 연결을 대기하고 있다가 끊길때는 client가 끊자고 해서 server는 passive close가 이뤄진다. server가 먼저 연결을 끊어버리는것은 적절한 전이 가 아니다. TCP 에코 서비스 전체 흐름 socket() -> bind() 가 끝나야 CLOSED -> LISTEN으로 변경된다. listen()을 통해 대기하다가 client 가 connect를 시도하면 server 가 accept하고 연결이 된다. socket은 server socket , acc..

VPN과 네트워크 보안 솔루션

PN과 VPN 보안 서비스 기술 = 내부 사설망을 외부로부터 스스로 보호하고, 사용자 인증을 통한 접근통제가 가능해야한다. 데이터 인증 및 암호화 기술 = 사설망 간의 traffic을 무결성과 기밀성을 유지 하기 위해서, 모든 traffic에 인증 메커니즘을 적용하거나, 정보 유출의 방지를 위해서 암호화 할 수 있어야 한다. 터널링 기술 = 기존의 공개 네트워크에서 가상의 사설 망을 구성하기 위해서, 기존 네트워크에서 정보 이동이 가능하도록 정보를 캡슐화 하고 , 다시 풀어 내어 논리적으로 두 네트워크를 연결하는 기술(망연계) 이다. 이미 전세계로 연결되어있는 ISP를 통해서 암호화, 인증 기술을 통해 private하게 쓸 수 있다. IPSec VPN과 터널링 개념 IPSec 은 네트워크 계층에 보안 서..

부하분산 시스템 작동원리

L4 부하분산과 무정지 시스템 client가 LB에 접속을 시도하고 manager가 알려준 server로 접속을 하게된다. manager가 부하율이 어떤 sever가 적은지 감지하고 LB에게 알려주게 된다. server1이 고장나도 manager가 다른것으로 routing 해줄것이기 때문에 server1 을 수리하거나 앱을 재배포해도 문제없다. 하지만 LB가 고장이나면 다 무의미해진다. 그래서 보통 LB가 2개로 있고 이중화 되어 있어서 Single point of failure를 막게 된다. GSLB Global Sever Load Balancing DNS 체계를 활용하는 구조 각 서버들의 콘텐츠는 CDN을 활용해 동기화 하는 것이 대부분 CDN는 별도의 서버들이 글로벌하게 있을 때 content up..

728x90