728x90

전체 글 494

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 멤버에 적용될 수 ..

Let's build GPT: from scratch, in code, spelled out.

# here are all the unique characters that occur in this text chars = sorted(list(set(text))) vocab_size = len(chars) print(''.join(chars)) print(vocab_size) account_circle !$&',-.3:;?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 65 small shakespear 라는 몇장의 문단에서 character들만 추출 한 것이다. # create a mapping from characters to integers stoi = { ch:i for i,ch in enumerate(chars) } itos = { i:ch fo..

AI/Andrej Karpathy 2023.11.26

파일 송/수신

기본 구조에 대한 설명 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..

인프라 자동화, 컴퓨팅 - 컨테이너 서비스 ,Severless , Elastic Beanstalk ,머신러닝 ,재해 복구

CloudFormation AWS 인프라 세트를 수동으로 프로비저닝하면 많은 노력이 소요됨 수동 작업말고 코드를 작성하여 자동화한다면? 코드를 통해 인프라를 프로비저닝, 관리하는 서비스가 CloudFormation (Infrastructure as Code) 코드를 통해 자동화 하여 AWS 인프라를 생성, 업데이트, 삭제 가능 구성요소 Template = 인스턴스 유형, AMI id ,VPC 등의 인프라를 구성하기 위한 설정 값이 있는 JSON 또는 YAML 형식의 텍스트 파일로 이루어진 템플릿 Stack = Template을 사용하여 생성된 리소스 Change Set = Stack 리소스 변경사항에 대한 세트 AWS 컨테이너 서비스 Elastic Contaienr Service (ECS) Docker ..

728x90