학교 공부/네트워크
Multiplexing을 통한 싱글 프로세스의 다중 클라이언트 연결
1. 멀티플렉싱이란? 한 개의 프로세스가 다중 클라이언트와 통신하는 또 다른 방식으론 멀티플렉싱이 있다. 멀티플렉싱이란 하나의 채널을 통해 다중 데이터가 묶여 전송되는 기술이다. 이렇게 다중 데이터가 하나의 채널, select함수를 통해 프로세스로 데이터를 전달받는것이다. 이 select 함수는 어떤 기능을 하고 어떤 호출을 할까? 기본적으로 select함수는 events가 발생한 소켓을 선택해주는 것이다. 여기서 이벤트는 소켓이 데이터를 수신했거나, 소켓이 예외가 발생했거나, 소켓이 데이터 전송이 가능한지 (read, write, exception)가 있다. 대략적인 실행 흐름으로는 소켓설정 -> 함수 호출 -> 결과(이벤트 발생 소켓)확인 순으로 진행된다. 2. select함수 이제 이 select ..
세마포어, 뮤텍스를 활용한 공유 자원 제어
이전에 멀티쓰레드가 하나의 자원을 공유함을 확인해 보았다. 그리고 쓰레드가 비동기 흐름을 갖기 때문에 동시에 같은 데이터를 수정할 수 있고, 이러한 이유로 의도하지 않은 오류가 날 수 있음을 확인해보았다. 그래서 공유자원을 안전하게 관리하기 위해서는 공유자원에 접근하는 부분인 임계 구역(Critical section)을 다른 쓰레드, 프로세스가 동시에 사용하지 않음을 보장하는 상호배제(Mutual exclusion)를 달성해야 한다. 동기화 방법은 세마포어와 뮤텍스가 있고, 이 두가지의 정의와 차이에 대해서 알아보자. 1. 세마포어 A. 세마포어란? 공유 자원(보호 영역, critical section) 접근을 제어하기 위한 변수 혹은 추상 데이터이다. 이 구현을 위한 함수들은 semaphore.h에 정..
멀티 쓰레드를 활용한 멀티 클라이언트 TCP 통신
1. 멀티 프로세스 통신의 한계 이전에는 멀티 프로세스를 활용하여 멀티 클라이언트와 TCP통신을 해보았다. 간략하게 그 방식을 정리해보자면 서버의 부모프로세스가 listening socket에서 각 클라이언트로 부터 연결 요청을 받으면 listening queue에 쌓고, 하나씩 연결 한 후에 folk, dup을 통해 자식 프로세스에게 연결을 전달(복사)하여 자식프로세스가 클라이언트와 통신을 하게 하는 방식으로, 통신 자체는 자식프로세스에게 맡기고 부모프로세스는 연결 및 자식 프로세스 생성만 맡는 형태였다. 하지만 이 방식에는 문제가 있었으니, 자식 프로세스를 생성하는 과정에서 너무나도 불필요한 메모리들이 복사가 된다는 점이었다. 이 오버해드를 해결해주는 방식이 바로 쓰레드이다. 쓰레드의 경우에는 sta..
멀티 프로세스를 활용한 다중 클라이언트 TCP 통신, 좀비 프로세스 삭제
단일 프로세스를 활용하여 TCP 통신을 할 때엔 하나의 프로세스가 하나의 클라이언트만 받았다. 그도 그럴것이 TCP의 정의 자체가 (IP + Port)간의 신뢰성 있는 데이터 전달이기 때문에 다른 클라이언트의 연결 및 데이터 통신을 적어도 Close되지 않는다면 받아들이지 않는다. 그렇기 때문에 다음과 같이 listening socket으로 듣고, listening queue에 저장한 해 둔 다음 차례대로 연결을 하는 것이다. 실제 실행 그렇다면 TCP 통신을 사용하면서도 다중 Client와 통신할 순 없을까? 답은 "가능하다"이다. 하지만 하나의 프로세스(포트)로는 불가능 하므로 자식 프로세스를 생성하고 그 자식 프로세스들이 통신하게 하면 된다. 이전의 통신이 어떻게 이루어지는지 잠시 확인해 보면, 주..
네트워크 프로그래밍 (VM의 NAT와 Bridge, UDT)
1. VM's Bridge vs NAT (Network Address Translation) NAT? -> 네트워크 자원 절약 및 보안 강화를 위해 IP 주소 변환 시 사용하는 IP 주소 변환 기술 Host내부에 NAT 테이블이 존재하고, 기록한다. 데이터를 송신할 때는 Host의 IP로 다른 호스트와 통신하고 데이터를 수신할 때에는 Host가 우선 데이터를 받고 NAT 테이블을 참조하여 Guest에게 데이터를 송신한다. Bridge? -> AP에 가상 IP를 직접 할당받는 형태 따라서 Bridge -> NAT는 가능하지만, NAT -> Bridge는 직접적으로 불가능 하다 (NAT 호스트 단에서의 포트포워딩이 필요하다) 왜냐하면 Bridge입장에서는 NAT를 찾을 수 없으므로 2. UDT (User D..