사용자 모드에서의 네트워크 연결의 디스패칭(DISPATCHING NETWORK CONNECTIONS IN USER-MODE)
(19) 대한민국특허청(KR)
(12) 등록특허공보(B1)
(45) 공고일자 2013년01월08일
(11) 등록번호 10-1219822
(24) 등록일자 2013년01월02일
(51) 국제특허분류(Int. Cl.)
H04L 12/28 (2006.01) H04L 12/22 (2006.01)
H04L 12/24 (2006.01) H04L 9/32 (2006.01)
(21) 출원번호 10-2005-0133250
(22) 출원일자 2005년12월29일
심사청구일자 2010년12월22일
(65) 공개번호 10-2006-0088476
(43) 공개일자 2006년08월04일
(30) 우선권주장
11/049,051 2005년02월01일 미국(US)
(56) 선행기술조사문헌
US20040003085 A1
JP2005027304 A
JP2003333076 A
(73) 특허권자
마이크로소프트 코포레이션
미국 워싱턴주 (우편번호 : 98052) 레드몬드 원
마이크로소프트 웨이
(72) 발명자
리, 앨프레드 맥클렁 4세
미국 98052 워싱턴주 레드몬드 원 마이크로소프트
웨이마이크로소프트 코포레이션 내
와인골드, 엘리엇 엘.
미국 98052 워싱턴주 레드몬드 원 마이크로소프트
웨이마이크로소프트 코포레이션 내
옷타비아니, 마우로
미국 98052 워싱턴주 레드몬드 원 마이크로소프트
웨이마이크로소프트 코포레이션 내
(74) 대리인
제일특허법인
전체 청구항 수 : 총 20 항 심사관 : 김상인
(54) 발명의 명칭 사용자 모드에서의 네트워크 연결의 디스패칭
(57) 요 약
사용자 모드에서 동작하는 리스너(listener)가 시스템 메모리 또는 다른 민감한 서비스 또는 컴포넌트를 드러내
지 않고 클라이언트 연결에 대한 제어를 네트워크 컴포넌트에 디스패치할 수 있다. 예를 들어, 클라이언트 컴포
넌트는 사용자 모드 리스너와의 연결을 통해 네트워크 컴포넌트로의 액세스를 요청한다. 클라이언트 요청에 포
함된 정보에 근거하여, 리스너는 호출을 애플리케이션 프로그램 인터페이스에 전달하고, 애플리케이션 프로그램
인터페이스는 사용자 모드 문맥 정보를 포함하는 제1 데이터 집합을 반환한다. 리스너는 해당 제1 데이터 집합
을 요청된 네트워크 컴포넌트에 전달한다. 제1 데이터 집합, 및 소켓 복제 요청을 포함하는 다른 호출이 애플리
케이션 프로그램 인터페이스에 생성된다. 애플리케이션 프로그램 인터페이스는 요청된 소켓에 대한 제어를 네트
워크 컴포넌트에 반환하여서, 네트워크 컴포넌트와 클라이언트 컴포넌트가 사용자 모드에서 요청된 소켓을 통해
직접 통신하게 한다.
대 표 도 - 도1a
등록특허 10-1219822
- 1 -
특허청구의 범위
청구항 1
네트워크 컴퓨터 시스템의 사용자 모드 리스너(listener) - 상기 사용자 모드 리스너는 클라이언트 컴포넌트와
네트워크 컴포넌트 간의 연결을 사용자 모드로 중계하도록 구성됨 - 에 의해 수행되며, 사용자 모드에서 상기
연결에 대한 제어를 상기 네트워크 컴포넌트에 디스패치하는 방법으로서,
상기 방법은,
상기 클라이언트 컴포넌트와 상기 리스너 간에 소켓을 통해 사용자 모드의 연결을 확립하는 단계 - 상기 클라이
언트 컴포넌트는 네트워크 컴포넌트를 요청함-,
상기 연결에 연관된 정보에 근거하여 제1 애플리케이션 서비스에게 상기 소켓의 복제를 요청하는 단계 - 상기
제1 애플리케이션 서비스로부터 제1 데이터 집합이 수신됨 -,
상기 제1 데이터 집합 및 연관된 연결 정보를 상기 요청된 네트워크 컴포넌트에 전송하는 단계, 및
상기 네트워크 컴포넌트가 상기 소켓에 대한 제어를 수락하였다는 지시자를 수신하는 단계 - 이에 따라 상기 리
스너는 상기 클라이언트 컴포넌트로부터의, 상기 연결에 대한 연결 데이터를 더 이상 수락하지 않고, 상기 네트
워크 컴포넌트와 상기 클라이언트 컴포넌트는 상기 연결을 통해 상기 리스너 없이 통신함 -
를 포함하는 방법.
청구항 2
제1항에 있어서,
상기 클라이언트 컴포넌트는 클라이언트 컴퓨터 시스템의 클라이언트 프로세스이며, 상기 요청된 네트워크 컴포
넌트는 다른 네트워크 컴퓨터 시스템의 네트워크 프로세스이며, 상기 클라이언트 컴퓨터 시스템과 상기 네트워
크 컴퓨터 시스템은 네트워크 연결을 통해 접속되는,
방법.
청구항 3
제1항에 있어서,
상기 리스너는 네트워크 프로토콜 스택으로부터 수신된 메시지를 요청된 네트워크 컴포넌트에 중계하도록 구성
된 프로세스, 인터페이스, 컴포넌트, 또는 모듈 중 임의의 하나인,
방법.
청구항 4
제1항에 있어서,
상기 소켓의 복제를 요청하는 단계는,
함수 호출을 상기 제1 애플리케이션 서비스에 전달하는 단계 - 상기 함수 호출은 상기 요청된 네트워크 컴포넌
트의 파라미터를 포함함 -, 및
상기 제1 애플리케이션 서비스로부터 상기 제1 데이터 집합을 수신하는 단계
를 포함하는 방법.
청구항 5
제4항에 있어서,
상기 제1 애플리케이션 서비스에 대한 상기 함수 호출의 파라미터는 상기 확립된 연결에 연관된 하나 이상의 상
태 변수를 더 포함하는,
방법.
등록특허 10-1219822
- 2 -
청구항 6
제1항에 있어서,
상기 소켓의 복제를 요청하는 단계는 디스패치 로직에 의해 상기 확립된 연결의 초기 일부분을 평가하는 단계를
더 포함하며, 상기 디스패치 로직은 상기 제1 데이터 집합에 연관된 클라이언트 메시지 속성과, 네트워크 컴퓨
터 시스템에 연관된 시스템 속성 중 하나 이상을 평가하는 것인,
방법.
청구항 7
제1항에 있어서,
상기 네트워크 컴포넌트가 제어를 수락하였다는 지시자를 수신하는 단계는 상기 연결에 연관된 네트워크 스택에
신호를 전송하는 단계를 포함하고, 상기 신호는 상기 리스너가 상기 확립된 연결로부터 더 이상 데이터를 수신
할 수 없음을 상기 네트워크 스택의 트랜스포트 계층에 표시하는,
방법.
청구항 8
제7항에 있어서,
상기 신호는 상기 네트워크 컴포넌트가 상기 확립된 연결에 대한 제어를 수락할 때까지, 상기 클라이언트 컴포
넌트에 의해 전송된 데이터를 버퍼링하기 위한 명령어를 더 포함하는,
방법.
청구항 9
제7항에 있어서,
상기 신호를 상기 네트워크 스택에 전송한 후에, 클라이언트 컴포넌트 데이터의 후속 집합을 수신하면, 상기 방
법은, 상기 네트워크 컴포넌트가 상기 확립된 연결에 대한 제어를 수락할 때까지, 상기 클라이언트 컴포넌트 데
이터의 후속 집합이 버퍼링되도록, 상기 리스너가 상기 클라이언트 컴포넌트 데이터의 후속 집합을 상기 네트워
크 스택에 반환하는 단계를 더 포함하는,
방법.
청구항 10
제1항에 있어서,
상기 소켓의 복제를 요청하는 단계 전에 혹은 그 단계 동안에, 상기 확립된 연결을 통해 클라이언트 컴포넌트
데이터의 적어도 초기 일부분을 상기 네트워크 컴포넌트에 전달하는 단계를 더 포함하는,
방법.
청구항 11
네트워크 컴퓨터 시스템의 네트워크 컴포넌트 - 상기 네트워크 컴포넌트와 클라이언트 컴포넌트 간의 연결이 사
용자 모드 리스너를 통해 확립됨 - 에 의해 수행되며, 상기 네트워크 컴포넌트가 상기 리스너로부터의, 상기 연
결에 대한 제어를 사용자 모드에서 수락하는 방법으로서,
상기 방법은,
상기 클라이언트 컴포넌트로부터 초기 데이터 집합을 상기 사용자 모드 리스너를 통해 수신하는 단계,
연결 정보를 상기 사용자 모드 리스너로부터 수신하는 단계 - 상기 연결 정보는 상기 클라이언트 컴포넌트 및
확립된 연결에 대한 정보를 식별함 -,
애플리케이션 서비스에게 상기 연결에 연관된 소켓의 복제를 요청하는 단계, 및
등록특허 10-1219822
- 3 -
상기 리스너로부터의, 상기 소켓에 대한 제어를 수락하는 단계 - 상기 네트워크 컴포넌트는 상기 클라이언트 컴
포넌트와 사용자 모드의 상기 연결을 통해 직접 통신함 -
를 포함하는 방법.
청구항 12
제11항에 있어서,
상기 네트워크 컴포넌트는 네트워크 컴퓨터 시스템의 네트워크 프로세스이며, 상기 클라이언트 컴포넌트는 다른
클라이언트 컴퓨터 시스템의 클라이언트 프로세스이며, 상기 네트워크 컴퓨터 시스템과 상기 클라이언트 컴퓨터
시스템은 네트워크 연결을 통해 접속되는,
방법.
청구항 13
제11항에 있어서,
상기 클라이언트 컴포넌트로부터 상기 초기 데이터 집합을 공유된 메모리, named pipe, RPC, 또는 DCOM 프로토
콜 중 하나 이상을 통해 수신하는,
방법.
청구항 14
제11항에 있어서,
상기 소켓의 복제를 요청하는 단계는,
함수 호출을 상기 애플리케이션 서비스에 전달하는 단계 - 상기 함수 호출은 상기 사용자 모드 리스너에 의해
중계된 제1 데이터 집합의 파라미터를 포함함 -, 및
상기 소켓을 제어하기 위한 정보를 상기 애플리케이션 서비스로부터 수신하는 단계
를 더 포함하는 방법.
청구항 15
제14항에 있어서,
상기 제1 데이터 집합은 상기 리스너에 의해 제1 애플리케이션 서비스로부터 수신되고, 상기 제1 애플리케이션
서비스는 상기 네트워크 컴포넌트가 상기 함수 호출을 전달하는 애플리케이션 서비스와는 다른 것인,
방법.
청구항 16
제14항에 있어서,
상기 제1 데이터 집합의 파라미터는 상기 확립된 연결에 연관된 하나 이상의 상태 변수, 상기 소켓을 복제하라
는 요청, 및 상기 클라이언트에 의해 상기 확립된 연결을 통해 전송된 초기 데이터 집합을 더 포함하는,
방법.
청구항 17
제11항에 있어서,
상기 연결 정보를 수신하면, 상기 네트워크 컴포넌트는 상기 클라이언트 컴포넌트 ID, 상기 클라이언트 컴포넌
트에 의해 전송된 상기 초기 데이터 집합의 정보 유형, 또는 상기 연결의 길이 중 하나 이상에 근거하여 상기
소켓에 대한 제어를 수락할지 여부를 평가하는 디스패치 로직을 구현하는,
방법.
등록특허 10-1219822
- 4 -
청구항 18
제11항에 있어서,
상기 소켓에 대한 제어를 수락하는 단계는 상기 네트워크 컴포넌트가 상기 소켓에 대한 제어를 취하였다는 지시
자를 상기 리스너에 전송하는 단계를 포함하는,
방법.
청구항 19
제11항에 있어서,
상기 클라이언트 컴포넌트와 직접 통신하는 것은, 상기 사용자 모드 리스너를 회피하도록, 클라이언트 컴포넌트
데이터의 후속 집합을 상기 확립된 연결에 대한 대응하는 네트워크 프로토콜 스택의 트랜스포트 계층으로부터
직접 수신하는 것을 포함하는,
방법.
청구항 20
사용자 모드 리스너가 클라이언트 컴퓨터 시스템의 프로세스와 네트워크 컴퓨터에 있는 프로세스 간의 사용자
모드의 연결을 중계하도록 구성되는 컴퓨터화된 시스템에 사용되기 위한 컴퓨터 판독가능한 기록 매체로서, 상
기 컴퓨터 판독가능한 기록 매체에는 컴퓨터 실행가능 명령어가 저장되어 있으며, 상기 명령어는 실행될 때 상
기 컴퓨터화된 시스템이 사용자 모드의 상기 연결에 대한 제어를 상기 네트워크 프로세스에 디스패치하는 방법
을 수행하도록 하며,
상기 방법은,
클라이언트 컴포넌트와 상기 리스너 간에 사용자 모드의 연결을 소켓을 통해 확립하는 단계 - 상기 클라이언트
컴포넌트는 네트워크 컴포넌트를 요청함 -,
상기 연결에 연관된 정보에 근거하여 제1 애플리케이션 서비스에게 상기 소켓의 복제를 요청하는 단계 - 상기
제1 애플리케이션 서비스로부터 제1 데이터 집합이 수신됨 -,
상기 제1 데이터 집합 및 연관된 연결 정보를 상기 요청된 네트워크 컴포넌트에 전송하는 단계, 및
상기 네트워크 컴포넌트가 상기 소켓에 대한 제어를 수락하였다는 지시자를 수신하는 단계 - 이에 따라 상기 리
스너가 상기 클라이언트 컴퓨터로부터의, 상기 연결에 대한 연결 데이터를 더 이상 수락하지 않고, 상기 네트워
크 컴포넌트와 상기 클라이언트 컴포넌트가 상기 연결을 통해 상기 리스너 없이 통신함 -
를 포함하는 컴퓨터 판독가능한 기록 매체.
명 세 서
발명의 상세한 설명
발명의 목적
발명이 속하는 기술 및 그 분야의 종래기술
본 발명은 사용자 모드에서 요청된 프로세스로의 네트워크 연결에 대한 제어를 핸드-오프하는 능력을 네트워크[0011]
리스너들에게 제공하는 시스템, 방법, 및 컴퓨터 프로그램 제품에 관한 것이다.
점점 더 많은 사람과 조직들이 컴퓨터화된 시스템을 구현함에 따라, 직장, 가정, 또는 연회장에서 컴퓨팅 자원[0012]
을 공유하려는 요구도 증가하였다. 공유 환경의 한 가지 유형은, 일반적으로 클라이언트가 네트워크를 통해,
서버가 클라이언트 자신의 컴퓨터인 것처럼, 중앙 서버에 저장된 데이터를 액세스하고 처리하도록 하는 클라이
언트/서버 기반의 애플리케이션인 분산 파일 시스템이다. 예를 들면, 회사의 다수의 작업자는 여러 대의 개인
용 컴퓨터로부터의 원격적으로 위치한 네트워크 드라이브에 있는 소정의 파일들을 전자적으로 액세스하도록 허
용될 수 있다. 다른 예에서, 한 위치에서의 컴퓨팅 시스템은 특정 작업을 돕기 위해 다른 위치의 다른 컴퓨터
등록특허 10-1219822
- 5 -
의 처리 자원을 사용할 필요가 있을 수 있다.
물론, 다양한 파일과 프로세스를 네트워크를 통해 공유하는 것이 분명히 수많은 장점을 제공할 수 있지만, 네트[0013]
워킹에 대한 문제점과 단점들 또한 잘 알려져 있다. 이런 문제점은 가벼운 구조적인 문제에서부터 의도적인 악
의적인 문제들에 까지 이른다. 가벼운 구조적인 문제의 예로서 네트워크 컴퓨터가 제한된 개수의 포트들을 가
지며, 일반적으로 이 포트들만이 교대로 네트워크 프로세스, 모듈 등의 제한된 개수의 네트워크 컴포넌트들로의
액세스를 클라이언트 컴포넌트에 제공하도록 허용되는 경우가 있다. 이는 많은 수의 클라이언트 컴포넌트가 동
일한 포트를 통해 다수의 네트워크 컴포넌트를 액세스할 필요가 있을 때에 문제를 발생시킬 수 있다.
다른 한편으로, 악의적인 네트워크 문제의 잘 알려진 예로서, 컴퓨터 바이러스, 및 네트워크 침입자(intruder[0014]
s)의 경우가 있다. 바이러스는 전형적으로 고의성 없는(unwitting) 수신자에게서부터 그 다음 수신자로 전자적
으로 전달되는 컴퓨터 실행가능 명령어이며, 바이러스가 실행될 때는 중요한 시스템 파일을 변경시키거나 삭제
하거나 개인 정보를 훔치는 일 등을 행한다. 유사하게, 네트워크 침입자는 외부 연결에 대해 개방된 네트워크
에서, 그렇지 않으면 인터넷으로의 연결을 가진 폐쇄 작업 네트워크(closed work network) 등에서 문제를 발생
시킬 수 있다. 예를 들면, 악의적인 사람은 의도했던 것과는 다르게, 회사의 네트워크 서버로의 전자적인 액세
스를 얻기 위한 방법과, 네트워크 내부에서 검색된 가치있는 회사 또는 회사원 문서들로의 액세스를 얻기 위한
방법을 찾아낼 수 있다.
따라서, 컴퓨터화된 시스템을 위한 운영 체제 보안은 네트워크상의 컴퓨터를 위해 점점 더 중요해 진다. 현재,[0015]
컴퓨터화된 시스템들이 보안을 강화하기 위해 사용하는 수많은 방법과 프로세스들이 존재한다. 이들은 일반적
으로 제어에 대한 사용자 모드(많이 제한적인, 적게 제어되는) 레벨에서 동작하는 것, 또는 제어에 대한 커널
모드(적게 제한적인, 많은 제어되는) 레벨로 동작하는 것 등과 같이, 프로세스 또는 컴포넌트가 실행되는 일종
의 허가의 유형에 따라 분류될 수 있다. 일반적으로, 예를 들면, 클라이언트 컴포넌트와 네트워크 컴퓨터의 요
청된 네트워크 프로세스가 사용자 모드에서 정보를 전달하고 있는 경우, 클라이언트 컴포넌트는 네트워크 프로
세스에 대해 제한적으로만 (있다면) 액세스하고, 네트워크 컴퓨터의 시스템 메모리 또는 서비스에 대해 제한적
으로만 (있다면) 액세스한다.
그러나, 클라이언트 컴포넌트가 네트워크 컴퓨터상에서 실행되는 커널 모드 드라이버를 통해 네트워크 컴퓨터[0016]
컴포넌트에 연결되는 경우, 클라이언트는 상당히 많은 융통성을 가진다. 특히, 클라이언트 프로세스는 일부 경
우에 시스템 메모리 및/또는 네트워크 컴퓨터의 다른 서비스, 프로세스, 또는 컴포넌트로의 비제한적인 액세스
를 가질 수 있다. 특히, 네트워크를 리스닝하고 있는 커널 모드 드라이버는 누가 네트워크에 메시지들을 보낼
것인지에 대해 거의 제어할 수 없거나 완전히 제어할 수 없다. 커널 모드 드라이버가 메시지의 송신자들에 의
해 "속임"을 당하면, 메시지의 송신자가 가할 수 있는 손해를 거의 제한하지 못하거나 완전히 제한하지 못한다.
대조적으로, 사용자 모드에서 실행되는 프로세스들은 운영 체제 보안에 의해 제한받을 수 있다.
이와 같이, 실행중인 컴포넌트의 사용자 모드 및 커널 모드 레벨은 각기 수많은 장단점을 제공하므로, 전형적으[0017]
로 특정 유형의 경우에 따라 구현된다. 예를 들면, 네트워크 스택의 TCP 프로토콜을 통해 HTTP 요청을 구현하
는 컴포넌트 등의 사용자 모드 리스너(listener)는 공유된 메모리 공간, named pipe, RPC(Remote Procedure
Protocol), DCOM(Distributed Component Object Model) 등의 일부 통신 메커니즘을 통해 클라이언트 프로세스
데이터를 요청된 네트워크 프로세스에 중계함으로써 동작한다. 그러면 요청된 프로세스는 중계된 클라이언트
프로세스 데이터를 관련 통신 메커니즘을 통해 입력받고, 마찬가지로 관련 통신 메커니즘을 통해서만 클라이언
트 프로세스에게 응답한다. 이와 같이, 클라이언트 프로세스와 요청된 네트워크 컴퓨터 프로세스는 절대 직접
통신하지 않는다.
특히, 사용자 모드에서 동작하는 리스너는 시스템 메모리로의 제한된 액세스만을 가지며, 다른 시스템 프로세스[0018]
또는 컴포넌트들로의 제한된 액세스만을 가지므로, 악의적인 클라이언트 프로세스가 네트워크 컴퓨터에 손상을
입히거나 민감한 정보에 액세스하는 것을 상당히 방지하게 된다. 다른 한편으로, 사용자 모드 리스너는 공유된
메모리, named pipe 등을 사용하는 중간 중계 메커니즘으로서 동작하므로, 사용자 모드 리스너는 특히 수많은
외부 클라이언트 연결 시 또는 대용량 데이터 전송 시 네트워크의 통신 속도에 있어서, 상당한 병목현상을 초래
할 수 있다.
대조적으로, 커널 모드에서 동작하는 네트워크 드라이버 등의 커널 모드 리스너는 연결 데이터를 클라이언트 프[0019]
로세스로부터 시스템 메모리에 직접 기록하고, 심지어 필요한 경우, 요청된 네트워크 프로세스로의 전체 연결에
대한 제어를 디스패치할 수 있다. 다른 경우에, 커널 모드 리스너는 사용자 모드 리스너와 마찬가지로 네트워
크 프로세스가 공유된 메모리 공간, named pipe 등을 사용하는 것보다 더 속도가 빠른 메커니즘을 사용하여 클
등록특허 10-1219822
- 6 -
라이언트 프로세스와 통신하도록 해준다. 불행히도, 커널 모드 리스너는 네트워크 컴퓨터 시스템과 메모리로
의 상당히 자유로운 액세스를 가지기 때문에, 악의적인 사람 또는 프로그램이 네트워크 컴퓨터 메모리를 오버런
(overrun)할 수 있거나, 네트워크 컴퓨터의 민감한 시스템 파일들 또는 다른 네트워크 프로세스들로의 액세스를
획득할 수가 있다. 그러므로, 커널 모드 리스너는 속도 관련 사항이 유용한 여러 경우에는, 전형적으로 회피된
다.
따라서, 당해 분야의 장점은, 사용자 모드 리스너가 이와 연관된 전형적인 속도 또는 병목현상 문제를 야기함[0020]
없이 클라이언트 프로세스와 요청된 네트워크 프로세스 간의 통신을 용이하도록 하는 시스템, 방법, 및 컴퓨터
프로그램 제품으로 실현될 수 있다. 또한, 이 장점은 동시에 시스템 메모리 또는 네트워크 컴퓨터의 기타 민감
한 시스템 프로세스들을 드러내지 않고, 적절한 때 클라이언트 프로세스와 요청된 네트워크 컴퓨터 간의 통신을
용이하게 하는 시스템으로 실현될 수 있다.
발명이 이루고자 하는 기술적 과제
본 발명은 사용자 모드 리스너가 안전한 방식으로 네트워크 컴퓨터 컴포넌트로의 클라이언트 연결에 대한 제어[0021]
를 효과적으로 디스패치하도록 하는 시스템, 방법, 및 컴퓨터 프로그램 제품으로 당해 분야의 하나 이상의 상기
문제점들을 해결한다. 특히, 본 발명에 따른 사용자 모드 리스너는 네트워크 컴퓨터의 시스템 메모리 및/또는
시스템 서비스들을 드러내지 않고, 요청된 네트워크 컴포넌트로의 클라이언트 연결에 대한 제어를 디스패치할
수 있다.
예를 들면, 본 발명의 적어도 한 구현예에 있어서, 네트워크 컴퓨터의 사용자 모드에서 동작하는 네트워크 연결[0022]
프로세스 등의 리스너는 네트워크 컴포넌트로의 통신을 위한 액세스 요청을 클라이언트 컴포넌트로부터 수신한
다. 그런 다음 적절한 경우, 사용자 모드 리스너는 소켓 복제 요청을 응용 프로그램 인터페이스("API"), 기타
컴포넌트, 또는 모듈 등의 제1 애플리케이션 서비스에 전달하고, 제1 애플리케이션 서비스는 사용자 모드 문맥
(contextual) 정보를 포함하는 제1 데이터 집합을 반환한다. 그러면 사용자 모드 리스너는 공유된 메모리,
named pipe 등의 종래의 중계 메커니즘을 사용하여 제1 애플리케이션 서비스에 의해 전송된 제1 데이터 집합을
요청된 네트워크 컴포넌트에 전달한다.
그러면 적절한 경우, 요청된 네트워크 컴포넌트는 사용자 모드 리스너에 의해 제어되는 소켓을 복제하기 위해[0023]
제1 또는 제2 애플리케이션 서비스 등의 애플리케이션 서비스를 호출하고, 제1 데이터 집합을 파라미터로서 전
달한다. 그러면 호출된 애플리케이션 서비스는 지정된 소켓을 통한 제어 파라미터와 제1 데이터 집합의 파라미
터를 가진 응답을 네트워크 컴포넌트에 제공한다. 지정된 소켓을 통한 제어에 의해 요청된 네트워크 컴포넌트
는 그 소켓을 통해 나머지 클라이언트 연결에 대해 클라이언트 컴퓨터 컴포넌트와 직접 통신할 수 있다. 그러
므로, 본 발명에 따른 사용자 모드 리스너는 시스템 메모리 또는 기타 민감한 시스템 서비스, 컴포넌트 또는 프
로세스를 드러내지 않고 클라이언트 연결에 대한 제어를 네트워크 컴퓨터 컴포넌트에 디스패치할 수 있다. 이
는 클라이언트 컴포넌트와 네트워크 컴퓨터 컴포넌트가 전형적으로 사용자 모드와 연관된 보안성을 가지면서 커
널 모드로 동작하는 속도와 비슷한 속도로 통신하도록 해준다.
본 발명의 예시적인 구현에 대한 부가적인 특징 및 장점은 하기의 상세한 설명에 기술되어, 부분적으로 상세한[0024]
설명으로부터 명백해 지거나 이런 예시적인 구현예를 실시함으로써 학습될 수 있다. 이런 구현예의 특징 및 장
점은 특히 첨부된 청구항에서 지적된 기기 또는 결합에 의하여 실현되거나 획득될 수 있다. 이런 및 기타 특징
은 하기의 상세한 설명과 첨부된 청구항으로부터 보다 충분히 명백해지거나, 이후에 기술된 예시적인 구현예를
실시함으로써 학습될 수 있다.
본 발명의 상기 인용된 기타 장점 및 특징이 달성될 수 있는 방법을 기술하기 위해서, 상기 간략히 기술된 본[0025]
발명에 대한 보다 구체적인 설명이 첨부된 도면에 예시된 특정한 실시예를 참조하여 기술될 것이다. 이런 도면
들이 단지 본 발명의 전형적인 실시예를 도시하고, 본 발명의 범위를 제한하는 것으로 고려되지 않음을 이해하
면서, 본 발명을 추가적인 특수성 및 상세를 가진 것으로 첨부된 도면을 사용하여 묘사하고 기술할 것이다.
발명의 구성 및 작용
본 발명은 사용자 모드 리스너가 안전한 방식으로 네트워크 컴퓨터 컴포넌트로의 클라이언트 연결에 대한 제어[0026]
를 효과적으로 디스패치하도록 하는 시스템, 방법, 및 컴퓨터 프로그램 제품으로 확장된다. 특히, 본 발명에
따라, 사용자 모드 리스너는 네트워크 컴퓨터의 시스템 메모리 및/또는 시스템 서비스를 드러내지 않고 클라이
등록특허 10-1219822
- 7 -
언트 연결에 대한 제어를 요청된 네트워크 컴포넌트에 디스패치할 수 있다.
그러므로, 본 명세서와 청구항으로부터, 본 발명의 양상이 클라이언트 컴포넌트(예컨대, 프로세스, 인터페이스,[0027]
또는 모듈 등)와의 연결에 대한 제어를 요청된 네트워크 컴포넌트(예컨대, 프로세스, 인터페이스, 또는 모듈
등)에 디스패치하는 것을 포함한다고 이해할 것이다. 또한, 본원에 기술된 연결이 클라이언트 컴퓨터 시스템의
클라이언트 컴포넌트와, 다른 네트워크 컴퓨터 시스템의 네트워크 컴포넌트 간에 존재할 수 있다고 이해할 것이
지만, 본원에 기술된 발명의 원리는 또한 동일한 로컬 컴퓨터의 인터-컴포넌트(inter-component)에 관련되어 적
용될 수도 있다. 즉, 동일한 컴퓨터 시스템의 클라이언트와 네트워크 컴포넌트들이 데이터를 리스너 등의 중간
프로세스를 통해 서로 데이터를 통신하는 경우가 있다.
이런 경우에, 클라이언트 컴포넌트가 연결을 확립할 때, 네트워크 스택과 인터페이스하는 사용자 모드 리스너는[0028]
클라이언트 연결에 대한 제어를 네트워크 컴포넌트에 디스패치할 것인지 확인하는 디스패치 로직(logic)을 구현
할 수 있다. 필히 요구되지 않지만, 본 발명의 다른 양상은 요청된 네트워크 컴포넌트가 유사한 계산(calulu
s)을 구현하여 클라이언트 연결에 대한 제어를 사용자 모드 리스너로부터 수락해야 하는지를 확인하는 것을 포
함할 수 있다. 네트워크 컴포넌트 제어가 경우마다 적절할 때, 네트워크 컴포넌트는 연결에 대한 제어를 수락
할 수 있고, 네트워크 스택을 통해 클라이언트 컴포넌트와 직접 이야기할 수 있다. 따라서, 클라이언트 컴포넌
트와 네트워크 컴포넌트는 하나 이상의 단점을 감내할 필요 없이, 커널 모드에서 통신하는 것과 유사한 속도로
통신할 수 있다.
예를 들면, 도 1a는 사용자 모드 리스너(100)가 클라이언트 컴퓨터(140)의 클라이언트 컴포넌트(105)와 네트워[0029]
크 컴퓨터(150)의 네트워크 컴포넌트(110) 간에 연결을 제어하는 경우, 2대의 컴퓨터 사이에서 본 발명을 실행
하기 위한 개략적인 개요를 예시한다. 한 구현예에서, 사용자 모드 리스너(100)는 사용자 모드에서 동작하는
네트워크 연결 프로세스이지만, 사용자 모드 리스너(100)는 일반적으로 네트워크 스택(115)과 인터페이스하고
초기에 클라이언트 컴포넌트와 네트워크 컴포넌트 간에 사용자 모드 네트워크 연결을 제어하는 임의의 인터페이
스, 컴포넌트, 또는 모듈로서 이해될 것이다. 이처럼, 도 1a는 클라이언트 컴포넌트(105)가 네트워크 스택
(115)을 통해 네트워크 컴퓨터(150)와의 연결을 확립하는 것을 도시한다. 또한, 도 1a는 리스너(100)가 클라이
언트 컴포넌트(105)와 네트워크 컴포넌트(110) 간의 해당 연결을 소켓(130)을 통해 제어하는 것을 도시한다.
초기에, 클라이언트 컴포넌트(105)와 리스너(100)가 연결을 확립할 때, 리스너(100)는 클라이언트 컴포넌트[0030]
(105)에 의해 전송된 하나 이상의 초기 데이터 패킷의 적어도 일부를 판독한다. 한 구현예에서, 사용자 모드
리스너(100)는 적절한 경우나 시점에, 요청된 네트워크 컴포넌트(예컨대, 블록(110)), 또는 요청된 연결의 거리
(length)에 대한 어떤 지시 등의 이런 인자(factor)를 식별하기 위해 이를 행한다. 리스너(100)는 또한 하나
이상의 클라이언트 메시지 속성 또는 시스템 속성에 근거하여 연결에 대한 제어를 전달함으로써 효과적으로 획
득될 수 있는지 여부를 판정하기 위해 클라이언트 컴포넌트(105)로부터 초기의 하나 이상의 데이터 패킷을 판독
할 때, "디스패치 로직"을 구현할 수 있다.
예를 들면, 클라이언트 메시지 속성은 클라이언트 컴포넌트(105)에 의해 전송된 데이터 패킷의 전부 또는 대부[0031]
분이 동일한 요청된 네트워크 컴포넌트(110)에게로 의도된 것인지, 혹은 연결 세션의 길이 또는 전송될 메시지
의 크기가 제어의 디스패치가 적절하도록 하는 것인지 등에 대하여 포함할 수 있다. 이와 대조적으로, 시스템
속성은 부하 규형(load balancing) 또는 보안 정책 관심사에 대한 고려를 포함할 수 있고, 이는 연결을 요청된
네트워크 컴포넌트에 디스패치함으로써 양호하게 구현될 수 있다. 따라서, 디스패치 로직은 연결에 대한 제어
를 핸드-오프하는 것이 비용면에서 효과적이라는 것을 리스너(200)에게 지시하기 위해 수많은 클라이언트 또는
다른 시스템 요소들을 평가할 수 있다.
디스패치 로직이 리스너(100)에게 확립된 클라이언트 연결에 대한 제어를 전달하는 것이 자원의 관점에서 비용[0032]
효과적이다라고 지시하는 경우, 리스너(100)는 확립된 연결에 대한 제어의 전달을 개시할 수 있다. 이를 행하
기 위해, 리스너(100)는 함수 호출을 애플리케이션 프로그램 인터페이스("API")등의 애플리케이션 서비스(120),
또는 소켓 제어를 관리하는 기타 컴포넌트, 또는 모듈에 전달한다. 한 구현예에서, 리스너(100)는 또한 함수
호출의 파라미터로서, 소켓 복제 요청뿐만 아니라 클라이언트 컴포넌트(105)에 의해 요청된 네트워크 컴포넌트
(110)를 전달한다. 애플리케이션 서비스(120)는 클라이언트 컴포넌트(105)와 네트워크 컴포넌트(110) 간에 확
립된 연결에 특정한 제1 데이터 집합(즉, "Data
1
")으로써 응답한다. 한 구현예에서, 이런 제1 데이터 집합은
연결에 대한 사용자 모드 문맥 정보뿐만 아니라 확립된 연결에 대한 네트워크 스택(115)의 하나 이상의 상태 변
수 등의 데이터와, 연결을 확립할 때 클라이언트 컴포넌트(105)에 의해 전송된 임의 데이터를 포함한다.
등록특허 10-1219822
- 8 -
제1 데이터 집합(즉, "Data
1
")을 수신하면, 도 1a는 리스너(100)가 사용자 모드 연결용 통신 메커니즘을 사용하[0033]
여 제1 데이터 집합과 문맥 정보를 요청된 네트워크 컴포넌트(110)에 전달한다. 예를 들어, 기존의 연결 경로
는 공유된 메모리 공간, named pipe, RPC, DCOM 등의 사용을 포함할 수 있다. 공유된 메모리 공간에 관하여,
이것은 전형적으로 제1 데이터 집합과 문맥 정보를 미리 할당된 공유된 메모리에 저장하는 리스너(100)를 포함
한다. 이런 경우에, 리스너(100)는 또한 개별적인 신호(도시 생략)를 네트워크 컴포넌트(110)에 전송할 수 있
고, 이 신호는 추출할 네트워크 컴포넌트(110)에 대한 제1 데이터 집합이 공유된 메모리 공간에 존재한다는 것
을 지시한다.
일단 네트워크 컴포넌트(110)가 제1 데이터 집합과 문맥 정보를 수신하면, 네트워크 컴포넌트(110)는 연결에 대[0034]
한 제어를 수락하는 단계를 개시할 수 있다. 한 구현예에서, 이는 리스너(100)에 의해 사용된 "디스패치 로
직"과 유사한 추가적인 평가를 수행하는 네트워크 컴포넌트(110)를 더 포함한다. 예를 들면, 네트워크 컴포넌
트(110)는 클라이언트 컴포넌트(105)가 신임할 만한 클라이언트인가, 혹은 클라이언트 컴포넌트(105)가 전달하
려고 의도한 데이터 타입이 네트워크 컴포넌트(110)에 직접 전달되기에 적합한가를 식별하려고 노력할 수 있다.
네트워크 컴포넌트(110)가 연결에 대한 제어를 수락할 것을 결정하는 경우에, 네트워크 컴포넌트(110)는 소켓
(130)을 복제하는 단계를 개시한다. 이를 행하기 위해, 네트워크 컴포넌트(110)는 리스너(100)에 의해 제어되
는 소켓(130)을 복제하는 요청뿐만 아니라 제1 데이터 집합의 파라미터를 가진 함수 호출을 애플리케이션 서비
스에 전달한다.
도 1a에 도시된 네트워크 컴포넌트는 애플리케이션 서비스(120)와는 구별된 다른 제2 애플리케이션 서비스, 컴[0035]
포넌트, 또는 모듈인 애플리케이션 서비스(125)를 호출함으로써, 소켓(130)의 복제를 요청한다. 그러나 동일한
애플리케이션 서비스를 사용하는 것이 어떤 환경에서 적절할 수 있다 하지만, 다른 환경에서는 네트워크 컴포넌
트(110)와 리스너(100)에 의해 2개의 다른 애플리케이션 서비스를 사용하는 것이 적절할 수 있음을 인식할 필요
가 있다. 여하튼, 도 1a는 애플리케이션 서비스(125)가 함수 호출과, 네트워크 컴포넌트(110)로부터 전달되어
포함된 데이터를 평가하는 것을 도시한다. 그러면 애플리케이션 서비스(125)는 네트워크 컴포넌트(110)가 소켓
(130)을 제어하도록 허용하는 데이터를 네트워크 컴포넌트(110)에 반환한다. 예를 들어, 애플리케이션 서비스
는 소켓(130)의 이름 또는 주소, 초기 패킷 또는 연결이 디스패치되기 전에 클라이언트 컴포넌트로부터 수신된
데이터뿐만 아니라, 리스너(100)와 네트워크 스택(115)에 되돌려 중계되어야 하는 임의 다른 네트워크 스택 상
태 변수를 반환할 수 있다. 애플리케이션 서비스(125)는 또한 사용자 모드 문맥 정보를 적절하게 반
환할 수 있다.
그러면 네트워크 컴포넌트(110)는 애플리케이션 서비스(125)로부터 반환된 데이터를 사용하여 소켓(130)에 대한[0036]
제어를 취하므로, 확립된 연결에 대한 제어를 취하게 된다. 적어도 한 구현예에서, 연결에 대한 제어를 취하는
이런 단계는 네트워크 컴포넌트(110)와 리스너(100)에 의해 수행되는 추가적인 단계들을 포함할 수 있다. 예를
들어, 한 구현예에서, 네트워크 컴포넌트(110)는 네트워크 컴포넌트(110)가 소켓(130)에 대한 제어를 취하였다
는 지시자를 리스너(100)에 전송한다. 이 지시자에 응답하여, 리스너(100)는 리스너(100)가 클라이언트 컴포넌
트(105) 데이터를 더 이상 수신할 수 없음을 나타내는 다른 지시자를, 예컨대, 네트워크 스택의 트랜스포트 계
층(107)에 전송한다. 이런 경우에, 리스너(100)는 또한 신호를 네트워크 스택(115)에 전송할 수 있어서, 네트
워크 컴포넌트(110)가 일부 방법으로 소켓(130)에 대한 제어를 확립할 때까지 관련된 계층에게 끊임없이 유입되
는 클라이언트 컴포넌트(105) 데이터를 버퍼링할 것을 명령한다.
일단 모든 관련된 컴포넌트가, 요청된 네트워크 컴포넌트(110)가 확립된 소켓(130)에 대한 제어를 수락했다고[0037]
이해하면, 네트워크 컴포넌트(110)는 확립된 연결에 대한 제어를 수락한 것으로 이해될 것이다. 특히, 도 1b는
네트워크 컴포넌트(110)가 소켓(130)에 대한 제어를 획득하는 경우, 도 1a의 개략도를 도시한다. 이런 도면에
서, 리스너(100)는 클라이언트 컴포넌트(105)와 네트워크 컴포넌트(110) 간에 중계 중간자로서 더 이상 동작하
지 않아서, 네트워크 컴포넌트(110)와 클라이언트 컴포넌트(105)는 네트워크 스택(115)을 통해 직접 통신하게
된다.
이전에 기술된 바와 같이, 이런 직접 통신은 전형적으로 공유된 메모리, named pipe 등을 통해 사용자 모드의[0038]
리스너(100)의 도움을 받아 통신해야 하는 경우보다 상당히 빠르다. 또한, 보안 문제에 관련될 수 있는 것 등
의 하나 이상의 추가적인 장점이 실현될 수 있는데, 왜냐하면 소켓(130) 제어의 전환이 클라이언트 컴포넌트
(105)에 대해 투명하게 행해질 수 있기 때문이며, 그 결과 클라이언트 컴포넌트(105)는 리스너(100)에서 요청된
네트워크 컴포넌트(110)로의 소켓 제어에 있어서 전환이 발생했음이 알지 못하게 된다. 즉, 클라이언트 컴포넌
트(105)는 그 연결이 리스너(100)에 의해 핸들링되고 있었음을 초기에는 전혀 알지 못할 수 있다. 클라이언트
등록특허 10-1219822
- 9 -
컴포넌트(105)가 자신이 리스너(100)에게 이야기하고 있었음을 알았다손 치더라도, 본 발명의 구현예는 신호를
클라이언트 컴포넌트(105)에 전송하는 것을 요구하지는 않을 것이므로 네트워크 컴포넌트(110)가 소켓(130)의
제어 내에 현재 있게 된다.
본 발명은 또한 본 발명의 구현예에 따른 하나 이상의 방법의 일부분으로서, 기능적인 결과를 달성하기 위한 특[0039]
정한, 비-기능적인 단계들에 의해서 기술될 수 있다. 특히, 도 2는 한 측은 사용자 모드 리스너(100)의 관점에
서 수행되는 단계들을 예시하고, 반면 흐름도의 다른 한 측은 요청된 네트워크 컴포넌트(110)의 관점에서 수행
되는 단계들을 예시하는 경우의 상호 관련된 흐름도에서의, 2개의 방법을 예시한다. 도 2의 단계는 도 1a 및
도 1b에 도시된 개략도에 의해서 하기에 기술될 것이다.
예를 들어, 도 2는 본 발명에 따라, 사용자 모드에서 연결에 대한 제어를 리스너(100) 측으로부터 네트워크 컴[0040]
포넌트에 디스패치하는 방법은 연결을 확립하는 단계(200)를 포함한다고 나타낸다. 단계(200)는 사용자 모드에
서 클라이언트 컴포넌트와 리스너 간에 연결을 사용자 모드의 소켓을 통해 확립하는 단계를 포함한다. 예를 들
어, 같은 또는 다른 원격 컴퓨터에 있는 프로세스 등의 클라이언트 컴포넌트(105)는 리스너(100)와의 연결을 개
시하고, 같은 또는 다른 원격 네트워크 컴퓨터에 있는 다른 프로세스 등의 특정한 네트워크 컴포넌트(110)를 연
결 파라미터의 일부로서 요청한다. 연결이 사용자 모드에 있으므로, 네트워크 스택(115)과 인터페이스하는 리
스너(100)는 도 1a에 도시된 소켓(130) 등의 소켓을 통해 연결을 제어할 것이다.
일부 경우에, 리스너(100)는 연결을 디스패치하기 시작하는 이전 혹은 그 때에, 리스너(100)는 또한 연결 데이[0041]
터의 초기 일부를 네트워크 컴포넌트(110)에 중계할 것이다. 따라서, 네트워크 컴포넌트(110) 측에서의 방법은
클라이언트 컴포넌트로부터 데이터를 수신하는 단계(250)를 포함할 수 있다. 단계(250)는 초기 데이터 집합을
클라이언트 컴포넌트(105)로부터 사용자 모드 리스너(100)를 통해 수신하는 것을 포함한다. 예를 들어, 네트워
크 컴포넌트(110)는 리스터(100)는 확립된 연결을 통해 무엇을 행할지를 결정할 때, 하나 이상의 데이터 패킷을
공유된 메모리, named pipe, RPC, DCOM 등을 통해 수신할 수 있다.
다시 리스너(100) 관점에서 참조하면, 연결을 디스패치하는 방법은 소켓의 복제를 요청하는 단계(210)를 또한[0042]
포함한다. 단계(210)는 제1 데이터 집합이 수신되는 그 연결에 연관된 정보에 근거하여 소켓의 복제를 요청하
는 것을 포함한다. 예를 들어, 클라이언트 컴포넌트(105)에 의해 개시된 연결에서의 초기 데이터 집합을 판독
한 이후에, 리스너(100)는 디스패치 로직을 구현할 수 있다. 본원에 기술된 바와 같이, 디스패치 로직은 네트
워크 스택(115)의 상태 변수, 확립된 연결을 통해 전송되는 데이터의 분량, 연결의 길이, 클라이언트가 신임할
만한 것인지 여부 등에 대한 요소 데이터를 평가하는 함수를 포함할 수 있다.
디스패치 로직 분석이 네트워크 컴포넌트(110)로의 제어를 핸들링하는 것을 제시하는 경우, 리스너(100)는 일부[0043]
경우에, 임의 개수의 추가적인 단계를 수행할 수 있다. 예를 들어, 리스너(100)는 이전에 기술된 바와 같이,
함수 호출을 애플리케이션 서비스(120)에 전송할 수 있다. 한 구현예에서, 함수 호출의 파라미터는 클라이언트
에 의해 요청된 네트워크 컴포넌트, 클라이언트 컴포넌트(105)에 의해 전송된 데이터의 일부 초기 분량, 소켓
복제 요청, 및/또는 상기 것들의 조합을 포함한다. 그러면 애플리케이션 서비스(120)는 사용자 모드 문맥 정보
를 파라미터로서 포함하는 제1 데이터 집합(즉, "Data
1
")을 반환할 수 있다. 그러면 단계(230)에서 도시된 바
와 같이, 리스너(100)는 이와 같은 임의 관련된 데이터를 네트워크 컴포넌트(110)에 전달한다.
따라서, 네트워크 컴포넌트(110) 관점에서 도 2의 방법은 연결 정보를 리스너로부터 수신하는 단계(260)를 포함[0044]
한다. 단계(260)는 연결 정보를 사용자 모드 리스너로부터 수신하는 것을 포함하며, 이 연결 정보는 클라이언
트 컴포넌트와 확립된 연결에 대한 정보를 식별한다. 예를 들어, 네트워크 컴포넌트(110)는 제1 데이터 집합
(즉, "Data
1
")을 수신할 수 있고, 그 제1 데이터 집합은 공유된 메모리, named pipe 등의 중계 통신 메커니즘을
통해 중계된다. 이런 경우에, 해당 제1 데이터 집합은 또한 네트워크 컴포넌트(110)가 소켓(130)의 제어를 수
락하는 것이 적절한가를 식별하는데 사용할 수 있는 임의 데이터뿐만 아니라 클라이언트 컴포넌트(105)로부터
아직 수신되지 않았던 기타 데이터를 확립된 클라이언트 연결에 포함할 수 있다. 예를 들어, 리스너(100)는 소
켓(130)에 대한 제어를 네트워크 컴포넌트(110)에 핸드 오프하는 것이 적절하다고 결정할 수 있지만, 네트워크
컴포넌트(110)는 그 네트워크 컴포넌트(110)가 연결에 대한 제어를 핸들링하는 데는 적합하지 않다고 결정하는
자기 자신의 디스패치 로직을 구현할 수 있다. 예를 들어, 네트워크 컴포넌트(110)는 클라이언트 컴포넌트
(105)가 신임할 만한 것이 아니라고 판정할 수 있다. 대안으로서, 네트워크 컴포넌트(110)는 리스너(100)로부
터 디스패치된 모든 연결을 단순히 수락하도록 구성될 수 있다.
그럼에도, 네트워크 컴포넌트(110)가 소켓(130)에 대한 제어를 수락할 수 있다고 판정했을 경우, 도 2는 네트워[0045]
등록특허 10-1219822
- 10 -
크 컴포넌트(110)가 소켓의 복제를 요청하는 단계(270)를 수행하는 것을 도시한다. 단계(270)는 연결에 연관된
소켓의 복제를 요청하는 것을 포함한다. 예를 들어, 네트워크 컴포넌트(110)는 이전과 동일한 애플리케이션 서
비스(120)인가, 애플리케이션 서비스(125) 등의 다른 애플리케이션 서비스인가에 관한 함수 호출을 애플리케이
션 서비스에 전달한다. 함수 호출의 파라미터는 이전에 리스너(100)에 전달된 제1 데이터 집합(즉, "Data
1
")을
포함한다. 애플리케이션 서비스(125) 등의 관련된 애플리케이션 서비스는 함수 호출을 처리하고, 소켓 정보를
네트워크 컴포넌트(110)에 반환한다. 소켓 정보는 또한 확립된 연결에 연관된 네트워크 스택(115)의 하나 이상
의 상태 변수를 포함할 수 있다. 이런 경우, 반환된 정보는 네트워크 컴포넌트(110)가 소켓(130)에 대한 제어
를 취하도록 해준다.
따라서, 네트워크 컴포넌트 관점에서 본 방법은 또한 소켓에 대한 제어를 수락하는 단계(280)를 포함한다. 단[0046]
계(280)는 소켓에 대한 제어를 리스너로부터 수락하는 것을 포함하며, 네트워크 컴포넌트는 사용자 모드의 연결
을 통해 클라이언트 컴포넌트와 직접 통신하게 된다. 예를 들어, 한 구현예에서, 네트워크 컴포넌트(110)는 신
호를 리스너(100)에게 전송하여 네트워크 컴포넌트(110)가 소켓에 대한 제어를 수락했음을 지시한다(예컨대, 도
1b). 그러나, 다른 구현예에서, 네트워크 컴포넌트(110)는 네트워크 스택(115)과 직접 통신할 수 있고, 네트워
크 스택(115)에 리스너(100)를 통한 정보 전송을 중단할 것을 명령할 수 있다.
그럼에도, 리스너(100)의 관점에서 도 2의 방법은 제어를 디스패치하는 방법이 네트워크 컴포넌트가 제어를 수[0047]
락했다는 지시자를 수신하는 단계(240)를 포함할 수 있음을 나타낸다. 단계(280)는 네트워크 컴포넌트가 소켓
에 대한 제어를 수락했다는 지시자를 수신하는 것을 포함하여서, 리스너가 그 연결에 대한 연결 데이터를 클라
이언트 컴포넌트로부터 더 이상 수락하지 않게 하고, 네트워크 컴포넌트와 클라이언트 컴포넌트가 리스너 없이
연결을 통해 통신하게 한다. 예를 들어, 리스너는 사용자 모드에서 소켓(130)에 대한 제어를 전달하므로, 네트
워크 컴포넌트(110) 역시 사용자 모드에서 클라이언트 컴포넌트(105)에 효과적으로 연결된다. 즉, 클라이언트
컴포넌트(105)와 네트워크 컴포넌트(110)는 네트워크 프로토콜 스택(115)을 통해 직접 연결되지만, 메모리
사용, 또는 기타 제한된 허가의 관점에서 제한되는 모드가 되어, 네트워크 컴퓨터의 악용을 피할 수 있다.
따라서, 본 발명의 구현예는 당해 분야에 있어서 수많은 장점을 제공한다. 특히, 상대적으로 보안성 있거나 보[0048]
다 제한적인 연결이 다른 컴퓨터에 있거나 동일한 컴퓨터에 있는 네트워크 컴포넌트와 클라이언트 컴포넌트 간
에 생성될 수 있으며, 필요하다면 커널 모드 연결 속도 또는 그 이상에 근접하는 상당히 빠른 속도를 가질 수
있다. 또한, 본 발명의 구현예는 리스너가 네트워크 컴포넌트로의 연결이 시스템에 병목현상을 초래할 수 있을
때 이런 연결을 일차적으로 종결하도록 해준다. 이와 같이, 리스너는 연결을 디스패칭에 의해서만 전적으로 이
루는 것을 고수하지 않고 훨씬 효과적인 방식으로 디스패치를 행하는 사용자 모드로 다수의 연결을 계속해서 처
리할 수 있다.
도 3 및 하기의 설명은 본 발명이 구현될 수 있는 적합한 컴퓨팅 환경에 대한 간략하고 일반적인 기술을 제공하[0049]
기 위한 것이다. 요구되진 않았지만, 본 발명은 네트워크 환경의 컴퓨터들에 의해 실행되는 프로그램 모듈 등
의 컴퓨터 실행가능 명령어들의 일반적인 문맥에서 기술될 것이다. 일반적으로, 프로그램 모듈들은 특정 태스
크를 수행하거나 특정 추상화 데이터 타입을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 및 데이터 구조 등을
포함한다. 컴퓨터 실행가능 명령어들, 관련 데이터 구조들, 및 프로그램 모듈들은 본원에 개시된 발명의 단계
를 실행하는 프로그램 코드 수단의 예를 나타낸다. 이런 실행가능 명령어들 또는 관련 데이터 구조들의 특정
순서는 이런 단계에 기술된 함수를 구현하기 위한 대응하는 단계들의 예를 나타낸다.
당업자는 본 발명이 개인용 컴퓨터, 휴대형 장치, 멀티프로세서 시스템, 마이크로프로세서 기반의 또는 프로그[0050]
램가능한 가전 제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터 등을 포함하여 여러 유형의 컴퓨터 시스템
구성으로 네트워크 컴퓨팅 환경에서 실시될 수 있음을 인식할 것이다. 본 발명은 또한 로컬 또는 원격 프로세
싱 장치가 태스크를 수행하고 통신 네트워크를 통해(하드웨어적인 링크, 무선 링크, 또는 하드웨어 또는 무선
링크들의 조합 중 어느 하나에 의해) 링크된 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서,
프로그램 모듈은 로컬 및 원격 메모리 저장 장치들 모두에 위치할 수 있다.
도 3을 참조하면, 본 발명을 구현한 예시적인 시스템은 프로세싱 유닛(321), 시스템 메모리(322), 시스템 메모[0051]
리(322), 및 다양한 시스템 컴포넌트들을 프로세싱 유닛(321)에 결합시키는 시스템 버스(323)를 포함하는 종래
의 컴퓨터(320) 형태인 범용 컴퓨팅 장치를 포함한다. 시스템 버스(323)는 메모리 버스 또는 메모리 컨트롤러,
주변 장치 버스, 및 다양한 버스 아키텍처 중 임의 것을 사용하는 로컬 버스를 포함하여 여러 유형의 버스 구조
들 중 하나일 수 있다. 시스템 메모리는 판독 전용 메모리(ROM:324) 및 임의 접근 메모리(RAM:325)를
포함한다. 시작할 때 등에 컴퓨터(320) 내의 구성 요소들 사이의 정보 전달을 돕는 기본 루틴들을 포함하는 기
등록특허 10-1219822
- 11 -
본 입력/출력 시스템(326:BIOS)이 전형적으로 ROM(324)에 저장된다.
컴퓨터(320)는 또한 자기 하드 디스크(339)를 판독하거나 이에 기록하는 자기 하드 디스크 드라이브(327), 분리[0052]
형 자기 디스크(329)를 판독하거나 이에 기록하는 자기 디스크 드라이브(328), 및 CD-ROM 또는 기타 광 매체 등
의 분리형 광 디스크(331)를 판독하거나 이에 기록하는 광 디스크 드라이브(330)를 포함한다. 자기 하드 디스
크 드라이브(327), 자기 디스크 드라이브(328), 및 광 디스크 드라이브(330)는 하드 디스크 드라이브 인터페이
스(332), 자기 디스크 드라이브 인터페이스(333), 및 광 드라이브 인터페이스(334)에 의해 각각 시스템 버스
(323)에 연결된다. 드라이브들 및 그 관련 컴퓨터 판독가능 매체는 컴퓨터 실행가능 명령어들, 데이터 구조들,
프로그램 모듈들, 및 기타 데이터의 비휘발성 저장 장소를 컴퓨터(320)에 제공한다. 본원에 기술된 예시적인
환경이 자기 하드 디스크(339), 분리형 자기 디스크(329), 및 분리형 광 디스크(331)를 이용하였으나, 자기 카
세트, 플래시 메모리 카드, DVD, 베르누이 카트리지, RAM, ROM 등을 포함하여 데이터를 저장하기 위한 기타 유
형의 컴퓨터 판독가능 매체가 사용될 수 있다.
하나 이상의 프로그램 모듈을 포함하는 프로그램 코드 수단이 운영 체제(335), 하나 이상의 애플리케이션 프로[0053]
그램들(336), 기타 프로그램 모듈들(337), 및 프로그램 데이터(338)를 포함하고 있는 하드 디스크(339), 자기
디스크(329), 광 디스크(331), ROM(324), 또는 RAM(325)에 저장될 수 있다. 사용자는 키보드(340), 포인팅 장
치(342), 및 마이크로폰, 조이스틱, 게임 패드, 위성 접시형 안테나, 스캐너 등의 기타 입력 장치(도시 생략)를
통해 명령어와 정보를 컴퓨터(320)에 입력할 수 있다. 이런 장치들과 기타 입력 장치들은 종종 시스템 버스
(323)에 결합된 직렬 포트 인터페이스(346)를 통해 프로세싱 유닛(321)에 연결되어 있다. 대안으로서, 입력 장
치는 병렬 포트, 게임 포트, 또는 범용 직렬 버스(USB) 등의 기타 인터페이스에 의해 연결될 수 있다. 모니터
(347) 또는 다른 디스플레이 장치도 비디오 어댑터(348) 등의 인터페이스를 통해 시스템 버스(323)에 연결될 수
있다. 모니터 이외에 개인용 컴퓨터는 전형적으로 스피커와 프린터 등의 기타 주변 출력 장치들(도시 생략)도
포함한다.
컴퓨터(320)는 원격 컴퓨터(349a 및 349b) 등의 하나 이상의 원격 컴퓨터들로의 논리적 연결을 사용하는 네트워[0054]
크화된 환경에서 동작할 수 있다. 원격 컴퓨터(349a 및 349b)는 각각 다른 개인용 컴퓨터, 서버, 라우터, 네트
워크 PC, 피어 장치 또는 기타 공통 네트워크 노드일 수 있으며, 비록 메모리 저장 장치(350a 및 350b) 및 그
관련 애플리케이션 프로그램들(336a 및 336b)만이 도 3에 예시되었으나, 전형적으로 컴퓨터(320)에 관련하여 상
기에 기술된 구성요소들 중 다수 혹은 모두를 포함한다. 도 3에 도시된 논리적 연결들은 예로서 본원에 제시된
근거리 통신망(LAN:351)과 광역 통신망(WAN:352)을 포함하나, 이에만 한정되지 않는다. 이런 네트워킹 환경은
사무실 규모 또는 기업 규모 컴퓨터 네트워크, 인트라넷, 및 인터넷에서 흔한 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(320)는 네트워크 인터페이스(353)나 어댑터를 통해 LAN(351)으로 연[0055]
결된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(320)는 전형적으로 인터넷 등의 WAN(352)을 거쳐 통신을 설
정하기 위한 모뎀(354), 무선 링크 또는 기타 수단을 포함할 수 있다. 내장 또는 외장 될 수 있는 모뎀(354)이
직렬 포트 인터페이스(346)를 통해 시스템 버스(323)로 연결될 수 있다. 네트워크화된 환경에서, 컴퓨터(320)
에 관련하여 도시된 프로그램 모듈이나 그의 일부는 원격 메모리 저장 장치에 저장될 수 있다. 도시된 네트워
크 연결들은 예시적인 것이며, WAN(352)을 통해 통신을 설정하기 위한 기타 수단들이 사용될 수 있다는 것을 인
식할 것이다.
본 발명은 그 정신 또는 본질적 특징 내에서 기타 특정 형태로 구현될 수 있다. 상기 기술된 실시예들은 모든[0056]
면에서 예시적인 것이지 한정하는 것은 아니다. 그러므로, 본 발명의 범위는 상기의 상세에 의해서 보다는 첨
부된 청구항에 의해 나타난다. 청구항에 필적하는 의미와 범주 내에서 나온 모든 변경들이 범위 내에 포함될
것이다.
발명의 효과
본 발명은 사용자 모드 리스너가 안전한 방식으로 클라이언트 연결에 관한 제어를 네트워크 컴퓨터 컴포넌트에[0057]
효과적으로 디스패치하게 하는 시스템, 방법, 및 컴퓨터 프로그램을 제공하는 효과가 있다.
도면의 간단한 설명
도 1a는 사용자 모드에서 동작하는 리스너가 본 발명의 구현에 따라, 클라이언트 컴포넌트와 네트워크 컴포넌트[0001]
사이의 연결을 핸드 오프(hand off)하기 시작하는 경우의 개략적인 개요를 도시.
등록특허 10-1219822
- 12 -
도 1b는 네트워크 컴포넌트가 연결에 대한 제어를 가지는 경우, 도 1a의 개략적인 개요를 도시.[0002]
도 2는 본 발명의 구현에 따라, 리스너에 의한 연결을 종결하고(passing-off)하고 네트워크 컴포넌트에 의한 연[0003]
결의 제어를 리스너로부터 수신하는 단계들의 흐름도.
도 3은 본 발명에 따른 시스템 및 방법을 구현하기 위한 적합한 컴퓨팅 환경의 개략도를 도시.[0004]
<도면의 주요 부분에 대한 부호의 설명>[0005]
100: 리스너[0006]
105: 클라이언트 컴포넌트[0007]
110: 네트워크 컴포넌트[0008]
115: 네트워크 스택[0009]
117: 트랜스포트[0010]
도면
도면1a
등록특허 10-1219822
- 13 -
도면1b
도면2
등록특허 10-1219822
- 14 -
도면3
등록특허 10-1219822
- 15 -