Computer Science/Network
쓰레드의 이론적 이해 쓰레드의 등장배경 프로세스의 생성에는 많은 리소스가 소모되고, context switching으로 성능이 저하된다. 그리고 프로세스간 메모리가 독립적으로 운영되어 데이터 공유가 어렵다. 그래서 프로세스보다 가볍고 경량화된 프로세스인 쓰레드가 탄생했다. 위의 사진처럼 쓰레드는 완전히 독립적인 실행 흐름을 가지고 있다. 하지만 쓰레드는 아래 사진처럼 프로세스 내에 형성된다. 그래서 context switching의 부담이 덜하며, 데이터 교환이 쉽다. 쓰레드의 생성 및 실행 쓰레드의 생성 #include int pthread_create( pthread_t *restrict thread, const pthread_attr_t *restrict attr, void*(*start_routi..
10장에서는 멀티 프로세스 기반의 스트림 분리에 대해 이야기를 한 적이 있다. 2023.05.28 - [Computer Science/Network Programming] - [Network] 10. 멀티 프로세스 기반의 서버 구현 [Network] 10. 멀티 프로세스 기반의 서버 구현 프로세스의 이해와 활용 다중 접속 서버의 구현 방법들 다중접속 서버 : 둘 이상의 클라이언트에게 동시 접속을 허용하여 동시에 둘 이상의 클라이언트에 서비스를 제공하는 서버를 의미한다. mobuk.tistory.com 15장에서는 FILE 구조체 포인터 기반의 분리에 대해 이야기를 나누었다. 2023.05.28 - [Computer Science/Network Programming] - [Network] 15. 소켓과 표..
표준 입출력 함수의 장점 표준 입출력 함수의 장점과 단점 1. 이식성이 좋다. 2. 버퍼링(버퍼에 저장했다가 한꺼번에 전송하는 것)을 통한 성능 향상에 도움이 된다. 표준 입출력 함수를 이용해 데이터를 전송할 경우 소켓의 버퍼 이외의 버퍼를 통해 버퍼링이 진행된다. 시스템 함수 ( read, write ) 는 버퍼링 없이 파일 복사를 진행하고 있기 때문에 상대적으로 표준 입출력 함수가 속도가 빠르다. (300MB 이상의 파일 복사를 테스트해보면 속도의 차이를 극명하게 느낄 수 있다.) 하지만, 표준 입출력 함수도 불편함이 있다. 1. 양방향 통신이 쉽지 않다. 2. 상황에 따라서 fflush 함수(출력 버퍼 비우는 기능)의 호출이 빈번하게 등장할 수도 있다. 3. 파일 디스크립터를 FILE 구조체 포인터..
멀티캐스트 (Multicast) 멀티캐스트 데이터 전송방식과 트래픽 이점 멀티캐스트 서버는 특정 멀티캐스트 그룹을 대상으로 데이터를 딱 한번 전송한다. 딱 한번 전송해도 그룹에 속하는 모든 클라이언트가 데이터를 받는다. 멀티캐스트 그룹의 수는 IP 주소 범위 내에서 얼마든지 추가가 가능하다. 특정 멀티캐스트 그룹으로 전송되는 데이터를 수신하려면 해당 그룹에 가입하면 된다. 연결의 개념보다는 그룹에 가입한다는 개념이기 때문에 TCP 보다 UDP 소켓 기반으로 구현해야한다. 라우팅과 TTL TTL : time to live 패킷을 얼마나 멀리 보낼 것인지 결정하는 요소이다. TTL은 정수로 표현되며, 라우터를 하나 거칠때마다 1씩 감소되고 0이 되면 소멸한다. int send_sock; int time_li..
우리는 이때까지 입출력을 할 때 read와 write를 사용했다. read와 write 는 기본 C언어에서 제공하는 함수이다. 이것 말고 sys/socket.h 에서 제공하는 send, recv 함수와 sys/uio.h에서 제공하는 readv, writev 함수에 대해 알아보자. send & recv 입출력 함수 send & recv 함수 - send #include ssize_t send(int sockfd, const void * buf, size_t nbytes, int flags); - recv #include ssize_t recv(int sockfd, void * buf size_t nbytes, int flags); send & recv 함수의 옵션과 그 의미 옵션 정보는 | 연산자로 둘 이..
IO 멀티플렉싱 기반의 서버 멀티 프로세스 서버의 단점 2023.05.28 - [Computer Science/Network Programming] - [Network] 10. 멀티 프로세스 기반의 서버 구현 [Network] 10. 멀티 프로세스 기반의 서버 구현 프로세스의 이해와 활용 다중 접속 서버의 구현 방법들 다중접속 서버 : 둘 이상의 클라이언트에게 동시 접속을 허용하여 동시에 둘 이상의 클라이언트에 서비스를 제공하는 서버를 의미한다. mobuk.tistory.com 프로세스의 빈번한 생성은 성능의 저하로 이어진다. 멀티 프로세스의 흐름을 고려해서 구현해야한다. 이는 구현이 어려워지는 요인 중 하나이다. 프로세스 간 통신이 필요한 상황에서는 서버의 구현이 더 복잡해진다. ( 파이프 사용 ) 그..
프로세스간 통신의 기본 개념 프로세스간 통신 두 프로세스 사이에서의 데이터 전달이 가능하려면 두 프로세스가 공유하는 메모리가 공유해야한다. 하지만, 프로세스는 자신만의 메모리 공간을 독립적으로 가지고 있다. 그래서 운영체제가 별도의 메모리 공간을 마련해야한다. 파이프 기반의 프로세스 통신 #include int pipe(int filedes[2]); int main(int argc, char *argv[]) { int fds[2]; char str[] = "Who are you"; char buf[BUF_SIZE]; pid_t pid; pipe(fds); pid=fork(); if(pid==0) { write(fds[1], str, sizeof(str)); } else { read(fds[0], buf,..
프로세스의 이해와 활용 다중 접속 서버의 구현 방법들 다중접속 서버 : 둘 이상의 클라이언트에게 동시 접속을 허용하여 동시에 둘 이상의 클라이언트에 서비스를 제공하는 서버를 의미한다. 멀티프로세스 기반 서버 : 다수의 프로세스를 생성하는 방식 멀티플렉싱 기반 서버 : 입출력 대상을 묶어서 관리하는 방식 멀티쓰레딩 기반 서버 : 클라이언트의 수만큼 쓰레드를 생성하는 방식 프로세스와 프로세스 IP 프로세스 : 실행 중인 프로그램 멀티 프로세스 OS는 둘 이상의 프로세스를 동시에 생성 가능하다. 운영체제는 생성되는 모든 process에 id(PID)를 할당하며, 이를 ps 명령어를 통해 확인할 수 있다. fork 함수의 호출을 통한 프로세스의 생성 한 프로그램에서 여러개의 프로세스를 생성할 때에는 fork 명..
소켓의 옵션과 입출력 버퍼의 크기 옵션 정보 아래 표는 소켓의 특성을 변경시킬 때 사용하는 옵션 정보들이다. Protocol Level Option Name Get Set SOL_SOCKET SO_SNDBUF SO_RCVBUF SO_REUSEADDR SO_KEEPALIVE SO_BROADCAST SO_DONTROUTE SO_OOBINLINE SO_ERROR SO_TYPE O O O O O O O O O O O O O O O O X X IPPROTO_IP IP_TOS IP_TTL IP_MULTICAST_TTL IP_MULTICAST_LOOP IP_MULTICAST_IF O O O O O O O O O O IPPROTO_TCP TCP_KEEPALIVE TCP_NODELAY TCP_MAXSEG O O O O ..
1. 도메인 이름과 DNS 서버 도메인 이름(Domain Name) IP 를 대신하는 서버의 주소 실제 접속에 사용되는 주소는 아니다. 이 정보 IP로 변환이 되어야 접속이 가능하다. 우리가 기억하는 대부분의 주소는 Domain Name이다. (www.naver.com, www.google.com 등) DNS(Domain Name System) 서버 도메인 이름을 IP 로 변환해주는 서버 DNS 일종의 분산 데이터베이스 시스템이다. 2. IP 주소와 도메인 이름 사이의 변환 도메인 이름을 이용해서 IP 주소 얻어오기 #include struct hostent * gethostbyname(const char * hostname); IP는 도메인 이름에 비해 상대적으로 변동이 심하기 때문에 IP를 코드로 입..