브래의 슬기로운 코딩 생활
네트워크 보안 12주차 정리 -1 (Multiplex 서버- select 기법) 본문
Multiplex 서버
- select 기법 -
다중 접속 서버
멀티플렉싱(Multiplexing)
데이터를 처리하는데 있어서 하나의 프로세스가 동시에 여러 개의 동작을 수행
블록킹(blocking) 현상 방지
종류:
• 시간 분할(TDM: Time Division Multiplexing)
– 시간을 슬롯(slot)이라는 개념으로 분류
– 슬롯의 크기만큼 각 주어진 일을 처리
– 대표적 예: select, poll 기법
• 이벤트 분할(EDM: Event Division Multiplexing)
– 외부의 신호를 인식하여 그 신호에 등록된 일을 처리
– 주로 입/출력 처리에 선호
– 대표적 예: 인터럽트
멀티플렉스 서버 Vs. 멀티프로세스 서버
멀티프로세스 방식
• 클라이언트의 개수에 따라 독립적인 프로세스가 생성되어야 함
• 비교적 구현이 단순
• 서버 내에서 데이터 공유를 위해서는 공유메모리 등의 기법을 추가로 적용
• 대표적 기술: 포크(fork)와 스레드(thread) 방식
멀티플렉스 방식
• 클라이언트의 개수에 관계없이 하나의 프로세스로 실행
• 대표적 기술: select와 poll 방식
Select 기법
Select 기법
최대 1,024개의 파일기술자에 대한 입력/출력/예외를 모니터링
• 단, 파일기술자의 최대 크기는 1,024보다 클 수 없음
마이크로초(μs, microsecond: 10-6 sec.) 단위의 모니터링 주기 설정 가능
관련 함수 및 매크로:
• select() : select 기법 처리 함수
• FD_CLR() : 값 초기화 함수
• FD_ISSET() : 이벤트 점검 함수
• FD_SET() : 값 설정 함수
• FD_ZERO() : 초기화 함수
• FD_SETSIZE : 1024 값(상수)
관련 함수의 기능과 호출순서
검사할 FD(파일 기술자) 설정
• 검사할 FD가 저장되는 fd_set 구조체 변수를 (예: fds) 선언
• FD_ZERO()를 이용하여 fds 변수 초기화
• FD_SET()를 이용하여 검사할 FD 설정
타임 아웃 설정
• timeval 구조체 변수 tm을 선언
• 타임아웃 시간을 입력
select() 함수 호출
• 타임 아웃 동안 검사할 FD들의 이벤트를 모니터링
• 타임아웃 동안 이벤트가 없으면 0을 반환
• 이벤트가 발생하면 해당되는 FD를 fds에 등록
결과 확인
• FD_ISSET()을 이용하여 검사할 FD에 이벤트 상태를 검사
fd_set 구조체
select() 함수는 fd_set 구조체 변수(예: fd_set fds)에 등록된 FD들을 검사
FD의 값을 fds의 오프셋(offset)으로 활용
fd_set 구조체는 1024개의 FD를 등재할 수 있는 크기를 가짐
fd_set 구조체 변수에 FD(파일 기술자)의 설정은 FD_ZERO(), FD_SET(), FD_CLR()에 의해 이루어짐
fd_set 구조체 변수 설정 함수
함수: FD_ZERO()
• 변수의 모든 비트를 0으로 설정
함수: FD_SET()
• 해당 FD 오프셋의 값을 1로 설정
함수: FD_CLR()
• 해당 FD 오프셋의 값을 0으로 설정
타임 아웃
select() 함수는 주어진 시간(timeout) 동안 등재된 FD들을 모니터링함
• 시간은 마이크로초(μs) 단위로 설정 가능
• 이벤트가 감지되면, timeout의 값을 갱신
• 단, 운영체제의 스케줄 정책에 따른 실시간성(real time)은 제공하지 않음
select()함수의 timeout 파라미터의 값에 따라 동작이 다름
• NULL : 이벤트가 있을 때까지 대기(blocking)
• timeout={tv_sec=0, tv_usec=0} : 대기하지 않음
• 그 외 : 주어진 값 동안 기다림(일반적인 설정)
select() 함수내 timeout값 처리
I/O 상태 모니터링
함수: select()
• 설정된 FD들에 대하여 timeout 동안 상태를 감시
• 해당 FD에 이벤트가 있으면 관련 비트를 1로 설정
• 인자:
– nfds : FD의 최대값(모를 시: FD_SETSIZE)
– *readfds : 입력 감시용 FD들
– *writefds : 출력 감시용 FD들(사용빈도 낮음)
– *exceptfds : 예외 처리 감시용 FD들(사용빈도 낮음)
• 결과 값:
– 0 : 아무런 이벤트가 없음(타임아웃 발생)
– -1: 에러
– 양수: 이벤트 개수
모니터링 결과 확인
함수: FD_ISSET()
• 해당 FD 오프셋의 값이 1로 되어있는지 확인
• 인자:
– fd : 점검할 FD
– *set : select()에 의한 결과물
• 결과 값:
– 1 : 이벤트 발생
– 0 : 이벤트 없음
'2-2 > 네트워크 보안' 카테고리의 다른 글
네트워크 보안 기말고사 정리 (2) | 2023.12.06 |
---|---|
네트워크 보안 12주차 정리 - 2 (Multiplex 서버- poll 기법) (0) | 2023.11.21 |
네트워크 보안 11주차 정리 (소켓 및 TCP 프로그래밍) (0) | 2023.11.21 |
네트워크 보안 10주차 정리 (TCP 프로그래밍) (0) | 2023.11.07 |
네트워크 보안 9주차 정리 (네트워크용 기본 API) (0) | 2023.10.31 |