KR20070092720A - 클라이언트측 가속 기술을 제공하는 시스템 및 방법 - Google Patents

클라이언트측 가속 기술을 제공하는 시스템 및 방법 Download PDF

Info

Publication number
KR20070092720A
KR20070092720A KR1020077015052A KR20077015052A KR20070092720A KR 20070092720 A KR20070092720 A KR 20070092720A KR 1020077015052 A KR1020077015052 A KR 1020077015052A KR 20077015052 A KR20077015052 A KR 20077015052A KR 20070092720 A KR20070092720 A KR 20070092720A
Authority
KR
South Korea
Prior art keywords
client
program
server
transport layer
application
Prior art date
Application number
KR1020077015052A
Other languages
English (en)
Inventor
프라바카 선더라잔
준시아오 히
라지브 신하
서지 베르주노프
차루 벤카트라만
아닐 쉐티
Original Assignee
사이트릭스 시스템스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/039,946 external-priority patent/US7757074B2/en
Application filed by 사이트릭스 시스템스, 인크. filed Critical 사이트릭스 시스템스, 인크.
Publication of KR20070092720A publication Critical patent/KR20070092720A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/12Arrangements for remote connection or disconnection of substations or of equipment thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0272Virtual private networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/163In-band adaptation of TCP data exchange; In-band control procedures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/289Intermediate processing functionally located close to the data consumer application, e.g. in same machine, in same home or in same sub-network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/561Adding application-functional data or data for application control, e.g. adding metadata

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

본 발명은 클라이언트에 가속 프로그램을 동적으로 배치하고 실행하여 원격으로 액세스된 애플리케이션의 성능 및 전달을 개선하는 시스템 및 방법에 관한 것이다. 본 발명의 가속 프로그램은 클라이언트의 동작에 투명하고도 끊김이 없는 방식으로 클라이언트에 자동으로 설치되고 실행된다. 일 실시예에서, 가속 프로그램은, 서버 또는 원격 애플리케이션에 대한 클라이언트의 액세스가 가속될 수 있다는 어플라이언스 장치의 결정시 어플라이언스 장치에 의해 동적으로 제공된다. 일부 실시예들에서, 가속 프로그램은 다음에 따르는 가속 기술들 중 하나 이상을 클라이언트에 대하여 수행한다. 1) 멀티프로토콜 압축 2) 전송 제어 프로토콜 풀링 3) 전송 제어 프로토콜 멀티플렉싱 4) 전송 제어 프로토콜 버퍼링 5) 캐싱. 또한, 일부 실시예들에서, 가속 프로그램은 이러한 가속 기술들을 커널-레벨 데이터 구조를 이용하여 전송 계층에서 집적되고 효율적인 방식으로 수행한다. 다른 일 실시예에서, 클라이언트측 가속 프로그램은 프록시 방향변경 기술들을 수행하여 임의의 중개자들을 자동적으로 우회하여 클라이언트에 의한 액세스를 서버나 원격 액세스 애플리케이션에 계속 제공한다.
가속 프로그램, 애플리케이션, 프록시 방향변경, 중개자

Description

클라이언트측 가속 기술을 제공하는 시스템 및 방법{SYSTEMS AND METHODS FOR PROVIDING CLIENT-SIDE ACCELERATION TECHNIQUES}
본 출원은 "SYSTEM AND METHOD FOR DYNAMIC ACCELERATION OF REMOTELY-ACCESSED APPLICATION"이라는 명칭으로 2004년 12월 30일 출원한 미국 특허 가출원 번호 60/640,446 및 "SYSTEM AND METHOD FOR ESTABLISHING A VIRTUAL PRIVATE NETWORK"라는 명칭으로 2005년 1월 24일 출원한 미국 특허 출원번호 11/039,946에 대한 우선권을 주장하며, 이러한 2개의 출원은 본 명세서에서 그 내용이 참고로 포함된다.
본 발명은 일반적으로 데이터 통신 네트워크에 관한 것이다. 특히, 본 발명은, 클라이언트측 가속 프로그램을 자동으로 전개하고, 설치하고, 실행하는 시스템 및 방법에 관한 것이다.
기업들은, 고용인들, 파트너, 기업 네트워크의 경계 외부에 위치하는 서비스 제공자에게 애플리케이션에 대한 액세스를 제공하도록 점점 더 요구받고 있다. 그러나, 혼잡한 광역 통신망(WAN) 링크, 과부하 서버, 저 대역폭 원격 접속은 원격 액세스 애플리케이션에 대한 액세스를 방해하고 원격 액세스 애플리케이션의 성능을 느리게 할 수 있다. 이러한 요인들은 기업 애플리케이션 소프트웨어 및 사회 기반시설에서 고용인 생산성 및 투자 회수에 상당한 영향을 끼칠 수 있으며 저감시킬 수 있다. 게다가, 이러한 요인들은 원격 액세스 애플리케이션을 이용하려는 사용자들을 좌절시키고 소원케 할 수도 있다. 이러한 애플리케이션들로부터 만족할만한 투자 회수를 얻기 위해선, 기업은 모든 사용자가 위치에 상관없이 그 애플리케이션을 빠르고도 효과적으로 이용하는 것을 보장할 필요가 있다.
원격 액세스 애플리케이션의 성능을 개선하는 한 가지 방안은 애플리케이션 성능을 가속하도록 소정의 기능들을 수행하는 기업 네트워크 내에 어플라이언스를 설치하는 것이다. 어플라이언스는 전형적으로 공중 네트워크상의 WAN과 사설 데이터 네트워크상의 기업 서버들 간의 게이트웨이로서 설치되고 이들 간에 전달되는 데이터를 처리한다. 이러한 어플라이언스가 가속 기능을 전용으로 수행하는 경우, 이것을 가속기라 칭한다. 가속기는 기업 네트워크 내에 배치되기 때문에, 기업 네트워크 자체에서의 지연을 저감하는 데 있어서 그리고 기업 서버들 상의 부하를 저감하는 데 있어서 더욱 효과적이다. 그러나, 혼잡한 WAN 링크 및 저 대역폭 원격 접속과 같이 기업 네트워크 밖에서 발생하는 문제점들로 인한 지연을 다루는 것은 덜 효과적이다.
다른 방안으로, 일부 회사들은 클라이언트측 LAN 또는 WAN의 클라이언트측을 위한 애플리케이션 가속 해결책을 제안한다. 이러한 해결책들은 전형적으로 2개의 주 카테고리에 속한다. 즉, (1) 클라이언트 및 WAN 간의 게이트웨이로서 설치될 수 있으며 애플리케이션 가속 기능을 수행하는 네트워크 어플라이언스, 및 (2) 클라이언트측 LAN 상에 상주하는 애플리케이션 가속 서버이다. 그러나, 클라이언트 측 LAN 상의 어플라이언스 또는 가속기 서버를 설치하고 유지하려면 시간, 비용, 자원을 소모하게 된다. 많은 경우에, 기업 네트워크는 많은 상이한 지점들처럼 많은 상이한 원격 사이트들로부터 액세스될 수 있다. 모든 원격 클라이언트들을 위한 클라이언트측 가속을 배치하려면, 기업이 각 원격 사이트에 어플라이언스 기반 또는 서버 기반의 가속기를 설치 및 유지해야 한다. 또한, 원격 사이트로부터 애플리케이션에 액세스할 필요가 산발적으로 발생하는 경우, 클라이언트측 LAN 상에 이러한 가속기를 설치 및 유지하는 시간, 비용, 자원이 이점보다 클 수 있다.
게다가, 클라이언트측 LAN 상의 어플라이언스 또는 서버 기반 가속기의 해결책은 한정적일 수 있으며 그 이유는 클라이언트측 LAN의 가속을 서버 기반 또는 어플라이언스 기반 가속기를 갖는 위치로 제한하기 때문이다. 사용자들이 유비쿼터스화된 이동 컴퓨팅 장치들과 결합된 상이한 원격 위치들에서 다중 컴퓨팅 장치들에 대한 액세스를 갖고 무선 네트워크 액세스의 이용가능성이 증가함에 따라, 사용자는 넓은 범위의 원격 액세스 지점들로부터 네트워크에 어느 때라도 액세스할 수 있다. 예를 들어, 액세스 지점들 간의 사용자 로밍 코스 동안, 사용자는, 사무실 데스크탑 컴퓨터, 스마트폰이나 사설 휴대 정보 단말기, 랩탑 컴퓨터, 홈 오피스 컴퓨터, 또는 고객이나 클라이언트 사무실과 같은 원격 사무실 위치의 컴퓨터로부터 기업 네트워크에 액세스할 수 있다. 이처럼, 사용자는, 임의의 원격 위치에서 그리고 사용자가 이용할 수 있는 여러 컴퓨터 중 임의의 하나의 컴퓨터상에서 기업 네트워크를 통해 원격 애플리케이션에 액세스하길 원할 수 있다. 원격 액세스 지점 및/또는 사용자가 이용가능한 다중 컴퓨팅 장치들의 각각은 기업 네트워크에 대 하여 상이한 클라이언트측 LAN 접속을 가질 수 있다. 기업은, 모든 가능한 원격 액세스 지점들에서 또는 모든 가능한 컴퓨팅 장치들을 위한 클라이언트측 LAN 해결책을 배치할 시간, 비용, 자원을 갖고 있지 않을 수 있으며, 또는, 증가하는 원격 액세스 지점들 및 사용자의 컴퓨팅 장치들에 대한 해결책을 연속적으로 설치 및 유지하지 못할 수 있다. 또한, 사용자는, 공중 네트워크, 사설 네트워크, 또는 기업의 관리나 제어하에 있지 않거나 이 기업의 관리나 제어에 액세스할 수 없는 클라이언트측 LAN으로부터 기업 네트워크에 액세스할 수 있다. 이처럼, 기업은 클라이언트측 LAN 가속기를 이러한 모든 액세스 지점들에 배치하지 못할 수 있다.
이에 따라, 원격 액세스 애플리케이션의 성능을 개선하기 위한 클라이언트측 가속 기능을 제공하는 시스템 및 방법이 필요하다. 원하는 시스템 및 방법은 클라이언트와 WAN 간에 가속 소프트웨어를 실행하는 서버 또는 네트워크 어플라이언스의 설치 및 유지를 요구하지 않아야 한다. 원격 액세스 애플리케이션의 성능을 더 개선하려면, WAN의 기업 네트워크측 및 클라이언트측 모두에 대하여 가속 기능이 구현될 수 있다면 이것도 필요할 것이다.
본 발명은 클라이언트에 대하여 가속 기능성을 동적으로 배치 및 실행하여 원격 액세스 애플리케이션의 성능 및 전달을 개선하는 시스템 및 방법에 관한 것이다. 클라이언트측 가속 기능성은, 원격 액세스 애플리케이션과 같이 클라이언트와 서버 간의 통신상에서 다음의 가속 기술들 중 하나 이상을 수행하는 가속 프로그램에 의해 제공된다. 즉, 1) 멀티 프로토콜 압축 2) 전송 제어 프로토콜 풀링 3) 전송 제어 프로토콜 멀티플렉싱 4) 전송 제어 프로토콜 버퍼링 5) 캐싱이다. 일 양태에서, 본 발명의 가속 프로그램은 클라이언트의 동작에 투명하고도 끊김 없는 방식으로 클라이언트에 자동으로 설치 및 실행된다. 어플라이언스는 클라이언트의 요구를 간섭하여 서버와의 통신 세션 또는 접속을 확립할 수 있고, 가속 프로그램을 클라이언트에 전송할 수 있다. 일부 경우에, 어플라이언스는 클라이언트에 의해 액세스되고 있는 애플리케이션이 가속될 수 있는지를 결정하고 애플리케이션이 가속될 수 있다면 가속 프로그램을 제공만 한다. 가속 프로그램의 수신시, 클라이언트는 가속 프로그램의 조용한 설치를 자동으로 수행하고 설치 완료시 가속 프로그램을 실행한다.
일 양태에서, 본 발명은 자동으로 설치 밀 실행되는 가속 프로그램을 클라이언트에 동적으로 제공하는 방법에 관한 것이다. 가속 프로그램은 원격 액세스 애플리케이션에 대한 클라이언트의 액세스를 가속한다. 이 방법은, 어플라이언스에 의해 서버와의 통신 세션을 확립하는 클라이언트의 요구를 수신하는 단계와, 어플라이언스에 의해 클라이언트 상에서 서버를 통해 제공되는 애플리케이션에 대한 클라이언트의 액세스의 가속을 수행하기 위한 네트워크 드라이버를 포함하는 가속 프로그램을 클라이언트에 전송하는 단계를 포함한다. 가속 프로그램의 수신시, 클라이언트는 네트워크 드라이버의 조용한 설치를 클라이언트의 저장 장치에 자동으로 수행한다. 네트워크 드라이버의 설치시, 클라이언트는 클라이언트의 네트워크 스택에 할당된 메모리 내의 네트워크 드라이버를 자동으로 실행한다.
본 발명의 일 실시예에서, 이 방법은, 서버와의 통신 세션을 확립시 어플라이언스에 의해 가속 프로그램을 클라이언트에 전송하는 단계를 포함한다. 다른 일 실시예에서, 이 방법은 가속 프로그램에 의해 서버와의 통신 세션을 확립하는 단계를 포함한다. 일부 실시예들에서, 가속 프로그램은 클라이언트의 리부팅이나 클라이언트의 사용자에 의한 상호작용 없이 클라이언트 상에 설치된다. 다른 실시예들에서, 가속 프로그램의 설치 및 실행은, 클라이언트의 사용자, 클라이언트의 애플리케이션, 또는 서버에 대하여 투명하게 클라이언트 상에서 실행된다. 일부 실시예들에서, 본 발명의 네트워크 드라이버는 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함한다. 일 실시예에서, 가속 프로그램은 네트워크 스택의 네트워크 계층, 세션 계층 또는 애플리케이션 계층에 대하여 투명하게 서버상의 애플리케이션에게 클라이언트측 가속된 액세스를 제공한다.
다른 일 실시예에서, 본 발명의 방법은, 어플라이언스에 의해 제1 프로그램을 클라이언트에게 전송하는 단계를 포함한다. 제1 프로그램은 가속 프로그램을 포함한다. 제1 프로그램의 수신시, 클라이언트는 제1 프로그램을 자동 실행하여 가속 프로그램을 설치 및 실행한다. 일부 실시예들에서, 제1 프로그램은 브라우저에 제공되며 브라우저상에서 실행되는 실행가능 명령들을 포함한다.
본 발명의 일부 실시예들에서, 이 방법은, 어플라이언스에 의해 서버상의 애플리케이션에 대한 액세스 요구를 클라이언트로부터 수신하는 단계와, 어플라이언스에 의해 클라이언트와 서버 간의 통신에 대하여 적어도 하나의 가속 기술을 수행하는 메시지를 가속 프로그램과 통신하는 클라이언트에게 전송하는 단계를 포함한다. 다른 실시예에서, 어플라이언스는, 애플리케이션이 가속될 수 있는지를 결정하고, 애플리케이션이 가속될 수 있다면 메시지를 클라이언트에게 전송한다.
일부 실시예들에서, 가속 프로그램은 다음에 따르는 가속 기술들 중 하나를 클라이언트 상에서 실행한다. 즉, 1) 압축, 2) 압축해제, 3) 전송 제어 프로토콜 접속 풀링, 4) 전송 제어 프로토콜 접속 멀티플렉싱, 5) 전송 제어 프로토콜 버퍼링, 6) 캐싱이다. 다른 일 실시예에서, 가속 프로그램은 클라이언트와 서버 간의 통신의 암호화 또는 복호화를 수행한다. 일 실시예에서, 네트워크 드라이버는 서버 또는 어플라이언스와의 가상 사설 네트워크 접속을 확립한다. 어플라이언스는 캐시, 게이트웨이, 서버, 방화벽, 프록시, 라우터, 스위치, 또는 브리지를 포함할 수 있다.
다른 양태에서, 본 발명은 원격 액세스 애플리케이션에 대한 클라이언트의 액세스를 가속하는 가속 프로그램을 클라이언트에게 동적으로 제공하는 방법에 관한 것이다. 이 방법은, 어플라이언스에 의해 클라이언트로부터 서버를 통한 애플리케이션 액세스 요구를 수신하는 단계와, 어플라이언스에 의해 애플리케이션이 가속될 수 있음을 결정하는 단계를 포함한다. 이 방법은, 어플라이언스에 의해 클라이언트 상에서의 자동 설치 및 실행을 위한 가속 프로그램을 클라이언트에게 전송하는 단계를 더 포함한다. 일 실시예에서, 본 발명의 방법은 어플라이언스로부터 가속 프로그램을 수신시 클라이언트에 의해 가속 프로그램을 자동으로 실행하고 설치하는 단계를 포함한다. 일부 실시예들에서, 클라이언트는, 클라이언트 상의 애플리케이션, 클라이언트 상의 사용자, 또는 서버에 대하여 투명하게 가속 프로그램을 수신, 설치, 및/또는 실행한다.
또 다른 일 실시예에서, 어플라이언스는 애플리케이션이 가속될 수 없음을 결정하고, 요구를 서버에 포워딩한다. 일부 실시예들에서, 어플라이언스는 다음에 따르는 가속 기술들 중 하나에 의해 애플리케이션이 가속될 수 있음을 결정한다. 즉, 1) 압축, 2) 압축해제, 3) 전송 제어 프로토콜 접속 풀링, 4) 전송 제어 프로토콜 접속 멀티플렉싱, 5) 전송 제어 프로토콜 버퍼링, 6) 캐싱이다. 어플라이언스는, 어플라이언스에 의해 애플리케이션을 가속할 수 있는 것으로 결정된 가속 기술을 제공하도록 구성된 가속 프로그램을 전송할 수 있다. 가속 프로그램은 이러한 가속 기술들 중 하나를 수행 또는 실행할 수 있다. 일부 실시예들에서, 가속 프로그램은 어플라이언스나 서버에 가상 사설 네트워크를 제공할 수 있다. 어플라이언스는, 캐시, 게이트웨이, 서버, 방화벽, 프록시, 라우터, 스위치, 또는 브리지를 포함할 수 있다.
일부 양태에 있어서, 본 발명은 원격 액세스 애플리케이션에 대한 클라이언트의 액세스를 가속하는 가속 프로그램을 클라이언트에게 동적으로 제공하는 어플라이언스에 관한 것이다. 어플라이언스는, 서버를 통해 애플리케이션에 액세스하는 요구를 클라이언트로부터 수신하고, 애플리케이션이 가속될 수 있음을 결정하며, 가속 프로그램을 클라이언트에게 전송하는 수단을 포함할 수 있다. 가속 프로그램은 클라이언트 상에서의 자동 설치 및 실행을 위해 구성될 수 있다.
일부 실시예들에서, 어플라이언스는, 어플라이언스에 의해 애플리케이션이 가속될 수 없음을 결정하고 요구를 서버에 포워딩하는 수단을 더 포함할 수 있다. 다른 실시예들에서, 어플라이언스는 애플리케이션에 의해 애플리케이션이 다음에 따르는 가속 기술들 중 하나에 의해 가속될 수 있음을 결정하는 수단을 포함한다. 즉, 1) 압축, 2) 압축 해제, 3) 전송 제어 프로토콜 접속 풀링, 4) 전송 제어 프로토콜 접속 멀티플렉싱, 5) 전송 제어 프로토콜 풀링, 6) 캐싱이다. 일 실시예에서, 어플라이언스는, 어플라이언스에 의해 애플리케이션을 가속할 수 있다고 결정된 가속 기술을 제공하도록 구성된 가속 프로그램을 어플라이언스에 의해 전송하는 수단을 구비한다. 또한, 어플라이언스는 가속 프로그램과의 가상 사설 네트워크를 확립할 수 있다. 어플라이언스는 캐시, 게이트웨이, 서버, 방화벽, 프록시, 라우터, 스위치, 또는 브리지를 포함할 수 있다.
다른 양태에서, 클라이언트측 가속 기능성은, 원격 액세스 애플리케이션의 전달 및 통신 성능을 개선하기 위한 전송 계층 접속 풀링 기술을 수행하는 가속 프로그램에 의해 제공된다. 가속 프로그램은, 클라이언트로부터 클라이언트 상의 다중 애플리케이션에 의해 이용될 수 있으며 클라이언트의 애플리케이션들 중 공유되는 서버로의 전송 계층 접속을 확립한다. 가속 프로그램은 전송 계층 접속을 개방 상태로 유지하여 클라이언트 상에서 실행되는 다중 애플리케이션 또는 하나의 애플리케이션을 위한 전송 계층 접속 요구 수 및 서버와 확립된 전송 계층 접속의 수를 저감한다.
일 양태에 있어서, 본 발명은 클라이언트 상에서 서버에 대한 하나 이상의 전송 계층 접속을 풀링함으로써 서버에 대한 클라이언트의 액세스를 가속하는 방법에 관한 것이다. 이 방법은, 클라이언트 상의 가속 프로그램에 의해 서버와의 제1 전송 계층 접속을 확립하는 제1 애플리케이션의 제1 요구를 간섭하는 단계와, 가속 프로그램에 의해 가속 프로그램과 서버 간의 전송 계층 접속을 확립하는 단계를 포함한다. 또한, 이 방법은, 가속 프로그램에 의해 서버와의 제2 전송 계층 접속을 확립하는 제2 애플리케이션의 제2 요구를 간섭하는 단계와, 가속 프로그램에 의해 확립된 전송 계층 접속을 이용하여 제2 애플리케이션용으로 요구된 전송 계층 접속을 제공하는 단계를 포함한다.
일 실시예에서, 본 발명의 방법은, 클라이언트로부터 서버와의 세션 또는 접속 확립의 요구시 어플라이언스에 의해 가속 프로그램을 클라이언트에 전송하는 단계를 포함한다. 가속 프로그램의 수신시, 클라이언트는 가속 프로그램을 자동으로 설치 및 실행할 수 있다. 일부 실시예들에서, 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함한다. 다른 실시예들에서, 이 방법은 가속 프로그램에 의해 확립된 전송 계층 접속을 통해 클라이언트 상의 다중 애플리케이션들로부터의 요구를 멀티플렉싱하는 단계를 또한 포함한다.
일부 실시예들에서, 이 방법은 가속 프로그램에 의해 클라이언트 상에서 다음에 따르는 가속 기술들 중 하나를 수행하는 단계를 포함한다. 즉, 1) 멀티 프로토콜 압축, 2) 전송 제어 프로토콜 멀티플렉싱, 3) 전송 제어 프로토콜 버퍼링, 4) 캐싱이다. 다른 일 실시예에서, 가속 프로그램은 클라이언트와 서버 간의 통신의 암호화 또는 복호화를 수행한다. 일 실시예에서, 이 방법은 최종 커맨드 또는 리셋의 수신시 가속 프로그램에 의해 제1 전송 계층 접속을 닫는 단계를 포함한다. 또 다른 일 실시예에서, 이 방법은, 가속 프로그램에 의해 서버 및 제1 애플리케이션이나 제2 애플리케이션 간의 유휴 활동성의 기간 동안 전송 계층 접속을 개방 상태로 유지하는 단계를 포함한다. 다른 실시예들에서, 가속 프로그램은 클라이언트로부터 서버로의 통신에 전송 계층 접속을 개방 상태로 유지하는 명령을 삽입한다.
본 발명의 일 실시예에서, 이 방법은, 각 애플리케이션에 대하여 서버로 전송된 바이트 수와 그 서버로부터 승인된 바이트 수를 비교함으로써 가속 프로그램에 의해 전송 계층 접속이 현재 제1 애플리케이션 또는 제2 애플리케이션에 의해 이용되고 있음을 결정하는 단계를 포함한다. 일부 실시예들에서, 가속 프로그램은 전송 계층 접속이 현재 제1 애플리케이션에 의해 이용되고 있음을 결정하고, 제2 애플리케이션에 의한 사용을 위해 가속 프로그램과 서버 간의 제2 전송 계층 접속을 개방한다. 일 실시예에서, 전송 계층 접속은 서버와 통신하는 어플라이언스 및 가속 프로그램 간에 확립된다. 일부 실시예들에서, 어플라이언스는 가속 프로그램에 의한 사용을 위해 하나 이상의 전송 계층 접속들의 풀을 확립한다.
또 다른 일 실시예에서, 이 방법은, 클라이언트에 의해 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 또는 애플리케이션 계층에 대하여 투명하게 가속 프로그램을 실행하는 단계를 포함한다. 다른 실시예들에서, 이 방법은, 클라이언트에 의해 제1 애플리케이션, 제2 애플리케이션, 또는 서버 중 하나에 대하여 투명하게 가속 프로그램을 실행하는 단계를 포함한다.
또 다른 양태에 있어서, 본 발명은 클라이언트 상에서 서버에 대한 하나 이상의 전송 계층 접속들을 풀링함으로써 하나 이상의 서버에 대한 클라이언트의 액세스를 가속하는 시스템에 관한 것이다. 이 시스템은, 클라이언트 상의 가속 프로그램에 의해 서버와의 제1 전송 계층 접속을 확립하는 제1 애플리케이션의 제1 요구를 간섭하고, 가속 프로그램에 의해 가속 프로그램과 서버 간의 전송 계층 접속을 확립하는 수단을 포함한다. 이 시스템은, 가속 프로그램에 의해 서버와의 제2 전송 계층 접속을 확립하는 제2 애플리케이션의 제2 요구를 간섭하고, 가속 프로그램에 의해 확립된 전송 계층 접속을 이용하여 제2 애플리케이션용으로 요구된 전송 계층 접속을 제공하는 수단을 더 포함한다.
일 실시예에서, 본 발명의 시스템은, 클라이언트에 의해 가속 프로그램을 자동 설치하고 실행하는 수단을 포함한다. 또 다른 일 실시예에서, 이 시스템은 서버와의 세션이나 접속 중 하나를 확립하는 클라이언트로부터의 요구시 가속 프로그램을 클라이언트에게 전송하는 어플라이언스를 포함한다. 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함할 수 있다. 일부 실시예들에서, 시스템은 가속 프로그램에 의해 제2 전송 계층 접속을 통해 클라이언트 상의 복수의 애플리케이션으로부터의 요구를 멀티플렉싱하는 수단을 포함한다.
일부 실시예들에서, 이 시스템은 클라이언트 상에서 다음에 따르는 가속 기술들중 하나를 수행하는 가속 프로그램을 포함한다. 즉, 1) 멀티 프로토콜 압축, 2) 전송 제어 프로토콜 멀티플렉싱, 3) 전송 제어 프로토콜 버퍼링, 4) 캐싱이다. 다른 일 실시예에서, 가속 프로그램은 클라이언트와 서버 간의 통신의 암호화 또는 복호화를 수행한다. 일 실시예에서, 이 시스템은 최종 커맨드 또는 리셋의 수신시 가속 프로그램에 의해 제1 전송 계층 접속을 닫는 수단을 포함한다. 또 다른 일 실시예에서, 가속 프로그램은, 서버 및 제1 애플리케이션이나 제2 애플리케이션 간의 유휴 활동성의 기간 동안 전송 계층 접속을 개방 상태로 유지한다. 이 시스템의 다른 실시예들에서, 가속 프로그램은 클라이언트로부터 서버로의 통신에 전송 계층 접속을 개방 상태로 유지하는 명령을 삽입한다.
이 시스템의 일 실시예에서, 가속 프로그램은, 각 애플리케이션에 대하여 서버로 전송된 바이트 수와 그 서버로부터 승인된 바이트 수를 비교함으로써 가속 프로그램에 의해 전송 계층 접속이 현재 제1 애플리케이션 또는 제2 애플리케이션에 의해 이용되고 있음을 결정하는 수단을 포함한다. 다른 일 실시예에서, 가속 프로그램은 전송 계층 접속이 현재 제1 애플리케이션에 의해 이용되고 있음을 결정하는 수단을 포함하고, 제2 애플리케이션에 의한 사용을 위해 가속 프로그램과 서버 간의 제2 전송 계층 접속을 개방한다. 일부 실시예들에서, 가속 프로그램은 서버와 통신하는 가속 프로그램 및 어플라이언스 간의 제2 전송 계층 접속을 확립한다. 일 실시예에서, 어플라이언스는 가속 프로그램에 의한 사용을 위해 하나 이상의 전송 계층 접속들의 풀을 제공한다.
시스템의 또 다른 일 실시예에서, 이 시스템은 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 또는 애플리케이션 계층에 대하여 투명하게 가속 프로그램을 실행한다. 다른 실시예들에서, 시스템은 제1 애플리케이션, 제2 애플리케이션, 또는 서버 중 하나에 대하여 투명하게 가속 프로그램을 실행하는 클라이언트를 포함한다.
또 다른 양태에 있어서, 클라이언트측 가속 기능성은, 원격 액세스 애플리케이션의 전달 및 통신의 성능을 개선하기 위한 전송 계층 접속 멀티플렉싱 기술을 수행하는 가속 프로그램에 의해 제공된다. 이 가속 프로그램은, 클라이언트로부터 클라이언트 상의 다중 애플리케이션에 의해 이용될 수 있으며 클라이언트의 애플리케이션들 중 공유되는 서버로의 전송 계층 접속을 확립한다. 가속 프로그램은 가속 프로그램에 의해 유지되는 동일한 전송 계층 접속을 통해 하나 이상의 애플리케이션으로부터의 요구를 멀티플렉싱한다. 이처럼, 가속 프로그램은 전송 계층 접속을 이용하는 데 있어서 제1 애플리케이션의 유휴 시간을 활용하여 동일한 전송 계층 접속을 통해 제2 애플리케이션의 요구를 서비스할 수 있다.
일 양태에 있어서, 본 발명은 공유된 전송 계층 접속을 통해 복수의 애플리케이션 요구를 멀티플렉싱함으로써 클라이언트 상에서 서버상의 하나 이상의 애플리케이션에 대한 클라이언트의 액세스를 가속하는 방법에 관한 것이다. 이 방법은, 클라이언트 상의 가속 프로그램에 의해 클라이언트의 제1 애플리케이션의 서버에 액세스하는 제1 요구를 간섭하는 단계와, 가속 프로그램에 의해 가속 프로그램과 서버 간에 확립된 전송 계층 접속을 통해 제1 요구를 전송하는 단계를 포함한다. 또한, 이 방법은 가속 프로그램에 의해 클라이언트의 제2 애플리케이션의 서버에 액세스하는 제2 요구를 간섭하는 단계와, 가속 프로그램에 의해 제1 애플리케이션에 의해 이용되는 확립된 전송 계층 접속을 통해 제2 요구를 전송하는 단계를 포함한다.
일 실시예에서, 본 발명의 방법은, 가속 프로그램에 의해 서버로부터 제1 애플리케이션의 요구에 대한 응답을 수신시 제2 요구를 전송하는 단계를 포함한다. 일부 실시예들에서, 이 방법은, 제1 애플리케이션이 현재 전송 계층 접속을 이용하고 있지 않다는 결정시 제2 요구를 가속 프로그램에 의해 전송하는 단계를 포함한다. 또 다른 일 실시예에서, 이 방법은, 제1 애플리케이션에 의해 서버로 전송된 바이트 수와 서버에 의해 승인된 바이트 수를 비교함으로써 제1 애플리케이션이 현재 전송 계층 접속을 이용하고 있지 않다고 가속 프로그램에 의해 결정하는 단계를 포함한다. 다른 실시예들에서, 이 방법은, 클라이언트와 서버 간에 메시지의 메시지 식별자의 길이를 확인함으로써 제1 애플리케이션이 현재 전송 계층 접속을 이용하고 있지 않다고 가속 프로그램에 의해 결정하는 단계를 포함한다.
본 발명의 일 실시예에서, 이 방법은 전송 계층 접속을 통한 클라이언트 상의 복수의 애플리케이션으로부터의 요구를 가속 프로그램에 의해 멀티플렉싱하는 단계를 더 포함한다. 다른 일 실시예에서, 이 방법은, 클라이언트의 다중 애플리케이션에 의한 사용을 위해 서버에 대한 다중 전송 계층 접속을 가속 프로그램에 의해 풀링하는 단계를 포함한다. 일부 실시예들에서, 이 방법은 클라이언트로부터의 서버에 대한 접속을 확립하는 요구시 가속 프로그램을 어플라이언스에 의해 클라이언트에게 전송하는 단계를 포함한다. 가속 프로그램의 수신시, 클라이언트는 가속 프로그램을 자동 설치 및 실행할 수 있다. 일부 실시예들에서, 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함한다.
일부 실시예들에서, 이 방법은, 다음에 따르는 가속 기술들 중 하나를 가속 프로그램에 의해 수행하는 단계를 포함한다. 즉, 1) 압축, 2) 압축 해제, 3) 전송 제어 프로토콜 버퍼링, 4) 캐싱이다. 또 다른 일 실시예에서, 가속 프로그램은 클라이언트와 서버 간의 통신의 암호화 또는 복호화를 수행한다. 일 실시예에서, 이 방법은, 제1 애플리케이션과 제2 애플리케이션을 위한 최종 커맨드 또는 리셋의 수신시 가속 프로그램에 의해 전송 계층 접속을 닫는 단계를 포함한다. 다른 일 실시예에서, 이 방법은, 서버와 통신하는 어플라이언스와 가속 프로그램 간의 전송 계층 접속을 확립하는 단계를 포함한다. 일 실시예에서, 어플라이언스는 가속 프로그램에 의한 사용을 위해 하나 이상의 전송 계층 접속들의 풀을 확립한다. 다른 일 실시예에서, 어플라이언스는 하나 이상의 전송 계층 접속들의 풀을 통해 가속 프로그램과 서버 간의 다중 통신을 멀티플렉싱한다.
본 발명의 일 실시예에서, 이 방법은, 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 또는 애플리케이션 계층에 대하여 투명하게 가속 프로그램을 클라이언트에 의해 실행하는 단계를 포함한다. 다른 일 실시예에서, 이 방법은 제1 애플리케이션, 제2 애플리케이션, 또는 서버에 대하여 투명하게 가속 프로그램을 클라이언트에 의해 실행하는 단계를 포함한다.
또 다른 양태에 있어서, 본 발명은 공유된 전송 계층 접속을 통해 복수의 애플리케이션 요구를 멀티플렉싱함으로써 클라이언트 상에서 서버의 하나 이상의 애플리케이션에 대한 액세스를 가속하는 시스템에 관한 것이다. 이 시스템은, 클라이언트 상의 가속 프로그램에 의해 클라이언트의 제1 애플리케이션의 서버에 액세스하는 제1 요구를 간섭하고, 가속 프로그램과 서버 간에 확립된 전송 계층 접속을 통해 가속 프로그램에 의해 제1 요구를 전송하는 수단을 포함한다. 또한, 이 시스템은, 가속 프로그램에 의해 클라이언트의 서버에 액세스하는 제2 요구를 간섭하고, 제1 애플리케이션에 의해 이용되는 확립된 전송 계층 접속을 통해 가속 프로그램에 의해 제2 요구를 전송하는 수단을 포함한다.
일 실시예에서, 본 발명의 시스템은, 서버로부터의 제1 애플리케이션의 요구에 대한 응답 수신시 가속 프로그램에 의해 제2 요구를 전송하는 수단을 포함한다. 다른 일 실시예에서, 시스템은, 제1 어플라이언스가 현재 전송 계층 접속을 이용하고 있지 않다는 결정시 제2 요구를 가속 프로그램에 의해 전송하는 수단을 포함한다. 일부 실시예들에서, 시스템은, 제1 애플리케이션에 의해 서버로 전송되는 바이트 수와 서버에 의해 승인된 바이트 수를 비교함으로써 제1 애플리케이션이 현재 전송 계층 접속을 이용하고 있지 않음을 가속 프로그램에 의해 결정하는 수단을 포함한다. 또 다른 일 실시예에서, 시스템은, 클라이언트와 서버 간의 메시지에서 메시지 식별자의 길이를 확인함으로써 제1 애플리케이션이 현재 전송 계층 접속을 이용하고 있지 않음을 가속 프로그램에 의해 결정하는 수단을 포함한다.
일부 실시예들에서, 시스템은, 전송 계층 접속을 통해 클라이언트 상의 다중 애플리케이션으로부터의 요구를 멀티플렉싱하는 가속 프로그램을 포함한다. 다른 실시예들에서, 시스템은 다중 애플리케이션에 의한 사용을 위해 서버에 대한 다중 전송 계층 접속을 풀링하는 가속 프로그램을 포함한다. 일 실시예에서, 시스템은 클라이언트로부터의 서버에 대한 접속 또는 세션 중 하나를 확립하는 요구시 가속 프로그램을 클라이언트에게 전송하는 어플라이언스를 포함한다. 다른 일 실시예에서, 클라이언트는 가속 프로그램의 수신시 가속 프로그램을 자동 설치 및 실행한다. 일부 실시예들에서, 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함한다.
시스템의 일부 실시예들에서, 가속 프로그램은 다음에 따르는 가속 기술들 중 하나를 실행한다. 즉, 1) 압축, 2) 압축 해제, 3) 전송 제어 프로토콜 버퍼링, 4) 캐싱이다. 또 다른 일 실시예에서, 가속 프로그램은 클라이언트와 서버 간의 통신의 암호화 또는 복호화를 수행한다. 일 실시예에서, 이 시스템은, 제1 애플리케이션과 제2 애플리케이션을 위한 최종 커맨드 또는 리셋의 수신시 가속 프로그램에 의해 전송 계층 접속을 닫는 수단을 포함한다. 다른 일 실시예에서, 이 방법은, 서버와 통신하는 어플라이언스와 가속 프로그램 간의 전송 계층 접속을 확립하는 단계를 포함한다. 일 실시예에서, 어플라이언스는 가속 프로그램에 의한 사용을 위해 하나 이상의 전송 계층 접속들의 풀을 확립한다. 다른 일 실시예에서, 어플라이언스는 하나 이상의 전송 계층 접속들의 풀을 통해 가속 프로그램과 서버 간의 다중 통신을 멀티플렉싱한다.
본 발명의 일 실시예에서, 이 방법은, 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 또는 애플리케이션 계층에 대하여 투명하게 가속 프로그램을 클라이언트에 의해 실행하는 단계를 포함한다. 다른 일 실시예에서, 이 방법은 제1 애플리케이션, 제2 애플리케이션, 또는 서버에 대하여 투명하게 가속 프로그램을 클라이언트에 의해 실행하는 단계를 포함한다. 일부 실시예들에서, 시스템은, 서버와 통신하는 어플라이언스와 가속 프로그램 간의 전송 계층 접속을 확립하는 수단을 포함한다. 어플라이언스는 가속 프로그램에 의한 이용을 위해 하나 이상의 전송 계층 접속들의 풀을 제공할 수 있다. 또한, 어플라이언스는 하나 이상의 전송 계층 접속들의 풀을 통해 가속 프로그램과 서버 간의 다중 통신을 멀티플렉싱할 수 있다.
또 다른 양태에 있어서, 클라이언트측 가속 기능성은, 원격 액세스 애플리케이션의 전달 및 통신의 성능을 개선하기 위한 전송 계층 접속 버퍼링 기술을 수행하는 가속 프로그램에 의해 제공된다. 가속 프로그램은, 클라이언트로부터 서버로의 전송 계층 접속을 확립하고, 서버로부터 클라이언트에 의해 수신된 응답 소모율 및 클라이언트에 의해 서버로 전송된 요구 생성률 간의 차이 결정에 기초하여 클라이언트의 요구를 버퍼링한다. 이처럼, 가속 프로그램은, 클라이언트의 응답 소모율이 요구 의뢰율 내에 속하면 클라이언트의 전송을 조절할 수 있다.
일 양태에 있어서, 본 발명은, 서버로부터 수신된 응답 소모율 및 서버에 전송된 요구의 생성률 간의 차이를 클라이언트 상에서 관리하는 방법에 관한 것이다. 이 방법은, 클라이언트 상의 가속 프로그램에 의해 서버에 액세스하는 애플리케이션의 요구를 간섭하는 단계를 포함하고, 가속 프로그램은 애플리케이션을 대신하여 전송 계층 접속을 통해 서버와 통신한다. 또한, 이 방법은, 클라이언트에 의해 전송된 요구의 생성률과 수신된 서버 응답의 소모율 간의 차이가 소정의 임계값 내에 있음을 가속 프로그램에 의해 결정하는 단계와, 클라이언트의 메모리 소자에 요구를 가속 프로그램에 의해 저장하는 단계를 포함한다. 일 실시예에서, 소모율은 생성률보다 적다.
본 발명의 일부 실시예들에서, 이 방법은, 클라이언트에 의한 생성률 또는 소모율의 변경에 기초하여 저장된 요구를 전송하는 것을 가속 프로그램에 의해 결정하는 단계를 포함한다. 다른 실시예들에서, 이 방법은, 서버와의 접속을 확립하는 클라이언트의 요구시 가속 프로그램을 어플라이언스에 의해 클라이언트에게 전송하는 단계를 포함한다. 일 실시예에서, 가속 프로그램의 수신시, 이 방법은 가속 프로그램을 클라이언트에 의해 자동 설치 및 실행한다. 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함할 수 있다. 또 다른 일 실시예에서, 가속 프로그램은 메모리 소자에 저장된 요구를 압축한다.
일 실시예에서, 본 발명의 방법은, 클라이언트 상의 애플리케이션에 의한 서버 액세스를 위해 하나 이상의 전송 계층 접속들의 풀을 가속 프로그램에 의해 제공하는 단계를 포함한다. 다른 일 실시예에서, 이 방법은 가속 프로그램에 의해 전송 계층 접속을 통해 클라이언트 상의 다중 애플리케이션으로부터의 요구를 멀티플렉싱하는 단계도 포함한다.
다른 양태에 있어서, 본 발명은 클라이언트 상에서 서버로부터 수신한 응답의 소모율과 서버에 전송된 요구의 생성률 간의 차이를 관리하는 시스템에 관한 것이다. 시스템은, 클라이언트 상의 가속 프로그램에 의해 서버에 액세스하는 애플리케이션의 요구를 간섭하는 수단을 포함하고, 이 가속 프로그램은 전송 계층 접속을 통해 애플리케이션 대신에 서버와 통신한다. 또한, 이 시스템은, 가속 프로그램에 의해 수신된 서버 응답의 소모율과 클라이언트에 의해 전송된 요구의 생성률 간의 차이가 소정의 임계값 내에 있음을 결정하고, 가속 프로그램에 의해 클라이언트의 메모리 소자에 요구를 저장하는 수단을 포함한다. 일부 실시예들에서, 소모율은 생성률보다 적다.
일 실시예에서, 본 발명의 시스템은, 클라이언트에 의해 생성률 또는 소모율의 변경에 기초하여 저장된 요구를 전송하는 것을 가속 프로그램에 의해 결정하는 수단을 구비한다. 다른 일 실시예에서, 시스템은, 서버와의 접속을 확립하는 클라이언트의 요구시 가속 프로그램을 클라이언트에게 전송하기 위한 애플리케이션을 포함한다. 일부 실시예들에서, 클라이언트는 수신시 가속 프로그램을 자동 설치 및 실행한다. 일 실시예에서, 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함한다. 다른 일 실시예에서, 시스템은 메모리 소자에 저장된 요구를 가속 프로그램에 의해 압축하는 수단을 포함한다.
일부 실시예들에서, 본 발명의 가속 프로그램은 클라이언트 상의 애플리케이션에 의해 서버에 액세스하기 위한 하나 이상의 전송 계층 접속들의 풀을 제공한다. 다른 실시예들에서, 가속 프로그램은 전송 계층 접속을 통해 클라이언트 상의 다중 애플리케이션으로부터의 요구를 멀티플렉싱한다. 시스템의 일 실시예에서, 클라이언트는 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 또는 애플리케이션 계층에 투명하게 가속 프로그램을 실행한다. 다른 일 실시예에서, 클라이언트는 서버나 애플리케이션에 투명하게 가속 프로그램을 실행한다.
다른 양태에 있어서, 클라이언트측 가속 기능성은 집적되고도 효율적인 방식으로 다음에 따르는 가속 기술들을 수행하는 가속 프로그램에 의해 제공된다. 즉, 1) 멀티 프로토콜 압축, 2) 전송 제어 프로토콜 풀링, 3) 전송 제어 프로토콜 멀티플렉싱, 4) 전송 제어 프로토콜 버퍼링, 5) 캐싱이다. 가속 프로그램은 클라이언트와 서버 간의 전송 계층 접속을 확립하고, 전송 계층에서 네트워크 패킷을 간섭한다. 가속 프로그램은 커널 레벨 데이터 구조를 이용하여 전송 계층에서 간섭된 네트워크 패킷에 액세스하고, 후속하여 가속 프로그램의 실행시 또는 하나의 인터페이스 포인트에서 간섭된 네트워크 패킷 상의 가속 기술들 중 하나 이상을 수행한다.
일 양태에 있어서, 본 발명은, 클라이언트 상의 가속 프로그램에 의해 복수의 가속 기술들을 클라이언트와 서버 간의 전송 계층 접속을 통해 통신하는 네트워크 패킷에 실행하는 방법에 관한 것이다. 네트워크 패킷은 전송 계층에서 가속 프로그램에 의해 간섭된다. 이 방법은, 가속 프로그램과 서버 간의 전송 계층 접속을 클라이언트 상의 가속 프로그램에 의해 확립하는 단계와, 클라이언트와 서버 간에 통신되는 전송 계층에서 네트워크 패킷을 가속 프로그램에 의해 간섭하는 단계를 포함한다. 또한, 이 방법은 가속 프로그램에 의해 전송 계층에서 간섭된 네트워크 패킷에 대하여 복수의 가속 기술들을 수행하는 단계를 포함한다.
일 실시예에서, 방법은 가속 프로그램, 이동 계층 연결에 인터페이스에 의하여 제공된 수준의 데이터 구조를 통한 네트워크 한 묶음에 의해 접근하는 것을 포함한다. 이 방법은 전송 계층 접속에 대한 인터페이스에 의해 제공된 커널 레벨 데이터 구조를 통해 네트워크 패킷을 가속 프로그램에 의해 액세스하는 단계를 포함한다. 또한, 이 방법은 가속 프로그램에 의해 네트워크 패킷을 서버에 통신하는 단계를 포함할 수 있다. 가속 프로그램은 간섭된 전송 계층 네트워크 패킷에 대하여 다음에 따르는 기술들 중 하나를 클라이언트 상에서 수행할 수 있다. 즉, 1) 압축, 2) 압축해제, 3) 전송 제어 프로토콜 접속 풀링, 4) 전송 제어 프로토콜 접속 멀티플렉싱, 5) 전송 제어 프로토콜 버퍼링, 6) 캐싱이다. 또 다른 일 실시예에서, 이 방법은 네트워크 패킷의 일부를 가속 프로그램에 의해 암호화 또는 복호화하는 단계를 포함한다. 일부 실시예들에서, 본 발명의 방법은 가속 프로그램에 의해 가상 사설 네트워크 접속을 서버에 제공하는 단계를 포함한다. 또 다른 일 실시예에서, 이 방법은 클라이언트의 운영 시스템의 사용자 모드 또는 커널 모드에서 복수의 가속 기술들을 가속 프로그램에 의해 실행하는 단계를 포함한다.
본 발명의 일부 실시예들에서, 이 방법은, 가속 프로그램의 실행가능 명령들의 일부에서 복수의 서로 후속하는 가속 기술들을 가속 프로그램에 의해 수행하는 단계를 포함한다. 다른 실시예들에서, 이 방법은 가속 프로그램의 실행가능 명령들의 하나의 인터페이스 포인트에서 서로 후속하는 복수의 가속 기술들을 가속 프로그램에 의해 수행하는 단계를 포함한다. 또 다른 일 실시예에서, 본 발명의 방법은 가속 프로그램의 실행가능 명령들의 실행 인스턴스 동안 가속 프로그램에 의해 서로 후속하는 복수의 가속 기술들을 수행하는 단계를 포함한다. 일부 실시예들에서, 커널 레벨 데이터 구조는 네트워크 패킷의 하나 이상의 애플리케이션 레벨 프로토콜 페이로드에 액세스를 제공한다.
다른 양태에 있어서, 본 발명은 클라이언트 상의 가속 프로그램에 의해 클라이언트와 서버 간의 전송 계층 접속을 통해 통신되는 네트워크 패킷에 대하여 복수의 가속 기술들을 실행하는 시스템에 관한 것이다. 네트워크 패킷은 전송 계층에서 가속 프로그램에 의해 간섭된다. 시스템은, 가속 프로그램과 서버 간의 전송 계층 접속을 클라이언트 상의 가속 프로그램에 의해 확립하고, 전송 계층에서 클라이언트와 서버 간에 통신되는 네트워크 패킷을 가속 프로그램에 의해 간섭하는 수단을 포함한다. 또한, 시스템은 전송 계층에서 간섭된 네트워크 패킷에 대하여 복수의 가속 기술들을 가속 프로그램에 의해 수행하는 수단을 포함한다.
본 발명의 시스템의 일 실시예에서, 가속 프로그램은 전송 계층 접속에 대하여 애플리케이션 프로그래밍 인터페이스를 호출함으로써 커널 레벨 데이터 구조를 얻는다. 일 실시예에서, 가속 프로그램은 네트워크 패킷을 서버에 통신한다. 일부 실시예들에서, 복수의 가속 기술들은 1) 압축, 2) 압축해제 3) 전송 제어 프로토콜 접속 풀링 4) 전송 제어 프로토콜 접속 멀티플렉싱 5) 전송 제어 프로토콜 버퍼링 6) 캐싱 중 적어도 하나를 포함한다. 또 다른 일 실시예에서, 가속 프로그램은 네트워크 패킷의 일부를 암호화 또는 복호화한다. 일부 실시예들에서, 가속 프로그램은 가상 사설 네트워크 접속을 서버에 제공한다. 또 다른 일 실시예에서, 가속 프로그램은 클라이언트의 운영 시스템의 사용자 모드 또는 커널 모드에서 동작한다.
일부 실시예들에서, 본 발명의 가속 프로그램은 서로 후속하는 복수의 가속 기술들을 각각 수행하는 실행가능한 명령들을 포함한다. 또 다른 일 실시예에서, 가속 프로그램은 서로 후속하는 복수의 가속 기술들이 수행되는 하나의 인터페이스 포인트를 포함한다. 다른 실시예들에서, 가속 프로그램은 복수의 가속 기술들이 서로 후속하여 수행되는 실행 인스턴스를 갖는 실행가능 명령들을 포함한다. 일 실시예에서, 가속 프로그램은 커널 레벨 데이터 구조를 통해 전송 계층에서 네트워크 패킷의 하나 이상의 애플리케이션 레벨 프로토콜 페이로드에 대한 액세스를 얻는다.
다른 양태에서, 본 발명은 서버와의 클라이언트의 통신을 클라이언트 상에서 동적으로 방향변경(redirecting)하여 이러한 통신용으로 이용할 수 없는 것으로 결정된 중개자를 우회하는 시스템 및 방법에 관한 것이다. 클라이언트 상의 가속 프로그램은 클라이언트와 서버 간의 전송 계층 접속을 확립하고, 서버에 대한 클라이언트의 전송 계층 접속을 간섭한다. 전송 계층 접속은 게이트웨이, 프록시, 또는 어플라이언스와 같은 중개자를 통해 확립될 수 있다. 클라이언트측 가속 프로그램이 서버에 대하여 클라이언트에 의해 중개자를 이용할 수 없다고 결정하면, 가속 프로그램은 중개자를 우회하기 위해 서버에 대한 제2 전송 계층 접속을 자동으로 확립한다. 이후, 가속 프로그램은 클라이언트의 간섭된 통신을 제2 전송 계층 접속을 통해 서버로 전송한다. 가속 프로그램은 클라이언트의 애플리케이션 또는 임의의 사용자에 대하여 투명하게 클라이언트의 간섭된 통신을 서버로 자동으로 방향변경할 수 있다.
일 양태에 있어서, 본 발명은 중개자가 서버에 대하여 클라이언트에 의해 통신하는 데 이용될 수 없다고 결정시 클라이언트 상에서 서버에 대한 클라이언트의 통신을 방향변경하여 중개자를 우회하는 방법에 관한 것이다. 이 방법은, 클라이언트 상의 가속 프로그램에 의해 중개자를 통해 클라이언트와 서버 간의 전송 계층 접속을 확립하는 단계와, 전송 계층 접속을 통해 클라이언트에 의해 서버와 통신하는 데 중개자를 이용할 수 없다는 것을 가속 프로그램에 의해 결정하는 단계를 포함한다. 또한, 이 방법은, 클라이언트로부터 서버로의 통신을 가속 프로그램에 의해 간섭하는 단계와, 가속 프로그램과 서버 간의 제2 전송 계층 접속을 가속 프로그램에 의해 확립하여 중개자를 우회하는 단계를 포함한다. 일 실시예에서, 제2 전송 계층 접속은 서버와 직접 확립된다. 또 다른 일 실시예에서, 제2 전송 계층 접속은 제2 중개자를 통해 서버와 확립된다. 중개자 및 제2 중개자는 캐시, 게이트웨이, 방화벽, 서버, 프록시, 라우터, 스위치, 또는 브리지를 포함할 수 있다.
일 실시예에서, 본 발명의 방법은 가속 프로그램에 의해 제2 전송 계층 접속을 통해 서버로의 통신을 전송하는 단계를 포함한다. 일부 실시예들에서, 이 방법은, 클라이언트에 의해 중개자로부터 가속 프로그램의 수신시 가속 프로그램을 자동 설치 및 실행하는 단계를 포함한다. 일 실시예에서, 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함한다. 다른 실시예들에서, 이 방법은, 다음에 따르는 가속 기술들 중 하나를 통신에 대하여 가속 프로그램에 의해 수행하는 단계를 포함한다. 즉, 1) 압축, 2) 전송 제어 프로토콜 접속 풀링, 3) 전송 제어 프로토콜 접속 멀티플렉싱, 4) 전송 제어 프로토콜 버퍼링, 5) 캐싱이다. 또 다른 실시예들에서, 이 방법은 가속 프로그램에 의해 클라이언트와 서버 간의 통신을 암호화하는 단계를 포함한다.
다른 양태에 있어서, 본 발명은, 서버에 대한 클라이언트의 통신에 중개자를 이용할 수 없다고 결정시 클라이언트 상에서 서버에 대한 클라이언트의 통신을 방향변경하여 중개자를 우회하는 시스템에 관한 것이다. 이 시스템은, 중개자를 통해 클라이언트와 서버 간의 전송 계층 접속을 가속 프로그램에 의해 확립하고, 전송 계층 접속을 통해 서버에 대한 클라이언트의 통신에 중개자를 이용할 수 없다고 가속 프로그램에 의해 결정하는 수단을 포함한다. 또한, 이 시스템은 클라이언트로부터 서버로의 통신을 가속 프로그램에 의해 간섭하고, 가속 프로그램과 서버 간의 제2 전송 계층 접속을 가속 프로그램에 의해 확립하여 중개자를 우회하는 수단을 포함한다. 일 실시예에서, 이 시스템은 서버와의 직접적인 제2 전송 계층 접속을 확립한다. 또 다른 일 실시예에서, 시스템은 제2 중개자를 통해 서버와의 제2 전송 계층 접속을 확립한다. 중개자 및 제2 중개자는 캐시, 게이트웨이, 방화벽, 서버, 프록시, 라우터, 스위치, 또는 브리지를 포함한다.
본 발명의 시스템의 일 실시예에서, 가속 프로그램은 제2 전송 계층 접속을 통해 서버에 통신을 전송한다. 또 다른 일 실시예에서, 시스템은 중개자로부터 가속 프로그램의 수신시 가속 프로그램을 클라이언트에 의해 자동 설치 및 실행하는 수단을 포함한다. 일부 실시예들에서, 가속 프로그램은 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함한다. 다른 실시예들에서, 시스템은 다음에 따르는 가속 기술들 중 하나를 통신에 실행하는 가속 프로그램을 포함한다. 즉, 1) 압축, 2) 전송 제어 프로토콜 접속 풀링, 3) 전송 제어 프로토콜 접속 멀티플렉싱, 4) 전송 제어 프로토콜 버퍼링, 5) 캐싱이다. 본 발명의 가속 프로그램은 또한 클라이언트와 서버 간의 통신을 암호화할 수 있다.
본 발명의 다양일 실시예들의 상세한 기술은 이하의 첨부 도면 및 설명에 기재되어 있다.
본 발명의 상술한 목적, 양태, 특성, 이점 및 다른 목적, 양태, 특성, 이점은 첨부 도면과 함께 다음에 따르는 설명을 참조함으로써 명백해질 것이며 더 이해될 것이다.
도 1a 및 도 1b는 본 발명의 예시적인 실시예를 실시하기 위한 컴퓨팅 장치의 실시예의 블록도이다.
도 2a는 본 발명의 클라이언트측 가속 프로그램의 일 실시예의 블록도이다.
도 2b는 서버를 이용하는 클라이언트측 가속 프로그램을 동작시키는 네트워크 환경의 일 실시예의 블록도이다.
도 2c는 서버와 통신하는 어플라이언스와 함께 클라이언트측 가속 프로그램을 동작시키기 위한 네트워크 환경의 다른 일 실시예의 블록도이다.
도 2d는 본 발명의 어플라이언스의 일 실시예의 블록도이다.
도 3a는 본 발명의 클라이언트측 가속 프로그램을 동적으로 제공하고, 자동 설치하고, 실행하기 위한 본 발명의 방법의 일 실시예의 단계도이다.
도 3b는 애플리케이션이 가속될 수 있음을 결정하기 위한 본 발명의 방법의 일 실시예의 단계도이다.
도 3c는 커널 레벨 데이터 구조를 이용하며 전송 계층에서의 간섭을 위한 가속 프로그램에 의한 복수의 가속 기술들을 수행하는 본 발명의 방법의 또 다른 일 실시예의 단계도이다.
도 4a는 제1 프로그램을 통해 클라이언트 상에 가속 프로그램을 자동 설치 및 실행하는 본 발명의 방법의 또 다른 일 실시예의 단계도이다.
도 4b는 가상 사설 네트워크 접속성을 제공하고 하나 이상의 가속 기술들을 수행하는 가속 프로그램 및 제1 프로그램을 위한 본 발명의 일 실시예의 방법의 단계도이다.
도 5는 클라이언트의 통신을 서버로 방향변경하여 통신을 서버로 전송하는 데 이용할 수 없다고 결정된 중개자를 우회하기 위한 본 발명의 방법의 일 실시예의 단계도이다.
도 6은 전송 제어 프로토콜 버퍼링의 클라이언트측 가속 기술을 수행하기 위한 본 발명의 방법의 일 실시예의 단계도이다.
도 7a는 전송 제어 프로토콜 접속 풀링의 클라이언트측 가속 기술을 수행하기 위한 본 발명의 방법의 일 실시예의 단계도이다.
도 7b는 본 발명의 일 실시예에 의해 제공되는 하나 이상의 전송 계층 접속을 통해 복수의 애플리케이션에 의해 수행되는 HTTP 트랜잭션의 일 예의 도면이다.
도 8은 전송 제어 프로토콜 멀티플렉싱의 클라이언트측 가속 기술을 수행하기 위한 본 발명의 방법의 일 실시예의 단계도이다.
도 9는 전송 계층 패킷의 콘텐츠 길이 식별자의 일 실시예의 도면이다.
도 10은 다중 청크들을 통해 전송된 메시지의 콘텐츠 길이 식별자의 다른 실시예를 도시하는 도면이다.
본 발명의 특징 및 이점은, 도면 전체에 걸쳐 유사 참조 문자가 대응 요소를 식별하는 첨부 도면과 함께 상세한 설명에 의해 명백해질 것이다. 도면에서, 유사 참조 번호는 일반적으로 동일하거나 기능상 유사하거나, 그리고/또는 구조적으로 유사한 요소들을 가리킨다.
본 발명의 예시적인 실시예들은 네트워크 환경에 클라이언트측 가속 기술들을 배치 및 실행하여 원격 액세스 애플리케이션과 같은 클라이언트와 서버 간의 통신의 성능을 개선하는 것이다. 예시적인 일 실시예에서, 본 발명은 클라이언트의 동작에 투명하고도 끊김이 없는 방식으로 클라이언트 상에 클라이언트측 가속 프로그램을 자동 설치하고 실행하는 것이다. 다른 예시적인 일 실시예에서, 본 발명은, 서버나 원격 애플리케이션에 대한 클라이언트의 액세스가 가속될 수 있다는 어플라이언스 장치의 결정시 어플라이언스 장치에 의해 클라이언트측 가속 프로그램을 클라이언트에 동적 제공하는 것이다. 또 다른 예시적인 일 실시예에서, 본 발명은 클라이언트에 대하여 다음에 따르는 가속 기술들 중 하나 이상을 수행하는 가속 프로그램에 관한 것이다. 즉, 1) 멀티 프로토콜 압축, 2) 전송 제어 프로토콜 풀링, 3) 전송 제어 프로토콜 멀티플렉싱, 4) 전송 제어 프로토콜 버퍼링, 5) 캐싱이다. 예시적인 일 실시예에서, 본 발명은 커널 레벨 데이터 구조를 이용하는 전송 계층에서 집적적이고 효율적인 방식으로 이러한 가속 기술들을 수행한다. 또 다른 예시적인 일 실시예에서, 클라이언트측 가속 프로그램은 프록시 방향변경 기술들을 수행하여 임의의 중개자들을 자동 우회하여 클라이언트의 액세스를 서버나 원격 액세스 애플리케이션에 연속 제공한다.
본 발명의 클라이언트측 가속 프로그램 및 기능성은, 임의의 유형 및 형태의 네트워크상에서 통신할 수 있으며 본 명세서에서 설명하는 본 발명의 동작을 수행할 수 있는, 컴퓨터,네트워크 장치, 또는 어플라이언스와 같은 임의의 유형 및 형태의 컴퓨팅 장치에 배치 및 실행될 수 있다. 도 1a 및 도 1b는 본 발명의 일 실시예를 실시하는 데 유용한 컴퓨팅 장치(100)의 블록도이다. 도 1a 및 도 1b에 도시한 바와 같이, 각 컴퓨팅 장치(100)는 중앙 처리 유닛(102), 및 메인 메모리 유닛(122)을 포함한다. 도 1a에 도시한 바와 같이, 전형적인 컴퓨팅 장치(100)는 가상 디스플레이 장치(124), 키보드(126) 및/또는 마우스와 같은 포인팅 장치(127)를 포함할 수 있다. 또한, 각 컴퓨팅 장치(100)는 (참조 번호 130인) 하나 이상의 입력/출력 장치(130a, 130b)와 같은 추가 옵션 소자들, 및 중앙 처리 유닛(1020과 통신하는 캐시 메모리(140)를 포함할 수 있다.
중앙 처리 유닛(102)은 메인 메모리 유닛(122)으로부터 페치되는 명령들을 응답하고 처리하는 임의의 로직 회로부이다. 많은 실시예들에서, 중앙 처리 유닛은 마이크로프로세서 유닛에 의해 제공되며, 예를 들면, 캘리포니아 마운틴 뷰 소재의 인텔 회사가 제조한 것, 일리노이즈 샴버그 소재의 모토롤라 회사가 제조한 것, 캘리포니아 산타 클라라 소재의 트랜스메타 회사가 제조한 것, 뉴욕 화이트 페인 소재의 IBM이 제조한 RS/600 프로세서, 또는 캘리포니아 서니베일 소재의 AMD가 제조한 것 등이 있다. 컴퓨팅 장치(100)는 이러한 프로세서들 중 임의의 것, 또는 본 명세서에서 설명하는 바와 같이 동작할 수 있는 다른 임의의 프로세서일 수 있다.
메인 메모리 유닛(122)은, 데이터를 저장하고 임의의 저장 위치가 마이크로프로세서(102)에 의해 직접 액세스될 수 있는 하나 이상의 메모리 칩일 수 있으며, 마이크로프로세서의 예로는, 정적 램(SRAM), 버서트 SRAM 또는 싱크버스트 SRAM(BSRAM), 동적 램(DRAM), 패스트 페이지 모드 DRAM (FPM DRAM), 향상된 DRAM (EDRAM), 확장된 데이터 출력 RAM (EDO RAM), 확장된 데이터 출력 DRAM (EDO DRAM), 버서트 확장된 데이터 출력 DRAM (BEDO DRAM), 향상된 DRAM (EDRAM), 동기 DRAM (SDRAM), JEDEC SRAM, PClOO SDRAM, 더블 데이터 레이트 SDRAM (DDR SDRAM), 향상된 SDRAM (ESDRAM), 싱크링크 DRAM (SLDRAM), 디렉트 램버스 DRAM (DRDRAM), 또는 강유전 RAM (FRAM). 메인 메모리(122)는 상술한 메모리 칩들 중 임의의 것, 또는 본 명세서에서 설명하는 바와 같이 동작할 수 있는 다른 임의의 이용가능한 메모리 칩들에 기초할 수 있다. 도 1a에 도시일 실시예에서, 프로세서(102)는 시스템 버스(150; 이하에서 더욱 상세히 설명함))를 통해 메인 메모리(204)와 통신한다. 도 1a는 메모리 포트(103)를 통해 프로세서가 메인 메모리(122)와 직접 통신하는 컴퓨팅 장치(100)의 일 실시예를 도시한다. 예를 들어, 도 1b에서, 메인 메모리(122)는 DRDRAM일 수 있다.
도 1b는 때때로 백사이드 버스라 칭하는 제2 버스를 통해 메인 프로세서(102)가 캐시 메모리(140)와 직접 통신하는 일 실시예를 도시한다. 다른 실시예들에서, 메인 프로세서(102)는 시스템 버스(150)를 이용하여 캐시 메모리(140)와 통신한다. 캐시 메모리(140)는 전형적으로 메인 메모리(122)보다 빠른 응답 시간을 갖고 전형적으로 SRAM, BSRAM, 또는 EDRAM 에 의해 제공된다.
도 1a에 도시된 일 실시예에서, 프로세서(102)는 로컬 시스템 버스(150)를 통해 다양한 I/O 장치(130)와 통신한다. 다양한 버스를 이용하여 중앙 처리 유닛(102)을 VESA VL 버스, ISA 버스, EISA 버스, 마이크로채널 아키텍처(MCA) 버스, PCI 버스, PCI-X 버스, PCI-Express 버스, 또는 NuBus를 비롯한 I/O 장치들 중 임의의 것에 접속할 수 있다. I/O 장치가 비디오 디스플레이(124)인 실시예에서, 프로세서(102)는 어드밴스 그래픽 포트(AGP)를 이용하여 디스플레이(124)와 통신할 수 있다. 도 1b는 메인 프로세서(102)가 하이퍼트랜스포트, 래피드 I/O, 또는 인피니밴드를 통해 I/O 장치(130b)와 직접 통신하는 컴퓨터(100)의 일 실시예를 도시한다. 또한, 도 1b는 로컬 버스 및 직접 통신이 혼합되는 일 실시예를 도시한다. 즉, 프로세서(102)가 로컬 인터커넥트 버스를 이용하여 I/O 장치(130a)와 통신하는 한편 I/O 장치(130b)와 직접 통신한다.
컴퓨팅 장치(100)는, 3.5인치, 5.25인치 디스크나 ZIP 디스크와 같은 플로리 디스를 수용하기 위한 플로피 디스크 드라이브, CD-ROM 드라이브, CD-R/W 드라이브, DVD-ROM 드라이브, 다양한 포맷의 테이프 드라이브, USB 장치, 본 발명에 관련된 임의의 가속 소프트웨어(120), 그 일부와 같은 소프트웨어 및 프로그램을 설치하는 데 적절한 하드 드라이브나 다른 임의의 장치 테이프 드라이브와 같은 임의의 적절한 설치 장치(116)를 지원할 수 있다.
컴퓨팅 장치(100)는, 운영 시스템 및 다른 관련 소프트웨어를 저장하기 위한 그리고 본 발명의 가속 프로그램(120)에 관련된 임의의 프로그램과 같은 애플리케이션 소프트웨어 프로그램을 저장하기 위한 하나 이상의 하드 디스크 드라이브 또 는 독립 디스크들의 리던던트 어레이와 같은 저장 장치(128)를 더 포함할 수 있다. 선택 사항으로서, 설치 장치들(116) 중 임의의 것도 저장 장치(128)로서 이용될 수 있다. 또한, 운영 시스템 및 소프트웨어는, 예를 들어, 부팅가능 매체, KNOPPIX(R)와 같은 부팅가능 CD, knoppix.net로부터의 GNU/리눅스 배포물로서 이용가능한 GNU/리눅스를 위한 부팅가능 CD로부터 실행될 수 있다.
게다가, 컴퓨팅 장치(100)는, 표준 전화 라인들, LAN이나 WAN 링크(예를 들어, 802.11, T1, T3, 56kb, X.25), 광대역 접속(예를 들어, ISDN, 프레임 릴레이, ATM), 무선 접속, 또는 상기한바 모두 또는 임의의 것의 일부 조합을 비롯한 다양한 접속(그러나, 이러한 예로 한정되지 않음)을 통해 LAN, WAN 또는 인터넷에 인터페이싱하는 네트워크 인터페이스(118)를 포함할 수 있다. 네트워크 인터페이스(118)는, 컴퓨팅 장치(100)를 본 명세서에서 설명하는 동작들을 통신하고 수행할 수 있는 임의의 유형의 네트워크에 인터페이싱하는 데 적절한 내장 네트워크 어댑터, 네트워크 인터페이스 카드, PCMCIA 네트워크 카드, 카드 버스 네트워크 어댑터, 무선 네트워크 어댑터, USB 네트워크 어댑터, 모뎀 또는 다른 임의의 장치를 포함할 수 있다.
다양한 I/O 장치(130a 내지 130n)가 컴퓨팅 장치(100) 내에 존재할 수 있다. 입력 장치들은 키보드, 마우스, 트랙패드, 트랙볼, 마이크로폰, 드로잉 태블릿을 포함한다. 출력 장치들은 비디오 디스플레이, 스피커, 잉크젯 프린터, 레이저 프린터, 및 승화형 프린터를 포함한다. I/O 장치들은 도 1a에 도시한 바와 같이 I/O 컨트롤러(123)에 의해 제어될 수 있다. I/O 컨트롤러는 키보드(126) 및 예를 들어 마우스나 광학 펜과 같은 포인팅 장치(127)와 같은 하나 이상의 I/O 장치를 제어할 수 있다. 게다가, I/O 장치는 컴퓨팅 장치(100)를 위한 또한 저장 장치(128) 및/또는 설치 매체(116)를 포함할 수 있다. 다른 실시예들에서, 컴퓨팅 장치(100)는 USB 접속을 제공하여 캘리포니아 로스 알라미토스 소재의 Twintech Industry에 의해 제조된 USB 플래시 드라이브 라인 장치와 같은 핸드헬드 USB 저장 장치를 수용할 수 있다.
일부 실시예들에서, 컴퓨팅 장치(100)는 다중 디스플레이 장치(124a 내지 124n)를 포함하거나 이에 접속될 수 있고, 이들 각각은 동일하거나 상이한 유형 및/또는 형태를 가질 수 있다. 이처럼, I/I 장치들(130a 내지 130n) 중 임의의 것 및/또는 I/O 컨트롤러(123)는, 컴퓨팅 장치(100)에 의해 다중 디스플레이 장치(124a 내지 124n)의 이용 및 접속을 지원, 인에이블, 또는 제공하기 위한 적절한 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합의 임의의 유형 및/또는 형태를 포함할 수 있다. 예를 들어, 컴퓨팅 장치(100)는, 디스플레이 장치(124a 내지 124n)를 인터페이싱, 통신, 접속 또는 이용하는 데 비디오 어댑터, 비디오 카드, 및/또는 라이브러리의 임의의 유형 및/또는 형태를 포함할 수 있다. 일 실시예에서, 비디오 어댑터는 다중 디스플레이 장치(124a 내지 124n)를 인터페이싱하는 데 다중 커넥터를 포함할 수 있다. 다른 실시예들에서, 컴퓨팅 장치(100)는 디스플레이 장치(124a 내지 124n) 중 하나 이상에 접속된 다중 비디오 어댑터를 포함할 수 있다. 일부 실시예들에서, 컴퓨팅 장치(100)의 운영 시스템의 임의의 일부는 다중 디스플레이(124a 내지 124n)를 이용하도록 구성될 수 있다. 다른 실시예들에 서, 디스플레이 장치들(124a 내지 124n) 중 하나 이상은, 예를 들어 네트워크를 통해 컴퓨팅 장치(100)에 접속된 컴퓨팅 장치(100a, 100b)와 같은 하나 이상의 다른 컴퓨팅 장치에 의해 제공될 수 있다. 이러일 실시예들은 다른 컴퓨터의 디스플레이 장치를 컴퓨팅 장치(100)를 위한 제2 디스플레이 장치(124a)로서 이용하도록 설계되고 구축된 임의의 유형의 소프트웨어를 포함할 수 있다. 당업자라면 컴퓨팅 장치(100)를 다중 디스플레이 장치(124a 내지 124n)를 갖도록 구성할 수 있는 다양한 방식 및 실시예를 인식하고 이해할 것이다.
다른 실시예들에서, I/O 장치(130)는, USB 버스, Apple Desktop 버스, RS-232 직렬 접속, SCSI 버스, FireWire 버스, FireWire 800 버스, 이더넷 버스, AppleTalk 버스, 기가비트 이더넷 버스, 비동기 전송 모드 버스, HIPPI 버스, 수퍼 HIPPI 버스, SerialPlus 버스, SCI/LAMP 버스, FibreChannel 버스, 또는 직렬 부착 스몰 컴퓨터 시스템 인터페이스 버스와 같은 외부 통신 버스와 시스템 버스(150) 간의 브리지(170)일 수 있다.
도 1a 및 도 1b에 도시한 종류의 컴퓨팅 장치(100)는, 전형적으로 운영 시스템의 제어 하에 동작하고, 이 운영 시스템은 시스템 자원에 대한 액세스 및 태스크의 스케쥴링을 제어한다. 컴퓨팅 장치(100)는, 마이크로소프트사의 윈도우 운영 시스템의 버전들중 임의의 것, 유닉스 및 리눅스 운영 시스템들의 상이한 배포물들, 매킨토시 컴퓨터용 Mac OS(R)의 임의의 버전, 임의의 내장형 운영 시스템, 임의의 실시간 운영 시스템, 임의의 오픈 소스 운영 시스템, 임의의 사유 운영 시스템, 이동 컴퓨팅 장치를 위한 임의의 운영 시스템, 또는 컴퓨팅 장치에서 실행될 수 있고 본 명세서에서 설명하는 동작들을 수행할 수 있는 다른 임의의 운영 시스템처럼 임의의 운영 시스템을 실행할 수 있다. 전형적인 운영 시스템으로는, 모두 워싱턴 레드몬드 소재의 마이크로소프트사에 의해 제조된 WINDOWS 3.x, WINDOWS 95, WINDOWS 98, WINDOWS 2000, WINDOWS NT 3.51, WINDOWS NT 4.0, WINDOWS CE, and WINDOWS XP, 캘리포니아 쿠퍼티노 소재의 Apple Computer가 제조한 MacOS, 뉴욕 아르몽크 소재의 IBM이 제조한 OS/2, 유타 솔트 레이트 시티소재의 Caldera Corp.가 제조한 무료로 이용가능한 운영 시스템인 Linux, 또는 이들 중에서 유닉스 운영 시스템의 임의의 유형 및/또는 형태를 포함한다.
다른 실시예들에서, 컴퓨팅 장치(100)는 상이한 프로세서들, 운영 시스템들, 및 컴퓨팅 장치와 부합되는 입력 장치들을 구비할 수 있다. 예를 들어, 일 실시예에서, 컴퓨터(100)는 Palm, Inc.가 제조한 Treo 180, 270, 300, 600, 또는 650 스마트 폰이다. 본 실시예에서, Treo 스마트 폰은 PalmOS 운영 시스템의 제어 하에 동작하며 파이브웨이 네비게이터 장치뿐만 아니라 스타일러스 입력 장치를 포함한다. 게다가, 컴퓨팅 장치(100)는 임의의 워크스테이션, 데스크톱 컴퓨터, 랩탑이나 노트북 컴퓨터, 서버, 핸드헬드 컴퓨터, 이동 전화, 임의의 다른 컴퓨터, 또는 통신할 수 있고 충분할 프로세서 파워 및 메모리 용량을 갖추어 본 명세서에서 설명하는 동작들을 수행할 수 있는 다른 형태의 컴퓨팅이나 원격통신 장치일 수 있다.
일 양태에 있어서, 본 발명은, 서버에 의해 제공되는 애플리케이션에 액세스하는 것처럼 서버에 대한 액세스 및/또는 클라이언트의 통신을 개선하거나, 가속, 향상하는 하나 이상의 가속 기술들을 수행하는 클라이언트측 가속 프로그램에 관한 것이다. 도 2a를 참조하면, 본 발명의 가속 프로그램(120)을 갖는 클라이언트(205)가 도시되어 있다. 간략히 참조해 보면, 클라이언트(205)는, 커널 모드(202)와 사용자 모드(202)를 갖춘 운영 시스템, 하나 이상의 층(210a 내지 210b)을 갖춘 네트워크 스택(210)을 구비하는 컴퓨팅 장치(100) 상에서 동작한다. 클라이언트(205)는 하나 이상의 애플리케이션(220a 내지 220n)을 설치 및/또는 실행할 수 있다. 일부 실시예들에서, 하나 이상의 애플리케이션(220a 내지 220n)은 네트워크 스택(210)을 통해 네트워크와 통신할 수 있다. 또한, 애플리케이션들(220N) 중 하나는, 예를 들어, 일부 실시예들에서 가속 프로그램(120)을 설치 및/또는 실행하는 데 이용될 수 있는 프로그램인 제1 프로그램(222)을 포함할 수 있다.
클라이언트(205)의 네트워크 스택(210)은, 네트워크에 접속을 제공하고 네트워크와의 통신을 위해 소프트웨어, 또는 하드웨어,또는 이들의 조합의 임의의 유형 및 형태를 포함할 수 있다. 일 실시예에서, 네트워크 스택(210)은 네트워크 프로토콜 슈트(suite)를 위한 소프트웨어 구현예를 포함한다. 네트워크 스택(210)은, 당업자가 인식하고 이해하고 있듯이 오픈 시스템 인터접속(OSI) 통신 모델의 임의의 네트워크 계층과 같은 하나 이상의 네트워크 계층을 포함할 수 있다. 이처럼, 네트워크 스택(210)은 OSI 모델의 다음에 따르는 계층들 중 임의의 것을 위한 프로토콜들의 임의의 유형 및 형태를 포함할 수 있다. 즉, 1) 물리적 링크 계층, 2) 데이터 링크 계층, 3) 네트워크 계층, 4) 전송 계층, 5) 세션 계층, 6) 프리젠테이션 계층, 7) 애플리케이션 계층이다. 일 실시예에서, 네트워크 스택(310)은 일반 적으로 TCP/IP라 칭하는 인터넷 프로토콜(IP)의 네트워크 계층 프로토콜에 대하여 전송 제어 프로토콜(TCP)을 포함할 수 있다. 일부 실시예들에서, TCP/IP 프로토콜은 이더넷 프로토콜로 전달될 수 있으며, 이것은 IEEE 802.3에 의해 커버되는 프로토콜처럼 IEEE WAN 또는 LAN 프로토콜의 패밀리 중 임의의 것을 포함할 수 있다. 일부 실시예들에서, 네트워크 스택(210)은 IEEE 802.11 및/또는 이동 인터넷 프로토콜과 같은 무선 프로토콜의 임의의 유형 및 형태를 포함할 수 있다.
TCP/IP 기반 네트워크의 관점에서 볼 때, 메시징 애플리케이션 프로그래밍 인터페이스(MAPI) (email), 파일 전달 프로토콜(FTP), 하이퍼텍스트 전달 프로토콜(HTTP), 공통 인터넷 파일 시스템(CIFS) 프로토콜(파일 전달), 독립 컴퓨팅 아키텍처(ICA) 프로토콜, 원격 데스크톱 프로토콜(RDP), 무선 애플리케이션 프로토콜(WAP), 모바일 IP 프로토콜, 및 보이스 오버 IP (VoIP) 프로토콜을 비롯하여 임의의 TCP/IP 기반 프로토콜을 이용할 수 있다. 또 다른 일 실시예에서, 네트워크 스택(210)은, 예를 들어, 트랜잭션 TCP(T/TCP), 선택 승인 TCP(TCP-SACK), 넓은 윈도우를 갖는 TCP(TCP-LW), TCP-베가스 프로토콜과 같은 컨제스션 예측 프로토콜, TCP 스푸핑(spoofing) 프로토콜처럼, 수정 전송 제어 프로토콜과 같은 전송 제어 프로토콜의 임의의 유형 및 형태를 포함할 수 있다. 다른 실시예들에서, IP에 대한 UDP와 같은 사용자 데이터그램 프로토콜(UDP)의 임의의 유형 및 형태를, 예를 들어 음성 통신이나 실시간 데이터 통신을 위해 네트워크 스택(210)에 의해 이용할 수 있다.
게다가, 네트워크 스택(310)은 TCP 드라이버나 네트워크 계층 드라이버와 같 이 하나 이상의 계층을 지원하는 하나 이상의 네트워크 드라이버를 포함할 수 있다. 네트워크 드라이버는 컴퓨팅 장치(100)의 운영 시스템의 일부, 또는 임의의 네트워크 인터페이스의 일부, 또는 컴퓨팅 장치(100)의 다른 네트워크 액세스 구성요소로서 포함될 수 있다. 일부 실시예들에서, 네트워크 스택(210)의 네트워크 드라이버들 중 임의의 것을, 본 명세서에서 설명하는 본 발명의 기술들 중 임의의 것을 지원하는 네트워크 스택(210)의 맞춤형이나 수정된 부분을 제공하도록 맞춤화, 수정, 또는 적응할 수 있다. 다른 실시예들에서, 가속 프로그램(120)은 설치된 네트워크 스택(210)과 함께 또는 연동하도록 또는 클라이언트(205)의 운영 시스템에 의해 제공되도록 설계되고 구축된다.
네트워크 스택(210)은, 클라이언트(205)의 네트워크 통신에 관련된 임의의 정보 및 데이터를 수신하고, 얻고, 제공하거나, 액세스하기 위한 인터페이스들 중 임의의 유형 및 형태를 포함할 수 있다. 일 실시예에서, 네트워크 스택(210)에 대한 인터페이스는 가속 프로그래밍 인터페이스(API)를 포함한다. 또한, 인터페이스는 임의의 함수 호, 후킹 또는 필터링 메커니즘, 이벤트나 콜백 메커니즘, 또는 임의의 유형의 인터페이싱 기술을 포함할 수 있다. 인터페이스를 통한 네트워크 스택(210)은 네트워크 스택(210)의 동작이나 기능성에 관련된 오브젝트와 같은 임의의 유형 및 형태의 데이터 구조를 수신하거나 제공할 수 있다. 예를 들어, 데이터 구조는, 하나의 네트워크 패킷 또는 하나 이상의 네트워크 패킷에 관련된 정보 및 데이터를 포함할 수 있다. 일부 실시예들에서, 데이터 구조는, 전송 계층의 네트워크 패킷처럼 네트워크 스택(210)의 프로토콜 계층에서 처리되는 네트워크 패킷의 일부를 포함할 수 있다. 일부 실시예들에서는, 데이터 구조(225)가 커널 레벨 데이터 구조를 포함하는 한편, 다른 실시예들에서는, 데이터 구조(225)가 사용자 모드 데이터 구조를 포함한다. 커널 레벨 데이터 구조는, 커널 모드(202)에서 실행되는 다른 소프트웨어나 네트워크 드라이버, 또는 커널 모드(202)에서 동작하는 네트워크 스택(210)의 일부에 관련되거나 얻은 데이터 구조, 또는 운영 시스템의 커널 모드에서 동작하거나 실행되는 서비스, 프로세스, 태스크, 쓰레드나 다른 실행가능 명령에 의해 수신되거나 얻은 임의의 데이터 구조를 포함할 수 있다.
또한, 네트워크 스택(210)의 일부분들은 커널 모드(202)에서 예를 들어 데이터 링크 또는 네트워크 계층을 실행하거나 동작할 수 있는 한편, 다른 일부분들은 사용자 모드(203)에서 네트워크 스택(210)의 애플리케이션 계층을 동작하거나 실행한다. 예를 들어, 네트워크 스택의 제1 일부분(210a)은 사용자 모드 액세스를 네트워크 스택(210)에 애플리케이션(220a 내지 220n)에 제공하는 한편 네트워크 스택(210)의 제2 일부분(210a)은 액세스를 네트워크에 제공할 수 있다. 일부 실시예들에서, 네트워크 스택의 제1 일부분(210a)은 계층들(5 내지 7) 중 임의의 것처럼 네트워크 스택(210)의 하나 이상의 상위 계층을 포함할 수 있다. 다른 실시예들에서, 네트워크 스택(210)의 제2 일부분(210b)은 계층들(1 내지 4) 중 임의의 것처럼 하나 이상의 하위계층을 포함할 수 있다. 네트워크 스택(210)의 제1 일부분(210a) 및 제2 일부분(210b)의 각각은, 사용자 모드(203), 커널 모드(202)에서 임의의 하나 이상의 네트워크 계층에서 네트워크 스택(210)의 임의의 일부분, 또는 이들의 조합, 또는 사용자 모드(203) 및 커널 모드(202)에 대한 인터페이스 포인트의 임의 의 일부분 또는 네트워크 계층에 대한 인터페이스 포인트 혹은 네트워크 계층의 임의의 일부분을 포함할 수 있다.
본 발명의 가속 프로그램(120)은, 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 임의의 조합을 포함할 수 있다. 일부 실시예들에서, 가속 프로그램(120)은, 본 명세서에서 설명하는 바와 같이 본 발명의 동작 및 기능성을 제공하거나 실행하도록 구축되고 설계된 임의의 유형 및 형태의 실행가능 명령을 포함할 수 있다. 일부 실시예들에서, 가속 프로그램(120)은, 임의의 유형 및 형태의 애플리케이션, 프로그램, 서비스, 태스크, 또는 쓰레드를 포함할 수 있다. 일 실시예에서, 가속 프로그램(120)은 네트워크 스택(210)과 인터페이싱 및 동작하도록 구축되고 설계된 네트워크 드라이버와 같은 드라이버를 포함할 수 있다. 가속 프로그램(120)의 실행가능 명령의 로직, 함수, 및/또는 동작은, 본 발명의 다음에 따라는 가속 기술들 중 하나 이상을 수행할 수 있다. 즉, 1) 멀티 프로토콜 압축(238), 2) 전송 제어 프로토콜 풀링(224), 3) 전송 제어 프로토콜 멀티플렉싱(226), 4) 전송 제어 프로토콜 버퍼링(228), 5) 캐시 매니저를 통한 캐싱(232)이며, 이들을 이하 더 상세히 설명한다. 또한, 가속 프로그램(120)은 클라이언트(205)에 의해 송수신되는 임의의 통신의 암호화(234) 및/또는 복호화를 수행할 수 있다. 일부 실시예들에서, 또한, 가속 프로그램(120)은 클라이언트(205)와 서버와 같은 다른 컴퓨터 장치(100) 간의 터널링을 수행한다. 다른 실시예들에서, 가속 프로그램(120)은 가상 사설 네트워크 접속을 서버에 제공한다.
일부 실시예들에서, 가속 프로그램(120)은 전송 계층에서처럼 네트워크 스 택(210)의 하나 이상의 계층에서 동작한다. 일 실시예에서, 가속 프로그램(120)은 필터 드라이버, 후킹 메커니즘, 또는 전송 드라이버 인터페이스(TDI)를 통해서처럼 네트워크 스택의 전송 계층에 인터페이싱하는 임의의 유형 및 형태의 적절한 네트워크 드라이버 인터페이스를 포함한다. 일부 실시예들에서, 가속 프로그램(120)은 전송 계층과 같은 제1 프로토콜 계층 및 전송 프로토콜 계층 위의 임의의 계층, 예를 들어, 애플리케이션 프로토콜 계층과 같은 다른 프로토콜 계층에 인터페이싱한다. 일 실시예에서, 가속 프로그램(120)은 네트워크 드라이버 인터페이스 명세(NDIS)를 갖는 드라이버, 즉 NDIS 드라이버를 포함할 수 있다. 또 다른 일 실시예에서, 가속 프로그램(120)은 민(min) 필터 또는 미니 포트 드라이버를 포함할 수 있다. 일 실시예에서, 가속 프로그램(120), 또는 그 일부분이 커널 모드(202)에서 동작한다. 다른 일 실시예에서, 가속 프로그램(120), 또는 그 일부분이 사용자 모드(203)에서 동작한다. 일부 실시예들에서, 가속 프로그램(120)의 일부분이 커널 모드(202)에서 동작하는 한편 가속 프로그램(120)의 다른 일부분이 사용자 모드(203)에서 동작한다. 다른 실시예들에서, 가속 프로그램(120)은 사용자 모드(203)에서 동작하지만 예를 들어 커널 레벨 데이터 구조(225)를 얻도록 커널 모드 드라이버, 프로세스, 서비스, 태스크, 또는 운영 시스템의 일부분에 인터페이싱한다. 다른 실시예들에서, 가속 프로그램(120)은 애플리케이션(220a 내지 220n)과 같은 사용자 모드 애플리케이션 또는 프로그램이다.
가속 프로그램(120)은 네트워크 스택(210)의 다른 임의의 프로토콜 계층에 대하여 투명한 방식으로 프로토콜 계층에서 동작하거나 인터페이싱할 수 있다. 예 를 들어, 일 실시예에서, 가속 프로그램(120)은 전송 계층 아래의 네트워크 계층과 같은 임의의 프로토콜 계층에 대하여, 그리고 전송 계층 위의 세션 계층, 프리젠테이션 계층이나 애플리케이션 계층 프로토콜처럼 임의의 프로토콜 계층에 대하여 투명하게 네트워크 스택(210)의 전송 계층에서 동작하거나 인터페이싱한다. 이것은, 네트워크 스택(210의 다른 프로토콜 계층들이 필요시 본 발명의 가속 프로그램(120)을 이용하기 위한 수정 없이 동작할 수 있게 한다. 이처럼, 가속 프로그램(120)은 전송 계층에 인터페이싱하여 전송 계층에 의해 전달되는 임의의 프로토콜, 예를 들어, TCP/IP를 통한 임의의 애플리케이션 계층 프로토콜을 통해 제공되는 임의의 통신을 가속할 수 있다.
게다가, 가속 프로그램(120)은, 임의의 애플리케이션(220a 내지 220n), 클라이언트(205)의 사용자, 및 클라이언트(205)와 통신하는 서버와 같은 임의의 다른 컴퓨팅 장치에 대하여 투명한 방식으로 네트워크 스택(210)에서 동작하거나 인터페이싱할 수 있다. 가속 프로그램(120)은, 애플리케이션(220a 내지 220n)의 수정 없이 가속 프로그램(120)이 애플리케이션(220a 내지 220n)의 임의의 통신을 가속할 때 방식으로 클라이언트(205) 상에 설치 및/또는 실행될 수 있다. 일부 실시예들에서, 클라이언트(205) 또는 클라이언트(205)와 통신하는 컴퓨팅 장치의 사용자는, 가속 프로그램(120)의 존재, 실행, 또는 동작을 알지 못한다. 이처럼, 일부 실시예들에서, 가속 프로그램(120)은 애플리케이션(220a 내지 220n), 클라이언트(205)의 사용자, 서버와 같은 다른 컴퓨팅 장치, 또는 가속 프로그램(120)에 의해 인터페이싱되는 프로토콜 계층 위 및/또는 아래의 프로토콜 계층들 중 임의의 것에 대 하여 투명하게 설치, 실행, 및/또는 운영된다.
일부 실시예들에서, 가속 프로그램(120)은 가속 기술들(224, 226, 228, 232) 중 하나 이상을 집적 방식으로 수행한다. 일 실시예에서, 가속 프로그램(128)은, 네트워크 스택(210)의 전송 프로토콜 계층에서 통신을 간섭, 후크, 필터, 또는 수신하는 임의의 유형 및 형태의 메커니즘을 포함한다. 전송 계층에서 클라이언트(205)의 네트워크 패킷을 간섭하고 커널 레벨 데이터 구조(225)와 같은 데이터 구조를 통해 전송 계층에서 네트워크 스택(210)에 인터페이싱함으로써, 가속 프로그램(120)은 전송 제어 프로토콜(TCP) 버퍼링, TCP 풀링, TCP 멀티플렉싱과 같은 전송 계층 관련 가속 기술들을 네트워크 패킷에 대하여 수행할 수 있다. 또한, 가속 프로그램(120)은, 프로토콜들 중 임의의 것, 또는 전송 계층 프로토콜의 네트워크 패킷의 페이로드로서 전달되는 다중 프로토콜에 대하여 압축(225)을 수행할 수 있다.
일 실시예에서, 가속 프로그램(120)은, 예를 들어, 서버로부터의 응답 또는 클라이언트(205)로부터의 요구를 포함하는 네트워크 패킷처럼 하나 이상 네트워크 패킷 중 임의의 일부분에 액세스를 제공하는 커널 레벨 데이터 구조(225)를 이용한다. 일 실시예에서, 커널 레벨 데이터 구조는 가속 프로그램(120)에 의해 이용되어 원하는 가속 기술을 수행할 수 있다. 일 실시예에서, 가속 프로그램(120)은 커널 레벨 데이터 구조(225)를 이용할 때 커널 모드(202)에서 실행되고 있는 한편, 다른 일 실시예에서, 가속 프로그램(120)은 커널 레벨 데이터 구조(225)를 이용할 때 사용자 모드(203)에서 실행되고 있다. 일부 실시예들에서, 커널 레벨 데이터 구조는 제2 커널 레벨 데이터 구조 또는 임의의 원하는 사용자 레벨 데이터 구조에 복사되거나 전달될 수 있다. 가속 프로그램(120)이 일반적으로 사용자 모드(203)에서 동작하는 제1 일부분과 커널 모드(202)에서 동작하는 제2 일부분을 갖는 도 2a에 도시되어 있지만, 일부 실시예들에서는, 가속 프로그램(120)의 임의의 일부분이 사용자 모드(203) 또는 커널 모드(202)에서 실행될 수 있다. 일부 실시예들에서, 가속 프로그램(120)은 사용자 모드(203)에서만 동작할 수 있고, 다른 실시예에서, 가속 프로그램(120)은 커널 모드(202)에서만 동작할 수 있다.
게다가, 커널 레벨 데이터 구조(225)를 통해 네트워크 패킷에 대한 액세스를 얻거나 네트워크 스택(210)의 전송 계층에서 간섭함으로써, 가속 프로그램(120)은 단일 인터페이스 포인트에서 또는 가속 프로그램(120)의 임의의 실행가능 명령을 실행하는 단일 실행점 또는 시점에서 본 발명의 가속 기술들을 수행하거나 적용할 수 있다. 예를 들어, 일 실시예에서, 가속 프로그램(120)의 명령들의 세트나 함수에서, 예를 들어, 가속 기술을 수행하도록 구축되고 설계된 실행가능 명령들의 세트를 호출함으로써 가속 기술들을 실행할 수 있다. 일부 실시예들에서, 하나의 인터페이스 포인트, 실행 공간, 또는 명령들의 한 세트에서의 가속 프로그램(120)은, 1) 멀티 프로토콜 압축(238), 2) 전송 제어 프로토콜 풀링(224), 3) 전송 제어 프로토콜 멀티플렉싱(226), 4) 전송 제어 프로토콜 버퍼링(228), 5) 캐시 매니저를 통한 캐싱(232), 및 일부 실시예에서 암호화(234)를 제공하도록 구축되고 설계된 임의의 프로그램, 서비스, 프로세스, 태스크, 쓰레드, 또는 실행가능 명령에 대하여 하나 이상의 애플리케이션 프로그래밍 인터페이스(API)를 호출한다.
전송 계층과 같은 네트워크 스택(210)의 하나의 프로토콜 계층에서 또는 가속 프로그램(120)의 실행가능 명령들의 하나의 장소나 위치에서 복수개의 가속 기술들을 실행함으로써, 이러한 가속 기술들의 집적이 더욱 유효하고도 효과적으로 수행된다. 일 양태에 있어서, 사용되거나 필요한 메모리에서 데이터 구조들의 복사 또는 이용되는 데이터 구조들의 수가 줄어들 뿐만 아니라 프로세스들 간의 컨텍스트 스위치의 수가 저감될 수 있다. 또한, 예를 들어 가속 프로그램(120)의 실행가능 명령들의 세트에서 가속 기술들 중 임의의 것들 간의 통신의 동기화를 기밀하게 결합된 방식으로 더욱 유효하게 수행할 수 있다. 이처럼, 가속 기술들이 수행하는 가속 기술들의 순서에 관한 임의의 로직, 규칙, 기능성 또는 동작, 및 가속 기술들 간에 공유되거나 전달된 데이터 및 정보가 더욱 유효하게 수행될 수 있다. 가속 프로그램(120)은 전송 계층에서 TCP 패킷을 간섭하고, 커널 레벨 데이터 구조(225)를 통해 TCP 패킷의 페이로드를 얻고, 이후 원하는 순서로 원하는 가속 기술들을 수행한다. 예를 들어, 네트워크 패킷을 먼저 압축한 후 캐싱할 수 있다. 다른 예에서, 압축되고 캐싱된 데이터는 버퍼링된, 풀링된, 및/또는 멀티플렉싱된 TCP 접속을 통해 서버에 통신될 수 있다.
일부 실시예들에서, 도 2a를 참조하면, 제1 프로그램(222)을 이용하여 가속 프로그램(120)을 자동으로 조용하게 투명하게 또는 다른 방식으로 설치 및/또는 실행할 수 있다. 일 실시예에서, 제1 프로그램(222)은, 애플리케이션(220a 내지 220n)에 의해 로딩되고 실행되는 ActiveX 제어나 Java 제어 또는 스크립트와 같은 플러그인 구성요소를 포함한다. 예를 들어, 제1 프로그램은, 예를 들어 메모리 공 간이나 애플리케이션(220)의 컨텍스트에서 웹 브라우저 애플리케이션(220)에 의해 로딩되고 실행되는 ActiveX 제어를 포함한다. 다른 일 실시예에서, 제1 프로그램(222)은 브라우저와 같은 애플리케이션(220a 내지 220n)에 의해 로딩되고 실행되는 실행가능 명령들의 세트를 포함한다. 일 실시예에서, 제1 프로그램(222)은 설계되고 구축된 프로그램을 포함하여 가속 프로그램(120)을 설치한다. 일부 실시예들에서, 제1 프로그램(222)은 다른 컴퓨팅 장치로부터 네트워크를 통해 가속 프로그램(120)을 얻고, 다운로드하며, 또는 수신한다. 또 다른 일 실시예에서, 제1 프로그램(222)은 클라이언트(205)의 운영 시스템상에 네트워크 드라이버와 같은 프로그램을 설치하기 위한 설치 프로그램 또는 플러그 앤 플레이 매니저이다.
다른 실시예들에서, 제1 프로그램(222)은 기능성의 일부분, 가속 프로그램(120)의 동작 및 로직을 포함하여 기능성의 임의의 것, 가속 기술들 중 임의의 것처럼 본 명세서에서 설명하는 가속 프로그램(120)의 동작 및 로직을 수행하거나 용이하게 할 수 있다. 일부 실시예들에서, 제1 프로그램을 이용하여 전송 계층 접속과 같은 접속을 확립하고, 시큐어 소켓층(SSL) 통신 세션과 같이 어플라이언스나 서버와의 통신 세션을 확립한다. 일 실시예에서, 제1 프로그램(222)을 이용하여 가상 사설 네트워크 접속 및 통신 세션을 확립하거나 용이하게 한다.
도 2a에 도시한 바와 같이 클라이언트(205) 또는 가속 프로그램(120)의 캐시 매니저(232)는 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 포함하여 캐시 액세스, 서버(206a 내지 206n)에 의해 서비스받는 오브젝트나 동적으로 생성된 오브젝트처럼 임의의 유형 및 형태의 콘텐츠의 제어 및 관리를 제공할 수 있다. 캐시 매니저(232)에 의해 처리되고 저장되는 데이터, 오브젝트, 또는 콘텐츠는, 마크업 언어와 같은 임의의 포맷이나 임의의 프로토콜을 통해 통신되는 데이터를 포함할 수 있다. 일부 실시예들에서, 캐시 매니저(232)는 어느 곳에 저장된 원래의 데이터 또는 이전에 컴퓨팅, 생성, 또는 전송된 데이터를 복제하고, 여기서 원래의 데이터는 캐시 메모리 소자를 판독하는 것에 비하여 페치, 컴퓨팅, 얻는 데 있어서 더욱 긴 액세스 시간을 요구할 수 있다. 데이터가 캐시 메모리 소자에 저장되어 있기 때문에, 원래의 데이터를 리페치하거나 리컴퓨팅하기 보단 캐싱된 카피에 액세스함으로써 향후 이용할 수 있고, 이에 따라 액세스 시간이 저감된다. 일부 실시예들에서, 캐시 메모리 소자는 클라이언트(205)의 메모리에 데이터 오브젝트를 포함할 수 있다. 다른 실시예들에서, 캐시 메모리 소자는 클라이언트(205)에 의해 이용되는 메모리보다 더욱 빠른 액세스 시간을 갖는 메모리를 포함할 수 있다. 또 다른 일 실시예에서, 캐시 메모리 소자는 하드 디스크의 일부분처럼 클라이언트(205)의 임의의 유형 및 형태의 저장 소자를 포함할 수 있다. 또 다른 일 실시예에서, 캐시 매니저(232)는, 임의의 일부분, 및 데이터, 오브젝트, 다른 콘텐츠를 캐싱하기 위한 메모리, 저장 장치, 또는 처리 유닛의 조합을 이용할 수 있다.
게다가, 본 발명의 캐시 매니저(232)는 본 명세서에서 설명하는 본 발명의 기술들의 일부 실시예를 수행하는 임의의 로직, 함수, 규칙, 또는 동작을 포함한다. 예를 들어, 캐시 매니저(232)는, 무효 시간 주기의 만료 또는 클라이언트(205a 내지 205n) 또는 서버(206a 내지 206n)로부터의 무효 커맨드의 수신에 기초하여 오브젝트를 무효로 하는 로직 또는 기능성을 포함한다. 캐시 매니저(232) 는 일부 실시예들에서 커널 공간(202)에서 실행되고 다른 실시예에서 사용자 공간(203)에서 실행되는 프로그램, 서비스, 프로세스, 또는 태스크로서 동작할 수 있다. 일 실시예에서, 캐시 매니저(232)의 제1 일부분은 사용자 공간(203)에서 실행하는 한편 커널 공간(202)에서 제2 일부분을 실행한다. 일부 실시예들에서, 캐시 매니저(232)는, 임의의 유형의 범용 프로세서(GPP), 또는 필드 프로그래밍가능 게이트 어레이(FPGA), 프로그래밍가능 로직 장치(PLD), 또는 주문형 반도체(ASIC)와 같은 임의의 다른 유형의 집적 회로를 포함할 수 있다.
가속 프로그램(120) 또는 클라이언트(205)의 암호화 엔진(234)은, SSL이나 TLS, 또는 이에 관련된 임의의 기능처럼 임의의 보안 관련 프로토콜의 처리를 다루기 위한 임의의 로직, 비지니스 규칙, 함수, 또는 동작을 포함한다. 예를 들어, 암호화 엔진(234)은 클라이언트(205)에 의해 통신되는 네트워크 패킷, 또는 그 일부분을 암호화 및 복호화한다. 또한, 암호화 엔진(234)은 클라이언트(205a 내지 205n) 대신에 SSL이나 TLS 접속을 설정 또는 확립할 수 있다. 이처럼, 암호화 엔진(234)은 SSL 처리의 오프로딩 및 가속을 제공한다. 일 실시예에서, 암호화 엔진(234)은 터널링 프로토콜을 이용하여 클라이언트(205a 내지 205n) 및 서버와 같은 다른 컴퓨팅 장치 간에 가상 사설 네트워크를 제공한다.
도 2a를 참조하면, 클라이언트(205) 또는 가속 프로그램(120)의 멀티 프로토콜 압축 엔진(238)은 클라이언트(205)의 네트워크 스택(210)에 의해 이용되는 프로토콜들 중 임의의 것처럼 네트워크 패킷의 하나 이상의 프로토콜을 압축하기 위한 임의의 로직, 비지니스 규칙, 함수, 또는 동작을 포함한다. 예를 들어, 멀티 프로 토콜 압축(238)은, Gzip 압축과 압축해제, 차분 압축과 압축해제를 갖는 압축 및 압축해제 유틸리티, 또는 네트워크를 통해 전송될 데이터를 압축하고 압축해제하기 위한 다른 임의의 사유나 공개적 이용가능한 유틸리티를 포함할 수 있다. 일 실시예에서, 멀티 프로토콜 압축 엔진(238)은, 클라이언트(205)와 서버와 같이 다른 컴퓨팅 장치 간에 메시징 애플리케이션 프로그래밍 인터페이스(MAPI)(email), 파일 전달 프로토콜(FTP), 하이퍼텍스트 전달 프로토콜(HTTP), 공통 인터넷 파일 시스템(CIFS) 프로토콜(file transfer), 독립 컴퓨팅 아키텍처(ICA) 프로토콜, 원격 데스크톱 프로토콜(RDP), 무선 애플리케이션 프로토콜(WAP), 모바일 IP 프로토콜, 및 보이스 오버 IP (VoIP) 프로토콜을 비롯한 임의의 TCP/IP 기반 프로토콜을 양방향으로 압축한다. 다른 실시예들에서, 멀티 프로토콜 압축 엔진(238)은 하이퍼텍스트 마크업 언어(HTML) 기반 프로토콜의 압축을 제공하고, 일부 실시예들에서, 확장가능 마크업 언어(XML)와 같은 임의의 마크업 언어들의 압축을 제공한다. 이처럼, 본 발명의 멀티 프로토콜 압축 엔진(238)은, 예를 들어, Oracle, SAP, Siebel, Pocket PC와 같은 모바일 클라이언트와 같은 기업 애플리케이션에 의해 론칭된 임의의 클라이언트처럼 마이크로소프트 아웃룩 및 넌-웹 씬(non-Web thin) 클라이언트와 같은 데스크톱 클라이언트를 통해 애플리케이션에 액세스하는 사용자를 위한 성능을 가속한다.
또한, 본 발명의 가속 프로그램(120)은, 이하 상세히 설명할 버퍼링, 풀링, 멀티플렉싱인 전송 프로토콜 계층 가속 기술들을 수행한다. 이처럼, 가속 프로그램(120)은, 본 명세서에서 설명하는 바와 같은 이러한 기술들 중 임의의 것을 수행 하는 로직, 규칙, 함수, 동작을 갖는 임의의 유형 및 형태의 실행가능 명령들을 포함한다. 가속 프로그램(120)은, 네트워크 스택(210)의 전송 계층에서, 네트워크 스택(210)을 통해 애플리케이션(220a 내지 220n)에 의해 형성된 임의의 전송 계층 애플리케이션 프로그래밍 인터페이스(API) 호를 간섭, 제어, 관리한다. 가속 프로그램(120)은, 네트워크 스택(210)의 전송 프로토콜 계층으로부터 예상되는 응답을 클라이언트(205)가 수신하는 투명한 방식으로 클라이언트(205)의 임의의 요구에 응답한다. 예를 들어, 일 실시예에서, 가속 프로그램(120)은, 클라이언트(205)의 네트워크 스택(210)에서, 서버와 같은 다른 컴퓨팅 장치와의 전송 계층 접속을 확립하는 요구를 간섭하고, 가속 프로그램(120)에 의해 확립된 하나 이상의 전송 계층 접속들의 풀을 이용하여 그 요구에 응답할 수 있다. 다른 일 실시예에서, 가속 프로그램(120)은 제2 애플리케이션(220b)에 의해 이용되는 확립된 전송 계층 접속을 통해 제1 애플리케이션(220a)으로부터의 요구를 멀티플렉싱한다.
일부 실시예들에서, 가속 프로그램(120)은 네트워크상에서의 전송 전에 클라이언트(205)에서 클라이언트(205)의 통신을 버퍼링하거나 유지하는 메커니즘을 포함한다. 예를 들어, 서버와 같은 네트워크로부터 수신한 통신의 클라이언트(205)에 의한 소모율은 네트워크상에서 클라이언트(205)에 의해 전송되는 통신의 생성률보다 적을 수 있다. 이처럼, 클라이언트(205)는, 클라이언트(205)가 이러한 요구들로부터의 응답을 소모 및 처리할 수 있는 율보다 큰 율로 서버(206a 내지 206n)에 더 많은 요구를 소모할 수 있다. 가속 프로그램(120)은, 통신을 간섭할 수 있고, 클라이언트(205)의 생성률 및/또는 소모율이 사용자, 클라이언트(205) 또는 다 른 컴퓨팅 장치에 의해 구성된 임계값과 같은 소정의 임계값 미만인지 여부를 결정할 수 있다. 결정된 율이 소정의 임계값 미만이면, 가속 프로그램(120)은 클라이언트(205)의 성능이 소모율 및/또는 생성률을 소정의 임계값이나 원하는 임계값 이상의 율로 증가시킬 때까지 간섭된 통신을 클라이언트의 메모리 소자에 저장한다. 이때, 가속 프로그램(120)은 네트워크상의 클라이언트와 통신한다. 이처럼, 본 발명은 클라이언트측 메커니즘을 제공하여 클라이언트(205)에 의한 통신의 소모 및/또는 생성의 성능에 기초하여 클라이언트(205)의 통신을 조절한다.
도 2a에 도시한 애플리케이션(220a 내지 220n)은, 웹 브라우저, 웹 기반 클라이언트, 클라이언트-서버 애플리케이션, 씬 클라이언트 컴퓨팅 클라이언트, ActiveX 제어, 또는 Java applet의 임의의 형태 및/또는 형태, 또는 네트워크(204)를 통해 통신하거나 클라이언트(205)에 대하여 실행될 수 있는 실행가능 명령들의 다른 임의의 유형 및/또는 형태와 같은 애플리케이션의 임의의 유형 및/또는 형태일 수 있다. 애플리케이션(220a 내지 220n)은 임의의 유형의 프로토콜을 이용할 수 있고, 예를 들어, HTTP 클라이언트, FTP 클라이언트, Oscar 클라이언트, 또는 Telnet 클라이언트일 수 있다. 일부 실시예들에서, 애플리케이션(220a 내지 220n)은 원격 디스플레이 또는 프리젠테이션 레벨 프로토콜을 이용한다. 일 실시예에서, 애플리케이션(220a 내지 220n)은, 플로리다 포트 로더데일 소재의 Citrix Systems, Inc가 개발한 ICA 클라이언트이다. 다른 실시예들에서, 애플리케이션(220a 내지 220n)은, 워싱턴 레드몬드 소재의 Microsoft Corporation가 개발한 원격 데스크톱(RDP) 클라이언트를 포함한다. 다른 실시예들에서, 애플리케이 션(220a 내지 220n)은 소프트 IP 전화처럼 VoIP 통신과 관련된 임의의 유형의 소프트웨어를 포함한다. 다른 실시예들에서, 애플리케이션(220a 내지 220n)은, 비디오 및/또는 오디오를 스트리밍하기 위한 애플리케이션처럼 실시간 데이터 통신에 관련된 임의의 애플리케이션을 포함한다.
도 2b를 참조하면, 본 발명의 가속 프로그램(120)을 실시하기 위한 네트워크 환경(200)이 도시되어 있다. 간략히 참조해 보면, 환경(200)은 네트워크(204)를 통해 하나 이상의 서버(206a 내지 206n)와 통신하는 클라이언트(205a 내지 205n)를 포함한다. 서버(206a 내지 206n)는 클라이언트(205a 내지 205n)가 사용하도록 하나 이상의 애플리케이션(220a 내지 220n)을 제공 또는 실행할 수 있다. 또한, 서버(206a 내지 206n)는 가속 프로그램(120a 내지 120n)을 포함하여 설치 및 실행을 위해 클라이언트(205a 내지 205n)에게 제공할 수 있다. 예를 들어, 일 실시예에서, 서버(206a 내지 206n)는, 서버(206a 내지 206n)와의 접속이나 통신 세션을 확립하는 요구와 같이 서버에 액세스하는 클라이언트(205a 내지 205n)로부터의 요구의 수신에 응답하여, 가속 프로그램(120a 내지 120n)을 클라이언트(205a 내지 205n)에게 전송한다.
네트워크(204)는 임의의 유형 및 형태의 네트워크일 수 있다. 네트워크(204)는, 회사 인트라넷과 같은 LAN, MAN, 또는 인터넷이나 월드 와이드 웹과 같은 WAN일 수 있다. 네트워크(204)의 망 형태는 버스형, 스타형, 또는 링 네트워크 망 형태일 수 있다. 이 네트워크(204) 및 네트워크 망 형태는, 본 명세서에서 설명하는 본 발명의 동작들을 지원할 수 있는 임의의 네트워크 또는 네트워크 망 형 태일 수 있다. 클라이언트(205a 내지 205n) 및 서버(206a 내지 206n)는, 표준 전화 라인, LAN이나 WAN 링크(예를 들어, T1, T3, 56 kb, X.25, SNA, DECNET), 광대역 접속((ISDN, 프레임 릴레이, ATM, 기가비트 이더넷, 이더넷-오버-SONET), 및 무선 접속이나 이들의 조합을 비롯한 다양한 접속을 통해 하나 이상의 네트워크(204)에 접속할 수 있다. 접속은 다양한 통신 프로토콜(예를 들어, TCP/IP, IPX, SPX, NetBIOS, 이더넷, ARCNET, 파이버 분포 데이터 인터페이스(FDDI), RS232, IEEE 802.11, IEEE 802.1 Ia, IEEE 802.1 Ib, IEEE 802.1 Ig, 및 직접적 비동기 접속)을 이용하여 확립될 수 있다.
일부 실시예들에서, 서버(206a 내지 206n)는 애플리케이션(220a 내지 220n)을 실행할 수 있고, 예를 들어, 이 서버는, 워싱턴 레드몬드 소재의 Microsoft Corporation이 제조한 Microsoft Exchange와 같은 이메일 서비스를 제공하는 애플리케이션 서버, 웹이나 인터넷 서버, 또는 데스크톱 공유 서버, 또는 협력 서버일 수 있다. 일부 실시예들에서, 애플리케이션(220a 내지 220n) 중 임의의 것은, 플로리다 로더데일 소재의 Citrix Systems, Inc.가 제조한 GoToMeeting.com, 캘리포니아 산타 클라라 소재의 WebEx, Inc.가 제조한 WebEx.com, 또는 워싱턴 레드몬드 소재의 Microsoft Corporation가 제조한 LiveMeeting.com과 같은 임의의 유형의 호스팅 서비스를 포함할 수 있다.
또 다른 일 실시예에서, 클라이언트(205a 내지 205n) 중 임의의 것은, 네트워크(204)를 통해 서버 팜(server farm; 206a 내지 206n)과 통신할 수 있고, 이 서버 팜은 단일 엔티티로서 관리되는 하나 이상의 서버들의 논리적 그룹이다. 서버 팜(206a 내지 206n)은, 씬 클라이언트 컴퓨팅 또는 원격 디스플레이 프리젠테이션 애플리케이션을 제공하는 애플리케이션(33f)과 같은 하나 이상의 애플리케이션(220a 내지 220n)을 실행할 수 있다. 일 실시예에서, 서버(206a) 또는 서버 팜(206a 내지 206n)은, MetaFrame 또는 Citrix Presentation Server(TM)처럼, Citrix Systems, Inc.의 Citrix Access Suite(TM)의 임의의 일부분, 및/또는 Microsoft Corporation가 제조한 Microsoft Windows Terminal Services의 임의의 일부분을 애플리케이션(220a 내지 220n)으로서 실행한다. 일부 실시예들에서, 서버(206a 내지 206n) 중 임의의 것은 클라이언트(205a 내지 205n)를 임의의 서버(206a 내지 206n)에 접속하기 위한 게이트웨이, 방화벽, 라우터, 스위치, 또는 브리지를 포함한다. 일 실시예에서, 서버(206a 내지 206n)는 프록시를 포함한다. 다른 일 실시예에서, 서버(206a 내지 206n)는 로드 밸런서를 포함한다. 일부 실시예들에서, 클라이언트(205a 내지 205n)는 어플라이언스를 통해 서버(206a 내지 206n)와 통신한다.
도 2c는 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간의 통신 및 접속에 어플라이언스(250)가 이용되는 네트워크 환경(201)의 또 다른 일 실시예를 도시한다. 간략히 참조해 보면, 어플라이언스(250)는 네트워크(204) 상의 클라이언트(205a 내지 205n)와 네트워크(204) 상의 서버(206a 내지 206n) 간의 통신을 제공하는 컴퓨팅 또는 네트워킹 장치를 포함한다. 일부 실시예들에서, 클라이언트(205a 내지 205n)와 서버(206a 내지 206n)는 동일한 네트워크(204) 상에 또는 상이한 네트워크들 상에 있을 수 있다. 다른 실시예들에서, 클라이언트(205a 내지 205n)는 인터넷과 같은 공중 네트워크상에 있을 수 있고, 서버(206a 내지 206n)는 법인이나 기업 네트워크와 같은 사설 네트워크상에 있을 수 있다.
어플라이언스(250)는 임의의 유형의 컴퓨팅이나 네트워킹 장치를 포함한다. 일부 실시예들에서, 어플라이언스(250)는 게이트웨이, 프록시, SSL VPN 장치, 브리지, 라우터, 또는 스위치를 포함한다. 일 실시예에서, 어플라이언스(250)는 네트워크(204) 상의 클라이언트(205a 내지 205n)로부터의 가상 사설 접속을 네트워크(204) 상의 서버(206a 내지 206n)에게 제공한다. 일부 실시예들에서, 어플라이언스(250)는 네트워크(204) 상의 클라이언트(205a 내지 205n)와의 제1 전송 계층 접속 및 네트워크(204) 상의 서버(206a 내지 206n)와의 제2 전송 계층 접속을 확립할 수 있다. 일부 실시예들에서, 어플라이언스(250)는 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간의 애플리케이션(220a 내지 220n)처럼 통신 및 원격 액세스 애플리케이션의 가속을 제공한다. 클라이언트측 가속 프로그램(120)을 이용함으로써, 어플라이언스(250)의 로직, 함수, 및/또는 실행가능 명령들의 동작은 다음에 따르는 본 발명의 가속 기술들 중 하나 이상을 수행할 수 있다. 즉, 1) 멀티 프로토콜 압축, 2) 전송 제어 프로토콜 풀링, 3) 전송 제어 프로토콜 멀티플렉싱, 4) 전송 제어 프로토콜 버퍼링, 5) 캐시 매니저를 통한 캐싱이다. 또한, 어플라이언스(250)는 클라이언트(205)에 의해 송수신되는 임의의 통신의 암호화 및/또는 복호화를 수행할 수 있다. 일부 실시예들에서, 어플라이언스(250)도 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간의 터널링을 수행한다.
도 2d는 어플라이언스(250)의 아키텍처의 일 예를 도시한다. 간략히 참조해 보면, 어플라이언스(250)는 하드웨어 계층(206) 및 사용자 공간(203)과 커널 공간(202)으로 나누어진 소프트웨어 계층을 포함한다. 하드웨어 계층(206)은 커널 공간(202)과 사용자 공간(203) 내의 프로그램과 서비스가 실행되는 하드웨어 요소들을 제공한다. 또한, 하드웨어 계층(206)은 커널 공간(202)과 사용자 공간(203) 내의 프로그램과 서비스가 어플라이언스(250)에 대하여 내외적으로 데이터를 통신할 수 있도록 하는 구조 및 요소를 제공한다. 소프트웨어 계층은 어플라이언스(250)의 로직, 함수, 및 동작을 제공하는 프로그램, 서비스, 프로세스, 태스크, 쓰레드, 및 다른 실행가능한 명령을 포함한다.
어플라이언스(250)는 애플리케이션 가속 결정 메커니즘(275) 및 클라이언트측 가속 프로그램(120)을 포함한다. 애플리케이션 가속 결정 메커니즘(275)은 소프트웨어, 하드웨어, 또는 하드웨어와 소프트웨어의 임의의 조합을 포함한다. 일부 실시예들에서, 애플리케이션 가속 결정 메커니즘(275)은, 클라이언트(205a 내지 205n) 및/또는 서버(206a 내지 206n) 상에서 실행중인 애플리케이션(220a 내지 220n)이 가속될 수 있는지 여부와 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간의 액세스나 통신이 가속될 수 있는지 여부를 결정하기 위한 로직, 함수, 규칙, 또는 동작을 갖는 프로그램, 서비스, 프로세스, 태스크, 또는 쓰레드와 같은 임의의 유형 및 형태의 실행가능 명령들을 포함한다. 일 실시예에서, 데이터베이스는, 애플리케이션(220a 내지 220n)이 가속될 수 있는지 여부를 결정하는 애플리케이션 가속 결정 메커니즘(275)에 의해 이용된다. 예를 들어, 데이터베이스는 애플리케이션(220a 내지 220n)을 애플리케이션(220a 내지 220n)을 가속할 수 있는 하 나 이상의 가속 기술들과 관련지을 수 있고, 클라이언트(205a 내지 205n) 및/또는 서버(206a 내지 206n)의 사용자, 유형, 형태, 위치, 처리 능력, 다른 특성에 더욱 기초할 수 있다. 일부 실시예들에서, 애플리케이션 가속 결정 메커니즘(275)은, 이름, 유형, 또는 카테고리에 의해 애플리케이션(220a 내지 220n)이 가속 기술에 의해 가속될 수 있는지를 식별하는 정보를 포함하는 메모리에 있는 룩업 테이블, 파일, 데이터 구조 또는 오브젝트를 이용한다. 다른 실시예들에서, 어플라이언스(250) 및/또는 애플리케이션 가속 결정 메커니즘(275)은, 애플리케이션(220a 내지 220n) 또는 서버(206a 내지 206n)에 대한 액세스가 가속될 수 있는지를 식별, 특정, 또는 구성하는 사용자 입력을 수신하는 사용자 인터페이스, 그래피컬, 커맨드 라인 또는 다른 것과 같은 구성 메커니즘을 포함한다.
일부 실시예들에서, 애플리케이션 가속 결정 메커니즘(275)은 서버(206a 내지 206n)로부터 애플리케이션(220a 내지 220n)이 가속될 수 있는지를 식별하는 정보를 요구하고 다른 실시예들에서 임의의 가속 기술(들)에 의해 그리고 클라이언트(205a 내지 205n)의 임의의 유형과 형태를 위해 애플리케이션이 가속될 수 있는지를 식별하는 정보를 요구한다. 다른 일 실시예에서, 애플리케이션 가속 결정 메커니즘(275)은, 하나 이상의 클라이언트측 가속 기술을 이용할 때와 이용하지 않을 때 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간의 애플리케이션(220a 내지 220n)의 성능에 관한 히스토리 정보의 데이터베이스를 포함하고, 이 데이터베이스는 본 발명의 임의의 클라이언트측 가속 기술들을 이용하는 애플리케이션(220a 내지 220n)이 가속되는 또는 가속될 수 있는 것에 관한 비교적 및 귀납적 정보이 다. 예를 들어, 어플라이언스(250)는 애플리케이션(220a 내지 220n)의 성능에 관한 네트워크 관련 성능 정보를 클라이언트(205a 내지 205n)로부터 캡처할 수 있다. 이처럼, 애플리케이션(220a 내지 220n)이 가속될 수 있는지 여부의 결정은, 네트워크(204)의 동작 및 성능 특성들의 변경에 적응될 수 있고, 기초할 수 있으며, 또는 영향을 받을 수 있다.
일 양태에 있어서, 애플리케이션(220a 내지 220n)은 가속될 수 없을 수 있으며 또는 가속될 수도 있지만 이 가속은 효과적이지 않으며 또는 최소한의 효과를 가질 것이다. 일 실시예에서, 애플리케이션(220a 내지 220n)의 유형 및 형태는 프로토콜을 이용하지 않을 수 있고 또는 가속 기술과 함께 이용하는 데 적절한 방식으로 통신하지 않을 수도 있다. 또 다른 일 실시예에서, 애플리케이션(220a 내지 220n)이 통신하는 프로토콜 또는 방식은 가속 기술의 수행을 허용할 수 있지만 클라이언트(205a 내지 205n)의 동작이나 성능 특성들 중 임의의 것, 어플라이언스(250) 또는 서버(206a 내지 206n)에 기초하고, 가속 기술은 효과적이지 않거나 최소한의 가속을 제공할 것이다. 이처럼, 애플리케이션 가속 결정 메커니즘(275)은, 애플리케이션(220a 내지 220n)이 가속될 수 있는지 여부 또는 가속이 성능 개선의 원하는 소정의 임계값을 충족하는지 여부에 기초하여 애플리케이션(220a 내지 220n)이 가속될 필요가 없음을 결정할 수 있다.
다른 양태에 있어서, 어플라이언스(250)는, 클라이언트측 가속 프로그램(120)을, 어플라이언스의 하드웨어 계층(206)에 의해 제공되는 저장 장치나 메모리와 같은 어플라이언스(250)의 저장 장치나 메모리 소자에 저장한다. 일 실시예 에서, 어플라이언스(250)는, 클라이언트(205a 내지 205n)에 의해 사용되고 있거나 사용될 애플리케이션(220a 내지 220n)이 클라이언트(205a 내지 205n) 상에서 실행되고 있는 가속 프로그램(120)에 의해 가속될 수 있는지를 애플리케이션 가속 결정 메커니즘(275)을 통해 동적으로 결정하고, 어플라이언스(250)의 저장 장치나 메모리로부터의 가속 프로그램(120)을 클라이언트(205a 내지 205n)에게 전송하거나 통신한다. 또 다른 일 실시예에서, 어플라이언스(250)는 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간의 통신이 클라이언트(205) 상에서 실행되고 있는 가속 프로그램(120)에 의해 가속될 수 있음을 결정하고, 가속 프로그램(120)을 클라이언트(205)에게 통신한다. 일부 실시예들에서, 어플라이언스(250)는 서버(206a 내지 206n)와 같은 다른 컴퓨팅 장치(100)로부터 가속 프로그램(120)을 수신, 다운로드, 또는 얻는다.
도 2d에 도시한 바와 같이, 하드웨어 계층(206)은, 소프트웨어 프로그램 및 서비스를 실행하는 처리 유닛(262), 소프트웨어 및 데이터를 저장하는 메모리(264), 네트워크를 통해 데이터를 송수신하는 네트워크 포트(266), 네트워크를 통해 송수신되는 데이터의 시큐어 소켓(secure socket) 층 처리에 관련된 기능을 수행하는 암호화 프로세서(260)를 포함한다. 일부 실시예들에서, 중앙 처리 유닛(262)은 단일 프로세서에서 암호화 프로세서(260)의 기능을 수행할 수 있다. 또한, 하드웨어 계층(206)은 처리 유닛(262)과 암호화 프로세서(260)의 각각을 위한 다중 프로세서들을 포함할 수 있다.
어플라이언스(250)의 하드웨어 계층(206)이 일반적으로 암호화 프로세 서(260)와 함께 도시되어 있지만, 프로세서(260)는 시큐어 소켓 계층(SSL)이나 전송 계층 시큐러티(TLS) 프로토콜과 같은 임의의 암호화 프로토콜에 관한 기능을 수행하는 프로세서일 수 있다. 일부 실시예들에서, 프로세서(260)는 범용 프로세서(GPP)일 수 있으며, 다른 실시예들에서, 임의의 보안 관련 프로토콜의 처리를 수행하기 위한 실행가능 명령을 가질 수 있다. 어플라이언스(250)의 하드웨어 계층(206)이 도 2d에서 소정의 요소들과 함께 도시되어 있지만, 어플라이언스(250)의 구성요소들 또는 하드웨어 부분들은, 도 1a 및 도 1b에 도시하고 설명한 컴퓨팅 장치(100)와 같은 컴퓨팅 장치의 요소들, 하드웨어, 또는 소프트웨어의 임의의 유형 및 형태를 포함할 수 있다. 일부 실시예들에서, 어플라이언스(250)는 캐시, 서버, 게이트웨이, 라우터, 스위치, 브리지, 또는 다른 유형 및 형태의 컴퓨팅이나 네트워크 장치를 포함할 수 있고, 이와 관련된 임의의 하드웨어 및/또는 소프트웨어 요소들을 구비할 수 있다.
어플라이언스(250)의 운영 시스템은 이용가능한 시스템 메모리를 커널 공간(202) 및 사용자 공간(204) 내로 할당, 관리, 또는 분리한다. 소프트웨어 아키텍처(200)의 예에서, 운영 시스템은 임의의 유형 및/또는 형태의 UNIX 운영 시스템일 수 있지만 본 발명은 이에 한정되지 않는다. 이처럼, 어플라이언스(250)는, Microsoft(R) Windows 운영 시스템들의 버전들 중 임의의 것, Unix 및 Linux 운영 시스템들의 상이한 배포물, Macintosh 컴퓨터를 위한 Mac OS(R)의 임의의 버전, 임의의 내장형 운영 시스템, 임의의 네트워크 운영 시스템, 임의의 실시간 운영 시스템, 임의의 개방 소스 운영 시스템, 임의의 사유 운영 시스템, 이동 컴퓨팅 장치나 네트워크 장치를 위한 임의의 운영 시스템, 또는 어플라이언스(250) 상에서 실행될 수 있고 본 명세서에서 설명하는 동작들을 수행할 수 있는 임의의 다른 운영 시스템처럼 실행되는 임의의 운영 시스템일 수 있다.
커널 공간(202)은, 임의의 장치 드라이버, 커널 확장, 또는 다른 커널 관련 소프트웨어를 포함하여 커널(230)을 실행하도록 예약된다. 당업자에게 알려져 있듯이, 커널(230)은 운영 시스템의 코어이며, 애플리케이션(220)의 리소스들 및 하드웨어 관련 요소들의 액세스, 제어, 관리를 제공한다. 본 발명의 일 실시예에 따라, 커널 공간(202)은 다수의 네트워크 서비스도 포함하고 또는 때때로 집적 캐시라고도 칭하는 캐시 매니저(232)와의 작업을 처리하며, 이들의 이점들은 본 명세서에서 더욱 상세히 설명된다. 또한, 커널(230)의 실시예는, 어플라이언스(250)에 의해 설치되고, 구성되고, 또는 이용되는 운영 시스템의 실시예에 의존한다.
일 실시예에서, 어플라이언스(250)는, 클라이언트(102a 내지 102b) 및 /또는 서버(206a 내지 206n)와 통신하기 위한 TCP/IP 기반 스택과 같은 하나의 네트워크 스택(2670을 포함한다. 일 실시예에서, 네트워크 스택(267)을 이용하여 네트워크(204)와 같은 제1 네트워크, 및 제2 네트워크(204')와 통신한다. 일부 실시예들에서, 어플라이언스(250)는 클라이언트(205a 내지 205n)의 TCP 접속과 같은 제1 전송 계층 접속을 종료하고, 클라이언트(205a 내지 205n)의 사용을 위해 서버(206a 내지 206n)에 대한 제2 전송 계층 접속을 확립하며, 예를 들어, 제2 전송 계층 접속은 어플라이언스(250) 및 서버(206a 내지 206n)에서 종료된다. 제1 및 제2 전송 계층 접속은 단일 네트워크 스택(267)을 통해 확립될 수 있다. 다른 실시예들에 서, 어플라이언스(250)는 예를 들어 다중 네트워크 스택들(267, 267')을 포함할 수 있으며, 제1 전송 계층 접속은 하나의 네트워크 스택(267)에서 확립되거나 종료될 수 있고, 제2 전송 계층 접속은 제2 네트워크 스택(267') 상에서 확립되거나 종료될 수 있다. 예를 들어, 하나의 네트워크 스택은 제1 네트워크상의 네트워크 패킷들을 송수신하기 위한 것일 수 있으며, 다른 하나의 네트워크 스택은 제2 네트워크상의 네트워크 패킷들을 송수신하기 위한 것일 수 있다. 일 실시예에서, 네트워크 스택(267)은 어플라이언스(250)에 의한 전송을 위해 하나 이상의 네트워크 패킷을 큐잉하기 위한 버퍼(243)를 포함한다.
도 2d에 도시한 바와 같이, 커널 공간(202)은 캐시 매니저(232), 고속 계층 2-7 집적 패킷 엔진(240), 암호화 엔진(234), 정책 엔진(236), 및 멀티 프로토콜 압축 로직(238)을 포함한다. 사용자 공간(203) 대신 커널 노드 또는 커널 공간(202)에서 이러한 구성요소들 또는 프로세스들(232, 240, 234, 236, 238)을 실행함으로써 이러한 구성요소들의 각각의 성능을 개별적으로 또한 조합하여 개선하게 된다. 커널 동작이란, 이러한 구성요소들 또는 프로세스들(232, 240, 234, 236, 238)이 어플라이언스(250)의 운영 시스템의 코어 어드레스 공간에서 실행됨을 의미한다. 예를 들어, 커널 모드에서 암호화 엔진(234)을 실행하는 것은 암호화 및 복호화 동작들을 커널로 이동함으로써 암호화 성능을 개선하게 되며, 이에 따라 사용자 모드에서의 쓰레드나 메모리 공간과 커널 모드에서의 커널 쓰레드나 메모리 공간 간의 천이 수를 절감하게 된다. 예를 들어, 커널 모드에서 얻은 데이터는, 커널 레벨 데이터 구조로부터 사용자 레벨 데이터 구조로와 같이, 사용자 모드에서 실행중인 쓰레드나 프로세스에 전달되거나 복사될 필요가 없을 수 있다. 다른 양태에 있어서, 커널 모드와 사용자 모드 간의 컨텍스트 스위치들의 수도 저감된다. 또한, 커널 공간(202)에서 구성요소들 또는 프로세스들(232, 240, 234, 236, 238) 중 임의의 것 간의 통신 및 동기화를 더욱 효율적으로 수행할 수 있다.
일부 실시예들에서, 구성요소들 또는 프로세스들(232, 240, 234, 236, 238) 중 임의의 일부분은 커널 공간(202)에서 실행되거나 동작할 수 있는 한편, 구성요소들 또는 프로세스들(232, 240, 234, 236, 238)의 다른 일부분들은 사용자 공간(203)에서 실행되거나 동작할 수 있다. 일 실시예에서, 본 발명은 하나 이상의 네트워크 패킷들 중 임의의 부분, 예를 들어, 클라이언트(205a 내지 205n)로부터의 요구 또는 서버(206a 내지 206n)로부터의 응답을 포함하는 네트워크 패킷에 액세스를 제공하는 커널 레벨 데이터 구조를 이용한다. 일부 실시예들에서, 커널 레벨 데이터 구조는 네트워크 스택(267)에 대한 전송 계층 드라이버 인터페이스 또는 필터를 통해 패킷 엔진(240)에 의해 얻을 수 있다. 커널 레벨 데이터 구조는, 네트워크 스택(267), 네트워크 스택(267)에 의해 송수신되는 네트워크 트랙이나 패킷들에 관련된 커널 공간(202)을 통해 액세스 가능한 데이터 및/또는 임의의 인터페이스를 포함할 수 있다. 다른 실시예들에서, 커널 레벨 데이터 구조는 구성요소들 또는 프로세스들(232, 240, 234, 236, 238) 중 임의의 것에 의해 이용되어 그 구성요소나 프로세스의 원하는 동작을 수행할 수 있다. 일 실시예에서, 구성요소(232, 240, 234, 236, 238)는 커널 레벨 데이터 구조를 이용할 때 커널 모드(202)에서 실행중인 한편 다른 일 실시예에서, 구성요소(232, 240, 234, 236, 238)는 커널 레벨 데이터 구조를 이용할 때 사용자 모드에서 실행중이다. 일부 실시예들에서, 커널 레벨 데이터 구조는 제2 커널 레벨 데이터 구조, 또는 임의의 원하는 사용자 레벨 데이터 구조에 복사 또는 전달될 수 있다.
클라이언트측 가속 프로그램(120)을 이용함에 따라, 어플라이언스도 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간의 임의의 통신을 위한 캐싱을 수행할 수 있다. 일부 실시예들에서, 캐시 메모리(232) 소자는 어플라이언스(250)의 메모리(264)에 데이터 오브젝트를 포함할 수 있다. 다른 실시예들에서, 캐시 메모리 소자는 메모리(264)보다 빠른 액세스 시간을 갖는 메모리를 포함할 수 있다. 또 다른 일 실시예에서, 캐시 메모리 소자는 하드 디스크의 일부분처럼 어플라이언스(250)의 임의의 유형 및 형태의 저장 요소를 포함할 수 있다. 일부 실시예들에서, 처리 유닛(262)은 본 발명의 캐시 매니저(232)가 사용하기 위한 캐시 메모리를 제공할 수 있다. 또 다른 실시예들에서, 캐시 매니저(232)는, 메모리, 저장 장치, 또는 데이터, 오브젝트, 다른 콘텐츠의 캐싱을 위한 어플라이언스(250)의 처리 유닛의 임의의 부분 및 조합을 이용할 수 있다.
게다가, 본 발명의 캐시 매니저(232)는, 본 명세서에서 설명하는 본 발명의 기술들의 일부 실시예들을 수행하는 임의의 로직, 함수, 규칙, 또는 동작을 포함한다. 예를 들어, 캐시 매니저(232)는, 클라이언트(205a 내지 205n) 또는 서버(206a 내지 206n)로부터의 무효화 커맨드의 수신 또는 무효화 시간 기간의 만료에 기초하여 오브젝트를 무효화하는 로직 또는 기능성을 포함한다. 일부 실시예들에서, 캐시 매니저(232)는 커널 공간(202)에서 실행되는 프로그램, 서비스, 프로세스, 또는 태스크로서 동작할 수 있고, 다른 실시예에서, 사용자 공간(203)에서 실행되는 프로그램, 서비스, 프로세스, 또는 태스크로서 동작할 수 있다. 일 실시예에서, 캐시 매니저(232)의 제1 부분은 사용자 공간(203)에서 실행되는 한편 제2 부분은 커널 공간(202)에서 실행된다. 일부 실시예들에서, 캐시 매니저(232)는 임의의 유형의 범용 프로세서(GPP), 또는 필드 프로그래밍가능 게이트 어레이(FPGA), 프로그래밍가능 로직 장치(PLD), 또는 주문형 반도체(ASIC)와 같은 다른 임의의 유형의 집적 회로를 포함할 수 있다.
도 2d에 도시한 바와 같은 정책 엔진(236)은, 예를 들어, 인텔리전트 통계 엔진 또는 다른 프로그래밍가능 애플리케이션(들)을 포함할 수 있다. 일 실시예에서, 정책 엔진(236)은 구성 메커니즘을 제공하여 사용자로 하여금 캐싱 정책을 식별, 특정, 규정, 또는 구성할 수 있게 한다. 정책 엔진(236)은, 일부 실시예들에서, 사용자 선택 캐싱 정책 결정을 인에이블하는 룩업 테이블 또는 해시 테이블과 같은 데이터 구조를 지원하도록 메모리에 대한 액세스도 갖는다. 다른 실시예들에서, 정책 엔진(236)은, 보안, 네트워크 트래픽, 네트워크 액세스, 압축, 또는 어플라이언스(250)에 의해 수행되는 다른 임의의 기능이나 동작의 액세스, 제어, 관리에 더하여, 어플라이언스(250)에 의해 캐싱되고 있는 오브젝트, 데이터, 또는 콘텐츠의 액세스, 제어, 관리를 결정하고 제공하는 임의의 로직, 규칙, 기능, 또는 동작을 포함할 수 있다. 일부 실시예들에서, 가속 프로그램(120)은 어플라이언스(250)의 정책 엔진(236)으로부터 정책 정보를 수신, 다운로드, 또는 얻는다. 다른 실시예들에서, 가속 프로그램(120)은 어플라이언스(250)의 정책 엔진(236)에 독 립적으로 또는 함께 정책 엔진(236)을 실행 및 동작한다.
클라이언트측 가속 프로그램(120)과 유사한 방식으로, 도 2d를 참조해 보면, 어플라이언스는, SSL이나 TLS와 같은 임의의 보안 관련 프로토콜의 처리, 또는 이에 관련된 임의의 기능을 다루기 위한 임의의 로직, 비지니스 규칙, 함수, 또는 동작을 포함하는 암호화 엔진(234)을 포함한다. 예를 들어, 암호화 엔진(234)은, 어플라이언스(250)를 통해 통신되는 네트워크 패킷들, 또는 이들의 임의의 일부분의 암호화 및 복호화한다. 암호화 엔진(234)은 클라이언트(205a 내지 205n), 서버(206a 내지 206n), 또는 어플라이언스(250)를 대신하여 SSL이나 TLS 접속을 설정하거나 확립할 수도 있다. 이처럼, 암호화 엔진(234)은 SSL 처리의 가속 및 오프로딩을 제공한다. 일 실시예에서, 암호화 엔진(234)은 터널링 프로토콜을 이용하여 클라이언트(205a 내지 205n)과 서버(206a 내지 206n) 간에 가상 사설 네트워크를 제공한다. 일부 실시예들에서, 암호화 엔진(234)은 암호화 프로세서(260)와 통신한다. 다른 실시예들에서, 암호화 엔진(234)은 암호화 프로세서(260) 상에서 실행되는 실행가능 명령들을 포함한다.
또한, 클라이언트측 가속 프로그램(120)에서처럼, 어플라이언스(250)는, 어플라이언스(250)의 네트워크 스택(267)에 의해 사용되는 프로토콜들 중 임의의 것처럼 네트워크 패킷의 하나 이상의 프로토콜을 압축하기 위한 임의의 로직, 비지니스 규칙, 함수, 또는 동작을 포함하는 멀티 프로토콜 압축 엔진(238')을 포함할 수 있다. 일 실시예에서, 멀티 프로토콜 압축 엔진(238)은, 메시징 애플리케이션 프로그래밍 인터페이스(MAPI)(email), 파일 전달 프로토콜(FTP), 하이퍼텍스트 전달 프로토콜(HTTP), 공통 인터넷 파일 시스템(CIFS) 프로토콜(파일 전달), 독립 컴퓨팅 아키텍처(ICA) 프로토콜, 원격 데스크톱 프로토콜(RDP), 무선 애플리케이션 프로토콜(WAP), 모바일 IP 프로토콜, 및 보이스 오버 IP(VoIP) 프로토콜을 비롯한 임의의 TCP/IP 기반 프로토콜을 클라이언트(102a 내지 102n) 및 서버(206a 내지 206n) 간에 양방향으로 압축한다. 다른 실시예들에서, 멀티 프로토콜 압축 엔진(238)은 하이퍼텍스트 마크업 언어(HTML) 기반 프로토콜들의 압축을 제공하고, 일부 실시예에서, 확장가능 마크업 언어(XML)와 같은 임의의 마크업 언어들의 압축을 제공한다. 일 실시예에서, 멀티 프로토콜 압축 엔진(238)은 어플라이언스(250)용으로 설계된 임의의 프로토콜과 같은 임의의 고성능 프로토콜의 압축을 어플라이언스(250) 통신에 제공한다. 다른 일 실시예에서, 멀티 프로토콜 압축 엔진(238)은, 트랜잭션 TCP(T/TCP), 선택 승인을 갖는 TCP(TCP-SACK), 큰 윈도우를 갖는 TCP (TCP-LW), TCP-베가스 프로토콜과 같은 혼잡 예측 프로토콜, 및 TCP 스푸핑 프로토콜과 같이, 수정된 전송 제어 프로토콜을 이용하는 임의의 통신 또는 임의의 페이로드를 압축한다.
이처럼, 본 발명의 멀티 프로토콜 압축 엔진(238)은, 데스크톱 클라이언트, 예를 들어, Oracle, SAP 및 Siebel처럼 유명한 기업 애플리케이션에 의해 론칭된 임의의 클라이언트와 같은 마이크로소프트 아웃룩 및 넌-웹 씬 클라이언트, 및 포켓 PC와 같은 이동 클라이언트를 통해 애플리케이션에 액세스하는 사용자를 위한 성능을 향상시킨다. 일부 실시예들에서, 커널 모드(202)에서 실행하고 네트워크 스택(267)에 액세스하는 패킷 처리 엔진(240)과 집적되는 멀티 프로토콜 압축 엔 진(238)은, 임의의 애플리케이션 계층 프로토콜처럼 TCP/IP 프로토콜에 의해 전달되는 프로토콜들 중 임의의 것을 압축할 수 있다.
패킷 처리 엔진 또는 패킷 엔진이라고도 칭하는 도 2d에 도시한 고속 계층 2-7 집적 패킷 엔진(240)은, 네트워크 포트(266)를 통해 어플라이언스(250)에 의해 송수신되는 패킷들의 커널 레벨 처리의 관리를 담당한다. 고속 계층 2-7 집적 패킷 엔진(240)은, 네트워크 패킷의 전송 또는 네트워크 패킷의 수신을 위한 것처럼 처리하는 동안 하나 이상의 네트워크 패킷을 큐잉하기 위한 버퍼를 포함할 수 있다. 또한, 고속 계층 2-7 집적 패킷 엔진(240)은 하나 이상의 네트워크 스택(267)과 통신하여 네트워크 포트(266)를 통해 네트워크 패킷들을 송수신한다. 고속 계층 2-7 집적 패킷 엔진(240)은 암호화 엔진(234), 캐시 매니저(232), 정책 엔진(236), 및 멀티 프로토콜 압축 로직(238)과 함께 동작한다. 특히, 암호화 엔진(234)은 패킷들의 SSL 처리를 수행하도록 구성되고, 정책 엔진(236)은 요구 레벨 콘텐츠 스위칭 및 요구 레벨 캐시 방향변경과 같은 트래픽 관리에 관련된 기능들을 수행하도록 구성되며, 멀티 프로토콜 압축 로직(238)은 데이터의 압축 및 압축해제에 관련된 기능들을 수행하도록 구성된다.
고속 계층 2-7 집적 패킷 엔진(240)은 패킷 처리 타이머(242)를 포함한다. 일 실시예에서, 패킷 처리 타이머(242)는 하나 이상의 시간 간격을 제공하여 입력되는,즉, 수신되는, 또는 출력되는, 즉, 전송되는 네트워크 패킷들의 처리를 트리거링한다. 일부 실시예들에서, 고속 계층 2-7 집적 패킷 엔진(240)은 타이머(242)에 응답하여 네트워크 패킷들을 처리한다. 패킷 처리 타이머(242)는 임의의 유형 및 형태의 신호를 패킷 엔진(240)에 제공하여 시간 관련 이벤트, 간격, 또는 발생을 통지, 트리거, 또는 통신한다. 많은 실시예들에서, 패킷 처리 타이머(242)는 밀리초로 동작한다. 예를 들어, 일부 실시예들에서, 패킷 처리 타이머(242)는 시간 간격을 제공하거나 네트워크 패킷이 10ms 시간 간격으로 고속 계층 2-7 집적 패킷 엔진(240)에 의해 처리되게 하는 한편 다른 실시예에선 5ms 시간 간격으로 처리되게 하고, 또 다른 실시예에선 1 및/또는 2ms 시간 간격으로 처리되게 한다. 고속 계층 2-7 집적 패킷 엔진(240)은, 동작 동안 암호화 엔진(234), 캐시 매니저(232), 정책 엔진(236), 및 멀티 프로토콜 압축 엔진(238)과 인터페이싱, 통신, 또는 집적될 수 있다. 이처럼, 암호화 엔진(234), 캐시 매니저(232), 정책 엔진(236), 멀티 프로토콜 압축 로직(238)의 로직, 함수, 또는 동작 중 임의의 것은 패킷 처리 타이머(242) 및/또는 패킷 엔진(240)에 응답하여 수행될 수 있다. 따라서, 암호화 엔진(234), 캐시 매니저(232), 정책 엔진(236), 멀티 프로토콜 압축 로직(238)의 로직, 함수, 또는 동작 중 임의의 것은, 패킷 처리 타이머(242)를 통해 제공되는 시간 간격들의 입상에서, 예를 들어 10ms 이하의 시간 간격으로 수행될 수 있다. 예를 들어, 일 실시예에서, 캐시 매니저(232)는 고속 계층 2-7 집적 패킷 엔진(240) 및/또는 패킷 처리 타이머(242)에 응답하여 임의의 캐싱된 오브젝트들의 무효화를 수행할 수 있다. 다른 일 실시예에서, 캐싱된 오브젝트의 무효화 또는 만료를, 예를 들어 10ms마다인 패킷 처리 타이머(242)의 시간 간격과 동일한 입상 값으로 설정할 수 있다.
다른 실시예들에서, 패킷 엔진(240) 또는 그 일부는, 가속 프로그램(120)의 일부처럼 클라이언트(205a 내지 205n) 상에서 동작할 수 있다. 이처럼, 가속 프로그램(120)은 상술한 바와 같이 패킷 처리 타이머(242)에 따라 클라이언트(250a 내지 205n) 상에서 동작할 수 있다. 일 양태에 따르면, 가속 프로그램(120)은 하나의 실행 포인트에서 그리고 팩(pack) 처리 타이머(242)에 의해 제공되는 입상(granular) 시간 간격에 응답하여 집적된 가속 기술들을 수행할 수 있다.
커널 공간(202)과는 달리, 사용자 공간(203)은 사용자 모드 애플리케이션 또는 사용자 모드에서 실행되는 프로그램에 의해 사용되는 운영 시스템의 메모리 영역 또는 일부분이다. 사용자 모드 애플리케이션은 커널 공간(202)에 직접적으로 액세스하지 않을 수 있으며 커널 서비스에 액세스하기 위해 서비스 호를 이용한다. 도 2d에 도시한 바와 같이, 어플라이언스(250)의 사용자 공간(203)은 그래픽 사용자 인터페이스(GUI; 210), 커맨드 라인 인터페이스(CLI; 212), 쉘 서비스(214), 건강 모니터링 프로그램(216), 및 대몬 서비스(218)를 포함한다. GUI(210) 및 CLI(212)는, 어플라이언스(250)의 운영 시스템을 통해서처럼 시스템 관리자 또는 다른 사용자가 어플라이언스(250)의 동작과 상호작용하고 그 동작을 제어할 수 있는 수단을 제공하며 사용자 공간(203) 또는 커널 공간(202)이다. GUI(210)는 임의의 유형 및 형태의 그래픽 사용자 인터페이스일 수 있으며 텍스트, 그래픽, 또는 브라우저와 같은 다른 임의의 유형의 프로그램, 애플리케이션을 통해 제공될 수 있다. CLI(212)는, 운영 시스템에 의해 제공되는 커맨드 라인과 같은 임의의 유형 및 형태의 커맨드 라인 또는 텍스트 기반 인터페이스일 수 있다. 예를 들어, CLI(212)는, 사용자로 하여금 운영 시스템과 상호작용할 수 있게 하는 툴인 쉘을 포함할 수 있다. 일부 실시예들에서, CLI(212)는 bash, csh, tcsh, 또는 ksh 유형 쉘을 통해 제공될 수 있다. 쉘 서비스(214)는, GUI(210) 및/또는 CLI(212)를 통해 사용자에 의해 어플라이언스(250) 또는 운영 시스템과의 상호작용을 지원하는 프로그램, 서비스, 태스크, 프로세스, 또는 실행가능 명령을 포함한다.
도 2d를 참조하면, 건강 모니터링 프로그램(216)을 이용하여 네트워크 시스템들이 적절히 기능을 하고 있고 네트워크를 통해 사용자들이 요구된 콘텐츠를 수신하고 있음을 모니터링, 확인, 보고, 및 보장한다. 건강 모니터링 프로그램(216)은, 어플라이언스(250)의 임의의 활동을 모니터링하기 위한 로직, 규칙, 함수, 또는 동작을 제공하는 하나 이상의 프로그램, 서비스, 태스크, 프로세스 또는 실행가능 명령을 포함한다. 일부 실시예들에서, 건강 모니터링 프로그램(216)은 어플라이언스(250)를 통해 전달되는 임의의 네트워크 트래픽을 간섭 및 조사한다. 다른 실시예들에서, 건강 모니터링 프로그램(216)은 다음에 따로는 것들 중 하나 이상을 이용하는 임의의 적절한 수단 및/또는 메커니즘에 의해 간섭한다. 즉, 암호화 엔진(234), 캐시 매니저(232), 정책 엔진(236), 멀티 프로토콜 압축 로직(238), 패킷 엔진(240), 대몬 서비스(218), 및 쉘 서비스(214)이다. 이처럼, 건강 모니터링 프로그램(216)은 임의의 애플리케이션 프로그래밍 인터페이스(API)를 호출하여 어플라이언스(250)의 임의의 부분의 상태, 상황, 또는 건강을 결정할 수 있다. 예를 들어, 건강 모니터링 프로그램(216)은 상황 질의를 주기적으로 핑 또는 전송하여 프로그램, 프로세스, 서비스, 또는 태스크가 활동적이며 현재 실행되고 있는지를 확인할 수 있다. 또 다른 예에서, 건강 모니터링 프로그램(216)은 임의의 프로그 램, 프로세스, 서비스, 또는 태스크에 의해 제공되는 임의의 상황, 에러, 또는 히스토리 로그를 확인하여 어플라이언스(250)의 임의의 일부분에 대한 임의의 조건, 상황, 또는 에러를 결정할 수 있다.
유사한 방식으로, 그리고 다른 실시예들에서, 건강 모니터링 프로그램(216)은, 어플라이언스(250)가 가속 프로그램(120)을 전송한 임의의 클라이언트(205a 내지 205n) 또는 어플라이언스(250)와 통신하는 그 임의의 클라이언트측 가속 프로그램(120)의 상태, 에러, 또는 히스토리를 확인 및 결정할 수 있다. 일부 실시예들에서, 건강 모니터링 프로그램(216), 또는 그 일부는 클라이언트(205a 내지 205n) 상에서 실행된다.
대몬(Daemon) 서비스(218)는 배경에서 또는 연속적으로 실행되고 어플라이언스(250)에 의해 수신되는 주기적 서비스 요구를 다루는 프로그램이다. 일부 실시예들에서, 대몬 서비스는 적절한 경우 다른 대몬 서비스(218)와 같은 다른 프로그램 또는 프로세스에 요구를 포워딩할 수 있다. 대몬 서비스(218)는 주의를 기울이지 않을 채로 실행되어 네트워크 제어와 같은 연속적이거나 주기적인 시스템 와이드 기능들을 수행할 수 있거나 임의의 원하는 태스크를 수행할 수 있다. 일부 실시예들에서, 하나 이상의 대몬 서비스(218)가 사용자 공간(203)에서 실행되는 한편, 다른 실시예들에서, 하나 이상의 대몬 서비스(218)는 커널 공간(202)에서 실행된다.
도 3a를 참조하면, 어플라이언스(250)에 의해 가속 프로그램(120)을 동적 제공하고 클라이언트(205)에 의해 가속 프로그램(120)을 자동 설치 및 실행하기 위한 본 발명의 방법 300의 일 실시예가 도시되어 있다. 간략히 참조해 보면, 단계 310에서, 어플라이언스(250)는 클라이언트(205)로부터의 요구를 간섭하여 서버와의 통신 세션을 확립한다. 단계 315에서, 어플라이언스(250)는 클라이언트(205)가 자동 설치 및 실행하도록 가속 프로그램(120)을 클라이언트(205)에게 전송한다. 단계 320에서, 가속 프로그램(120)의 수신시, 클라이언트(205)는 가속 프로그램(120)의 조용한 설치를 자동 실행 또는 수행한다. 단계 325에서, 가속 프로그램(120)의 설치 완료시, 클라이언트(205)는 네트워크 스택(210)에서 가속 프로그램(120)을 자동 실행하여 클라이언트(205)와 서버(206) 간의 통신을 간섭한다. 단계 330에서, 가속 프로그램(120)은 가속 기술들 중 임의의 것을 수행하고 통신을 암호화 및/또는 복호화할 수 있다.
더 상세하게는, 단계 310에서, 어플라이언스(250)는, 클라이언트(205)로부터의 서버(206)와의 통신 세션 확립 요구를 간섭하거나 임의의 적절한 수단과 메커니즘에 의해 수신할 수 있다. 일 실시예에서, 어플라이언스(250)의 패킷 엔진(240)은 클라이언트(205)로부터의 통신을 간섭한다. 다른 실시예들에서, 어플라이언스(250)는 예를 들어 가속 프로그램(120)과의 제1 전송 계층 접속을 확립하고, 클라이언트(205) 대신에 서버(205)와의 제2 전송 계층 접속을 확립한다. 이처럼, 어플라이언스(250)는 서버(206)로 전송된 클라이언트의 통신 중 임의의 것을 수신, 간섭, 또는 얻을 수 있다. 일부 실시예들에서, 어플라이언스(250)는 클라이언트(205)용 요구를 간섭하여 서버(206)와의 전송 계층 접속을 확립한다. 다른 실시예들에서, 어플라이언스(250)는 전송 계층 접속 위의 HPPT의 애플리케이션 계층 프 로토콜과 같은 임의의 프로토콜 계층을 통한 통신 세션을 확립하는 요구를 간섭한다. 본 발명의 이 방법의 실시예는 요구를 이용하여 실시되어 클라이언트(205)의 네트워트 스택(210)의 임의의 프로토콜 계층에서 통신 세션을 확립할 수 있다.
단계 315에서, 어플라이언스(250)는 가속 프로그램(120)을 클라이언트(205)에게 전송한다. 어플라이언스(250)는 클라이언트(205)에 의해 요구되는 통신 세션을 확립하기 전의, 확립하는 동안, 또는 확립 후의 임의의 포인트에서 가속 프로그램(120)을 전송할 수 있다. 일 실시예에서, 어플라이언스(250)는 클라이언트 요구의 간섭에 응답하여 가속 프로그램(120)을 클라이언트(205)에게 전송한다. 다른 일 실시예에서, 어플라이언스(250)는 그 요구를 서버(206)에 포워딩하고 가속 프로그램(120)을 클라이언트(205)에게 전송한다. 일부 실시예들에서, 어플라이언스(250)는 서버(206)와의 통신 세션을 확립하고, 통신 세션의 확립시, 어플라이언스(250)는 가속 프로그램(120)을 전송한다. 다른 일 실시예에서, 어플라이언스(250)는 클라이언트(205) 또는 클라이언트(205)의 사용자의 인증 및/또는 인가를 수행하고, 인증된 사용자 또는 클라이언트(205)가 이렇게 인가되면, 어플라이언스(250)는 가속 프로그램(120)을 클라이언트(205)에게 전송한다. 일 실시예에서, 어플라이언스(250)는 인증 및/또는 인가를 위해 클라이언트의 요구를 서버(206)에 포워딩하고, 서버(206)가 그 클라이언트의 요구를 인증 및/또는 인가하면, 어플라이언스(250)는 가속 프로그램(120)을 클라이언트(205)에게 전송한다.
일부 실시예들에서, 어플라이언스(250)는 클라이언트(205)의 메모리 또는 저장 장치로부터 가속 프로그램(120)을 전송한다. 다른 실시예들에서, 어플라이언 스(250)는 서버(206)로부터 가속 프로그램(120)을 요구하고 수신한 가속 프로그램(120)을 클라이언트(205)에게 포워딩한다. 다른 일 실시예에서, 서버(206)는 가속 프로그램(120)을 클라이언트(205)에게 전송한다. 일 실시예에서, 어플라이언스(250)는, 클라이언트(205)가 가속 프로그램을 얻고, 다운로드하고, 또는 수신하도록 유니폼 리소스 로케이터(URL)를 클라이언트(205)에게 전송한다. 일부 실시예들에서, URL은 어플라이언스(250)의 저장 장치나 메모리에 있는 가속 프로그램(120)의 위치를 식별하는 한편 다른 실시예에서, URL은 다운로드를 위해 가속 프로그램(120)을 제공하는 웹 서버와 같은 서버(206)의 가속 프로그램(120)을 식별한다. 일 실시예에서, 가속 프로그램(120)은 클라이언트(205) 상에 저장되고, 어플라이언스(250)는 클라이언트(205)가 클라이언트(205) 상에 저장된 가속 프로그램(120)을 설치 및 활용할 수 있도록 암호화 또는 라이센스 키와 같은 키를 클라이언트(205)에게 전송한다. 일부 실시예들에서, 어플라이언스(250)는, 클라이언트(205) 상에 가속 프로그램(120)을 설치 및 실행하는 데 사용되는 임의의 파일, 구성, 데이터, 또는 다른 정보를 클라이언트(205)에게 전송한다.
일 실시예에서, 가속 프로그램(120)은 클라이언트(205)에 의해 자동으로 설치되고 실행되도록 설계 및 구축된다. 가속 프로그램(120)은 운영 시스템의 유형 및 형태에 따라 임의의 파일, 엔트리, 구성, 데이터, 또는 명령을 포함하여 가속 프로그램(120)이 클라이언트(205)의 운영 시스템에 의해 등록되거나 인식될 수 있게 한다. 일 실시예에서, 서버나 어플라이언스와 같은 다른 컴퓨팅 장치는 가속 프로그램을 클라이언트(205)에게 전송하고 클라이언트(205)는 가속 프로그램(120) 을 자동 설치 및 실행한다. 일 실시예에서, 가속 프로그램(120)은 실행중인 컴퓨팅 장치(100)에 추가되는 플러그 앤 플레이(PnP) 장치로 되도록 설계 및 구축된다. 일부 실시예들에서, 가속 프로그램(120)은, 인스톨러 프로그램 및 가속 프로그램(120)을 포함하는 실행가능 프로그램과 같은 자가 설치 실행가능한 프로그램(executable)이다. 다른 실시예들에서, 가속 프로그램(120)은 복수의 파일, 예를 들어, 클라이언트(205)의 운영 시스템에서 가속 프로그램(120)을 등록 및 설치하는 데 필요한 파일과 같은 설치 패키지 또는 설치 다운로드를 포함할 수 있다. 예를 들어, 가속 프로그램(120)은 .inf 파일 및 .sys 파일을 포함할 수 있다. .inf 파일은, 장치 및 이 장치와 관련된 드라이버 파일들의 명칭들 위한 유효 논리적 구성들의 리스트처럼 장치를 셋업하는 데 필요한 정보를 운영 시스템들의 마이크로소프트 윈도우 패밀리의 윈도우 셋업(Windows Setup)에 제공한다. 일부 실시예들에서, .inf 파일은, 어느 실행가능 프로그램을 시작할지를 운영 시스템에게 알리거나 통보하는 구성 파일인 autorun .inf 파일, 및 그 실행가능 프로그램에 관련된 임의의 구성 정보를 포함할 수 있다. 일 실시예에서, .sys 파일은 가속 프로그램(120) 또는 그 일부를 포함하는 드라이버 파일이다.
단계 320에서, 클라이언트(205)는 가속 프로그램(120)을 자동 설치한다. 가속 프로그램(120)은 클라이언트(205)의 운영 시스템에 따라 임의의 적절한 방식으로 설치될 수 있다. 일 실시예에서, 클라이언트(205)는 가속 프로그램(120)의 수신시 가속 프로그램(120)을 설치한다. 일부 실시예들에서, 클라이언트(205)는 가속 프로그램(120)의 조용한 설치를 자동 수행 또는 실행한다. 일 실시예에서, 조 용한 설치는 클라이언트(205)의 애플리케이션 또는 사용자에게 투명하게 수행된다. 다른 실시예들에서, 가속 프로그램(120)의 조용한 설치는 클라이언트(205)의 리부팅이나 재시작을 요구하지 않는다. 또 다른 일 실시예에서, 조용한 설치는 사용자에 의한 설치 시작 및/또는 완료인 상호작용을 요구하지 않는다. 다른 실시예들에서, 가속 프로그램(120)의 조용한 설치는 클라이언트(205)가 네트워크 스택(210)의 네트워크 계층, 세션 계층, 및/또는 애플리케이션 계층에 대하여 투명하게 실행되는 동안 발생한다. 일부 실시예들에서, 가속 프로그램(120)은 클라이언트(205)에 의해 실행되는 자가 설치 실행가능한 프로그램이다. 다른 실시예들에서, 클라이언트(205)는 플러그 앤 플레이 매니저를 이용하여 가속 프로그램(120)을 설치한다. 일 실시예에서, 클라이언트(205)는 가속 프로그램(120)을 수신 및 설치하는 설치 매니저를 포함한다. 다른 일 실시예에서, 어플라이언스(250)에 의해 전송되는 가속 프로그램(120)은 가속 프로그램(120)을 설치하는 설치 프로그램도 포함한다.
다른 일 실시예에서, 가속 프로그램(120)은 조용하게 자동으로 설치된다. 일 실시예에서, 조용한 설치는 사용자가 신경 쓰지 않는 설치를 포함한다. 또 다른 일 실시예에서, 조용한 설치는, 사용자에 의한 설치를 개시 및/또는 완료하는 상호 작용을 요구하거나 갖지 않는 설치를 포함한다. 일부 실시예들에서, 이 설치는 설치 프로세스가 설치의 상태 또는 진행에 관한 정보를 표시하지 않는다는 점에서 조용하다. 일 실시예에서, 이 설치는 사용자에게 투명하다는 점에서 조용하다. 다른 실시예들에서, 이 설치는, 가속 프로그램(120)의 설치가 클라이언트(205)의 리부팅이나 재시작을 요구하지 않기 때문에 조용하다. 또 다른 일 실시예에서, 이 설치는, 클라이언트 동작을 간섭하거나 중단하지 않고서 클라이언트(205)의 동작 동안 설치가 끊김없이 발생한다는 점에서 조용하다. 이처럼, 가속 프로그램(120)은, 리부팅을 요구하지 않고 설치에 관련된 임의의 정보를 사용자에게 표시하지 않음으로써 사용자 또는 클라이언트(205)의 애플리케이션에 대하여 투명한 방식으로 설치될 수 있다. 일부 실시예들에서, 클라이언트(205)의 리부팅 또는 재시작을 방지 또는 우회하기 위해, 클라이언트(205)의 운영 시스템과 같은 클라이언트(205)는, 운영 시스템이 실행되는 동안 플러그 앤 플레이 장치들을 위한 가속 프로그램(120)의 일 실시예의 네트워크 드라이버와 같은 드라이버들을 설치 및 구성하는 플러그 앤 플레이 매니저를 구비한다. 일 실시예에서, 플러그 앤 플레이 매니저는 가속 프로그램(120)의 설치 패키지의 구성에 기초하여 클라이언트(205)를 리부팅하거나 재시작하도록 지시받지 않는다. 또 다른 일 실시예에서, .inf 파일은 컴퓨터를 리부팅하거나 재시작하는 명령을 포함하지 않는다. 일 실시예에서, 가속 프로그램(120)은 공유된 사용중 동적 링크 라이브러리(DLL) 대신에 사이드 바이 사이드(side-by-side) 구성요소로서 구현될 수 있다. 다른 특정한 실시예들에서, 가속 프로그램(120)의 네트워크 드라이버를 위해, 가속 프로그램(120)은 INetCfgPnpReconfigCallback 네트워크 드라이버(API)를 이용하고, 이에 따라 사용자는 운영 시스템을 리부팅할 필요가 없어 구성 변경이 드라이버에서 효력을 나타내게 된다. 또한, 가속 프로그램(120)은 INetCfgComponentControl의 ApplyPnpChanges 방법의 자신의 구현예 내에 SendPnpReconfig API를 호출하는 통지 오브젝트를 구비하여 구성 정보를 오브젝트를 소유하는 네트워크 구성요소의 드라 이버에게 전송할 수 있다. SendPnpReconfig API는, 데이터를 드라이버에 전송하는 메커니즘을 통지 오브젝트에게 제공하고 일부 실시예들에서 구성 변경이 효력을 나타내게 전에 사용자가 운영 시스템을 리부팅할 필요를 우회하는 데 이용된다.
단계 325에서, 자동으로, 조용하게, 투명하게, 또는 다른 방식으로 가속 프로그램(120)의 설치가 완료되면, 가속 프로그램(120)이 클라이언트(205) 상에서 자동으로 실행된다. 일부 실시예들에서, 가속 프로그램(120)을 설치하는 설치 프로그램은 가속 프로그램(120)을 개시 또는 실행한다. 일부 실시예들에서, 가속 프로그램(120)을 위한 설치 프로그램은 시스템으로 하여금 클라이언트(205)의 메모리에 가속 프로그램(120)을 실행하거나 로딩하도록 호출한다. 일 실시예에서, 가속 프로그램(120)의 설치에는, 명령, 커맨드, 또는 가속 프로그램(120)을 개시하는 디렉티브가 포함된다. 일 실시예에서, 가속 프로그램(120)은, 가속 프로그램(120)의 자동 실행을 클라이언트(205)에게 통지하는 autorun.inf file과 같은 자동 실행 구성을 포함한다. 다른 실시예들에서, 클라이언트(205)의 운영 시스템 또는 플러그 앤 플레이 매니저는 설치시 가속 프로그램(120)을 자동 실행한다. 일 실시예에서, 가속 프로그램(120)은, 클라이언트(205)에 의해 개시되는 서비스, 프로세스, 쓰레드, 또는 태스크를 포함한다. 일부 실시예들에서, 가속 프로그램(120)은 자동으로 개시하도록 구성된 운영 시스템의 서비스이다. 일 실시예에서, 가속 프로그램(120)은 클라이언트의 운영 시스템의 네트워크 스택의 메모리에 로딩된 네트워크 드라이버를 포함한다.
다른 일 실시예에서, 가속 프로그램(120)은 클라이언트(205)의 메모리 내로 로딩된 네트워크 드라이버를 포함한다. 일부 실시예들에서, 가속 프로그램(120)은 네트워크 스택(210)에 할당된 메모리 내에 로딩된다. 일부 경우에, 가속 프로그램(120)은 가속 프로그램(120)이 전송 계층과 같은 네트워크 스택의 프로토콜 계층에 액세스할 수 있는 메모리 영역 또는 공간에서 로딩 및 실행된다. 다른 경우에, 가속 프로그램은 가속 프로그램(120)이 커널 레벨 데이터 구조(225)에 액세스할 수 있게 하는 메모리에 로딩 및 실행된다. 다른 실시예들에서, 가속 프로그램(120)은 애플리케이션(220a 내지 220n)의 메모리 내로 로딩된다. 또 다른 일 실시예에서, 가속 프로그램(120)은 자신의 고유 메모리 공간이나 컨텍스트에서 독립적으로 실행된다. 일 실시예에서, 가속 프로그램(120)은 애플리케이션(220a 내지 220n)의 컨텍스트 또는 메모리 공간에서 실행된다. 일부 실시예들에서, 가속 프로그램(120)은 사용자 모드(203)에 할당된 메모리 또는 사용자 모드 메모리 내로 로딩되는 한편, 다른 실시예에서, 가속 프로그램(120)은 커널 모드(202)에 할당된 메모리 또는 커널 모드 메모리 내로 로딩된다.
일부 실시예들에서, 가속 프로그램(120)은 메모리 내로 로딩되며 그리고/또는 클라이언트의 사용자, 클라이언트(205)의 애플리케이션, 어플라이언스(250), 또는 서버(206)에 대하여 투명하게 클라이언트(205) 상에서 실행된다. 다른 실시예들에서, 가속 프로그램(120)은 네트워크 스택(210)의 전송 계층과의 인터페이싱을 실행하고, 세션 계층이나 애플리케이션 계층처럼 전송 계층 위의 임의의 프로토콜 계층에 대하여, 그리고 네트워크 계층처럼 전송 계층 아래의 임의의 프로토콜 계층에 대하여 투명하게 실행된다. 일 실시예에서, 가속 프로그램(120)은 클라이언 트(205)의 임의의 전송 계층 접속 또는 전송 계층 자체에 대하여 투명하게 실행된다.
단계 330에서, 로딩되고, 시작된 또는 실행되는 가속 프로그램(120)은, 1) 멀티 프로토콜 압축(238), 2) 전송 제어 프로토콜 풀링(224), 3) 전송 제어 프로토콜 멀티플렉싱(226), 4) 전송 제어 프로토콜 버퍼링(228), 5) 캐시 매니저(232)를 통한 캐싱과 같이 제공되는 임의의 기술처럼, 가속 프로그램(120)의 가속 기술들 중 임의의 것을 수행한다. 또한, 가속 프로그램(120)은 클라이언트(205)와 서버(206) 간의 통신에 임의의 암호화 및/또는 복호화를 수행할 수 있다. 일 실시예에서, 가속 프로그램(120)은 멀티 프로토콜 압축을 수행한다. 다른 일 실시예에서, 가속 프로그램(120)은 전송 제어 프로토콜 풀링을 수행하고, 또 다른 일 실시예에서, 가속 프로그램(120)은 풀링된 전송 계층 접속을 통해 멀티플렉싱을 수행한다. 일 실시예에서, 가속 프로그램(120)은 전송 제어 프로토콜 버퍼링을 수행한다. 일부 실시예들에서, 가속 프로그램(120)은 캐싱을 수행한다. 다른 실시예들에서, 가속 프로그램(120)은 캐싱 및 압축을 수행한다. 일 실시예에서, 가속 프로그램(120)은 전송 계층 풀링 및 멀티플렉싱으로 캐싱을 수행한다. 또 다른 일 실시예에서, 가속 프로그램(120)은 전송 계층 풀링 및 멀티플렉싱으로 멀티 프로토콜 압축을 수행한다. 또 다른 일 실시예에서, 가속 프로그램(120)은 캐싱 및/또는 압축을, TCP 버퍼링으로 수행하고, 다른 일 실시예에서, TCP 풀링 및 멀티플렉싱으로 수행한다.
이처럼, 본 발명의 클라이언트측 가속 프로그램(120)은 어플라이언스(250)에 의해 동적으로 제공되고, 클라이언트(205)의 애플리케이션 또는 사용자에 대하여 조용하거나 투명한 방식으로 클라이언트(205) 상에 자동으로 설치 및 실행되어 클라이언트(205)와 서버(206) 간의 통신에 하나 이상의 클라이언트측 가속 기술을 수행한다. 가속 프로그램(120)은 이러한 가속 기술들을 네트워크 스택의 임의의 프로토콜 계층에 대하여 투명하게 그리고 클라이언트의 사용자, 클라이언트의 애플리케이션, 어플라이언스, 또는 서버에 대하여 투명하게 수행할 수 있다.
다른 양태에 있어서, 본 발명은, 클라이언트(205)에 의해 액세스되도록 요구되는 애플리케이션이 가속될 수 있는지를 결정하고 애플리케이션이 가속될 수 있는 경우 클라이언트(205)에게 가속 프로그램(120)을 제공하는 어플라이언스(250)에 관한 것이다. 도 3b를 참조하면, 본 발명의 방법의 다른 일 실시예가 도시되어 있다. 본 발명은 요구시 실시되어 서버상의 애플리케이션에 대한 액세스 요구뿐만 아니라 접속이나 통신 세션을 확립할 수 있다. 방법 350을 간략히 살펴 보면, 단계 355에서, 어플라이언스(250)는 서버(206) 상의 애플리케이션(220a 내지 220n)에 대한 액세스를 요구하는 클라이언트(205)로부터의 요구를 간섭한다. 단계 260에서, 어플라이언스(250)는 애플리케이션(220)이 가속될 수 있는지 여부를 결정한다. 단계 365에서, 애플리케이션(220)이 가속될 수 없다면, 애플리케이션은 단계 267에서 요구를 서버에 포워딩한다. 단계 365에서, 애플리케이션(220)이 가속될 수 있다면, 어플라이언스(250)는, 가속 프로그램(120)이 클라이언트(205) 상에 설치되어 있는지 또는 클라이언트(205)에게 이미 전송되었는지를 결정한다. 가속 프로그램(120)이 클라이언트(205)에게 아직 제공되지 않았다면, 방법 350은 상술한 방법 300의 단계 315에서 시작하여 가속 프로그램을 전송, 설치, 실행한다. 가속 프로그램(120)이 설치되어 있고 클라이언트(205) 상에서 실행중이면, 어플라이언스(250)는 단계 375에서 애플리케이션(220)을 가속하라는 메시지를 클라이언트(205) 상의 가속 프로그램(120)에 전달한다. 방법 300의 단계 330에서, 가속 프로그램(120)은 애플리케이션(220)을 위한 통신에 대하여 가속 기술들을 수행하고, 이러한 통신을 암호화 및/또는 복호화할 수 있다.
단계 355에서, 보다 상세하게, 어플라이언스(250)는 클라이언트(205)로부터의 요구를 임의의 적절한 수단 및 메커니즘에 의해 간섭하여 서버(206)에 의해 제공되는 애플리케이션에 액세스한다. 일 실시예에서, 어플라이언스(250)의 패킷 엔진(240)은 클라이언트(205)로부터의 통신을 간섭한다. 다른 실시예들에서, 어플라이언스(250)는, 예를 들어 가속 프로그램(120)을 갖는 클라이언트(205)와의 제1 전송 계층 접속, 및 클라이언트(205) 대신에 서버(205)와 제2 전송 계층 접속을 확립한다. 이처럼, 어플라이언스(250)는 서버(206)에 전송되는 클라이언트의 통신 중 임의의 것을 수신, 간섭, 또는 얻을 수 있다. 일부 실시예들에서, 어플라이언스(250)는 클라이언트(205)를 위한 요구를 간섭하여 서버(206)와의 확립된 전송 계층 접속을 통해 애플리케이션(220)에 액세스한다. 다른 실시예들에서, 어플라이언스(250)는 요구를 간섭하여 전송 계층 접속 위의 HTTP의 애플리케이션 계층 프로토콜과 같은 임의의 프로토콜 계층을 통해 통신 세션을 확립한다. 일 실시예에서, 어플라이언스(250)는 클라이언트(205)로부터의 요구를 간섭하여 ICA나 RDP과 같은 원격 디스플레이 프로토콜을 통해 서버(206)로부터의 애플리케이션(220)을 표시 및 제공한다.
단계 360에서, 어플라이언스(250)는 클라이언트(205)에 의해 요구된 애플리케이션(220)이 가속될 수 있는지 여부를 결정한다. 일부 실시예들에서, 어플라이언스(250)는, 애플리케이션을 이름, 유형, 또는 카테고리로 식별하는 간섭된 클라이언트 요구로부터의 애플리케이션 식별자를 식별, 추출, 또는 처리한다. 일 실시예에서, 애플리케이션 가속 결정 메커니즘(275)은 어플라이언스(250)에 의해 이용되어 애플리케이션(220)이 가속될 수 있는지 여부를 결정한다. 일부 실시예들에서, 애플리케이션 가속 결정 메커니즘(275)은 데이터베이스, 룩업 테이블, 또는 메모리나 저장 장치의 다른 구조화된 데이터 소스에서 쿼리 또는 룩업을 수행하여, 애플리케이션(220)이 가속될 수 있는지 여부를 결정한다. 또 다른 일 실시예에서, 어플라이언스(250)는 요구와 같은 통신을 서버(206)에 전송하여 애플리케이션(220)이 가속될 수 있는지 여부를 결정한다.
다른 실시예들에서, 어플라이언스(250)는 성능 로그 또는 히스토리를 구비하여 이전에 애플리케이션(220)이 가속되었는지 여부와 가속이 애플리케이션(220)의 성능 및 동작에 향상을 가져왔는지를 결정한다. 이처럼, 어플라이언스(250)는, 이러한 가속이 애플리케이션(220)의 성능이나 동작에 대하여 소정의 개선 임계값을 충족하면 애플리케이션(220)이 가속될 수 있다고 결정할 수 있다. 또 다른 일 실시예에서, 어플라이언스(250)는 네트워크(204), 클라이언트(205), 또는 서버(206)의 현재 동작 및 성능에 기초하는 경험적 규칙을 제공한다. 일 실시예에서, 애플리케이션(220)은, 클라이언트(205)가 소정의 성능 및 동작 특성 또는 기능, 예를 들어, 소정의 속도 프로세서나 최소량의 메모리를 갖는다면 가속될 수 있는 것으로 결정될 수 있다. 일부 실시예들에서, 애플리케이션(220)은 어플라이언스(250)의 정책 매니저에서처럼 구성된 정책이나 규칙에 기초하여 가속될 수 있는 것으로 결정될 수 있다. 예를 들어, 소정 유형의 애플리케이션(220) 에 액세스하는 소정 유형의 클라이언트(205)를 갖는 원격 사용자와 및/또는 서버(206) 간에 통신되는 애플리케이션(220)을 가속할 수 있다. 다른 실시예들에서, 애플리케이션(220)은 클라이언트(205)의 사용자의 인증 및 인가에 기초하여 가속될 수 있는 것으로 결정될 수 있다. 또 다른 일 실시예에서, 애플리케이션(220)은 가속될 필요가 없는 것으로 결정될 수 있다. 예를 들어, 애플리케이션(220)은 가끔씩 이용되는 유형이다.
단계 365에서, 애플리케이션(220)이 가속될 수 없거나 가속 기술들을 클라이언트(205) 상의 애플리케이션(220)에 적용할 필요한 것으로 결정되면, 어플라이언스(250)는 단계 368에서 간섭된 클라이언트 요구를 서버(206)에 포워딩하고, 가속 프로그램(120)을 클라이언트(205)에게 전송하거나 제공하지 않는다. 일 실시예에서, 어플라이언스(250)는 어플라이언스(250)의 어플라이언스 기반 가속을 수행 또는 제공할 수 있다. 다른 실시예들에서, 어플라이언스(250)는 어플라이언스(250) 상의 애플리케이션(220)의 가속을 수행하지 않는다. 또 다른 일 실시예에서, 어플라이언스(250)는, 애플리케이션(220)이 가속될 수 없거나 가속될 필요가 없다고 어플라이언스(250)가 결정하면, 애플리케이션(220)을 위해 일부 가속 기술들을 수행하고 다른 기술들을 수행하지 않을 수 있다.
단계 365에서, 애플리케이션(220)이 가속될 수 있거나 클라이언트(205) 상의 애플리케이션에 가속 기술들을 적용할 필요가 있는 것으로 결정되면, 어플라이언스(250)는 가속 프로그램(120)이 클라이언트(205)에게 제공되었는지 여부를 결정한다. 일 실시예에서, 어플라이언스(250)는, 가속 프로그램(120)이 클라이언트(205) 상에 설치되었는지 여부 또는 클라이언트(205) 상에서 실행중인지 여부를 결정한다. 일부 실시예들에서, 어플라이언스(250)는 통신을 클라이언트(205) 상의 가속 프로그램(120)에 전송하여 가속 프로그램(120)이 클라이언트(205) 상에서 실행중인지 여부를 결정한다. 다른 실시예들에서, 어플라이언스(250)는 로그 파일 또는 히스토리 파일을 확인하여 가속 프로그램(120)이 클라이언트(205)에 전송되었는지 여부를 결정한다. 또 다른 일 실시예에서, 어플라이언스(250)는 어플라이언스(250)이나 클라이언트(205)의 건강 모니터링 프로그램(216)으로 확인하여 가속 프로그램(120)이 클라이언트(205) 상에서 실행중인지 여부를 결정한다.
가속 프로그램(120)이 클라이언트(205) 상에 전송, 설치, 및/또는 실행되지 않았다고 어플라이언스(250)가 결정하면, 어플라이언스(250)는 도 3a와 함께 설명되는 방법 300의 단계들에 따라 가속 프로그램(120)을 제공한다. 예를 들어, 어플라이언스(250)는 가속 프로그램(120)을 클라이언트(205)에게 전송하고, 수신시 클라이언트(205)는 가속 프로그램을 자동 설치 및 실행한다. 일 실시예에서, 방법 300의 실시예의 적절한 단계들의 성능에 따라, 어플라이언스(250)는 단계 275에서 메시지를 가속 프로그램에 통신하여 가속 기술들 중 하나 이상을 애플리케이션(220)에 적용할 수 있다. 다른 실시예들에서, 가속 프로그램(120)이 이미 설치되어 있고 실행중이라면, 단계 375에서 어플라이언스(250)는 메시지를 가속 프로그 램(120)에 통신하여 가속 기술들 중 하나 이상을 애플리케이션(220)에 적용한다.
일부 실시예들에서, 가속 프로그램(120)은 식별된 애플리케이션(120)에 대하여 가속 프로그램(120)에 의해 이용가능한 가속 기술들 중 임의의 것을 수행한다. 다른 실시예들에서, 어플라이언스(250)는 애플리케이션(220)을 위해 가속 기술들 중 어느 것을 수행해야 하는지를 가속 프로그램(120)에게 지시한다. 일 실시예에서, 가속 프로그램(120)은 세션 단위로 애플리케이션(120)용으로 원하는 가속 기술들을 적용할 수 있다. 즉, 어플라이언스(250)로부터 가속 프로그램(120)으로의 메시지는 애플리케이션(220)의 이러한 인스턴스나 세션 동안 가속 기술들의 수행을 가속 프로그램(120)에게 통보할 뿐이다. 다른 실시예들에서, 가속 프로그램(120)이 어플라이언스(250)로부터 메시지를 수신하여 식별된 애플리케이션(220)을 위한 가속 기술들을 적용하기 때문에, 가속 프로그램(120)은 애플리케이션(220)의 임의의 인스턴스나 세션 동안, 또는 클라이언트(205)가 리부팅되거나 재시작될 때까지, 또는 어플라이언스(250)가 리부팅되거나 재시작될 때까지 가속 기술들을 적용한다.
일 실시예에서, 단계 375에서 어플라이언스(250)로부터의 메시지는 애플리케이션 특정형이 아니다. 예를 들어, 메시지는 클라이언트(205)의 임의의 애플리케이션을 위해 가속 기술들 중 하나 이상을 실행하는 것을 가속 프로그램(120)에게 통보한다. 일부 실시예들에서, 클라이언트(205)에게 전송된 메시지는 가속 프로그램(120)에게 애플리케이션(220)을 위한 또는 모든 애플리케이션(220a 내지 220n)을 위한 가속 기술들 중 임의의 하나 이상의 이용을 중지할 것을 통보한다. 다른 일 실시예에서, 어플라이언스(250)는 메시지를 가속 프로그램(120)에 통신하여 소정의 애플리케이션(220)을 무시한다. 또 다른 일 실시예에서, 어플라이언스(250)는 메시지를 가속 프로그램(120)에 통신하여 가속 기술 또는 새로운 가속 기술의 애플리케이션에 대한 갱신과 같은 구성 데이터나 정보를 가속 프로그램(120)에 제공한다.
단계 330에서, 가속 프로그램(120)은, 1) 멀티 프로토콜 압축(238), 2) 전송 제어 프로토콜 풀링, 3) 전송 제어 프로토콜 멀티플렉싱(226), 4) 전송 제어 프로토콜 버퍼링(228), 5) 캐시 매니저(232)를 통한 캐싱과 같은 임의의 기술들처럼 애플리케이션(220)을 위한 가속 프로그램(120)의 가속 기술들 중 임의의 것을 수행할 수 있다. 또한, 가속 프로그램(120)은 클라이언트(205)와 서버(206) 간의 애플리케이션(220)의 통신의 임의의 암호화 및/또는 복호화를 수행할 수 있다. 일 실시예에서, 가속 프로그램(120)은 애플리케이션 관련 데이터의 멀티 프로토콜 압축을 수행한다. 또 다른 일 실시예에서, 가속 프로그램(120)은 전송 제어 프로토콜 풀링을 수행하고, 다른 실시예에서, 가속 프로그램(120)은 풀링된 전송 계층 접속을 통한 멀티플렉싱을 수행한다. 일 실시예에서, 가속 프로그램(120)은 전송 제어 프로토콜 버퍼링을 수행한다. 일부 실시예들에서, 가속 프로그램(120)은 캐싱을 수행한다. 다른 실시예들에서, 가속 프로그램(120)은 캐싱 및 압축을 수행한다. 일 실시예에서는, 가속 프로그램(120)이 전송 계층 풀링으로 캐싱을 수행하고 다른 실시예에서는 멀티플렉싱으로도 캐싱을 수행한다. 또 다른 일 실시예에서, 가속 프로그램(120)은 멀티 프로토콜 압축을 TCP 버퍼링으로 수행하고, 다른 일 실시예에서 전송 계층 풀링으로 수행하며, 또 다른 일 실시예에서 멀티플렉싱으로도 수행한다. 또 다른 일 실시예에서, 가속 프로그램(120)은 캐싱을 압축으로 수행하고, 다 른 일 실시예에서 TCP 풀링으로 수행하며, 또 다른 일시시예에서 멀티플렉싱으로 수행한다.
이처럼, 본 발명의 어플라이언스(250)는 애플리케이션을 가속시켜야 하는지, 아니면 애플리케이션이 가속될 수 있는지를 동적으로 판단하여 본 발명의 클라이언트측 가속 프로그램(120)에 전달함으로써 클라이언트(205)에서 애플리케이션(220)에 한 가지 이상의 가속 기술을 실행하게 한다. 게다가, 일부 실시예에서는, 장치에서 복수의 가속 프로그램(120)을 클라이언트(205)에 동적으로 전달하여, 클라이언트(205)에 자동으로 설치 및 실행되도록 한다. 예를 들어, 서버(205)와의 연결이나 애플리케이션(220)과의 통신 세션 각각에 대해 본 발명의 기술이나 방법에 따른 가속 프로그램이 제공된다. 이처럼, 클라이언트(205)는 서버(206a~206n)이나 애플리케이션(220a~220n) 각각에 대해 가속을 처리하고 수행하는 복수의 가속 프로그램(120)을 자동으로 설치하고 실행한다.
일 양태에서, 본 발명은 가속 프로그램이 효율적인 통합 방식으로 복수의 가속 기술을 수행하는 것과 관련된다. 가속 프로그램(120)은 전송 제어 프로토콜 접속의 전송 계층에서 네트워크 패킷을 간섭하며 가속 프로그램(120)의 단일 인터페이스 포인트(또는 장소)에서 복수의 가속 기술을 적용할 네트워크 패킷의 정보와 데이터(페이로드 데이터 등)를 얻기 위해 커널 레벨 데이터 구조를 사용한다. 이에 대해서는 통합 방식으로 복수의 가속 기술을 실행하는 방법 380의 실시예가 예시된 도면 3d를 참조한다. 간략히 설명하면, 단계 280에서, 가속 프로그램(120)이 전송 계층에서 클라이언트(205)와 서버(206) 간의 전송 계층 접속을 경유하는 통신의 네 트워크 패킷을 간섭한다. 단계 390에서, 가속 프로그램(120)은 전송 계층에서 커널 레벨 데이터 구조, 예를 들어, API를 통해 클라이언트(205)의 네트워크 스택(210)에 공급되는 데이터 구조 등을 통해 네트워크 패킷에 액세스한다. 단계 395에서, 가속 프로그램(120)은 커널 레벨 데이터 구조를 사용하여 가속 프로그램(120)의 단일 인터페이스 포인트나 실행 포인트에서 통합 방식으로 복수의 가속 기술을 실행한다.
보다 자세히 설명하면, 단계 385에서, 가속 프로그램(120)이 적절한 수단과 메커니즘으로 클라이언트(205)와 서버(206) 간의 전송 계층 접속을 경유하는 통신의 네트워크 패킷을 간섭한다. 일 실시예에서, 가속 프로그램(120)은 클라이언트의 요구의 네트워크 패킷, 또는 이 요구에 관련된 네트워크 패킷, 또는 이에 대한 응답을 간섭하여 클라이언트(205)와 서버(206) 간에 전송 계층 접속을 확립한다. 다른 실시예에서, 가속 프로그램(120)은 클라이언트의 요구의 네트워크 패킷, 또는 이 요구에 관련된 네트워크 패킷, 또는 이에 대한 응답을 간섭하여 클라이언트(205)와 서버(206) 간의 전송 계층 접속을 통해 애플리케이션(220)에 액세스하거나 이용한다. 일 실시예에서, 가속 프로그램(120)은 전송 드라이버 인터페이스를 통해 전송 프로토콜 계층에서 네트워크 패킷을 간섭하거나 네트워크 스택(210)의 전송 프로토콜 계층에서 네트워크 드라이버 인터페이스를 통해 네트워크 패킷을 간섭한다. 다른 실시예에서는, 가속 프로그램(120)이 NDIS(Network Driver Interface Specification) 드라이버나 미니-포트 드라이버, 미니-필터 드라이버를 통해 네트워크 스택(210)의 전송 프로토콜 계층이나 다른 프로토콜 계층에서 네트워크 패킷 을 간섭한다. 일부 실시예에서는, 가속 프로그램(120)이 후킹이나 필터링 메커니즘을 통해 전송 계층에서 네트워크 패킷을 간섭한다.
단계 390에서, 가속 프로그램(120)은 커널 레벨 데이터 구조 225를 통해 전송 계층에서 네트워크 패킷에 액세스하여 정보와 데이터를 얻는다. 커널 레벨 데이터 구조(225)를 사용함으로써, 가속 프로그램(120)은 전송 계층에서 네트워크 패킷이 운반하거나 전송하는 페이로드나 한 가지 이상의 프로토콜에 대한 정보와 데이터를 얻을 수 있다. 일부 실시예에서는, 네트워크 패킷을 전송 계층 상이나 그 위에서 네트워크 스택의 계층에 표시하기 위해 커널 레벨 데이터 구조를 사용함으로써 가속 프로그램(120)은 전송 계층에서 전송 계층 네트워크 패킷이 운반하는 프로토콜 계층에 대해 복수의 가속 기술을 실행하거나 운영할 수 있다. 일 실시예에서, 단일 커널 레벨 데이터 구조(225)는 컨텍스트 스위칭에 따른 복사나 메모리 할당이 네트워크 스택(210)의 다양한 프로토콜 계층에서 다중 데이터 구조를 사용하는 것을 방지한다. 일 실시예에서, 가속 프로그램(120)은 커널 레벨 데이터 구조(225)를 다른 커널 레벨 데이터 구조나 사용자-레벨 데이터 구조를 구성하는 제2 데이터 구조에 복사한다.
단계 395에서, 가속 프로그램(120)은 프로그램(210) 내의 단일 인터페이스 포인트나 위치에서 복수의 가속 기술을 수행, 실행 또는 운영한다. 가속 프로그램(120)은 복수의 가속 기술인 1) 멀티-프로토콜 압축(238), 2) 전송 제어 프로토콜 풀링(224), 3) 전송 제어 프로토콜 멀티플렉싱(226), 4) 전송 제어 프로토콜 버퍼링(228), 5) 캐시 매니저(232)를 통한 캐싱 등이 제공하는 기술을 수행한다. 가 속 프로그램(120)은 가속 기술들의 실행시 동일한 포인트에서 클라이언트(205)와 서버(206) 간의 통신의 암호화 및/또는 복호화도 수행할 수 있다.
일 실시예에서, 가속 프로그램(120)은 함수 호출 또는 단일 장소나 위치와 같은 실행 가능한 명령 세트, 필요로 하는 서로 후속하는 가속 기술들을 수행한다. 예를 들어, 가속 프로그램(120)은 커널 레벨 데이터 구조를 통해 간섭한 네트워크 패킷을 취득한 후 서로 후속하는 가속 기술들의 로직이나 함수, 규칙, 동작을 나타내는 명령을 실행한다. 이처럼, 네트워크 패킷의 정보와 데이터는 커널 레벨 데이터 구조(225)를 통해 추출하거나 얻을 수 있으며 가속 기술을 나타내는 가속 프로그램(120)의 명령에 대해 입력, 파라미터, 인자 및 조건으로 사용할 수 있다. 네트워크 패킷이 상위 레벨의 프로토콜 데이터와 정보를 운반하지만, 일부 실시예에서는 가속 프로그램(120)이 실행 중에 네트워크 패킷 및 상위 레벨의 데이터와 정보를 단일 포인트에서 한번에 처리한다. 게다가, 가속 프로그램(120)은 통합 방식에서 요구하는 순서대로 캐시 매니저(232)에 저장된 압축 데이터나 캐시에서 회수된 압축/압축해제 데이터 등 복수의 가속 기술의 각각을 수행한다.
일 실시예에서, 가속 프로그램(120)은 서로를 수반하는 멀티-프로토콜 압축 및 캐싱을 수행한다. 다른 실시예에서, 가속 프로그램(120)은 풀링된 전송 계층 접속을 통한 전송제어 프로토콜 풀링 및 멀티플렉싱에 관련된, 서로 후속하는 동작들을 수행한다. 일 실시예에서, 가속 프로그램(120)은 압축과 캐싱을 수반하거나 또는 TCP 풀링이나 멀티플렉싱을 수반하는 전송 제어 프로토콜 버퍼링을 수행한다. 일부 실시예에서, 가속 프로그램(120)은 캐싱을 수행한다. 일 실시예에서, 가속 프로그램(120)은 전송 계층 풀링 및 멀티플렉싱을 수반하는 캐싱을 수행한다. 다른 실시예에서, 가속 프로그램(120)은 전송 계층 풀링 및 멀티 플렉싱을 수반하는 멀티-프로토콜 압축을 수행한다. 다른 실시예에서 가속 프로그램(120)은 TCP 버퍼링을 수반하는, 더 나아가서는 TCP 풀링과 멀티플렉싱을 수반하는, 캐싱 및/또는 압축을 수행한다.
가속 프로그램이 후속으로 가속 기술을 수행한다고 대략적으로 설명했지만 후속 실행에는 가속과 관련이 없는 다른 로직과 함수, 운영이 포함될 수 있으며 이들은 통합되어 각 가속 기술 사이에 실행된다. 가속 프로그램은 가속 기술을 위한 실행 가능한 명령 등의 통합과 더불어 여전히 운영 및 성능 효율성을 갖는다. 또한 운반되는 프로토콜 계층이나 상위 전송 프로토콜 계층에 대한 가속 기술은 전송 계층에서 한번에 및/또는 단일 로케이션에서 처리된다. 이처럼, 네트워크 패킷이 가로질러 네트워크 스택(210)의 상위 레벨이나 네트워크 스택(210)에서 후부점(later point)에서 처리되기 때문에 이러한 상위 레벨에 대한 가속 기술은 필요치 않다.
다른 양태에서, 본 발명은 제1 프로그램(222)과 가속 프로그램(120)(여기서는 제2 프로그램임)을 사용하여 실용화될 수 있다. 일 실시예에서, 제1 프로그램(222)과 제2 프로그램(120)은, 본 발명의 클라이언트측 가속 기술을 적용한 어플라이언스(250) 등을 통해, 서버(206)를 갖춘 가상 사설 네트워크 접속을 용이하게 구축하는 데 사용될 수 있다. 다른 실시예에서 제1 프로그램(222)이 제2 프로그램 또는 가속 프로그램(120)을 설치하고 실행하는 데 사용된다. 이에 대해서는 본 발명의 이러한 양태를 실용화하는 방법 400이 도시된 도 4A를 참조한다. 간단히 설 명하면, 단계 402에서 클라이언트(205)가 로그인하여 와 통신 세션을 구축한다. 단계 404에서 어플라이언스(250)는 제1 프로그램(222)을 클라이언트에 보낸다. 단계 406에서 클라이언트(205)는 제1 프로그램(222)을 설치하고 실행하며, 프로그램(222)은 가속 프로그램(120), 즉, 제2 프로그램을 설치하고 실행한다. 단계 407에서 클라이언트(205)는 구축된 암호화된 데이터 통신 세션을 통해 사설 네트워크(204) 상의 리소스와 전달하고 액세스한다. 단계 410에서 클라이언트는 어플라이언스(250)에서 로그아웃하고 어플라이언스(250)와의 통신 세션을 종료한다.
방법 400의 단계 402에서, 클라이언트(205)는 로그인 절차를 실행하고 네트워크(204)를 통해 어플라이언스(250)와 암호화된 데이터 통신 세션을 구축한다. 일 실시예에서 암호화된 통신 세션은 클라이언트(205)에서 트래픽을 사설 데이터 통신 네트워크(204)'내의 어플라이언스(250) 뒤에 상주하는 206a~206n 서버로 브릿지하는 터널로 사용된다. 일 실시예에서, 클라이언트(205)는 로그인하기 위해 웹 브라우저(마이크로소프트 인터넷 익스플로러 넷스케이프 네비게이터 등)를 사용하며, 어플라이언스(250)와 데이터 통신 세션을 구축하기 위해 SSL이나 다른 암호 방식(IPSec, TLS 등)을 사용한다. 다른 실시예에서는, HTTPS가 암호화된 데이터 통신 세션을 초기화하기 위해 사용될 수 있다.
단계 404에서, 로그인 및 암호화된 데이터 통신 세션 구축에 반응하여 어플라이언스(250)는 네트워크(204)를 통해 제1 프로그램을 클라이언트(205)에 보낸다. 제1 프로그램은 암호화된 데이터 통신 세션 상에서 통신을 위한 터널 종단점으로 작동하도록 설계되고 구축되거나 또는 달리 환경 설정된다. 일 실시예에서 제1 프 로그램은 의 브라우저에서 자동으로 설치되고 실행되는 플러그-인 애플리케이션으로 구성되어 있다. 예를 들면, 제1 프로그램은 마이크로소프트 인터넷 익스플로러 웹 브라우저에서 실행되도록 플러그인으로 제공되는 ActiveX control이 포함된다. 다른 실시예에서, 제1 프로그램은 넷스케이프 네비게이터 웹 브라우저에서 플러그인으로 제공되는 자바 애플릿이나 네트워크 환경 전반에 걸쳐 사용되는 다른 컨트롤이나 프로그래밍 구성요소가 포함된다.
단계 406에서, 클라이언트(205)는 제1 프로그램(222)을 설치하고 실행하며 제1 프로그램은 제2 프로그램을 클라이언트(205)에 설치를 포함한다. 일 실시예에서, 제1 프로그램(222)은 방법 300 및 도 3A에 언급된 기술 중 일부를 사용하여 자동 설치되고 실행된다. 일부 실시예에서는, 제1 프로그램(222)이 어플라이언스(250)로부터 제2 프로그램인 가속 프로그램(120)을 얻거나, 다운로드 하거나 받는다. 다른 실시예에서, 제1 프로그램(222)은 무인설치(silent installation)나 클라이언트(205)나 클라이언트(205)의 애플리케이션(220), 어플라이언스(250)의 사용자, 서버(206)에게 투명한 설치 방식으로 가속 프로그램(120) 등의 제2 프로그램을 자동 설치하고 실행시킬 인스톨러나 인스톨 매니저를 포함한다.
일 실시예에서, 제2 프로그램은 클라이언트(205)에서 실행 중인 애플리케이션(220)에서 네트워크(204) 상의 리소스로 전송되는 통신을 간섭하고 간섭한 통신을 제1 프로그램(222)으로 보내 암호화된 통신 세션을 통해 어플라이언스(250)로 보내도록 일부 환경 설정된다. 제2 프로그램은 또한 인트라넷 네트워크 이름 분석(name resolution) 서비스를 제공하고 선택적으로 네트워크 트래픽을 분리하도록 환경 설정된다. 트래픽을 분리함으로써 본 발명의 실시예는 임의의 트래픽을 제1 프로그램의 SSL 터널이나 암호터널에 채널 할당할 것인지, 클라이언트(205)의 정상적이거나 일상적, 전형적인 운영 하에서 네트워크 스택(210)의 전송 계층에서 처리하기 위해 임의의 트래픽을 지속되게 할 것인지를 결정할 수 있다. 일 실시예에서 제2 프로그램에는 클라이언트(205) 운영 시스템에 후크로서 삽입된 동적인 인터셉터(필터 디바이스 드라이버 등)가 포함되어 있다. 예를 들어 제2 프로그램에는 클라이언트 운영 시스템의 전송 계층 스택(마이크로소프트 윈도우 운영 시스템의 전송 계층 스택 등)에 첨부된 필터 디바이스 드라이버가 포함된다.
단계 408에서 일단 제1 및 제2 프로그램이 설치되면 클라이언트(205)에서 실행되는 애플리케이션은 구축된 암호화된 통신 세션을 통해 사설 데이터 통신 네트워크(204) 상의 리소스(애플리케이션, 데이터 등)와 접속하고 액세스할 수 있다. 이러한 통신의 발생 방식에 대해서는 도 4B와 관련하여 아래에서 자세히 다룬다. 다만 일 실시예에서, 상술한 제1 프로그램 및 제2 프로그램의 기능들은 본 발명의 가속 프로그램(120)과 같이, 클라이언트(205)에서 단일의 제어 또는 프로그래밍 구성요소에 의해 자동 설치되고 실행되는 것에 유의한다. 가상 사설 네트워크 접속 및 통신을 제공하는 외에도 제1 프로그램(222) 및/또는 제2 프로그램(가속 프로그램(120) 등) 은 가상 사설 네트워크 접속(어플라이언스(250)로 암호화된 터널이나 브릿지 등)을 통해 클라이언트의 통신에 관해 여기에 도시된 모든 가속 기술을 수행한다.
단계 410에서 클라이언트(205)는 네트워크(204)와 연결을 끊기 위해, 어플라 이언스(250)와의 암호화된 데이터 통신 세션을 종료하는 로그아웃 절차를 수행한다. 일 실시예에서, 로그아웃 시 제1 프로그램(222)은 제1 프로그램 및/또는 제2 프로그램이 설치되기 전의 상태로 운영 시스템을 되돌려 놓기 위해 클라이언트(205)의 운영 시스템에 가해진 수정을 자동으로 소거한다. 일 실시예에서, 제1 프로그램(222) 및/또는 제2 프로그램에는 클라이언트(205)의 운영 시스템나 클라이언트(205)의 추가 운영에서 클라이언트(205)의 지속적인 운영을 침해하지 않는 방식으로 제1 프로그램과 제2 프로그램을 제거하기 위한 언인스톨러나 언인스톨 명령이 포함된다. 또한, 다른 실시예에서는 본 발명을 사용하여 제공된 통신 접속이나 세션 중에 클라이언트(205)의 애플리케이션이 사용한 파일들(임시 파일이나 쿠키 등)을 제1 프로그램(222) 및/또는 가속 프로그램(120)이 제거한다.
도 4B는 클라이언트(205)가 사설 데이터 통신 네트워크(204) 상의 리소스와 연결하고 액세스시키는 본 발명의 또 다른 방법 450의 실시예를 보여준다. 예를 들어, 방법 450은 방법 400의 단계 408이 실행되는 방법을 의미한다. 간략히 말해, 단계 452에서는 클라이언트(205)가 제1 프로그램 및/또는 제2 프로그램을 통해 새로운 접속을 만들거나 도메인 네임을 분석(TCP/IP 도메인 네임 분석 등)한다. 단계 454에서는 제2 프로그램이 클라이언트(205)에서 사설 네트워크(204)로 전송되는 통신을 간섭하여 그 통신을 방향변경하여 제1 프로그램으로 보낸다. 단계 458에서는 제1 프로그램(222) 접속을 종료하거나 프록시(대리)하고, 페이로드를 분리시키고, 구축된 암호화된 통신 세션을 통해 전달되도록 페이로드를 캡슐화한다. 단계 460에서, 제1 프로그램(222)은 공중 네트워크(204) 상에서 간섭한 통신을 사전 에 구축된 암호화된 통신 세션을 통해 사설 네트워크(204) 내의 어플라이언스(250)로 보낸다. 단계 462에서 어플라이언스(250)는 제1 프로그램으로부터 받은 통신을 복호하여, 복호된 통신을 해당 목적지 리소스 - 206a~206m 서버 등 - 에 전송한다. 단계 464에서 목적지 리소스는 복호된 통신을 처리하고 에서 목적지 리소스는 필요 시, 어플라이언스(250)에 반응 통신(responsive communication)을 보낸다. 단계 468에서 어플라이언스(250)는 반응 통신을 암호화하여 암호화된 통신을 를 통해 사전에 구축된 암호화된 통신 세션을 통해 클라이언트(205)의 제1 프로그램(222)에 보낸다. 단계 470에서 제1 프로그램(222)은 반응 통신을 복호하여 복호된 통신을 제2 프로그램을 통해 적절한 클라이언트 애플리케이션으로 보낸다.
단계 452에서 클라이언트(205)의 애플리케이션(220)은 클라이언트(205)의 네트워크 스택(210)의 전송 프로토콜 계층을 통해 새로운 연결을 만들거나 도메인 네임을 해석한다. 일 실시예에서 애플리케이션(220)은 클라이언트(205)와 서버(206) 간의 또는 클라이언트(205)와 어플라이언스(250) 간의 전송 계층 접속 구축을 요구할 수 있다. 다른 구축에서 애플리케이션(220)이나 클라이언트(205)는 서버(206)에서 제공하는 애플리케이션(220)에 액세스를 요구할 수 있다. 예를 들어 서버(206)는 서버(206) 상에서 실행되는 애플리케이션(220)의 아웃풋을 보여주는 ICA나 RDP의 원격 디스플레이 프로토콜을 전송함으로써 서버-기반 컴퓨팅이나 씬-클라이언트 컴퓨팅을 제공할 수 있다. 다른 실시예에서 클라이언트(205)는 서버(206)의 리소스(파일이나 디렉터리, 이메일 서비스 등)에 액세스를 요구할 수 있다. 일부 실시예에서는 클라이언트(205)는 공중 네트워크(204) 상에, 그리고 서버(206)는 사설 네트워크(204) 내에 있을 수 있다. 다른 실시예에서, 클라이언트(205)와 서버(206)는 각기 다른 사설 네트워크에 있을 수 있다.
단계 454에서, 제2 프로그램은 전송 계층 기능이 초기화되기 전에 한 가지 이상의 기능을 자동 또는 다른 방식으로 수행한다. 일부 실시예에서, 제2 프로그램이 본 발명의 가속 프로그램(120)이거나 이를 포함한다. 일 실시예에서, 제2 프로그램은 단계 452의 클라이언트 요구를 간섭하거나 다른 방식으로 수신한다. 일부 실시예에서, 클라이언트(205)의 애플리케이션(220)은 제2 프로그램에서 간섭한 네트워크 스택(210)으로 API를 호출한다. 네트워크 스택(210)의 전송 계층에서 API 호출이 처리되기 전에, 제2 프로그램은 네트워크 스택(210)에 후킹하거나 접촉하여 통신이 전송 계층을 통해 전송되거나 처리되기 전에 로직이나, 규칙, 함수, 운영을 실행한다.
단계 456에서, 제2 프로그램은 클라이언트(205)의 애플리케이션(220a~220n)에서 네트워크(204)로 보내는 통신을 간섭하여 제1 프로그램(222)으로 방향변경하며, 일 실시예에는 네트워크 환경 전반에 걸쳐 사용되는 ActiveX control 플러그인이나 자바 애플릿, 또는 기타 컨트롤이나 프로그래밍 구성요소를 포함한다. 제2 프로그램은 간섭한 통신의 목적지가 네트워크(204)(어플라이언스(250) 뒤의 사설 네트워크 등)의 네트워크 패킷인지를 판별하기 위해 간섭한 통신을 제공하는 네트워크 패킷(들)로부터 목적지 정보에 액세스하거나 판독하여 얻는다. 예를 들어, 제2 프로그램은 네트워크 패킷으로부터 목적지 IP 주소 및/또는 포트를 추출하거나 해석한다. 간섭한 통신의 목적지가 네트워크(204)인 것으로 결정되면 제2 프로그 램은 적절한 인터페이스 수단 및 메커니즘(인터 프로세스 통신 인터페이스나 API 호출 등)을 통해 간섭한 통신을 제1 프로그램(222)에 연결한다. 일 실시예에서 간섭한 통신은 그대로 제1 프로그램(222)에 보내지거나 다른 실시예에서 제1 프로그램에 보내지기 전에 제2 프로그램에서 간섭한 통신을 사전 처리한다. 예를 들어 제2 프로그램은 간섭한 통신에서 페이로드를 제거하여 페이로드를 제1 프로그램(222)에 보낼 수 있다.
단계 458에서는, 각 간섭 통신(intercepted communication)이 제1 프로그램(222)에 의해 종료되거나 프록시된다. 그리고 제1 프로그램(222)은 설정된 암호화 데이터 통신 세션을 통해 그 간섭 통신이 전송되도록 준비한다. 일부 실시예의 경우, 제1 프로그램(222)이 페이로드를 분리하고, 설정된 암호화 데이터 통신 세션을 통해 전달되도록 그 페이로드를 캡슐화한다. 또 다른 실시예에서는 제1 프로그램(222)이 제2 프로그램으로부터 받은, 간섭 통신을 캡슐화한다. 임의의 경우에는, 페이로드가 TCP 페이로드이며, 클라이언트(205)와 서버(206) 간의 새로운 TCP 접속(예: 어플라이언스(250)을 거치는 접속)으로 캡슐화된다.
단계 460에서는 제1 프로그램(222)이 네트워크(204)를 통해, 이미 설정된 암호화 데이터 통신 세션을 거치면서 네트워크(204')의 어플라이언스(250)로 간섭 통신을 보낸다. 제1 프로그램(222)이 간섭 통신을 암호화하고, 이 암호화된 간섭 통신을 어플라이언스(250)로 보내는 경우도 있다. 또한 일부 실시예에서는 SSL 프로토콜에 따라 암호화가 실시된다. TLS 기반의 암호화가 이루어질 수도 있다. 제1 프로그램(222)이나 가속 프로그램(120)에서는 어떠한 유형 및 형식의 암호화/복호화 도 사용 가능하다.
단계 462에서 어플라이언스(250)는 제1 프로그램(222)에서 보낸 연결을 종료시키는 프록시 역할을 한다. 어플라이언스(250)는 제1 프로그램(222)으로부터 받은 통신을 복호화하고, 그 복호화된 통신을 네트워크(204)상에 있는 적합한 대상 리소스로 전달하며, 이때 어플라이언스(250)는 네트워크(204)의 대상 리소스와 설정했던 제2 연결을 거친다. 일부 실시예에서는 SSL 프로토콜이나 그 밖의 적용 가능한 암호화 및 복호화 프로토콜에 따라 복호화가 수행된다. 일부 실시예에서는 어플라이언스(250)이 대상 리소스에 전달된 통신에 대해 다음과 같은 가속 기술 중 하나 이상을 적용한다. 즉, 1) 멀티프로토콜 압축(238'), 2) 전송 제어 프로토콜 풀링(224'), 3) 전송 제어 프로토콜 멀티플렉싱(226'), 4) 전송 제어 프로토콜 버퍼링(228'), 5) 캐시 매니저(232')를 통한 캐싱이다.
단계 464에서는 대상 리소스가 복호화된 통신을 처리한다. 일부 실시예에서는 복호화된 통신이 연결이나 통신 세션을 설정하라는 요구이다. 또 다른 실시예에서는, 복호화된 통신이 클라이언트(205)를 대신하여 애플리케이션(220)을 시작하거나 액세스하라는 요구이다. 복호화된 통신이 웹 페이지에 대한 요구(예: 웹 서버(206)로부터 웹 페이지를 수신하라는 HTTP 요구)인 경우도 있다.
단계 466에서는, 복호화된 통신이 응답이 있는 요구를 포함하며, 대상 리소스는 어플라이언스(250)로 응답 통신을 보낸다. 일부 실시예에서는, 클라이언트(205)가 요구한 연결 또는 통신 세션 설정 승인이 응답에 포함되어 있다. 그 밖에도 오류 메시지가 응답에 포함된 실시예도 있다. 응답이 인증 요구나 요구-응답 메커니즘을 포함하는 경우도 있다. 일부 실시예에서는, 클라이언트(205)에서 사용할 가속 프로그램(120)이 응답에 포함되어 있다. 클라이언트(205)에서 표시할 웹 페이지와 같은 HTML이 응답에 포함되거나 오브젝트(예: 동적으로 생성된 오브젝트)가 응답에 포함된 경우도 있다.
단계 468에서는, 어플라이언스(250)가 네트워크(204)를 통해 클라이언트(205)의 제1 프로그램(220)으로 응답 통신을 보내며, 이때 미리 설정된 암호화 데이터 통신 세션을 거친다. 의의 실시예에서는 어플라이언스(250)가 응답 통신을 암호화하고, 암호화된 응답 통신을 제1 프로그램(222)으로 보낸다. 일 실시예에서는,SSL 프로토콜이나 다른 적용 가능한 암호화/복호화 프로토콜에 따라 암호화가 실시된다. 뿐만 아니라, 어플라이언스(250)는 클라이언트(205)로 향하는 통신에 대해 본 발명의 가속 기술(예: 멀티프로토콜 압축(238'), 캐싱(232') 또는 TCP 버퍼링(228'))을 적용할 수 있다.
단계 470에서는, 제1 프로그램(222)이 응답 통신을 복호화하고, 제2 프로그램을 통해 그 통신을 적합한 애플리케이션(220)으로 전달한다. 제1 프로그램(222)은 적합한 인터페이스 도구와 메커니즘(예: 모든 유형 및 형식의 프로세스 간 통신 메커니즘이나 API 호출)을 활용하여 제2 프로그램과 통신할 수 있다. 제2 프로그램은 클라이언트(205)의 네트워크 스택(210)을 통해 애플리케이션(220)으로 응답 통신을 제공한다. 따라서 애플리케이션(220)은 임의의 변경이나 수정도 없는 투명한 방식으로 응답 통신을 수신한다.
본 발명의 다른 실시예에 따르면, 클라이언트(205)는 단계 458에서 네트워 크(204)를 통해 통신을 보내기 전에 간섭 통신의 추가 처리를 수행한다. 본 발명을 실시예는 데이터 암호화에 앞서 프록시 역할을 하면서 클라이언트측 연결을 종료시키는 VPN 솔루션을 제공하므로, 추가 처리가 더 효과적으로 이루어질 수 있다. 그러한 처리 중에는 클라이언트 애플리케이션이 선택된 모든 IP 주소를 이용하고 실행 시간에 그 주소를 동적으로 변경할 수 있도록 간섭 통신의 DNS(Domain Name Service) 이름을 분석하는 것도 포함된다. 그러한 추가 처리를 통해 본 발명의 실시예가 글로벌 서비스 로드 밸런싱과 같은 다른 기술과 효과적으로 통합되면서 분산 게이트웨이나 서버 환경에서 가용성과 효율성을 높일 수 있다. 또한 추가 연결 처리를 통해 간섭 통신에 대한 자세한 로그와 통계 정보를 보관할 수 있다.
본 발명의 다른 실시예에서는, 어플라이언스(250)가 클라이언트(205)의 제1 프로그램에서 수신한 통신을 종료시킨 다음, 단계 462와 같이 네트워크(204)의 대상으로 통신을 전달하기보다는 여기에 포함된 요구 하나 이상을 추가로 처리한다. 이러한 추가 처리에는 백엔드 암호화도 포함되는데, 즉 네트워크(204)의 대상으로 전달하기에 앞서 어플라이언스(250)가 통신을 다시 암호화하여 종단 간 네트워크 보안을 실현하는 것이다. 그런 다음 대상에서는 트래픽을 복호화하여 알맞게 응답한다. 게다가, 그와 같은 처리 방식에서는 대상 서버에서 추가 작업을 수행할 필요 없이 어플라이언스(250)가 캐시로부터 응답을 서비스하면서 통신에 대한 로컬 네트워크 로드 밸런싱, 글로벌 서비스 로드 밸런싱 및/또는 압축을 수행할 수 있으므로 네트워크(204)의 효율성과 응답성이 향상된다.
상술한 방법에 따르면, 클라이언트(205)와 네트워크(204) 간에 암호화된 데 이터 통신 세션 기반의 VPN이 설정된다. 예를 들어, 일부 실시예에서는 HTTPS를 통해 보안 VPN이 설정된다. 따라서 클라이언트(205)에서 네트워크(204)까지의 모든 통신이 이 암호화된 데이터 통신 세션을 거치면서 제1 프로그램을 통해 어플라이언스(250)로 라우팅되고 그 역으로도 라우팅된다. 암호화된 데이터 통신 세션이 HTTPS를 통해 설정될 수는 있으나, 이 세션을 거쳐 전달되는 통신이 HTTPS 패킷 데이터이거나 HTTP 패킷 데이터일 필요는 없다. 즉, TCP/UDP(Transmission Control Protocol/User Datagram Protocol), ICMP(Internet Control Message Protocol)를 비롯하여 임의의 패킷 데이터로 이루어진 통신도 전달 가능하다. 게다가, 도 4b에 예시한 방법에서는 클라이언트(205)의 애플리케이션과 네트워크(204)의 리소스 간에 요구-응답(request-response) 유형의 통신을 보여 주지만, 본 발명을 따르는 암호화 통신이 반드시 요구-응답 기반일 필요는 없다. 임의의 유형의 통신도 가능하다. 그러므로 UDP 세션과 같이 임의의 연결이나 통신 세션을 설정할 수 있는 클라이언트라면 본 발명의 실시예에 따라 암호화된 통신을 주고 받는 것이 가능하다.
다른 양태에서, 본 발명은 서버(206)와 연결하거나 통신하기 위해 클라이언트에서 출발하여 임의의 중개자를 동적으로 우회하는 가속 프로그램(120)과 관련 있다. 예를 들어, 클라이언트(205)는 본 발명의 어플라이언스(250)와 같은 중개자 하나 이상을 경유하여 서버와 접속될 수 있다. 임의의 이유로 인해 클라이언트(205)가 서버(206)와의 통신에 중개자를 더 이상 사용할 수 없는 상황이 생기기도 한다(예: 어플라이언스(250)가 유지 보수를 위해 가동 중단되었거나 리부팅/재시작 상태인 경우). 본 발명의 가속 프로그램(120)은 중개자가 사용 불가능 상태라 판단하고, 서버(206)와의 다른 접속 또는 통신 세션 경로를 자동 설정한다. 이는 클라이언트(205)의 사용자나 애플리케이션이 인식하지 않도록 투명하게 이루어지므로, 접속 및/또는 통신 세션이 변경되었거나 다른 식으로든 중단되었다고 여겨지지 않는다.
도 5에서는 중개자를 자동으로 우회하는, 본 발명의 방법 500을 보여 준다. 간략하게 살펴보자면, 단계 505에서는 가속 프로그램(120)이 클라이언트(205)와 서버(206) 사이에 전송 계층 접속을 설정하며, 이 연결은 어플라이언스(250)와 같은 중개자를 경유한다. 단계 510에서 가속 프로그램(120)은 설정된 전송 계층 접속을 통한 클라이언트(205)와 서버(206)와의 통신에 해당 중개자를 사용할 수 없다고 판단한다. 단계 515에서 가속 프로그램(120)은 클라이언트(205)에서 서버(206)로의 통신을 클라이언트(205)에서 간섭한다. 단계 520에서 가속 프로그램(120)은 클라이언트(205)와 서버(206) 사이에 제2 전송 계층 접속을 설정하며, 따라서 클라이언트와 서버의 연결에 사용 불가능하다고 판단된 중개자를 우회한다. 단계 525에서는, 가속 프로그램(120)이 클라이언트(205)에서 서버(206)로 가는 간섭 통신을 제2 전송 계층 접속을 통해 보낸다.
더 자세히 설명하자면, 단계 505에서 가속 프로그램(120)은 클라이언트(205)와 서버(206) 간에 임의의 중개자를 경유하는 전송 계층 접속을 설정한다. 일 실시예에서는 중개자가 어플라이언스(205)이다. 다른 실시예에서는 캐시, 서버, 게이트웨이, 방화벽, 브리지, 라우터, 스위치, 허브, 프록시 또는 이러한 중개자 유형/형태의 역할을 하거나 그 기능과 작업을 수행하는 소프트웨어 애플리케이션이나 프로그램 중 하나이다. 일부 실시예에서는 중개자가 서버(206)에서 동작할 수 있다. 일부 실시예에서는 유형/형태가 같거나 다른 다수의 중개자를 경유하면서 전송 계층 접속이 설정된다. 설명하는 본 발명의 운영 방식에 따라 클라이언트(205)나 어플라이언스(250)에 설정된 전송 계층 접속의 풀(pool)로 구성되는 실시예도 있다.
단계 510에서 가속 프로그램(120)은 설정된 전송 계층 접속을 통해 클라이언트(205)에서 서버(206)로 통신할 때 해당 중개자가 사용 불가능한 상태라고 판단한다. 가속 프로그램(120)은 적합한 수단이나 메커니즘을 통해 중개자의 상태 또는 가용성을 파악할 수 있다. 일부 실시예에서는 가속 프로그램(120)이 중개자에 대한 전송 오류 메시지나 실패 회신을 수신하여 장치가 사용 불가능하다고 판단한다. 예를 들어, 클라이언트(205)로부터 설정된 전송 계층 접속을 통해 통신을 보낼 때 가속 프로그램(120)이 전송 계층 통신 실패 응답을 받는 경우가 있다. 또는 가속 프로그램(120)이 미리 지정된 빈도로 중개자에 ping 명령을 보내 그 상태와 가용성을 모니터링할 수 있다. 가속 프로그램(120)이 중개자로부터 회신을 받지 못했거나 회신이 지연되었거나 적정 수준보다 오랫동안 지연되었다면 가속 프로그램(120)은 클라이언트(205)가 중개자를 사용할 수 없다고 판단할 것이다. 또는 서버(206), 어플라이언스(250) 또는 중개자가 클라이언트(205)나 가속 프로그램(120)으로 메시지를 보내 클라이언트(205)가 중개자를 사용할 수 없음을 알리는 것도 가능하다. 임의의 경우에는 설정된 전송 계층 접속이 중단되거나 차단되며 종료되기도 한다.
단계 515에서 가속 프로그램(120)은 클라이언트(205)에서 중개자를 거쳐 서 버(206)로 향하면서 설정된 전송 계층 접속을 사용하는 통신을 간섭한다. 가속 프로그램(120)은 네트워크 스택(210)의 어느 지점, 어느 프로토콜 계층에서든 통신을 간섭할 수 있다. 일부 실시예에서는 가속 프로그램(120)이 설정된 전송 계층 접속에서 보내기 전에 전송 프로토콜 계층에서 통신을 간섭한다. 예를 들어, 가속 프로그램(120)이 네트워크 드라이버로 구성되었으며 이 드라이버가 전송 드라이버 인터페이스를 갖거나 임의의 식으로든 전송 프로토콜 계층과 연계된 실시예도 있다. 또는 제1 프로그램(222)에서 본 발명을 담당하고, 가속 프로그램(120)은 도 4A 및 도 4B에서 설명한 제2 프로그램 역할을 하기도 한다. 임의의 경우에서든 제1 프로그램(222)이나 가속 프로그램(120)은 통신을 간섭한다.
단계 520에서, 가속 프로그램(120)은 서버(205)와 제2 전송 계층 접속을 설정하는데, 단계 510에서 클라이언트가 사용할 수 없다고 여겨진 중개자를 우회하기 위해서이다. 가속 프로그램(120)이 직접 서버(206)와 제2 전송 계층 접속을 설정하는 실시예도 있다(예: 클라이언트(205)와 서버(206)가 동일한 네트워크(205)상에 있거나 상호 라우팅 가능한 다른 네트워크상에 있는 경우). 가속 프로그램(120)이 제2 어플라이언스(250')와 같은 제2 중개자와 제2 전송 계층 접속을 설정하는 경우도 있다. 또는 가속 프로그램(120)이 어플라이언스(250)에게 서버(250)와 다른 전송 계층 접속을 설정하도록 요구할 수도 있다. 일부 실시예에서, 어플라이언스(250)가 서버(206)와의 전송 계층 접속 풀을 제2 전송 계층 접속으로 사용한다. 가속 프로그램(120)이 서버(206)에게 제2 전송 계층 접속을 설정하도록 요구하는 경우도 있다. 일부 실시예에서, 가속 프로그램(120)이 여기서 설명한 본 발명의 운영 방식에 따라 서버(206)와 설정했던 전송 계층 접속 풀 중에서 제2 전송 계층 접속을 사용한다.
일 실시예에서, 가속 프로그램(120)이 단계 520에서 제2 전송 계층 접속을 설정하되 클라이언트(205)의 사용자나 애플리케이션(220) 또는 전송 계층 상하 프로토콜 계층에서 이를 인식하지 못하게 투명한 방식으로 처리할 수도 있다. 일부 양태에 있어서, 단계 510에서 중개자가 사용 불가능하거나 클라이언트(205)가 이를 사용해서는 안 된다고 결정하면 제2 전송 계층 접속이 자동으로 설정되기도 한다. 다른 실시예들에 있어서, 서버(206)로 향하는 간섭 통신의 전송(예: 그 통신을 보내는 최초의 시도)이 실패하는 즉시 제2 전송 계층 접속이 설정되는 실시예도 있다. 다른 실시예에서는 재시도된 통신 전송이 하나 이상 실패하거나 미리 지정된 재시도 횟수를 초과하는 즉시 자동으로 재설정된다. 중개자가 전송 또는 네트워크 패킷 수신 속도를 늦추면서 전송 계층 접속을 지연시키거나 그 밖의 방법으로 지장을 초래한다고 판단되는 즉시 제2 전송 계층 접속이 설정될 수도 있다. 일 실시예에서, 가속 프로그램(120)이 로드 밸런싱을 수행하면서 중개자를 우회하는 제2 전송 계층 접속을 설정하는데, 이때 중개자의 처리나 작업 부하를 클라이언트(205)나 제2 전송 장치로 넘겨준다.
단계 525에서 가속 프로그램(120)은 제2 전송 계층 접속을 통해 클라이언트(205)에서 서버 106으로의 간섭 통신을 전송한다. 일부 실시예에서, 가속 프로그램(120)이 직접 서버(206)로 간섭 통신을 전송한다. 또는 가속 프로그램(120)이 제2 중개자(예: 제2 어플라이언스(250))를 경유하면서 간섭 통신을 보낼 수도 있 다. 제2 전송 계층 접속을 사용할 경우, 가속 프로그램(120)은 중개자를 우회하고, 클라이언트(205)의 애플리케이션(220)의 작업을 서버(206)에서 계속 수행한다. 클라이언트(205)의 애플리케이션(220)이 과거에 설정된 연결, 즉 제1 전송 계층 접속을 마치 계속 사용하는 것처럼 서버(220)와의 작업 및 통신을 진행해 나가기도 한다. 이러한 방법으로 가속 프로그램(120)은 중개자를 우회하지 못하면 발생하기 마련인 통신 방해, 중단, 대기 시간, 지연 시간 또는 그 밖의 운영 및 성능상의 문제를 예방, 방지하거나 우회한다. 다른 측면에서 보면, 본 발명의 이 기법은 중개자 액세스에 문제가 생기거나 액세스가 중단되더라도 클라이언트(205)가 서버(206) 또는 원격 액세스 애플리케이션에 중단 없이 액세스하도록 자동으로 조치한다.
게다가 상술한 본 발명의 리디렉션 및 우회 기법을 클라이언트(205)에서 로드 밸런싱 및 트래픽 관리에 활용한다면, 클라이언트(205)에 애플리케이션(220a 내지 220n) 또는 기타 컨텐츠와 기능을 제공하는 하나 이상의 서버(206a 내지 206n)에 액세스할 수 있다. 예를 들어, 클라이언트가 서버 액세스에 사용하는 중개자 또는 어플라이언스가 전송 계층 접속 증가 및 응답/성능/기타 작업 속도 저하로 인해 과부하 상태가 된다고 가정한다. 중개자나 어플라이언스의 성능 저하를 감지한 가속 프로그램(120)은 해당 클라이언트를 다른 중개자, 어플라이언스나 서버로 리디렉션하여 클라이언트와 서버 간의 종단 간 연결에서 발생한 성능 병목 현상을 피할 수 있다.
다른 양태에 있어서, 본 발명에서 클라이언트 네트워크 스택 중 전송 프로토콜 계층과 관련 있거나 그 계층에서 수행되는 클라이언트측 가속 기술도 다룬다. 가속 프로그램(120)은 1) TCP 버퍼링(228), 2) TCP 연결 풀링(224), 3) TCP 멀티플렉싱(226) 중 하나 이상을 수행하는 실행가능 명령을 포함할 수 있다. 임의의 경우에는 가속 프로그램(120)이 클라이언트 네트워크 스택의 전송 프로토콜 계층에서 간섭한 통신을 투명하게 처리하면서 클라이언트의 TCP 연결 그리고 클라이언트(205) 애플리케이션(220a 내지 220n)의 연결 사용 및 전송을 제어, 관리할 수 있다. 도 6에서는 본 발명의 TCP 버퍼링 기법을 실현하는 방법 600을, 도 7a 및 도 7b에서는 본 발명의 TCP 연결 풀링 기법을 그리고 도 8, 도 9 및 도 10에서는 TCP 멀티플렉싱 기법을 보여 준다.
도 6에 예시한 방법 600의 실시예의 간략한 개요에서, 가속 프로그램(120)은 단계 605에서 클라이언트(205)에서 서버(206)로의 통신(예: 클라이언트(205)가 서버(206)에 액세스하기 위한 요구)을 간섭한다. 단계 610에서는 가속 프로그램(120)이 수신된 서버 응답의 소모율과 클라이언트가 전송한 요구의 생성률 간의 차이가 미리 정한 임계값 이하인지 확인한다. 단계 615에서 생성률 및 소모율의 차이가 미리 정한 임계값 이하의 값이 아닌 경우, 가속 프로그램(120)은 단계 617에서 서버(206)로 통신을 전송한다. 단계 615에서 율 차이가 미리 정한 임계값 이하이면, 단계 620에서 가속 프로그램(120)은 클라이언트(205)의 메모리에 통신을 저장한다. 단계 625에서 가속 프로그램(120)은 비율 차이가 위의 미리 정한 임계값으로 변경되었는지 여부를 판단하며 만약 그렇다면 저장된 통신을 서버(206)로 전송한다. 그렇지 않으면 비율 차이가 단계 625에서 미리 정한 임계값으로 바뀌는 시점까지 가속 프로그램(120)은 통신을 클라이언트(205)의 메모리에 그대로 유지한 다. 예를 들어, 클라이언트(205)가 서버(206)로 요구 전송 시 클라이언트(205)가 생성된 응답을 소모할 수 있는 비율보다 더 큰 비율로 전송할 경우, 본 발명의 가속 프로그램(120)은 율 차이가 변경될 때까지 이 후의 전송을 억제한다.
상세한 설명에서 가속 프로그램은 단계 605에서 클라이언트(205)에서 서버(206)로의 통신을 간섭한다. 가속 프로그램(120)은 네트워크 스택(210)의 임의의 지점 또는 임의의 프로토콜 계층에서든 통신을 간섭할 수 있다. 일부 실시예에서는, 설정된 전송 계층 접속으로 전송하기 전에 가속 프로그램(120)이 전송 프로토콜 계층에서 통신을 간섭한다. 예를 들어, 일부 실시예의 경우, 가속 프로그램(120)이 전송 드라이버 인터페이스를 가지고 있거나 그렇지 않으면 전송 프로토콜 계층으로의 인터페이스가 있는 네트워크 드라이버를 포함한다. 다른 실시예의 경우 본 발명에서는 도 4A 및 도 4B와 함께 설명한 바와 같이 제1 프로그램(222)과 가속 프로그램(120)이 제2 프로그램으로 실행되고 있다. 이때 제1 프로그램(222)과 가속 프로그램(120) 모두 통신을 간섭한다. 일부 실시예에서는 통신이 클라이언트(205)가 애플리케이션(220)과 같은 서버(206)의 자원을 사용하거나 접근하기 위한 요구들로 구성된다.
단계 610에서, 가속 프로그램(120)은 클라이언트(205)의 소모율과 생성률 간 차이가 미리 정한 임계값 이하인지를 판단한다. 일부 실시예에서 가속 프로그램(120)은 클라이언트(205)가 서버(206)로 전송한 요구의 수를 계산하고 추적하며, 또 다른 실시예에서, 가속 프로그램(120)은 클라이언트(205)가 수신한 서버(206)로부터의 응답 수를 계산하고 추적한다. 일부 실시예의 경우, 클라이언트(205)는 애 플리케이션(220) 기준으로 전송된 응답과 수신된 요구를 추적한다. 네트워크 스택(210)의 임의의 프로토콜 계층에서나 응답 및 요구를 추적할 수 있다. 일부 실시예에서, 클라이언트(205) 또는 애플리케이션(220)이 전송한 요구의 수를, 전송 계층 또는 클라이언트(205)와 서버(206) 간의 전송 계층 접속으로 보내는 시점부터 계산하고 추적한다. 마찬가지로, 또 다른 실시예에서, 클라이언트(205) 또는 애플리케이션(220)에서 수신한 서버(206) 응답의 개수는 전송 계층에서 수신하는 시점 혹은 클라이언트(205)와 서버(206) 간의 전송 계층 접속으로부터 수신하는 시점에서부터 계산하고 추적한다. 또는 네트워크 스택(210)에서 전송 계층의 상위에 있는 프로토콜 계층(예: 응용 계층)으로 응답을 보내는 시점에 계산하고 추적한다.
일부 실시예의 경우, 가속 프로그램(120)은 전송 계층 접속의 전송(send)/수신(receive) TCP 버퍼에 대한 정보와 데이터에 접근, 검사하거나 아니면 해당 정보와 데이터를 획득한다. 이때 전송 계층 접속은 가속 프로그램(120)이 클라이언트(205)와 서버(206) 사이에 설정한 것이다. 예를 들어, 가속 프로그램(120)은 TCP/IP 버퍼와 해당 버퍼의 현재 사용 중인 일부분의 크기에 대해 기본값 및 최대값을 지정하여 클라이언트(205)에서 서버(206)로의 네트워크 패킷의 전송율 및 수신율의 차이를 결정할 수 있다. 그 외 실시예의 경우 가속 프로그램(120)은 임의의 유형 및 형태의 정체 알고리즘이든 사용하여 클라이언트(205)에서 서버(206)로의 네트워크 패킷의 소모 및 생성의 차이에 의한 정체 원인이 존재하는지를 결정한다. 또 다른 실시예에서, 가속 프로그램(120)은 전송 계층 접속(예: 네트워크 드라이버, TCP 서비스 제공자)에서 사용되는 정체 알고리즘으로부터 정보 또는 데이터를 획득하거나 인터페이스를 통해 연결된다. 예를 들어, 일부 실시예에서, 접속 시 사용되는 정체 윈도우에 관한 정보와 데이터를 가속 프로그램(120)이 결정한다.
가속 프로그램(120)의 적절한 수단 및 메커니즘을 통해 임계값을 구성, 지정, 정의 또는 식별할 수 있다. 일부 실시예에서 임계값은 클라이언트(205) 및 애플리케이션(220)의 생성률 및 소모율 간의 백분율, 상대값, 절대값 또는 다른 것으로 지정할 수 있다. 일정 기간 동안 일정 세분화 정도에 대해, 소모된 수신의 수와 생성된 전송의 수가 각각 소모 및 생성 비율이 될 수 있다. 일부 실시예의 경우, 클라이언트(205) 및 애플리케이션(220)의 생성 및 소모 비율의 양적인 차이를 임계값으로 지정할 수 있다. 또 다른 실시예의 경우에는 한 주기 동안의 양적 차이로 지정할 수도 있다. 예를 들어, 클라이언트(205)가 자신이 소모한 것보다 100개 더 많은 요구를 생성할 때의 한 지점이 임계값으로 지정될 수도 있다. 또 다른 예로, 클라이언트(205)가 매 주기 마다 소모한 요구보다 동일한 주기 동안 서버(206)로 요구를 10개 더 많이 생성한 시점을 임계값으로 지정할 수도 있다.
단계 615에서 클라이언트(205) 및 애플리케이션(220)의 생성률 및 소모율의 차이가 미리 정한 임계값 이하가 아닌 경우, 가속 프로그램(120)은 단계 617에서 통신을 서버(260)로 전송한다. 일부 실시예의 경우 가속 프로그램은 통신을 위해 본 발명의 가속 기법 중 어느 것이든 수행한다. 예를 들어, 풀(pool)을 구성하는 다중 전송 계층 접속을 통해 서버로 통신을 전송할 수 있다. 또한 통신은 압축되어 전송될 수도 있다. 다른 실시예에서, 클라이언트(205)를 서버(206)로 연결하는 어플라이언스(250)를 사용하여 클라이언트(205)가 통신을 전송할 수도 있다.
단계 615에서 클라이언트(205) 및 애플리케이션(220)의 생성 및 소모 비율의 차이가 미리 정한 임계값 이하인 경우, 가속 프로그램(120)은 단계 620에서 통신을 클라이언트(205)의 메모리에 저장한다. 일부 실시예에서 해당 메모리는 클라이언트(205)의 커널 모드(202)의 메모리일 수 있다. 반면 다른 실시예에서는 해당 메모리가 클라이언트(205)의 사용자 모드(203) 메모리일 수 있다. 일부 실시예에서, 가속 프로그램(120)은 통신을 캐시 매니저(232)를 통해 캐시에 저장할 수 있다. 다른 실시예에서, 가속 프로그램(120)은 자신이 접근할 수 있는 오브젝트, 데이터 구조 또는 다른 데이터 요소를 사용하여, 간섭한 통신을 버퍼링 및 보유 또는 저장할 수 있다. 일부 실시예에서, 간섭한 통신을 메모리에 압축된 형태로 저장할 수도 있다. 또 다른 실시예에서, 가속 프로그램(120)은 간섭한 통신을 제1 프로그램(222)으로 전송하여 이후 어느 시점에 전송할 수 있도록 메모리에 저장 또는 보유하도록 한다.
단계 625에서 가속 프로그램(120)은 저장된 통신을 서버(206)로 전송하는 시점을 결정한다. 일부 실시예에서 가속 프로그램(120)은 단계 610과 단계 615를 수행하여 클라이언트(205)의 생성 및 소모 비율의 차이가, 가속 프로그램(120)이 단계 617에서 저장된 통신을 서버(206)로 전송할 때의 임계값을 넘는지 판단한다. 일부 실시예에서, 가속 프로그램(120)은 정기 또는 미리 정한 빈도로 혹은 폴링(polling) 또는 이벤트 단위로 생성 및 소모 비율의 차이를 비교한다. 그리고 그 차이가 미리 정한 임계값을 넘으면 가속 프로그램(120)은 통신을 서버(206)로 전송한다. 다른 실시예의 경우, 가속 프로그램(120)은 타이머를 설정 또는 구성하여 얼 마나 오랫동안 간섭한 통신을 저장할지 결정한다. 타이머 만료 시 가속 프로그램(120)은 저장된 통신을 서버(206)로 전송한다. 또 다른 실시예에서 가속 프로그램(120)은 간섭한 통신을 저장한 이후 클라이언트(205)가 소모한 서버 응답 개수를 확인한다. 소모한 응답 개수가 미리 정한 수보다 크면, 가속 프로그램(120)은 간섭한 통신을 메모리 버퍼 또는 기억장치에서 해제하고 서버(206)로 전송을 위해 통신을 전송한다.
단계 625에서 가속 프로그램(120)이 생성률 또는 소모율이 적절한 방식으로 변경되지 않는다고 판단하면, 가속 프로그램(120)은 적절한 시점에 도달할 때까지 간섭한 통신을 메모리에 유지 또는 보관한다. 일부 실시예에서, 가속 프로그램(120)은 생성률 및 소모율이 바뀌지 않아도 단계 617에서 서버로 통신을 전송한다. 예를 들어, 생성 및 소모 비율이 변하도록 일정 시간 기다린 후에도 비율이 변하지 않으면 가속 프로그램(120)은 통신을 서버(206)로 전송한다.
본 발명의 TCP 버퍼링 기법이 하나의 간섭한 통신 또는 요구와 관련하여 일반적으로 논의되고 있기는 하지만, 본 발명의 방법 600의 실시예는 클라이언트(205)에서 서버(205)로 다수의 간섭한 통신에 대해서도 거의 동시에 또는 함께 실행할 수 있다. 또한, 다른 실시예에서, 본 발명의 방법 600이 한 클라이언트에서 다수의 서버(206a 내지 206n)로의 통신인 경우 클라이언트로 실행될 수 있다. 이를테면 방법 600의 제1 인스턴스는 클라이언트(205)와 제1 서버(206a) 사이에서 실행할 수 있다. 그리고 방법 600의 제2 인스턴스는 클라이언트(205)와 제2 서버(206b) 사이에서 실행할 수 있다. 더욱이 일부 실시예의 경우에는 방법 600은 제 1 애플리케이션(200a)에 대해 실행할 수 있고 또한 제2 애플리케이션(200b)에 대해서도 실행할 수 있으며 이때 해당 애플리케이션의 생성률 및 소모율을 각기 사용한다. 다른 실시예에서, 방법 600이 제1 애플리케이션(200a)에 대해 실행되나 제2 애플리케이션(200n)에 대해서는 하지 않을 수 있다.
본 발명의 다른 양태에 따르면, 클라이언트측 가속 프로그램(120)은 반복적으로 클라이언트의 접속을 열고 닫음으로써 발생하는 서버(206a 내지 206n) 및 어플라이언스(250)의 처리 부하를 감소시키며, 클라이언트의 경우 각 서버와 하나 이상의 접속을 열고 이들 접속을 통해 클라이언트(205)의 애플리케이션이 서버(206)로의 반복적인 데이터 액세스를 할 수 있도록 접속을 유지하기 위한 처리 부하를 감소시킨다. 이 기법은 일반적으로 접속 풀링이라 칭한다. 방법 700의 간략한 개요에서, 단계 702에서 가속 프로그램(120)은 서버에 액세스하기 위해 애플리케이션의 요구를 간섭하고, 단계 704에서 해당 요구와 연관된 서버를 식별한다. 단계 706에서 가속 프로그램(120)은 애플리케이션(220)이 자유롭게 사용할 수 있는 서버(206)로의 전송 계층 접속이 설정되어 있는지를 확인한다. 애플리케이션(220)이 자유롭게 사용할 수 있는 서버(206)로의 전송 계층 접속이 없으면, 가속 프로그램(220)은 단계 708에서 클라이언트(205)가 사용할 수 있는 서버(206)로의 전송 계층 접속을 설정한다. 단계 706에서 애플리케이션(220)이 사용 가능한 전송 계층 접속이 있으면, 단계 710에서 가속 프로그램(120)은 사용 가능한 전송 계층 접속을 통한 애플리케이션의 전송 또는 통신을 위해 요구를 변환한다.
상세한 개요에서, 가속 프로그램(120)은 단계 712에서 서버(206)로부터 요구 에 대한 응답을 수신한다. 그리고 단계 714에서 그 응답을 애플리케이션(220)에 대한 응답으로 변환한다. 단계 716에서 가속 프로그램(120)은 클라이언트(205)의 애플리케이션(220a 내지 220n) 중 어느 애플리케이션이든 사용할 수 있도록 전송 계층 접속을 연 상태로 유지할 수 있다. 클라이언트(205)에서 서버(206a 내지 206n)로의 전송 계층 접속을 연 상태로 유지하고 애플리케이션이 필요 시 접속을 열고 닫음으로써, 가속 프로그램(120)은 네트워크(204)(예: 인터넷) 상에서 클라이언트(205)에게 서비스하는 것과 관련된 서버의 TCP 접속 부하 문제를 덜어준다. 단계 718에서 가속 프로그램(120)은 임의의 시점에서 클라이언트(205)의 하나 이상의 애플리케이션(220)이 서버(206)에 액세스하기 위해 접속을 더 이상 사용하지 않는다고 판단하면 전송 계층 접속을 닫는다.
더 자세히 설명하자면, 단계 702에서 클라이언트(205)의 임의의 애플리케이션(220a 내지 220n)이 서버(206)에 액세스하기 위한 요구를 가속 프로그램(120)이 간섭한다. 일부 실시예의 경우, 요구는 해당 요구가 전송 계층 접속을 통해 설정 또는 전송되기 전에 전송 프로토콜 계층에서 간섭된다. 다른 실시예에서, 요구가 전송 계층 상위의 임의의 프로토콜 계층 또는 전송 계층 접속에서 간섭되기도 한다. 일부 실시예에서, 애플리케이션(220)의 요구는 서버(206)와 전송 계층 접속을 열거나 설정하도록 하는 요구이다. 일부 실시예에서, 요구에 대한 응답으로, 가속 프로그램(120)은 클라이언트(205)의 애플리케이션(220a 내지 220n)이 사용할 수 있도록 전송 계층 접속의 풀(pool) 중 제1 전송 계층 접속을 설정한다. 또 다른 실시예에서, 애플리케이션의 요구는 클라이언트(205)의 설정된 전송 계층 접속을 통해 서버에 액세스하기 위한 요구이다.
단계 704에서 가속 프로그램(120)은 적절한 수단 및 메커니즘을 사용하여 요구으로부터 서버를 식별한다. 일부 실시예의 경우 서버(206)의 도메인 명 또는 인터넷 프로토콜(IP) 주소를 해당 요구의 내용으로부터 알아내거나 참조한다. 예를 들어 요구의 텍스트 문자열은 서버(206)의 도메인 명을 나타낼 수도 있다. 일부 실시예에서 서버(206)의 식별 정보는 TCP 패킷의 헤더 정보(예: 목적지 IP주소, 포트 번호)에 의해 결정된다. 또 다른 실시예에서 서버(206)를 애플리케이션(220)과 연관시키고, 가속 프로그램(120)은 데이터베이스 또는 다른 구조화된 정보 기억장치에서 연관 정보를 검색 또는 질의한다.
단계 706에서 가속 프로그램(120)은 사용할 수 있는 전송 계층 접속이 있는지 또는 애플리케이션(220)이 사용할 수 있도록 비어 있는지를 확인한다. 일부 실시예의 경우 가속 프로그램(120)이 아직 서버(206)로의 전송 계층 접속을 설정하지 않았을 수 있다. 또한 애플리케이션(220)이 사용할 수 있는 전송 계층 접속이 없는 경우도 있다. 다른 실시예에서 가속 프로그램(120)이 서버(206)와 전송 계층 접속은 사전에 설정되어 있으나 다른 애플리케이션(220)이 현재 그 접속을 사용 중인 경우도 있을 수 있다. 아래의 자세한 상세에서 논의하겠지만, 가속 프로그램(120)은 설정된 전송 계층 접속이 다른 애플리케이션에 의해 사용 가능한지 또는 애플리케이션(220)에 대해 서버(206)로부터 수신된 메시지(예: 요구에 대한 응답)의 길이를 토대로 접속을 애플리케이션(220s 내지 220n)이 공유할 수 있는지를 결정한다. 또한 서버(206)와 애플리케이션(220) 간 통신이 현재 유휴(idle)상태인지도 결정한 다.
단계 708에서 전송 계층 접속을 애플리케이션(220)이 사용할 수 없다고 가속 프로그램(120)이 판단한 경우, 가속 프로그램(120)은 서버(206)와 전송 계층 접속을 설정한다. 일부 실시예의 경우 단계 708에서 설정된 전송 계층 접속은 서버(206)와의 제1 전송 계층 접속이다. 그리고 다른 실시예에서 전송 계층 접속은 서버(206)로의 다수의 전송 계층 접속 중 제2 전송 계층 접속이다. 그러나 또 다른 실시예에서 가속 프로그램(120)은 이미 설정된 전송 계층 접속이 서버로 애플리케이션의 요구를 전달할 수 있도록 사용 가능한 상태가 될 때까지 기다린다. 예를 들어, 가속 프로그램(120)은 제1 애플리케이션(220a)이 설정된 접속을 통해 서버(206)와의 트랜잭션을 곧 완료할 것인지를 판단할 수 있다.
단계 710에서 가속 프로그램(120)은 애플리케이션의 요구를 변환하여 서버 106으로의 전송 계층 접속을 통해 전송할 수 있도록 한다. 일부 실시예에서, 가속 프로그램(120)은 전송 계층 접속 통신을 위해, 접속을 공유하는 클라이언트(205)의 모든 애플리케이션(220a 내지 220n)에 대해 하나의 포트 번호를 사용한다. 임의의 경우에 가속 프로그램(120)은 애플리케이션을 기준으로 하나의 애플리케이션에 대해, 요구과 해당 요구에 대한 두드러진 응답을 추적한다. 마찬가지로 가속 프로그램(120)은 주어진 시점에 임의의 애플리케이션(220)이 서버(206)로의 전송 계층 접속을 통해 네트워크 패킷을 전송 및 수신하고 있는지 인식한다. 일부 실시예의 경우, 한 번에 하나의 애플리케이션(220)만이 전송 계층 접속 상에서 송수신하며, 따라서 가속 프로그램(220)은 임의의 애플리케이션(220)이 접속을 사용하고 있는지 알고 있다. 일부 실시예의 경우, 가속 프로그램(120)은 애플리케이션(220)의 프로세스 아이디(id)를 요구과 연관시킨다. 다른 실시예의 경우 가속 프로그램(120)은 포트 번호를 애플리케이션(220)에 할당하고 연관시키며, 전송된 TCP 네트워크 패킷의 포트 번호를 애플리케이션의 할당된 포트 번호로 수정한다. 또 다른 실시예에서 포트 번호는 애플리케이션(220)이 제공하며 가속 프로그램(120)은 그에 따라 TCP 네트워크 패킷의 포트 번호를 바꾸거나 부여한다.
단계 712에서, 가속 프로그램(120)은 서버(206)로부터 애플리케이션의 요구에 대한 응답을 수신한다. 일부 실시예의 경우 서버(206)는 요구에 대해 응답하지 않는다. 다른 실시예에서 서버(206)는 에러 또는 실패 메시지와 함께 응답한다. 일부 실시예의 경우, 서버(206)는 다수의 응답을 보낸다. 다른 실시예의 경우 서버(206)는 다수의 네트워크 패킷 또는 다수의 TCP 세그먼트로 구성된 하나의 응답을 보낸다. 또 다른 실시예의 경우 서버(206)는 전송 계층 접속의 발신지 포트 번호를 식별할 수 있으며 클라이언트(205)의 여러 애플리케이션을 위해 사용될 수 있는 하나 이상의 네트워크 패킷으로 응답한다.
단계 714에서 가속 프로그램(120)은 애플리케이션(220)에 응답하는 방법으로 서버(206)로부터의 응답을 처리하거나 변환한다. 일 실시예에 있어 가속 프로그램(120)은 수령한 네트워크 패킷의 소스 포트 번호 또는 애플리케이션(220)의 포트 번호가 있는 패킷을 교체한다. 다른 실시예에서, 가속 프로그램(120)이 추적 메커니즘을 통해 현재 전송 계층 접속을 사용하고 있는 애플리케이션(220)을 결정하고, 네트워크 스택(210)을 통해 애플리케이션(220)에 응답을 전달한다. 일 실시예에 서, 접속의 전송 계층을 넘는 네트워크 스택(210)의 프로토콜 계층을 통해 응답이 처리를 위해 변경되거나 전달되지 않는다. 일부 실시예에서, 가속 프로그램(120)이 애플리케이션(220)으로의 응답을 처리 및 전달하기 전에 수령된 응답의 다중 부분(TCP 세그먼트 등)을 기다린다. 일 실시예에서, 가속 프로그램(120)이 애플리케이션(220)에 접속하여 응답을 제공하는 최초 프로그램(222)으로의 응답을 전달한다.
단계 716에서 가속 프로그램(120)이 클라이언트(205)에서 서버(206)로 하나 이상의 전송 계층 접속 풀에서 전송 계층 접속을 유지한다. 일 실시예에서, 가속 프로그램(120)이나 네트워크 스택(210)의 전송 계층 드라이버가 킵 얼라이브(keep-alive) 메커니즘을 포함하며, 이는 발송할 데이터가 없는 경우 등 접속이 유휴상태가 될 경우를 방지하여 다른 종단면을 주기적으로 검사한다. 킵 얼라이브 메커니즘은 접속의 유휴상태에도 접속의 활성화를 확인하는 응답을 수령하기 위해 이 메시지를 발송할 수 있다. 킵 얼라이브 메시지와 이에 상응하는 응답에는 임의의 형태의 포맷, 명령, 지시어, 통신도 포함될 수 있다. 이로써 일부 실시예에서는 가속 프로그램(120)이 전송 계층 드라이버를 통해 전송 계층 접속으로 킵 얼라이브 메시지를 전송하거나 전송하도록 유도한다. 일부 실시예에서, 가속 프로그램(120)이 킵 얼라이브 메시지의 빈도를 설정하며 다른 실시예에서, 접속을 사용하는 애플리케이션(220a 내지 220n)의 활동 패턴에 기반하여 킵 얼라이브 메시지의 빈도를 변경한다.
일부 실시예에서, 가속 프로그램(120)은 전송 계층 접속을 통해 수령한 RST 또는 FIN 명령을 간섭하며, 그 예로는 TCP접속을 종료하거나 리셋하려는 TCP/IP 명령 등이 있다. 일 실시예에서, 가속 프로그램(120)이 간섭한 RST 또는 FIN 명령을 무시 또는 방치, 취소, 삭제한다. 다른 실시예에서, 가속 프로그램(120)이 RST 또는 FIN 명령을 간섭하여 수령하나 접속을 유지하기 위해 접속의 다른 종단점으로 메시지를 발송한다. 다른 실시예에서, 가속 프로그램(120)이 RST 또는 FIN 명령을 처리하기 위해 기존의 전송 계층 접속 폐쇄에 대응하여 새로운 전송 계층 접속을 시도한다.
다른 실시예에서, 가속 프로그램(120)은 접속을 개방 상태로 유지하거나, 클라이언트(205)가 명령을 발송하여 접속 폐쇄되는 경우를 방지하기 위하여 클라이언트(205)와 서버(206) 간 통신에 명령 및 지시어 등을 삽입한다. 예를 들어, 일 실시예에서, 가속 프로그램(120)이 프로토콜 버전 1.0과 같은 HTTP 프로토콜의 GET 요구의 전달을 간섭하며 "Connection: Keep-Alive"같은 킵 얼라이브 헤더를 서버(206)로의 통신에 삽입한다. 다른 실시예에서, GET 요구나 기타 HTTP 명령에 킵 얼라이브 헤더가 포함될 수 있다. 이와 같은 실시예에서는 가속 프로그램(120)이 통신을 간섭하여 킵 얼라이브 헤더를 검사한 뒤 이 통신을 서버(206)에게 전달할 수 있다. 일부 실시예에서, 킵 얼라이브 메커니즘에 클라이언트(205)가 접속 폐쇄를 요구할 때까지 서버(206)가 접속 개방 상태를 유지하도록 되어 있어 HTTP 버전1.1이나 그 이상의 버전이 활용된다. 다른 실시예에서, 클라이언트(205)가 재부팅 또는 재시작되거나 네트워크(204)가 사용불능 되며 클라이언트(205)가 네트워크(204)로부터 접속해제되거나, 서버(206)가 재부팅 또는 재시작될 때까지 가속 프 로그램(120)이 서버(206)로의 전송 계층 접속을 개방 상태로 유지한다.
단계 718에서, 가속 프로그램(120)은 임의의 시점에서든 클라이언트(205)와 서버(206) 간의 전송 계층 접속을 하나 이상 폐쇄할 수 있다. 일부 실시예에서, 가속 프로그램(120)이 접속을 사용하고 있는 클라이언트(205) 상의 하나 이상의 애플리케이션(220a 내지 220n) 종료에 있어 전송 계층 접속을 폐쇄한다. 다른 실시예에서, 가속 프로그램(120)이 접속을 사용하기 위해 애플리케이션(220a 내지 220n)의 시간경과 기간 만료에 있어 전송 계층 접속을 폐쇄한다. 예를 들어 가속 프로그램(120)은 예정된 시간에 맞추기 위해 타이머를 배치, 설정 및 제공할 수 있으며 접속이 유휴상태가 되거나 유휴상태를 유지하는 경우 가속 프로그램(120)은 접속을 폐쇄한다. 일부 실시예에서, 서버(206)가 재부팅 또는 재시작되거나 접속이 중단 또는 중간 멈춤 상태가 되면 가속 프로그램(120)이 접속을 폐쇄한다. 일부 실시예에서, 가속 프로그램(120)이 서버(206)에게 응답 데이터 요구 및 모든 응답 데이터 수령을 완료함에 있어 접속을 폐쇄하라는 RST 또는 FIN 명령을 전송하거나 전송케 한다. 다른 실시예에서, 클라이언트(205)의 재부팅이나 재시작, 네트워크(204)로의 접속해제, 네트워크(204)의 사용불능, 서버(206)의 재부팅 또는 재시작 등의 경우에 전송 계층 접속이나 전송 계층 접속 풀이 폐쇄된다.
일부 실시예에서, 가속 프로그램(120)이 클라이언트(205)의 하나 이상의 애플리케이션(220a 내지 220n)을 통해 서버(206)로의 접속을 공유하는 데 최초의 전송 계층 접속만 필요하다고 결정함에 따라, 서버로의 제2 전송 계층 접속이 폐쇄되는 동안 서버(206)로의 최초의 전송 계층 접속이 개방 상태로 유지된다. 다른 실시 예에서, 가속 프로그램(120)이 클라이언트(205) 상의 애플리케이션(220a 내지 220n)의 전송 계층 접속 증가, 요구 증가, 통신 증가에 기반하여 서버(206a 내지 206n)로의 한 전송 계층 접속 풀을 유지하며 해당 서버(206)로의 제2 접속, 또는 복수 접속을 시도한다.
방법 700의 실시예가 보통 클라이언트(205)에서 서버(206)로의 하나 이상의 전송 계층 접속 풀과 관련하여 논의되기는 하지만 가속 프로그램(120)은 결과적으로 클라이언트와 복수 서버(206a 내지 206n) 중 각각의 서버 간 전송 계층 접속 풀을 동시에 형성한다. 이로써 최초의 애플리케이션(220a)과 제2 애플리케이션(220b)은 서버(206a)로의 최초의 하나 이상 전송 계층 접속 풀을 사용할 수 있으며, 3차 애플리케이션(220c)과 4차 애플리케이션(220d)은 서버(206b)로 하나 이상 전송 계층 접속 풀을 사용할 수 있다. 게다가 방법 700의 실시예의 각 단계는 각기 다른 빈도로 각기 다른 경우에 실행될 수 있다. 일부 실시예에서, 가속 프로그램(120)의 다중 인스턴스는 서버(206a 내지 206n) 중 각 서버로의 하나 이상의 전송 계층 접속 풀을 각각 처리하기 위해 사용될 수 있다.
도 7b는 하나의 실시예 사례에 따라 본 발명의 전송 계층 접속 풀링 기술을 보여주는 메시지 단계를 다이어그램으로 제시한다. 간략히 살펴보면, 도 7b는 가속 프로그램(120)이 일 실시예에서는 서버(206)로, 다른 실시예에서는 어플라이언스(250)로 클라이언트(205)의 두 애플리케이션(220a, 220b)에 의해 전송 계층 접속 사용을 제공하는 과정을 흐름도로 보여준다. 클라이언트(205) 상의 가속 프로그램(120)은 단계 752에서 제시되었던 애플리케이션(220)이 제공한 네트워크 주소 1 을 사용하여 클라이언트(205)와 서버(206) 또는 어플라이언스(205) 간 최초의 전송 계층 접속을 개방한다. TCP/IP 프로토콜이 접속 개방을 위해 다단 초기처리를 적용함에 따라 단계 752는 쌍방향 단계로 나타난다.
전송 계층 접속이 일단 형성되면 가속 프로그램(120)은 단계 754에서 제시되었듯 애플리케이션(220a)으로부터 /sales/forecast.html의 경로명을 명시하는 GET 요구를 간섭한다. 가속 프로그램(120)과 서버(206) 또는 어플라이언스(205) 간 전송 계층 접속이 자유 개방되어 있지 않기 때문에 가속 프로그램(120)은 전송 계층 접속을 개방한다. 일 실시예에서, 가속 프로그램(120)이 단계 756에서 제시되었듯 서버(206)를 명시하는 네트워크 주소 2의 제2 네트워크 주소로 애플리케이션(220a)의 요구를 나타낸다. 예를 들어 가속 프로그램(120)은 해당 요구를 처리하거나 해당 요구에 응답할 수 있는 다른 서버(206b) 또는 애플리케이션(220a)이 요구한 서버(206a)로의 목적지 포트 또는 목적지 IP 주소를 변경하기 위하여 네트워크 주소 번역을 실행한다. 다른 실시예에서, 가속 프로그램(120)은 애플리케이션(220s)이 생성한 대로 서버(206)나 어플라이언스(250)로의 요구를 발송한다.
가속 프로그램(120)은 또한 단계 758에서 제시되었듯 서버(206)나 어플라이언스(250)로의 GET 요구를 전달한다. 일 실시예에서, 어플라이언스(250)는 어플라이언스(250)와 서버(206) 간의 공동 전송 계층 접속 또는 공동 및 멀티플렉싱 전송 계층 접속을 통해 요구를 전달한다. 일부 실시예에서, 서버(206)가 단계 760에서 제시되었듯 요구된 웹페이지로 응답한다. 가속 프로그램(120)은 단계 762에서 제시되었듯 애플리케이션(220a)으로 웹페이지를 전달한다. 일 실시예에서, 가속 프로 그램(120)과 서버(206) 또는 어플라이언스(250) 간의 전송 계층 접속은 단계 764에서 제시되었듯 폐쇄된다. 다른 실시예에서, 가속 프로그램(120)이 폐쇄 요구를 간섭하고 전송 계층 접속을 개방 상태로 유지함으로써 해당 요구를 무시한다. TCP/IP 프로토콜에 따라 네트워크 접속의 폐쇄는 다단계 절차를 수반할 수 있다. 그러므로 단계 764의 흐름은 두 방향으로 작용 가능하다. 다른 실시예에서는 본 발명의 풀링 기술 측면에 따라 최초의 애플리케이션(220)에 의해 형성되고 사용되는 전송 계층 접속이 개방 상태로 유지되거나, 동일한 애플리케이션인 애플리케이션(220a)이나 제2 애플리케이션(220b) 등의 다른 애플리케이션으로부터 추후 데이터 절차를 수행하기 위해 전송 계층 접속이 유지된다.
단계 766에서는, 가속 프로그램(120)이 제2 애플리케이션(220a)에서 서버(206), 또는 어플라이언스(250)로의 요구를 간섭한다. 최초의 애플리케이션(220a)를 위해 단계 756에서 형성된 전송 계층 접속과 같이 제2 애플리케이션(220b)이 사용할 수 있는 개방된 전송 계층 접속이 있는 경우, 가속 프로그램(120)은 기존에 형성된 전송 계층 접속을 사용한다. 이와 같이 단계 766에서는 제2 전송 계층 접속이 개방될 필요가 없다. 그렇지 않은 경우, 가속 프로그램(120)은 서버(206)나 어플라이언스(250)로의 제2 전송 계층 접속을 형성한다. 단계 768에서 가속 프로그램은 제2 애플리케이션(220b)으로부터의 요구를 간섭한다. 예를 들어 웹페이지 /sales/forecast.html을 요구하여 이 요구를 단계 770에서 서버(206)나 어플라이언스(250)로 전송한다. 이미 가속 프로그램(120)과 서버(120) 간의 자유 접속이 개방되어 있기 때문에 가속 프로그램(120)은 서버(120)에게 추가 접속 개방을 처리하기 위한 부담을 지우지 않아도 된다. 단계 772에서 가속 프로그램(120)은 서버(206)로부터 응답을 간섭하거나 수령하고(예: 전송 계층 접속으로부터 어플라이언스(250)를 통해 간섭하거나 수령), 이 응답을 제2 애플리케이션(220b)으로 전달한다. 단계 776에서 가속 프로그램(120)은 제2 애플리케이션(220b)으로부터 폐쇄 요구를 간섭하여 일부 실시예에서는 접속을 폐쇄하고, 다른 실시예에서는 이 요구를 무시하고 최초의 애플리케이션(220a), 제2 애플리케이션(220b), 또는 클라이언트(205)의 다른 애플리케이션(220c-220n)으로부터 추가 데이터 요구를 수용하기 위해 접속을 유지한다.
단계 776에서, 가속 프로그램(120)이 서버(206)나 애플리케이션(250)과의 접속을 폐쇄하기 위한 다수의 시나리오가 존재한다. 예를 들어 클라이언트(205)나 가속 프로그램(120)은 클라이언트(205)가 애플리케이션(220a, 220b)으로부터 모든 요구된 데이터를 회수했음을 결정하거나 애플리케이션(220a, 220b)의 종료, 셧다운을 결정하는 FIN 명령을 개시할 수 있다. 일부 실시예에서, 클라이언트(205)나 가속 프로그램(120)은 동일한 조건 하에서 RST 명령을 개시할 수도 있다. RST 명령은 가속 프로그램(120)과 서버(206) 또는 어플라이언스(250) 간 접속 폐쇄와 함께 서버 측 접속 상태를 양호하게 유지하기 위하여 다수의 정리작업을 유도한다. 특히 TCP 프로토콜은 RST 명령이 올바른 SEQ 번호를 보유하여 서버가 해당 세그먼트를 수용하도록 유도한다. 그러나 RST 명령은 올바른 ACK 번호를 보유했는지 여부를 보증하지 않는다. 이 점을 보완하기 위하여 가속 프로그램(120)은 서버(206)나 어플라이언스(250)가 발송한 데이터의 바이트와 클라이언트(205)가 인식한 바이트를 검토한 다. 클라이언트(205)가 서버(206)의 모든 데이터를 아직 인식하지 못한 경우 가속 프로그램(120)은 인식되지 않은 바이트를 계산하여 서버(205)로 ACK를 발송한다.
이에 더해, 도 7b에서는 보이지 않지만 서버(206)나 어플라이언스(250)는 클라이언트(205)와의 접속을 폐쇄할 수 있다. 서버(206)나 어플라이언스(250)는 클라이언트(205)에게 FIN 명령을 발송할 것이다. 일부 실시예에서, 가속 프로그램(120)이 이에 대응하여 접속을 폐쇄하고 다음 실시예에서, 서버(206)나 어플라이언스(250)와 다른 접속을 재형성한다.
게다가, 복수 애플리케이션 활용에 있어 하나 이상의 전송 계층 접속의 풀링을 논의하면서 주로 도 7a의 방법 700의 실시예나 도 7b의 흐름도 예시를 살펴보았지만, 본 발명의 풀링 기술은 단일 애플리케이션(220)이 접속을 활용하여 복수의 전송 계층 접속 및 요구를 요구하거나 개시하는 경우에도 적용될 수 있다. 예를 들어 HTTP 프로토콜 실시예의 경우, 한 애플리케이션으로부터 각 HTTP 요구에 대해 전송 계층 접속이 형성될 수 있다. 본 발명의 기술을 활용하면 각 요구에 따라 전송 계층 접속을 개방하거나 폐쇄하지 않고도 애플리케이션(220)이 하나 이상의 전송 계층 접속 풀을 사용할 수 있다.
다른 양태에서, 본 발명은 도 8a 및 도 8b와 관련하여 설명한 풀링 기술을 통해 형성된 전송 계층 접속과 같은 동일 또는 공유 전송 계층 접속을 통한 멀티플렉싱 애플리케이션 요구용 기술과 관련되어 있다. 일부 실시예에서, 본 발명은 서버(206)로부터의 애플리케이션의 요구에 대한 응답내용이 완전히 수령되었는지 여부를 검토하여 기존에 형성된 전송 계층 접속과 복수의 애플리케이션으로부터의 멀 티플렉싱 요구의 가용성을 결정한다. 아래 더 자세하게 논의하겠지만 본 발명은 응답의 모든 데이터가 수령되었는지 여부를 확인하기 위해일 실시예에서는 응답의 콘텐츠 길이 파라미터를 사용하고 다른 실시예에서는 응답의 분할된 전송 부호화 헤더를 사용한다. 본 발명은 도 7a에서 방법 700의 단계 706과 단계 708에서 설명했듯이 애플리케이션에서 풀 접속을 이용할 수 있는지 여부를 결정하기 위해 모든 응답 데이터를 수령했는지, 또는 서버로의 접속 풀에 다른 전송 계층 접속을 형성해야 하는지 여부를 확인한다. 다른 실시예에서 응답의 콘텐츠 길이를 확인하는 기술은 동일한 전송 계층 접속을 통해 복수의 애플리케이션으로부터의 요구를 멀티플렉싱하기 위한 기술로 활용된다.
도 8a에는 클라이언트(205)에서 서버(206)로 단일 전송 계층 접속을 통해 요구를 멀티플렉싱하는 방법 800의 실시예가 제시되어 있다. 간략히 살펴보면 단계 805에서 가속 프로그램(120)은 클라이언트(205)와 서버(206) 간의 전송 계층 접속을 형성한다. 단계 810에서 가속 프로그램(120)은 최초의 애플리케이션(220a)에서 서버(206)로의 최초 요구를 간섭한다. 단계 815에서 가속 프로그램(120)은 전송 계층 접속이 현재 다른 애플리케이션에서 사용되고 있는지 유휴상태인지 여부를 결정한다. 단계 817에서 애플리케이션(220a)이 전송 계층 접속을 사용할 수 있는 경우, 가속 프로그램(120)이 단계 820에서 요구를 서버로 전송한다. 그렇지 않은 경우, 즉 단계 817에서 애플리케이션(220a)이 전송 계층 접속을 사용할 수 없는 경우 가속 프로그램(120)이 단계 819에서 시간경과를 기다려 단계 815로 되돌아가거나, 애플리케이션(220)이 사용할 제2 전송 계층 접속을 형성한다. 단계 825에서 가속 프 로그램(120)은 서버로부터 애플리케이션 요구에 대한 응답을 수령한다. 단계 830에서 가속 프로그램(120)은 제2 애플리케이션(220b)으로부터 제2 요구를 간섭하고, 제2 애플리케이션(220b)이 전송 계층 접속을 사용할 수 있는지 여부를 결정하기 위해 단계 815로 간다. 일부 실시예에서 가속 프로그램(120)은 단계 825의 최초 응답을 수령하거나 응답의 모든 데이터를 수령하기 전인 단계 830에서 제2 애플리케이션(220b)의 요구를 간섭한다. 본 문서에서 자세히 설명한 바 있듯이, 일부 실시예에서 가속 프로그램(120)은 전송 계층 접속이 유휴상태인지, 또는 애플리케이션이 요구에 대한 응답의 모든 데이터를 수령했는지 여부를 확인하기 위하여 콘텐츠 길이 확인 기술을 사용한다.
좀더 자세히 살펴보면, 단계 805에서 가속 프로그램(120)은 클라이언트(205)와 서버(206) 사이에 전송 계층 접속을 설정한다. 일부 실시예의 경우 가속 프로그램(120)이 어플라이언스(250)이나 중개자와 함께, 또는 이를 통해 전송 계층을 설정한다. 일 실시예에서, 가속 프로그램(120)이 서버(206)에 대한 전송 계층 접속 풀의 형태로 전송 계층 접속을 설정한다. 따라서 일부 실시예에서, 전송 계층 접속에 서버(206)에 대한 제2 또는 3차 전송 계층 접속이 포함된다. 다른 실시예에서, 앞서 설명한 것처럼 가속 프로그램(120)이 제1 프로그램(222)을 통해 전송 계층 접속을 설정할 수도 있다. 일부 실시예에서, 가속 프로그램(120)은 클라이언트(205)의 제1 애플리케이션(220a)의 요구에 대한 응답으로 전송 계층 접속을 설정한다.
단계 810에서 가속 프로그램(120)은 서버(206)에 액세스하기 위한 제1 애플리케이션(220a)의 제1 요구를 차단한다. 일부 실시예에서, 전송 계층 접속을 통해 요구를 실시하거나 전달하기 전에 전송 프로토콜 계층에서 요구를 차단한다. 다른 실시예에서, 전송 계층 상단 또는 전송 계층 접속 상단의 임의의 프로토콜 계층에서든 요구를 차단할 수 있다. 일부 실시예에서, 제1 프로그램(222)이 요구를 차단한다. 일 실시예의 경우, 애플리케이션(220a)의 요구는 서버(206)와의 전송 계층 접속을 개방하거나 설정하라는 요구이다. 또 다른 실시예에서, 애플리케이션 요구는 설정된 전송 계층 접속을 통하거나 어플라이언스(250)를 통해 서버에 액세스하기 위한 요구이다.
단계 815에서, 가속 프로그램(120)은 전송 계층 접속이 유휴 상태인지 아니면 제1 애플리케이션(220a)이 사용하거나 제1 애플리케이션(220a)의 제1 요구를 전달할 수 있는 상태인지 판단한다. 일 실시예에서, 가속 프로그램(120)은 하나 이상의 전송 계층 접속 풀을 통해, 풀의 전송 계층 접속 가운데 임의의 것이 유휴 상태이고 임의의 것이 제1 애플리케이션(220a)이 사용할 수 있는 상태인지 판단한다. 일부 실시예에서, 가속 프로그램(120)이 요구에 응하여 또는 요구가 있기 직전에 전송 계층 접속을 설정하기 때문에, 전송 계층 접속이 유휴 상태인지를 가속 프로그램(120)이 판단한다. 일부 실시예에서, 가속 프로그램(120)이 애플리케이션(220)으로부터도 아무런 요구도 받지 않을 수 있지만, 이 요구를 가속 프로그램(120)이 수신해 처리해야 할 제1 요구로 인지한다. 다른 실시예에서, 가속 프로그램(120)은 전송 계층 접속을 통해 전달된 모든 요구에 대한 미해결 응답 수를 기록하고, 미해결 응답이 없는 경우 가속 프로그램(120)은 제1 애플리케이션(220a)이 전송 계층 접속을 사용할 수 있는 상태라고 인지한다. 또 다른 실시예에서, 가속 프로그 램(120)이 전송 계층 접속이 현재 유휴 상태임을 인지한다. 예를 들어, 가속 프로그램(120)은 연결 상태가 계속 유지되도록 서버에 기본 연결 유지 요구를 시도할 수 있다. 일부 실시예에서, 마지막 트랜잭션이 완료되었지만 서버(206) 및/또는 클라이언트(205)가 아직 RST 및/또는 FIN 명령을 전달하지 않은 관계로 전송 계층 접속이 유휴 상태이다.
일부 실시예에서, 가속 프로그램(120)은 제1 애플리케이션(202a)의 제1 요구에 대한 서버(206)의 응답이 완전한지, 만약 그렇지 않다면 가속 프로그램(120)이 응답에 대한 모든 데이터를 수신했는지 여부를 판단하기 위해 응답의 콘텐츠 길이를 확인한다. 앞서 언급했듯이 일부 실시예에 적용된 이 기술은 본 발명의 풀링 기술을 위한 다른 연결 설정을 판단하는 데 사용되기도 한다. 본 발명의 이 기술과 관련해, 응답에 대한 모든 데이터를 수신했는지 판단하기 위해 하나의 실시예에서 응답의 콘텐츠 길이 파라미터를 확인하거나 다른 실시예에서 응답의 청크(chunked) 전송 인코딩 헤더를 확인하는 방법을 도 9 및 도 10에서 설명한다. 도 9는 TCP 세그먼트(900)로 불리는 TCP 패킷의 TCP 부분을 도시한다. TCP 세그먼트(900)에는 TCP 헤더(902)와 바디(904)가 포함된다. 바디(904)는 다른 데이터와 정보 중에서도, TCP 패킷이 HTTP의 응용 계층 프로토콜을 전달하는 실시예의 HTTP 헤더와 메시지를 포함한다. 일부 실시예에서, HTTP 헤더가 콘텐츠 길이 파라미터(906)의 위치를 정하거나 찾아내거나 참조한다. 일부 실시예에서, 본 발명의 가속 프로그램(120)은 콘텐츠 길이 파라미터(906)을 사용하여 응답을 위한 모든 데이터를 수신했는지 판별한다.
도 10은 TCP 패킷의 TCP 세그먼트가 실시예되는 또 다른 방식을 설명한다. 전송 계층 접속에서 HTTP 프로토콜을 사용하는 일부 실시예의 경우에는 청크 전송 인코딩 헤더가 표시되어 TCP 세그먼트나 패킷에 청크 전송 인코딩이 적용되었음을 보여준다. 따라서 이 실시예에서는 청크 인코딩에 의해 메시지 길이가 정해진다. 청크 인코딩은 메시지를 각 청크의 청크 크기 필드에 길이 식별자가 포함되어 있는 일련의 청크 형태로 전달하기 위해 메시지 본문을 변경한다. TCP 세그먼트(1600)는 TCP 헤더(지금 표시되는)와 바디를 포함한다. 바디는 다른 정보 중에서도 HTTP 헤더(1602A 내지 1602C)와 메시지로 구성된다. HTTP 헤더(1602A 내지 1602C)는 7개의 청크 크기 필드(1606A 내지 1601C)와 6개의 청크 메시지 데이터(1604A 내지 1604F)로 구성된다.
청크 크기 필드(1606A 내지 1606G)는 도 10에 나와 있는 것처럼 서로 연결되어 있거나 아니면 상호 참조 또는 모종의 연관 관계가 있다. 청크 크기 필드(1606A)는 청크 메시지 데이터(1604A)의 메시지 길이를 나타내고, 청크 크기 필드(1606C)는 청크 메시지 데이터(1604C)의 메시지 길이를 나타내는 식이다. 마지막 청크 크기 필드(1606G)는 더 이상의 청크나 추적해야 할 메시지가 없음을 나타내는 길이 값 0으로 이루어져 있다. 다른 실시예에서, 본 발명의 가속 프로그램(120)이 청크 크기 필드를 통해 클라이언트(205)가 응답에 대한 모든 데이터를 수신했는지 판단한다.
요구에 대한 응답과 관련된 데이터를 모두 수신했는지 확인할 수 있는 기술을 도 9와 도 10을 통해 전반적으로 설명했지만, 이 기술은 서버(206) 또는 어플라 이언스(250)에 적용해 비동기식 메시지 전송이나 클라이언트(205)와의 통신에 활용할 수도 있다. 또 HTTP 프로토콜에 대한 도 9 및 도 10에서 전반적으로 설명하기는 했지만, 이 기술은 클라이언트(205)가 전달하거나 수신하는 데이터 길이를 표시하는 모든 프로토콜 계층의 임의의 프로토콜에서나 사용 가능하다. 따라서 일부 실시예에서 가속 프로그램(120)은 클라이언트와 서버, 어플라이언스 사이의 요구, 응답, 또는 통신과 관련된 모든 데이터를 수신했는지 확인하기 위해 모든 프로토콜 계층에 포함되어 있는 네트워크 패킷의 임의의 부분이든 액세스, 추출, 검사, 분석 또는 처리할 수 있다. 또 다른 실시예에서, 가속 프로그램(120)이 클라이언트(205)와 서버(206) 사이에서 전송, 수신 및 수신 확인된 바이트 수를 추적하여 애플리케이션(220)을 위한 클라이언트(205)와 서버(206) 사이에 미해결된 바이트가 있는지 확인한다.
위에 설명한 콘텐츠 길이 기술을 사용함으로써, 본 발명의 가속 프로그램(120)은 동일한 전송 계층 접속을 클라이언트(205)의 다른 애플리케이션(220a 내지 220n)이 앞서 사용했거나 사용하는 도중인 서버(206)에 재사용할 수 있다.
단계 817에서, 가속 프로그램(120)은 전송 계층 접속이 제1 요구를 전달할 수 있는지 확인하고, 가능한 경우에는 단계 820에서 요구를 서버(206)로 이동한다. 그렇지 않으면, 가속 프로그램(120)은 단계 819에서 애플리케이션의 미해결 요구를 위한 모든 데이터를 수신할 때까지 기다린다. 일례로, 가속 프로그램(120)은 타이머를 짧게 설정해두고 단계 815로 넘어갈 수 있다. 일부 실시예의 경우, 가속 프로그램(120)은 클라이언트(205)의 네트워크 스택(210)의 패킷 처리 타이머에 맞춰 모 든 데이터를 수신했는지 확인한다. 다른 실시예에서, 가속 프로그램(120)이 단계 819에서 또 다른 전송 계층 접속을 설정하여 제1 애플리케이션(220a)의 제1 요구를 전달한다.
단계 820에서, 가속 프로그램(120)은 현재 임의의 애플리케이션(220)이 연결상에 미해결 요구나 응답이 있는지, 또는 현재 연결을 사용하고 있는지 탐지한다. 예를 들면 한 번에 하나의 애플리케이션(220)만 연결상에서 요구를 전달하거나 응답을 수신할 수 있다. 그렇기 때문에 가속 프로그램(120)은 현재 임의의 애플리케이션(220)이 연결을 이용하고 있는지 알 수 있다. 일부 실시예의 경우, 가속 프로그램(120)은 연결을 공유하는 클라이언트(205)의 애플리케이션(220a 내지 220n) 전체에 대한 전송 계층 접속 통신을 위해 하나의 포트 번호만을 사용한다. 임의의 경우에는 가속 프로그램(120)이 애플리케이션을 기반으로, 요구와 애플리케이션 요구에 대한 미해결 반응을 추적한다. 일부 실시예에서 가속 프로그램(120)은 애플리케이션(220)의 프로세스 ID를 요구와 연결시킨다. 또 다른 실시예에서, 가속 프로그램(120)이 동일한 네트워크 패킷(들) 및 TCP 세그먼트(들) 내에서 제1 애플리케이션(220a)의 요구를 제2 애플리케이션(220b)의 요구과 함께 전달한다. 다른 실시예의 경우, 가속 프로그램(120)은 애플리케이션(220a 내지 220n)의 요구 대부분을 동일한 전송 계층 접속을 통해, 하나 이상의 TCP 세그먼트 윈도우의 일련의 TCP 세그먼트의 일부로서 전달한다.
다른 실시예에서, 가속 프로그램(120)은 포트 번호 부여 방식 및/또는 체계를 이용하여 애플리케이션(220a 내지 220n)에 대한 임의의 응답이나 메시지가 수신 되었는지 확인하고 알아본다. 다른 실시예에서, 가속 프로그램(120)이 애플리케이션(220)에 포트 번호를 제공해 연결시키고, TCP 네트워크 패킷의 포트 번호를 수정하여 애플리케이션에 할당된 포트 번호로 전달되도록 한다. 또 다른 실시예에서, 애플리케이션(220)이 포트 번호를 제공하고 가속 프로그램(120)은 그에 맞춰 TCP 네트워크 패킷에 적절한 포트 번호를 제공하거나 변경한다. 따라서 일부 실시예의 경우, 가속 프로그램(120)은 애플리케이션(220a 내지 220n)이 동시에 전송 계층 접속을 사용할 수 있도록 클라이언트(205)의 애플리케이션(220a 내지 220n) 대다수의 요구를 뒤섞기도 한다.
단계 825에서, 가속 프로그램(120)은 어플라이언스(205)를 통하는 등의 방법으로 서버(206)에서 제1 애플리케이션(220a)의 제1 요구에 대한 응답을 수신하고, 제1 애플리케이션(220a)에 응답을 제공한다. 일부 실시예의 경우, 가속 프로그램(120)은 연결의 전송 계층 상단에 있는 프로토콜 계층의 응답 처리를 허가하거나 시작하는 등의 방식으로, 네트워크 스택(210)을 통해 제1 애플리케이션(220a)에 응답을 제공한다. 다른 실시예에서, 제1 프로그램(222)이 제1 애플리케이션(220a)에 응답을 제공한다. 또 다른 실시예에서, 가속 프로그램(120)이 프로세스 간 통신 장치나 API와 같은 인터페이스를 통해 제1 애플리케이션(220a)에 응답을 제공한다. 일부 실시예의 경우, 가속 프로그램(120)은 도 10에서 설명한 것처럼 여러 개의 청크로 구성된 메시지 가운데 제1 청크만 받는 식으로 응답의 일부만을 수신한다.
단계 830에서 가속 프로그램(120)은 서버(206)에 액세스하기 위한 제2 애플리케이션(220b)의 요구를 차단한다. 일부 실시예에서, 가속 프로그램(120)은 단계 825가 시작되기 전에 제2 애플리케이션(220b)의 요구를 차단한다. 다른 실시예에서, 가속 프로그램(120)이 단계 825에서 응답을 수신하는 도중에 제2 애플리케이션(220b)의 요구를 차단한다. 또 다른 실시예에서, 가속 프로그램(120)은 클라이언트(205)나 가속 프로그램(120)이 제1 애플리케이션(220a)의 제1 요구에 대한 응답을 위한 모든 데이터를 수신하기 전에 제2 애플리케이션(220b)의 요구를 차단한다. 제2 애플리케이션(220b)의 요구를 차단하는 동안 가속 프로그램(120)은 본 발명 실시예의 단계 815로 넘어가, 전송 계층 접속을 통해 제2 요구를 다중 전송할 것인지 아니면 연결 풀 내의 다른 연결처럼 또 하나의 전송 계층 접속을 설정할 것인지 결정한다. 다른 실시예에서, 가속 프로그램(120)은 제1 애플리케이션(220a)과 동일한 연결을 통해 제2 애플리케이션(220b)의 요구를 전달하지만, 제1 애플리케이션(220a)에 미해결된 응답이 있거나 제1 요구의 응답과 관련된 모든 데이터를 수신하지 못한다. 또 다른 실시예에서, 가속 프로그램(120)은 제1 애플리케이션(220a)이 응답을 받은 뒤에, 그리고 제1 애플리케이션(220a)과 관련된 RST 및/또는 FIN 명령이 생성되기 전에 제2 애플리케이션(220b)의 요구를 전달한다.
지금까지는 전반적으로 가속 기술의 클라이언트측 실시예 및 실행에 관련해서만 가속 프로그램(120)을 살펴봤지만, 가속 프로그램(120)은 어플라이언스측 가속 기술을 실시예 및 실행하는 어플라이언스(250)와 조화를 이루어 기능한다. 일부 실시예의 경우에는, 클라이언트측 가속 프로그램(120)과 어플라이언스(250)가 서로 협력해 동작함으로써, 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 간 통신에 대한 본 발명의 가속화 기술 대부분을 실행했다. 일부 실시예에서, 클라 이언트측 가속 프로그램(120)과 어플라이언스(250)가 모두 클라이언트(205a 내지 205n)와 서버(206a 내지 206n) 사이에서 계단식 또는 종단 간(end-to-end) 방식의 풀링 및 다중 전송 구조와 같은 TCP 풀링 및 멀티플렉싱 기능을 제공한다. 예를 들어, 가속 프로그램(120)은 어플라이언스(250)에 제1로 풀링된 전송 계층 접속을 제공하고, 이것은 다시 서버(206a 내지 206n)에 제2로 풀링된 전송 계층 접속을 제공한다. 다른 예를 보면, 가속 프로그램(120)은 클라이언트(205a 내지 205n)에서 제1 풀링된 전송 계층 접속을 통해 애플리케이션 요구를 다중 전송할 수 있고, 어플라이언스(250)는 서버(206a 내지 206n)에 제2 풀링된 전송 계층 접속을 통해 이것을 다시 다중 전송한다. 일부 실시예에서, 가속 프로그램(120)은 클라이언트(205a 내지 205n)의 요구를 전달하기 위한 제어 방식을 제공하고, 어플라이언스(205)는 서버(206a 내지 206n)에서 클라이언트(205a 내지 205n)로 응답을 전달하기 위한 제어 방식을 제공한다. 다른 실시예에서, 가속 프로그램(120)은 클라이언트(205)를 위해 클라이언트측 캐싱을 수행하고, 어플라이언스(250)는 클라이언트(205a 내지 205n)를 위해 동적으로 생성된 오브젝트 등에 대한 오브젝트 캐싱을 수행한다.
일부 실시예에서, 클라이언트(205) 및/또는 어플라이언스에 가속화 기술을 수행하는 것 외에, 가속 프로그램(120)과 어플라이언스가 어플라이언스(250)을 통해 클라이언트(205)와 네트워크(204) 액세스 사이에 가상 사설 네트워크 접속 및 통신 기능을 제공할 수도 있다. 다른 실시예에서, 가속 프로그램(120)이 애플리케이션(220)에서 전달된 데이터를 압축하고 어플라이언스(250)는 수신한 압축 데이터의 압축을 푼다. 반대로 어플라이언스(250)가 사설 데이터 통신 네트워크(204) 상 의 서버(206)의 애플리케이션(220)에서 전달된 데이터를 압축하고, 가속 프로그램(120)이 수신한 압축 데이터의 압축을 풀 수도 있다. 또 가속 프로그램(120)과 어플라이언스(250)는 암호화된 데이터 통신 또는 터널링 세션의 종단점 역할을 하면서, 가속 프로그램(120)은 애플리케이션(220)에서 전달된 데이터를 암호화하고 어플라이언스(250)는 암호화된 데이터를 수신한 뒤 이를 복호화한다. 마찬가지로 어플라이언스(250)는 사설 데이터 통신 네트워크의 애플리케이션(220)에서 전달된 데이터를 암호화하고, 가속 프로그램(120)은 수신한 암호화 데이터를 복호화한다.
본 명세서에서 설명한 클라이언트측 가속 배치 및 실행 기술들의 구조, 기능, 동작을 고려할 때, 본 발명은 클라이언트에 대하여 효율적이고도 투명한 방식으로 실행되며 또한 효율적으로 배치된 클라이언트 상에 복수의 가속 기술들을 제공한다. 일부 실시예들에서, 본 발명은 클라이언트와 공중 데이터 통신 네트워크 간의 어플라이언스 기반 또는 서버 기반의 가속기의 설치를 우회한다. 게다가, 가속 프로그램이 네트워크상에서 클라이언트(205)에 동적 제공되고 클라이언트(205)에 자동 설치 및 실행되기 때문에, 임의의 클라이언트 머신상에서 가속을 얻을 수 있다. 또한, 가속 프로그램이 어플라이언스(205) 또는 서버로부터 저장되고 동적 다운로드되기 때문에, 가속 프로그램(120)에 대한 갱신 및/또는 유지를 한 번만 행할 수 있고, 네트워크에 액세스될 때 클라이언트에 대하여 동적 배치되고 자동 배치될 수 있다. 또한, 본 발명은 어플라이언스측 가속기와 함께 동작하여 클라이언트로부터 어플라이언스, 서버로의 종단 간 가속을 수행한다.
본 발명의 다양한 실시예들을 설명하였지만, 이들은 단지 예일 뿐이며 한정 적인 것이 아님을 이해해야 한다. 따라서, 청구범위에서 한정된 본 발명의 사상 및 범위로부터 벗어나지 않고서 본 발명의 형태 및 상세에 있어서 다양한 변형이 가능하다는 점을 당업자라면 이해할 것이다. 이에 따라, 본 발명의 사상 및 범위는 상술한 실시예들에 의해 제한되지 않으며 다음에 따르는 청구범위 및 그 등가에 의해서만 한정된다.

Claims (169)

  1. 원격 액세스 애플리케이션에 대한 클라이언트의 액세스를 가속하는 가속 프로그램을 상기 클라이언트에게 동적 제공하여 자동 설치 및 실행되게 하는 방법으로서,
    (a) 어플라이언스에 의해, 서버와의 통신 세션을 확립하는 클라이언트의 요구를 수신하는 단계;
    (b) 상기 어플라이언스에 의해, 상기 서버를 통해 제공되는 애플리케이션에 대한 클라이언트의 액세스 가속을 상기 클라이언트 상에서 수행하기 위한 네트워크 드라이버를 포함하는 가속 프로그램을 상기 클라이언트에게 전송하는 단계;
    (c) 상기 가속 프로그램의 수신시, 상기 클라이언트에 의해, 상기 클라이언트의 저장 장치에 상기 네트워크 드라이버의 조용한 설치를 자동 실행하는 단계; 및
    (d) 상기 네트워크 드라이버의 설치시, 상기 클라이언트에 의해, 상기 클라이언트의 네트워크 스택에 할당된 메모리에서 네트워크 드라이버를 자동 실행하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 어플라이언스에 의해, 상기 서버와의 통신 세션의 확립시 상기 가속 프 로그램을 상기 클라이언트에게 전송하는 단계를 포함하는 방법.
  3. 제1항에 있어서,
    상기 가속 프로그램에 의해, 상기 서버와의 통신 세션을 확립하는 단계를 포함하는 방법.
  4. 제1항에 있어서,
    상기 클라이언트의 사용자에 의한 상호작용 또는 상기 클라이언트의 리부팅 없이 상기 클라이언트에 상기 가속 프로그램을 설치하는 단계를 포함하는 방법.
  5. 제1항에 있어서,
    상기 (b) 단계, (c) 단계, (d) 단계 중 하나는, 상기 클라이언트의 사용자, 상기 클라이언트의 애플리케이션, 상기 서버 중 하나에 투명하게 상기 클라이언트 상에서 수행되는 방법.
  6. 제1항에 있어서,
    상기 네트워크 드라이버는 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 방법.
  7. 제1항에 있어서,
    상기 가속 프로그램은, 상기 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 클라이언트측 가속된 액세스를 상기 클라이언트 상의 애플리케이션에 제공하는 방법.
  8. 제1항에 있어서,
    상기 어플라이언스에 의해, 상기 가속 프로그램을 포함하는 제1 프로그램을 상기 클라이언트에게 전송하는 단계를 포함하는 방법.
  9. 제8항에 있어서,
    제1 프로그램의 수신시, 상기 클라이언트에 의해, 상기 가속 프로그램을 설치 및 실행하는 제1 프로그램을 자동 실행하는 단계를 포함하는 방법.
  10. 제8항에 있어서,
    상기 제1 프로그램은 브라우저에 제공되고 상기 브라우저상에서 실행되는 명령들을 포함하는 방법.
  11. 제1항에 있어서,
    (e) 상기 어플라이언스에 의해, 상기 서버상의 애플리케이션에 액세스하는 상기 클라이언트의 요구를 수신하는 단계; 및
    (f) 상기 어플라이언스에 의해, 상기 가속 프로그램과 통신하는 상기 클라이 언트에게 상기 클라이언트와 상기 서버 간의 통신에 대하여 적어도 하나의 가속 기술을 수행하는 메시지를 전송하는 단계
    를 포함하는 방법.
  12. 제11항에 있어서,
    (g) 상기 어플라이언스에 의해, 상기 애플리케이션이 가속될 수 있는지 여부를 결정하는 단계; 및
    (h) 상기 어플라이언스에 의해, 상기 애플리케이션이 가속될 수 있다면 메시지를 상기 클라이언트에 전송하는 단계
    를 포함하는 방법.
  13. 제1항에 있어서,
    상기 가속 프로그램에 의해, 가속 기술들인 압축, 압축해제, 전송 제어 프로토콜 접속 풀링, 전송 제어 프로토콜 접속 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 및 캐싱 중 하나를 상기 클라이언트 상에서 수행하는 단계를 포함하는 방법.
  14. 제1항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트와 상기 서버 간의 통신의 암호화 또는 복호화를 수행하는 단계를 포함하는 방법.
  15. 제1항에 있어서,
    상기 네트워크 드라이버에 의해, 상기 어플라이언스 또는 상기 서버와의 가상 사설 네트워크 접속을 확립하는 단계를 포함하는 방법.
  16. 제1항에 있어서,
    상기 어플라이언스는 캐시, 게이트웨이, 서버, 방화벽, 프록시, 라우터, 스위치, 브리지 중 하나를 포함하는 방법.
  17. 원격 액세스 애플리케이션에 대한 클라이언트의 액세스를 가속하는 가속 프로그램을 상기 클라이언트에게 동적 제공하는 방법으로서,
    (a) 어플라이언스에 의해, 서버를 통해 애플리케이션에 액세스하는 클라이언트의 요구를 수신하는 단계;
    (b) 상기 어플라이언스에 의해, 상기 애플리케이션이 가속될 수 있음을 결정하는 단계; 및
    (c) 상기 어플라이언스에 의해, 상기 클라이언트 상에서의 자동 설치 및 실행을 위해 상기 클라이언트에게 가속 프로그램을 전송하는 단계
    를 포함하는 방법.
  18. 제17항에 있어서,
    상기 가속 프로그램의 수신시, 상기 클라이언트에 의해, 상기 가속 프로그램 을 자동 실행 및 설치하는 단계를 포함하는 방법.
  19. 제17항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 애플리케이션, 상기 클라이언트의 사용자, 상기 서버 중 하나에 대하여 투명하게 상기 가속 프로그램의 수신, 설치, 실행 중 하나를 실행하는 단계를 포함하는 방법.
  20. 제17항에 있어서,
    상기 어플라이언스에 의해, 상기 애플리케이션이 가속될 수 없음을 결정하는 단계와, 요구를 상기 서버에 포워딩하는 단계를 포함하는 방법.
  21. 제17항에 있어서,
    압축, 압축해제, 전송 제어 프로토콜 접속 풀링, 전송 제어 프로토콜 접속 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 캐싱 중 하나에 의해 상기 애플리케이션이 가속될 수 있음을, 상기 어플라이언스에 의해, 결정하는 단계를 포함하는 방법.
  22. 제19항에 있어서,
    상기 어플라이언스에 의해 상기 애플리케이션을 가속할 수 있는 것으로 결정된 가속 기술을 제공하도록 구성된 가속 프로그램을, 상기 어플라이언스에 의해, 전송하는 단계를 포함하는 방법.
  23. 제19항에 있어서,
    상기 가속 프로그램에 의해, 가속 기술들 중 하나를 수행하는 단계를 포함하는 방법.
  24. 제17항에 있어서,
    상기 가속 프로그램에 의해, 상기 어플라이언스나 상기 서버에 가상 사설 네트워크를 제공하는 단계를 포함하는 방법.
  25. 제17항에 있어서,
    상기 어플라이언스는 캐시, 게이트웨이, 서버, 방화벽, 프록시, 라우터, 스위치, 브리지 중 하나를 포함하는 방법.
  26. 원격 액세스 애플리케이션에 대한 클라이언트의 액세스를 가속하는 가속 프로그램을 상기 클라이언트에게 동적 제공하는 어플라이언스로서,
    서버를 통해 애플리케이션에 액세스하는 클라이언트의 요구를 수신하는 수단;
    상기 애플리케이션이 가속될 수 있음을 결정하는 수단; 및
    상기 클라이언트 상에서의 자동 설치 및 실행을 위해 상기 클라이언트에게 가속 프로그램을 전송하는 수단
    을 포함하는 어플라이언스.
  27. 제26항에 있어서,
    상기 어플라이언스에 의해, 상기 애플리케이션이 가속될 수 없음을 결정하고, 요구를 상기 서버에 포워딩하는 수단을 포함하는 어플라이언스.
  28. 제26항에 있어서,
    압축, 압축해제, 전송 제어 프로토콜 접속 풀링, 전송 제어 프로토콜 접속 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 캐싱 중 하나에 의해 상기 애플리케이션이 가속될 수 있음을, 상기 어플라이언스에 의해, 결정하는 수단을 포함하는 어플라이언스.
  29. 제26항에 있어서,
    상기 어플라이언스에 의해 상기 애플리케이션을 가속할 수 있는 것으로 결정된 가속 기술을 제공하도록 구성된 가속 프로그램을, 상기 어플라이언스에 의해, 전송하는 수단을 포함하는 어플라이언스.
  30. 제26항에 있어서,
    상기 가속 프로그램과의 가상 사설 네트워크를 확립하는 수단을 포함하는 어플라이언스.
  31. 제26항에 있어서,
    캐시, 게이트웨이, 서버, 방화벽, 프록시, 라우터, 스위치, 브리지 중 하나를 포함하는 어플라이언스.
  32. 클라이언트 상에서 서버에 대한 하나 이상의 전송 계층 접속을 풀링함으로써 서버에 대한 클라이언트의 액세스를 가속하는 방법으로서,
    (a) 상기 클라이언트 상의 가속 프로그램에 의해, 서버와의 제1 전송 계층 접속을 확립하는 제1 애플리케이션의 제1 요구를 간섭하는 단계;
    (b) 상기 가속 프로그램에 의해, 상기 가속 프로그램과 상기 서버 간의 전송 계층 접속을 확립하는 단계;
    (c) 상기 가속 프로그램에 의해, 상기 서버와의 제1 전송 계층 접속을 확립하는 제2 애클리케이션의 제2 요구를 간섭하는 단계; 및
    (e) 상기 가속 프로그램에 의해, 확립된 전송 계층 접속을 이용하여 요구되는 전송 계층 접속을 상기 제2 애플리케이션에게 제공하는 단계
    를 포함하는 방법.
  33. 제32항에 있어서,
    상기 어플라이언스에 의해, 상기 서버와의 접속 또는 세션을 확립하는 상기 클라이언트의 요구시 상기 클라이언트에게 상기 가속 프로그램을 전송하는 단계를 포함하는 방법.
  34. 제32항에 있어서,
    상기 가속 프로그램의 수신시, 상기 클라이언트에 의해 상기 가속 프로그램을 자동 설치 및 실행하는 단계를 포함하는 방법.
  35. 제32항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 방법.
  36. 제32항에 있어서,
    상기 가속 프로그램에 의해, 확립된 전송 계층 접속을 통해 상기 클라이언트 상의 복수의 애플리케이션의 요구를 멀티플렉싱하는 단계를 포함하는 방법.
  37. 제32항에 있어서,
    상기 가속 프로그램에 의해, 가속 기술들인 압축, 압축해제, 전송 제어 프로토콜 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 캐싱 중 하나를 상기 클라이언트에 수행하는 단계를 포함하는 방법.
  38. 제32항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트와 상기 서버 간의 통신의 암호화 또는 복호화를 수행하는 단계를 포함하는 방법.
  39. 제32항에 있어서,
    상기 가속 프로그램에 의해, 리셋 또는 최종 커맨드의 수신시 제1 전송 계층 접속을 종료하는 단계를 포함하는 방법.
  40. 제32항에 있어서,
    상기 가속 프로그램에 의해, 상기 제1 애플리케이션이나 상기 제2 애플리케이션과 상기 서버 간의 유휴 활동기간 동안 전송 계층 접속을 개방 상태로 유지하는 단계를 포함하는 방법.
  41. 제40항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트로부터 상기 서버로의 통신에, 전송 계층 접속을 개방 상태로 유지하는 명령을 삽입하는 단계를 포함하는 방법.
  42. 제32항에 있어서,
    상기 가속 프로그램에 의해, 각 애플리케이션에 대하여 상기 서버로 전송된 바이트수와 상기 서버로부터 승인된 바이트수를 비교함으로써 상기 제1 애플리케이션 또는 상기 제2 애플리케이션에 의해 전송 계층 접속이 현재 사용되고 있음을 결 정하는 단계를 포함하는 방법.
  43. 제32항에 있어서,
    상기 (e) 단계는, 상기 제1 애플리케이션에 의해 상기 전송 계층 접속이 현재 사용되고 있음을 상기 가속 프로그램에 의해 결정하는 단계와, 상기 가속 프로그램과 상기 서버 간의 제2 전송 계층 접속을 상기 제2 애플리케이션의 이용을 위해 개방하는 단계를 포함하는 방법.
  44. 제32항에 있어서,
    상기 (b) 단계는, 상기 가속 프로그램과 어플라이언스 간에 전송 계층 접속을 확립하되, 상기 어플라이언스는 상기 서버와 통신하는 단계를 포함하는 방법.
  45. 제44항에 있어서,
    상기 어플라이언스에 의해, 상기 가속 프로그램이 이용하도록 하나 이상의 전송 계층 접속들의 풀을 확립하는 단계를 포함하는 방법.
  46. 제32항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  47. 제32항에 있어서,
    상기 클라이언트에 의해, 상기 제1 애플리케이션, 상기 제2 애플리케이션, 상기 서버 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  48. 클라이언트 상에서 서버에 대한 하나 이상의 전송 계층 접속을 풀링함으로써 하나 이상의 서버에 대한 클라이언트의 액세스를 가속하는 시스템으로서,
    상기 클라이언트 상의 가속 프로그램에 의해, 서버와의 제1 전송 계층 접속을 확립하는 제1 애플리케이션의 제1 요구를 간섭하는 수단;
    상기 가속 프로그램에 의해, 상기 가속 프로그램과 서버 간의 전송 계층 접속을 확립하는 수단;
    상기 가속 프로그램에 의해, 서버와의 제1 전송 계층 접속을 확립하는 제2 애클리케이션의 제2 요구를 간섭하는 수단; 및
    상기 가속 프로그램에 의해, 확립된 전송 계층 접속을 이용하여 요구되는 전송 계층 접속을 상기 제2 애플리케이션에게 제공하는 수단
    을 포함하는 시스템.
  49. 제48항에 있어서,
    상기 클라이언트에 의해, 상기 가속 프로그램을 자동 설치 및 실행하는 수단 을 포함하는 시스템.
  50. 제48항에 있어서,
    상기 서버와의 세션이나 접속을 확립하는 상기 클라이언트의 요구시 상기 가속 프로그램을 상기 클라이언트에게 전송하는 어플라이언스를 포함하는 시스템.
  51. 제48항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 시스템.
  52. 제48항에 있어서,
    상기 가속 프로그램에 의해, 제2 전송 계층 접속을 통해 상기 클라이언트 상의 복수의 애플리케이션의 요구를 멀티플렉싱하는 수단을 포함하는 시스템.
  53. 제48항에 있어서,
    상기 가속 프로그램은, 가속 기술들인 압축, 압축해제, 전송 제어 프로토콜(TCP) 멀티플렉싱, TCP 버퍼링, 캐싱 중 하나를 클라이언트에게 수행하는 시스템.
  54. 제48항에 있어서,
    상기 가속 프로그램은 상기 클라이언트와 상기 서버 간의 통신의 암호화 또는 복호화를 수행하는 시스템.
  55. 제48항에 있어서,
    상기 가속 프로그램에 의해, 리셋이나 최종 커맨드의 수신시 전송 계층 접속을 종료하는 수단을 포함하는 시스템.
  56. 제48항에 있어서,
    상기 가속 프로그램은, 상기 제1 애플리케이션이나 제2 애플리케이션과 상기 서버 간의 유휴 활동기간 동안 전송 계층 접속을 개방 상태로 유지하는 시스템.
  57. 제56항에 있어서,
    상기 가속 프로그램은, 상기 클라이언트로부터 상기 서버로의 통신에, 접속을 개방 상태로 하는 명령을 삽입하는 시스템.
  58. 제48항에 있어서,
    상기 가속 프로그램은, 각 애플리케이션에 대하여 상기 서버로 전송된 바이트 수와 상기 서버로부터 승인된 바이트 수를 비교함으로써 상기 제1 애플리케이션 또는 제2 애플리케이션에 의해 전송 계층 접속이 현재 사용되고 있음을 결정하는 시스템.
  59. 제48항에 있어서,
    상기 가속 프로그램은, 상기 제1 애플리케이션에 의해 상기 전송 계층 접속이 현재 사용되고 있음을 결정하고, 상기 가속 프로그램과 상기 서버 간의 제2 전송 계층 접속을 상기 제2 애플리케이션의 이용을 위해 개방하는 시스템.
  60. 제48항에 있어서,
    상기 가속 프로그램과 상기 서버와 통신하는 어플라이언스 간에 제2 전송 계층 접속을 확립하는 수단을 포함하는 시스템.
  61. 제48항에 있어서,
    상기 어플라이언스는, 상기 가속 프로그램이 이용하도록 하나 이상의 전송 계층 접속들의 풀을 포함하는 시스템.
  62. 제48항에 있어서,
    상기 가속 프로그램은, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 클라이언트 상에서 실행되는 시스템.
  63. 제48항에 있어서,
    상기 가속 프로그램은, 상기 제1 애플리케이션, 상기 제2 애플리케이션, 상기 서버 중 하나에 대하여 투명하게 실행되는 시스템.
  64. 공유된 전송 계층 접속을 통해 복수의 애플리케이션 요구를 멀티플렉싱함으로써 서버상의 하나 이상의 애플리케이션에 대한 클라이언트의 액세스를 클라이언트 상에서 가속하는 방법으로서,
    (a) 클라이언트 상의 가속 프로그램에 의해, 상기 서버에 액세스하는 상기 클라이언트의 제1 애플리케이션의 제1 요구를 간섭하는 단계;
    (b) 상기 가속 프로그램에 의해, 상기 가속 프로그램과 서버 간에 확립된 전송 계층 접속을 통해 상기 제1 요구를 전송하는 단계;
    (c) 상기 가속 프로그램에 의해, 상기 서버에 액세스하는 상기 클라이언트의 제2 애플리케이션의 제2 요구를 간섭하는 단계; 및
    (d) 상기 가속 프로그램에 의해, 상기 제1 애플리케이션에 의해 이용되는 확립된 전송 계층 접속을 통해 상기 제2 요구를 전송하는 단계
    를 포함하는 방법.
  65. 제64항에 있어서,
    상기 서버로부터 상기 제1 애플리케이션의 요구에 대한 응답 수신시, 상기 가속 프로그램에 의해, 제2 요구를 전송하는 단계를 포함하는 방법.
  66. 제64항에 있어서,
    상기 제1 애플리케이션이 현재 전송 계층 접속을 이용하고 있지 않다고 결정시 상기 가속 프로그램에 의해 제2 요구를 전송하는 단계를 포함하는 방법.
  67. 제66항에 있어서,
    상기 제1 애플리케이션에 의해 상기 서버로 전송된 바이트 수와 상기 서버에 의해 승인된 바이트 수를 비교함으로써 상기 제1 애플리케이션이 전송 계층 접속을 현재 사용되고 있지 않음을, 상기 가속 프로그램에 의해, 결정하는 단계를 포함하는 방법.
  68. 제66항에 있어서,
    상기 클라이언트와 상기 서버 간의 메시지에서 메시지 식별자의 길이를 확인함으로써 상기 제1 애플리케이션이 전송 계층 접속을 현재 사용하고 있지 않음을, 상기 가속 프로그램에 의해, 결정하는 단계를 포함하는 방법.
  69. 제64항에 있어서,
    상기 가속 프로그램에 의해, 전송 계층 접속을 통해 상기 클라이언트 상의 복수의 애플리케이션으로부터의 요구를 멀티플렉싱하는 단계를 포함하는 방법.
  70. 제64항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트의 복수의 애플리케이션이 이용하도록 상기 서버에 대한 복수의 전송 계층 접속을 풀링하는 단계를 포함하는 방법.
  71. 제64항에 있어서,
    상기 어플라이언스에 의해, 상기 서버에 대한 접속을 확립하는 상기 클라이언트의 요구시 상기 가속 프로그램을 상기 클라이언트에게 전송하는 단계를 포함하는 방법.
  72. 제64항에 있어서,
    상기 가속 프로그램의 수신시, 상기 클라이언트에 의해 상기 가속 프로그램의 자동 설치 및 실행하는 단계를 포함하는 방법.
  73. 제64항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 방법.
  74. 제64항에 있어서,
    상기 가속 프로그램에 의해, 가속 기술들인 압축, 압축해제, 전송 제어 프로토콜 버퍼링, 캐싱 중 하나를 수행하는 방법.
  75. 제64항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트와 상기 서버 간의 통신의 암호화 또는 복호화를 수행하는 단계를 포함하는 방법.
  76. 제64항에 있어서,
    상기 가속 프로그램에 의해, 상기 제1 애플리케이션과 상기 제2 애플리케이션을 위해 리셋이나 최종 커맨드의 수신시 전송 계층 접속을 종료하는 단계를 포함하는 방법.
  77. 제64항에 있어서,
    상기 (b) 단계는, 상기 가속 프로그램과 어플라이언스 간에 전송 계층 접속을
    확립하되, 상기 어플라이언스는 상기 서버와 통신하는 단계를 포함하는 방법.
  78. 제77항에 있어서,
    상기 어플라이언스에 의해, 상기 가속 프로그램이 이용하도록 하나 이상의 전송 계층 접속들의 풀을 확립하는 단계를 포함하는 방법.
  79. 제77항에 있어서,
    상기 어플라이언스에 의해, 하나 이상의 전송 계층 접속들의 풀을 통해 상기 가속 프로그램과 상기 서버 간의 복수의 통신을 멀티플렉싱하는 단계를 포함하는 방법.
  80. 제64항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  81. 제64항에 있어서,
    상기 클라이언트에 의해, 상기 제1 애플리케이션, 상기 제2 애플리케이션, 상기 서버 중 하나에 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  82. 공유된 전송 계층 접속을 통해 복수의 애플리케이션 요구를 멀티플렉싱함으로써 서버상의 하나 이상의 애플리케이션에 대한 클라이언트의 액세스를 클라이언트 상에서 가속하는 시스템으로서,
    클라이언트 상의 가속 프로그램에 의해, 상기 서버에 액세스하는 상기 클라이언트의 제1 애플리케이션의 제1 요구를 간섭하는 수단;
    상기 가속 프로그램에 의해, 상기 가속 프로그램과 서버 간에 확립된 전송 계층 접속을 통해 상기 제1 요구를 전송하는 수단;
    상기 가속 프로그램에 의해, 상기 서버에 액세스하는 상기 클라이언트의 제2 애플리케이션의 제2 요구를 간섭하는 수단; 및
    상기 가속 프로그램에 의해, 상기 제1 애플리케이션에 의해 이용되는 확립된 전송 계층 접속을 통해 상기 제2 요구를 전송하는 수단
    를 포함하는 시스템.
  83. 제82항에 있어서,
    상기 서버로부터의 상기 제1 애플리케이션의 요구에 대한 응답 수신시, 상기 가속 프로그램에 의해, 제2 요구를 전송하는 수단을 포함하는 시스템.
  84. 제82항에 있어서,
    상기 가속 프로그램에 의해, 상기 제1 애플리케이션이 전송 계층 접속을 현재 이용하고 있지 않다고 결정시 제2 요구를 전송하는 수단을 포함하는 시스템.
  85. 제82항에 있어서,
    상기 가속 프로그램에 의해, 상기 제1 애플리케이션에 의해 상기 서버로 전송된 바이트수와 상기 서버에 의해 승인된 바이트수를 비교함으로써 상기 제1 애플리케이션이 전송 계층 접속을 현재 이용하고 있지 않음을 결정하는 수단을 포함하 는 시스템.
  86. 제85항에 있어서,
    상기 클라이언트와 상기 서버 간의 메시지에서 메시지 식별자의 길이를 확인함으로써 상기 제1 애플리케이션이 전송 계층 접속을 현재 사용하고 있지 않음을, 상기 가속 프로그램에 의해, 결정하는 수단을 포함하는 시스템.
  87. 제82항에 있어서,
    상기 가속 프로그램에 의해, 전송 계층 접속을 통해 상기 클라이언트 상의 복수의 애플리케이션으로부터의 요구를 멀티플렉싱하는 수단을 포함하는 시스템.
  88. 제82항에 있어서,
    상기 가속 프로그램에 의해, 복수의 애플리케이션이 이용하도록 상기 서버에 대한 복수의 전송 계층 접속을 풀링하는 수단을 포함하는 시스템.
  89. 제82항에 있어서,
    상기 서버와의 접속이나 세션을 확립하는 상기 클라이언트의 요구시 상기 클라이언트에게 상기 가속 프로그램을 전송하는 어플라이언스를 포함하는 시스템.
  90. 제89항에 있어서,
    상기 가속 프로그램의 수신시 상기 가속 프로그램의 자동 설치 및 실행하는 상기 클라이언트를 포함하는 시스템.
  91. 제82항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 시스템.
  92. 제82항에 있어서,
    상기 가속 프로그램은 상기 클라이언트에 대하여 가속 기술들인 압축, 압축해제, 전송 제어 프로토콜 버퍼링, 캐싱 중 하나를 수행하는 시스템.
  93. 제82항에 있어서,
    상기 가속 프로그램은, 상기 클라이언트와 상기 서버 간의 통신의 암호화 또는 복호화를 수행하는 시스템.
  94. 제82항에 있어서,
    상기 가속 프로그램에 의해, 상기 제1 애플리케이션과 상기 제2 애플리케이션 중 하나를 위한 리셋이나 최종 커맨드의 수신시 전송 계층 접속을 종료하는 수단을 포함하는 시스템.
  95. 제82항에 있어서,
    상기 가속 프로그램과 상기 서버와 통신하는 어플라이언스 간에 전송 계층 접속을 확립하는 수단을 포함하는 시스템.
  96. 제82항에 있어서,
    상기 어플라이언스는 상기 가속 프로그램이 이용하도록 하나 이상의 전송 계층 접속들의 풀을 포함하는 시스템.
  97. 제82항에 있어서,
    상기 어플라이언스는, 하나 이상의 전송 계층 접속들의 풀을 통해 상기 가속 프로그램과 상기 서버 간의 복수의 통신을 멀티플렉싱하는 시스템.
  98. 제82항에 있어서,
    상기 클라이언트는, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 시스템.
  99. 제82항에 있어서,
    상기 클라이언트는, 상기 제1 애플리케이션, 상기 제2 애플리케이션, 상기 서버 중 하나에 대하여 투명하게 가속 프로그램을 실행하는 시스템.
  100. 서버로부터 수신한 응답들의 소모율과 상기 서버로 전송된 요구들의 생성률 간의 차이를 클라이언트 상에서 관리하는 방법으로서,
    (a) 상기 클라이언트 상의 가속 프로그램에 의해, 상기 서버에 액세스하는 애플리케이션의 요구를 간섭하되, 상기 가속 프로그램은 전송 계층 접속을 통해 상기 애플리케이션 대신에 상기 서버와 통신하는 단계;
    (b) 상기 가속 프로그램에 의해, 수신된 서버 응답들의 소모율과 상기 클라이언트에 의해 전송된 요구들의 생성률 간의 차이가 소정의 임계값 내에 있음을 결정하는 단계; 및
    (c) 상기 가속 프로그램에 의해, 상기 요구를 상기 클라이언트의 메모리 소자에 저장하는 단계
    를 포함하는 방법.
  101. 제100항에 있어서,
    상기 소모율은 생성률보다 작은 방법.
  102. 제100항에 있어서,
    상기 클라이언트에 의한 생성률 또는 소모율의 변경에 기초하여 저장된 요구를 상기 가속 프로그램에 의해 전송하는 것을 결정하는 단계를 포함하는 방법.
  103. 제100항에 있어서,
    상기 서버와의 접속을 확립하는 상기 클라이언트의 요구시 상기 가속 프로그램을 상기 클라이언트에게 어플라이언스에 의해 전송하는 단계를 포함하는 방법.
  104. 제103항에 있어서,
    상기 가속 프로그램의 수신시, 상기 클라이언트에 의해, 상기 가속 프로그램의 자동 설치 및 실행하는 단계를 포함하는 방법.
  105. 제100항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 방법.
  106. 제100항에 있어서,
    상기 가속 프로그램에 의해, 상기 메모리 소자에 저장된 요구를 압축하는 단계를 포함하는 방법.
  107. 제100항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트 상의 애플리케이션에 의해 상기 서버에 액세스하도록 하나 이상의 전송 계층 접속들의 풀을 제공하는 단계를 포함하는 방법.
  108. 제100항에 있어서,
    상기 가속 프로그램에 의해, 전송 계층 접속을 통해 상기 클라이언트 상의 복수의 애플리케이션으로부터의 요구를 멀티플렉싱하는 단계를 포함하는 방법.
  109. 제100항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  110. 제100항에 있어서,
    상기 클라이언트에 의해, 상기 애플리케이션이나 상기 서버에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  111. 서버로부터 수신한 응답들의 소모율과 상기 서버로 전송된 요구들의 생성률 간의 차이를 클라이언트 상에서 관리하는 시스템으로서,
    상기 클라이언트 상의 가속 프로그램에 의해, 상기 서버에 액세스하는 애플리케이션의 요구를 간섭하되, 상기 가속 프로그램은 전송 계층 접속을 통해 상기 애플리케이션 대신에 상기 서버와 통신하는 수단;
    상기 가속 프로그램에 의해, 수신된 서버 응답들의 소모율과 상기 클라이언 트에 의해 전송된 요구들의 생성률 간의 차이가 소정의 임계값 내에 있음을 결정하는 수단; 및
    상기 가속 프로그램에 의해, 상기 요구를 상기 클라이언트의 메모리 소자에 저장하는 수단
    을 포함하는 시스템.
  112. 제111항에 있어서,
    상기 소모율은 상기 생성률보다 작은 시스템.
  113. 제111항에 있어서,
    상기 클라이언트에 의한 생성률 또는 소모율의 변경에 기초하여 저장된 요구를 상기 가속 프로그램에 의해 전송하는 것을 결정하는 단계를 포함하는 시스템.
  114. 제111항에 있어서,
    상기 서버와의 접속을 확립하는 상기 클라이언트의 요구시 상기 가속 프로그램을 상기 클라이언트에게 어플라이언스에 의해 전송하는 단계를 포함하는 시스템.
  115. 제114항에 있어서,
    상기 가속 프로그램의 수신시, 상기 가속 프로그램을 자동 설치 및 실행하는 상기 클라이언트를 포함하는 시스템.
  116. 제111항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 시스템.
  117. 제111항에 있어서,
    상기 가속 프로그램에 의해, 메모리 소자에 저장된 요구를 압축하는 단계를 포함하는 시스템.
  118. 제111항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트 상의 상기 애플리케이션에 의해 상기 서버에 액세스하도록 하나 이상의 전송 계층 접속들의 풀을 제공하는 단계를 포함하는 시스템.
  119. 제111항에 있어서,
    상기 가속 프로그램에 의해, 전송 계층 접속을 통해 상기 클라이언트 상의 복수의 애플리케이션으로부터의 요구를 멀티플렉싱하는 단계를 포함하는 시스템.
  120. 제111항에 있어서,
    상기 클라이언트는, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세 션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 시스템.
  121. 제111항에 있어서,
    상기 클라이언트는 상기 애플리케이션이나 상기 서버에 대하여 투명하게 상기 가속 프로그램을 실행하는 시스템.
  122. 클라이언트와 서버 간의 전송 계층 접속을 통해 통신되고 전송 계층에서 가속 프로그램에 의해 간섭되는 네트워크 패킷에 대한 복수의 가속 기술을 상기 클라이언트 상에서 가속 프로그램에 의해 실행하는 방법으로서,
    (a) 클라이언트 상의 가속 프로그램에 의해, 상기 가속 프로그램과 상기 서버 간의 전송 계층 접속을 확립하는 단계;
    (b) 상기 가속 프로그램에 의해, 상기 전송 계층에서 상기 클라이언트와 상기 서버 간에 통신되는 네트워크 패킷을 간섭하는 단계; 및
    (c) 상기 가속 프로그램에 의해, 상기 전송 계층에서 간섭된 상기 네트워크 패킷에 대하여 복수의 가속 기술을 수행하는 단계
    를 포함하는 방법.
  123. 제122항에 있어서,
    상기 가속 프로그램에 의해, 전송 계층 접속에 대한 인터페이스에 의해 커널 레벨 데이터 구조를 통해 상기 네트워크 패킷에 액세스하는 단계를 포함하는 방법.
  124. 제122항에 있어서,
    상기 가속 프로그램에 의해, 상기 네트워크 패킷을 상기 서버에 통신하는 단계를 포함하는 방법.
  125. 제122항에 있어서,
    상기 (d) 단계는, 가속 기술들인 압축, 압축해제, 전송 제어 프로토콜 접속 풀링, 전송 제어 프로토콜 접속 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 캐싱 중 하나를 상기 클라이언트에 대하여 수행하는 단계를 포함하는 방법.
  126. 제122항에 있어서,
    상기 가속 프로그램에 의해, 상기 네트워크 패킷의 일부분을 암호화 또는 복호화하는 단계를 포함하는 방법.
  127. 제122항에 있어서,
    상기 가속 프로그램에 의해, 가상 사설 네트워크 접속을 상기 서버에 제공하는 단계를 포함하는 방법.
  128. 제122항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트의 운영 시스템의 사용자 모드 또는 커널 모드에서 복수의 가속 기술을 실행하는 단계를 포함하는 방법.
  129. 제122항에 있어서,
    상기 가속 프로그램에 의해, 상기 가속 프로그램의 실행가능 명령들의 일부분에서 서로 후속하는 복수의 가속 기술을 수행하는 단계를 포함하는 방법.
  130. 제122항에 있어서,
    상기 가속 프로그램에 의해, 상기 가속 프로그램의 실행가능 명령들의 하나의 인터페이스 포인트에서 서로 후속하는 복수의 가속 기술을 수행하는 단계를 포함하는 방법.
  131. 제122항에 있어서,
    상기 가속 프로그램에 의해, 상기 가속 프로그램의 실행가능 명령들의 실행 인스턴스 동안 서로 후속하는 복수의 가속 기술을 수행하는 단계를 포함하는 방법.
  132. 제122항에 있어서,
    커널 레벨 데이터 구조를 통해, 상기 네트워크 패킷의 하나 이상의 애플리케이션 레벨 프로토콜 페이로드에 대한 액세스를 제공하는 단계를 포함하는 방법.
  133. 제122항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 네트워크 스택의 네트워크 계층 또는 세션 계층에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  134. 제122항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 사용자, 상기 클라이언트의 애플리케이션, 상기 서버 중 하나에 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  135. 클라이언트와 서버 간의 전송 계층 접속을 통해 통신되고 전송 계층에서 가속 프로그램에 의해 간섭되는 네트워크 패킷에 대한 복수의 가속 기술을 클라이언트 상에서 가속 프로그램에 의해 실행하는 시스템으로서,
    클라이언트 상의 가속 프로그램에 의해, 상기 가속 프로그램과 상기 서버 간의 전송 계층 접속을 확립하는 수단;
    상기 가속 프로그램에 의해, 상기 전송 계층에서 상기 클라이언트와 상기 서버 간에 통신되는 네트워크 패킷을 간섭하는 수단; 및
    상기 가속 프로그램에 의해, 상기 전송 계층에서 간섭된 상기 네트워크 패킷에 대하여 복수의 가속 기술을 수행하는 수단
    을 포함하는 시스템.
  136. 제135항에 있어서,
    상기 가속 프로그램은, 전송 계층 접속에 대한 애플리케이션 프로그래밍 인터페이스를 호출함으로써 커널 레벨 데이터 구조를 얻는 시스템.
  137. 제135항에 있어서,
    상기 가속 프로그램은 상기 네트워크 패킷을 상기 서버에 통신하는 시스템.
  138. 제135항에 있어서,
    상기 복수의 가속 기술은, 압축, 압축해제, 전송 제어 프로토콜 접속 풀링, 전송 제어 프로토콜 접속 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 캐싱 중 적어도 하나를 포함하는 시스템.
  139. 제135항에 있어서,
    상기 가속 프로그램은 상기 네트워크 패킷의 일부분을 암호화 또는 복호화하는 시스템.
  140. 제135항에 있어서,
    상기 가속 프로그램은 가상 사설 네트워크 접속을 상기 서버에 제공하는 시스템.
  141. 제135항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 운영 시스템의 사용자 모드나 커널 모드에서 실행되는 시스템.
  142. 제135항에 있어서,
    상기 가속 프로그램은, 서로 후속하는 복수의 가속 기술의 각각을 수행하는 실행가능 명령들을 포함하는 시스템.
  143. 제135항에 있어서,
    상기 가속 프로그램은, 복수의 가속 기술이 서로 후속하여 수행되는 하나의 인터페이스 포인트를 포함하는 시스템.
  144. 제135항에 있어서,
    상기 가속 프로그램은, 복수의 가속 기술이 서로 후속하여 수행되는 실행 인스턴스를 갖는 실행가능 명령들을 포함하는 시스템.
  145. 제135항에 있어서,
    상기 가속 프로그램은, 커널 레벨 데이터 구조를 통해 전송 계층에서 상기 네트워크 패킷의 하나 이상의 애플리케이션 레벨 프로토콜 페이로드에 대한 액세스 를 얻는 시스템.
  146. 제135항에 있어서,
    상기 클라이언트는, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 시스템.
  147. 제135항에 있어서,
    상기 클라이언트는, 상기 클라이언트의 사용자, 상기 클라이언트의 애플리케이션, 상기 서버 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 시스템.
  148. 클라이언트 상에서, 중개자가 상기 클라이언트에 의해 서버와 통신하기 위해 이용될 수 없다는 결정시, 상기 서버에 대한 상기 클라이언트의 통신을 방향변경하여 상기 중개자를 우회하는 방법으로서,
    (a) 클라이언트 상의 가속 프로그램에 의해, 중개자를 통해 상기 클라이언트와 상기 서버 간의 전송 계층 접속을 확립하는 단계;
    (b) 상기 가속 프로그램에 의해, 상기 중개자가 상기 서버에 대한 전송 계층 접속을 통해 상기 클라이언트에 의해 이용될 수 없음을 결정하는 단계;
    (c) 상기 가속 프로그램에 의해, 상기 클라이언트로부터 상기 서버로의 통신 을 간섭하는 단계; 및
    (d) 상기 가속 프로그램에 의해, 상기 가속 프로그램과 상기 서버 간의 제2 전송 계층 접속을 확립하여 상기 중개자를 우회하는 단계
    를 포함하는 방법.
  149. 제148항에 있어서,
    상기 (d) 단계는, 상기 가속 프로그램에 의해, 상기 서버와의 직접적으로 상기 제2 전송 계층 접속을 확립하는 단계를 포함하는 방법.
  150. 제148항에 있어서,
    상기 (d) 단계는, 상기 가속 프로그램에 의해, 제2 중개자를 통해 상기 서버와의 상기 제2 전송 계층 접속을 확립하는 단계를 포함하는 방법.
  151. 제148항에 있어서,
    상기 가속 프로그램에 의해, 상기 제2 전송 계층 접속을 통해 통신을 서버에 전송하는 단계를 포함하는 방법.
  152. 제148항에 있어서,
    상기 클라이언트에 의해, 상기 중개자로부터 상기 가속 프로그램의 수신시 상기 가속 프로그램을 자동 설치 및 실행하는 단계를 포함하는 방법.
  153. 제148항에 있어서,
    상기 가속 프로그램은, 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 방법.
  154. 제148항에 있어서,
    상기 가속 프로그램에 의해, 가속 기술들인 압축, 압축해제, 전송 제어 프로토콜 접속 풀링, 전송 제어 프로토콜 접속 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 캐싱 중 하나를 통신에 수행하는 단계를 포함하는 방법.
  155. 제148항에 있어서,
    상기 가속 프로그램에 의해, 상기 클라이언트와 상기 서버 간의 통신을 암호화하는 단계를 포함하는 방법.
  156. 제148항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  157. 제148항에 있어서,
    상기 클라이언트에 의해, 상기 클라이언트의 애플리케이션, 상기 클라이언트의 사용자, 상기 서버 중 하나에 대하여 투명하게 상기 가속 프로그램을 실행하는 단계를 포함하는 방법.
  158. 제148항에 있어서,
    상기 중개자는 캐시, 게이트웨이, 방화벽, 서버, 프록시, 라우터, 스위치, 브리지 중 하나를 포함하는 방법.
  159. 클라이언트 상에서, 중개자가 상기 클라이언트에 의해 서버와 통신하기 위해 이용될 수 없다는 결정시, 상기 서버에 대한 상기 클라이언트의 통신을 방향변경하여 상기 중개자를 우회하는 시스템으로서,
    클라이언트 상의 가속 프로그램에 의해, 중개자를 통해 상기 클라이언트와 서버 간의 전송 계층 접속을 확립하는 수단;
    상기 가속 프로그램에 의해, 상기 중개자가 상기 서버에 대한 전송 계층 접속을 통해 상기 클라이언트에 의해 이용될 수 없음을 결정하는 수단;
    상기 가속 프로그램에 의해, 상기 클라이언트로부터 상기 서버로의 통신을 간섭하는 수단; 및
    상기 가속 프로그램에 의해, 상기 가속 프로그램과 상기 서버 간의 제2 전송 계층 접속을 확립하여 상기 중개자를 우회하는 수단
    을 포함하는 시스템.
  160. 제159항에 있어서,
    상기 가속 프로그램은 상기 서버와의 상기 제2 전송 계층 접속을 직접적으로 확립하는 시스템.
  161. 제159항에 있어서,
    상기 가속 프로그램은 제2 중개자를 통해 상기 서버와의 상기 제2 전송 계층 접속을 확립하는 시스템.
  162. 제159항에 있어서,
    상기 가속 프로그램은 상기 제2 전송 계층 접속을 통해 상기 서버로 통신을 전송하는 시스템.
  163. 제159항에 있어서,
    상기 클라이언트에 의해, 상기 중개자로부터 상기 가속 프로그램의 수신시 상기 가속 프로그램을 자동으로 설치하고 실행하는 수단을 포함하는 시스템.
  164. 제159항에 있어서,
    상기 가속 프로그램은 상기 클라이언트의 네트워크 스택의 전송 계층에 인터페이싱된 필터 장치 드라이버를 포함하는 시스템.
  165. 제159항에 있어서,
    상기 가속 프로그램은, 압축, 전송 제어 프로토콜 접속 풀링, 전송 제어 프로토콜 접속 멀티플렉싱, 전송 제어 프로토콜 버퍼링, 캐싱을 포함하는 통신용 가속 기술들 중 하나를 수행하는 시스템.
  166. 제159항에 있어서,
    상기 가속 프로그램은 상기 클라이언트와 상기 서버 간의 통신을 암호화하는 시스템.
  167. 제159항에 있어서,
    상기 클라이언트는, 상기 클라이언트의 네트워크 스택의 네트워크 계층, 세션 계층, 애플리케이션 계층 중 하나에 대하여 상기 가속 프로그램을 투명하게 실행하는 시스템.
  168. 제159항에 있어서,
    상기 클라이언트는, 상기 클라이언트 상의 애플리케이션, 상기 클라이언트의 사용자, 상기 서버 중 하나에 대하여 상기 가속 프로그램을 투명하게 실행하는 시스템.
  169. 제159항에 있어서,
    상기 중개자는 캐시, 게이트웨이, 방화벽, 서버, 프록시, 라우터, 스위치, 브리지 중 하나를 포함하는 시스템.
KR1020077015052A 2004-12-30 2005-12-30 클라이언트측 가속 기술을 제공하는 시스템 및 방법 KR20070092720A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US64046404P 2004-12-30 2004-12-30
US60/640,464 2004-12-30
US11/039,946 US7757074B2 (en) 2004-06-30 2005-01-24 System and method for establishing a virtual private network
US11/039,946 2005-01-24

Publications (1)

Publication Number Publication Date
KR20070092720A true KR20070092720A (ko) 2007-09-13

Family

ID=36295274

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077015052A KR20070092720A (ko) 2004-12-30 2005-12-30 클라이언트측 가속 기술을 제공하는 시스템 및 방법

Country Status (9)

Country Link
EP (2) EP1832088B1 (ko)
JP (2) JP2008527507A (ko)
KR (1) KR20070092720A (ko)
CN (2) CN101133623B (ko)
AU (1) AU2005322870A1 (ko)
CA (1) CA2591905A1 (ko)
HK (1) HK1200611A1 (ko)
IL (1) IL184308A0 (ko)
WO (1) WO2006074072A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170138525A (ko) * 2015-09-09 2017-12-15 텐센트 테크놀로지(센젠) 컴퍼니 리미티드 애플리케이션 가속화 방법 및 디바이스

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7774492B2 (en) 2001-07-26 2010-08-10 Citrix Systems, Inc. System, method and computer program product to maximize server throughput while avoiding server overload by controlling the rate of establishing server-side net work connections
US8495305B2 (en) 2004-06-30 2013-07-23 Citrix Systems, Inc. Method and device for performing caching of dynamically generated objects in a data communication network
US8739274B2 (en) 2004-06-30 2014-05-27 Citrix Systems, Inc. Method and device for performing integrated caching in a data communication network
US7757074B2 (en) 2004-06-30 2010-07-13 Citrix Application Networking, Llc System and method for establishing a virtual private network
US7609721B2 (en) 2004-07-23 2009-10-27 Citrix Systems, Inc. Systems and methods for adjusting the maximum transmission unit for encrypted communications
KR20070037650A (ko) 2004-07-23 2007-04-05 사이트릭스 시스템스, 인크. 종단에서 게이트웨이로 패킷을 라우팅하기 위한 방법 및시스템
US8549149B2 (en) 2004-12-30 2013-10-01 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing
US8954595B2 (en) 2004-12-30 2015-02-10 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP buffering
US7810089B2 (en) 2004-12-30 2010-10-05 Citrix Systems, Inc. Systems and methods for automatic installation and execution of a client-side acceleration program
US8255456B2 (en) 2005-12-30 2012-08-28 Citrix Systems, Inc. System and method for performing flash caching of dynamically generated objects in a data communication network
US9621666B2 (en) 2005-05-26 2017-04-11 Citrix Systems, Inc. Systems and methods for enhanced delta compression
US9407608B2 (en) 2005-05-26 2016-08-02 Citrix Systems, Inc. Systems and methods for enhanced client side policy
US9692725B2 (en) 2005-05-26 2017-06-27 Citrix Systems, Inc. Systems and methods for using an HTTP-aware client agent
US8943304B2 (en) 2006-08-03 2015-01-27 Citrix Systems, Inc. Systems and methods for using an HTTP-aware client agent
US7921184B2 (en) 2005-12-30 2011-04-05 Citrix Systems, Inc. System and method for performing flash crowd caching of dynamically generated objects in a data communication network
US8151323B2 (en) 2006-04-12 2012-04-03 Citrix Systems, Inc. Systems and methods for providing levels of access and action control via an SSL VPN appliance
US7953889B2 (en) 2006-08-03 2011-05-31 Citrix Systems, Inc. Systems and methods for routing VPN traffic around network disruption
WO2008017030A2 (en) * 2006-08-03 2008-02-07 Citrix Systems, Inc. System and method for routing traffic at a client via a first or a second transport layer connection
US8572721B2 (en) 2006-08-03 2013-10-29 Citrix Systems, Inc. Methods and systems for routing packets in a VPN-client-to-VPN-client connection via an SSL/VPN network appliance
US8561155B2 (en) 2006-08-03 2013-10-15 Citrix Systems, Inc. Systems and methods for using a client agent to manage HTTP authentication cookies
US7907621B2 (en) 2006-08-03 2011-03-15 Citrix Systems, Inc. Systems and methods for using a client agent to manage ICMP traffic in a virtual private network environment
US8626946B2 (en) 2006-08-03 2014-01-07 Citrix Systems, Inc. Systems and methods for hierarchical global load balancing
US8869262B2 (en) 2006-08-03 2014-10-21 Citrix Systems, Inc. Systems and methods for application based interception of SSL/VPN traffic
US8244883B2 (en) * 2006-08-03 2012-08-14 Citrix Systems, Inc. Systems and methods of for providing multi-mode transport layer compression
US8495181B2 (en) 2006-08-03 2013-07-23 Citrix Systems, Inc Systems and methods for application based interception SSI/VPN traffic
US7769869B2 (en) 2006-08-21 2010-08-03 Citrix Systems, Inc. Systems and methods of providing server initiated connections on a virtual private network
US8312120B2 (en) 2006-08-22 2012-11-13 Citrix Systems, Inc. Systems and methods for providing dynamic spillover of virtual servers based on bandwidth
US8493858B2 (en) 2006-08-22 2013-07-23 Citrix Systems, Inc Systems and methods for providing dynamic connection spillover among virtual servers
US7783757B2 (en) 2007-03-12 2010-08-24 Citrix Systems, Inc. Systems and methods of revalidating cached objects in parallel with request for object
US7865585B2 (en) 2007-03-12 2011-01-04 Citrix Systems, Inc. Systems and methods for providing dynamic ad hoc proxy-cache hierarchies
US7827237B2 (en) 2007-03-12 2010-11-02 Citrix Systems, Inc. Systems and methods for identifying long matches of data in a compression history
US7532134B2 (en) 2007-03-12 2009-05-12 Citrix Systems, Inc. Systems and methods for sharing compression histories between multiple devices
US8255570B2 (en) 2007-03-12 2012-08-28 Citrix Systems, Inc. Systems and methods of compression history expiration and synchronization
US7796510B2 (en) 2007-03-12 2010-09-14 Citrix Systems, Inc. Systems and methods for providing virtual fair queueing of network traffic
US7760642B2 (en) 2007-03-12 2010-07-20 Citrix Systems, Inc. Systems and methods for providing quality of service precedence in TCP congestion control
US7720936B2 (en) 2007-03-12 2010-05-18 Citrix Systems, Inc. Systems and methods of freshening and prefreshening a DNS cache
US7584294B2 (en) 2007-03-12 2009-09-01 Citrix Systems, Inc. Systems and methods for prefetching objects for caching using QOS
US8701010B2 (en) 2007-03-12 2014-04-15 Citrix Systems, Inc. Systems and methods of using the refresh button to determine freshness policy
US8908700B2 (en) 2007-09-07 2014-12-09 Citrix Systems, Inc. Systems and methods for bridging a WAN accelerator with a security gateway
CA2697936A1 (en) 2007-09-12 2009-03-19 Citrix Systems, Inc. Methods and systems for generating desktop environments providing integrated access to remote and local resources
US8090877B2 (en) 2008-01-26 2012-01-03 Citrix Systems, Inc. Systems and methods for fine grain policy driven cookie proxying
CN101291343B (zh) * 2008-05-20 2011-01-26 北京锐安科技有限公司 一种基于透明代理设备的远程控制方法及其系统
WO2010042578A1 (en) 2008-10-08 2010-04-15 Citrix Systems, Inc. Systems and methods for real-time endpoint application flow control with network structure component
US8474035B2 (en) * 2010-06-30 2013-06-25 Juniper Networks, Inc. VPN network client for mobile device having dynamically constructed display for native access to web mail
US8458787B2 (en) * 2010-06-30 2013-06-04 Juniper Networks, Inc. VPN network client for mobile device having dynamically translated user home page
US8549617B2 (en) 2010-06-30 2013-10-01 Juniper Networks, Inc. Multi-service VPN network client for mobile device having integrated acceleration
US8473734B2 (en) 2010-06-30 2013-06-25 Juniper Networks, Inc. Multi-service VPN network client for mobile device having dynamic failover
US8127350B2 (en) * 2010-06-30 2012-02-28 Juniper Networks, Inc. Multi-service VPN network client for mobile device
US10142292B2 (en) 2010-06-30 2018-11-27 Pulse Secure Llc Dual-mode multi-service VPN network client for mobile device
US8464336B2 (en) 2010-06-30 2013-06-11 Juniper Networks, Inc. VPN network client for mobile device having fast reconnect
CN101895550B (zh) * 2010-07-16 2012-12-26 刘季伟 一种应用于互联网网站的兼容动静态内容的缓冲加速方法
WO2012092261A2 (en) 2010-12-29 2012-07-05 Citrix Systems, Inc. Systems and methods for multi-level tagging of encrypted items for additional security and efficient encrypted item determination
CN102404204B (zh) * 2011-11-01 2014-05-07 深信服网络科技(深圳)有限公司 网络拓扑中的加速方法、装置及系统
CN103369016A (zh) * 2012-04-11 2013-10-23 长春易申软件有限公司 实现基于iSCSI的网络存储协议栈的方法
US20140018006A1 (en) * 2012-07-12 2014-01-16 GM Global Technology Operations LLC Broadcast content for vehicle audio systems
CN102752320B (zh) * 2012-08-03 2015-07-01 北京光泽时代通信技术有限公司 一种代理服务器主动压缩方法及代理服务器
CN102801726B (zh) * 2012-08-06 2016-03-30 上海西本网络科技有限公司 通信系统以及客户端与服务端之间的通信方法
JP2015038717A (ja) * 2014-02-04 2015-02-26 株式会社リコー 情報処理システム、情報提供方法、端末装置およびアプリケーションプログラム
US9794311B2 (en) * 2014-03-18 2017-10-17 Qualcomm Incorporated Transport accelerator implementing extended transmission control functionality
US9769239B2 (en) 2014-09-30 2017-09-19 Qualcomm Incorporated Systems and methods for user agent signaling request acceleration by transport accelerator
CN104778214B (zh) * 2015-03-20 2018-02-06 四川长虹电器股份有限公司 基于资源定位器跳转的分布式文件系统及其数据同步方法
JP6511194B2 (ja) * 2015-09-21 2019-05-15 華為技術有限公司Huawei Technologies Co.,Ltd. 高速且つスケーラブルなデータベースクラスタ通信経路
DK3358463T3 (da) * 2016-08-26 2020-11-16 Huawei Tech Co Ltd Fremgangsmåde, anordning og system til implementering af hardwareaccelerationsbehandling
US10375212B2 (en) * 2017-01-11 2019-08-06 Citrix Systems, Inc. Systems and methods for improving the performance of a computer network using multiplexed application layer streams of network traffic
AU2019261208B2 (en) * 2018-04-24 2024-06-20 Skylab Networks Pte. Ltd. System and method for accelerating data delivery
CN108667920B (zh) * 2018-04-26 2020-08-11 浪潮集团有限公司 一种雾计算环境业务流量加速系统及其业务流量加速方法
CN109995877B (zh) * 2019-04-12 2021-10-12 上海连尚网络科技有限公司 信息推送方法和装置
CN110944063B (zh) * 2019-12-10 2021-11-30 航天新长征大道科技有限公司 可编程逻辑控制设备连接方法、控制系统及可读介质
CN112732282A (zh) * 2021-01-20 2021-04-30 腾讯科技(深圳)有限公司 安装包的下载方法及装置
CN116095037A (zh) * 2021-11-05 2023-05-09 腾讯科技(深圳)有限公司 应用程序加速方法、装置、电子设备及存储介质
CN114345753B (zh) * 2021-12-13 2024-05-10 贝塔科技(苏州)有限公司 热升华工艺的印花服装生产原料接入物联网的生产方法
CN114520836B (zh) * 2022-01-12 2024-04-19 深圳市微创云启科技有限公司 一种可多路复用并防数据篡改的网络通讯协议方法和系统
US20230269253A1 (en) * 2022-02-24 2023-08-24 International Business Machines Corporation Smart client for deployment architecture with unreliable network connection

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5852717A (en) * 1996-11-20 1998-12-22 Shiva Corporation Performance optimizations for computer networks utilizing HTTP
US6687732B1 (en) * 1998-09-28 2004-02-03 Inktomi Corporation Adaptive traffic bypassing in an intercepting network driver
US6411986B1 (en) * 1998-11-10 2002-06-25 Netscaler, Inc. Internet client-server multiplexer
JP2002532784A (ja) * 1998-12-07 2002-10-02 ネットワーク アイス コーポレイション ネットワークドライバおよびソフトウェアのリモートインストールの方法および装置
US6594690B2 (en) * 1999-02-24 2003-07-15 Hewlett-Packard Development Company, L.P. Network peripheral device driver installer
US6449658B1 (en) * 1999-11-18 2002-09-10 Quikcat.Com, Inc. Method and apparatus for accelerating data through communication networks
US6820133B1 (en) * 2000-02-07 2004-11-16 Netli, Inc. System and method for high-performance delivery of web content using high-performance communications protocol between the first and second specialized intermediate nodes to optimize a measure of communications performance between the source and the destination
US7139822B2 (en) * 2000-07-07 2006-11-21 International Business Machines Corporation Interception method and system for compensating disadvantageous characteristics of a communication protocol
GB0122507D0 (en) * 2001-09-18 2001-11-07 Marconi Comm Ltd Client server networks
US20030093566A1 (en) * 2001-11-09 2003-05-15 Jardin Cary A. System and method for network and application transparent database acceleration
WO2004088933A1 (en) * 2003-03-29 2004-10-14 Telefonaktiebolaget Lm Ericsson (Publ) Device and method for rate adaptation between bit streams
CN1266847C (zh) * 2003-07-14 2006-07-26 中国科学院计算技术研究所 一种分布式的卫星网络tcp性能加速协议格式和方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170138525A (ko) * 2015-09-09 2017-12-15 텐센트 테크놀로지(센젠) 컴퍼니 리미티드 애플리케이션 가속화 방법 및 디바이스
US10664436B2 (en) 2015-09-09 2020-05-26 Tencent Technology (Shenzhen) Company Limited Application acceleration method and application acceleration device

Also Published As

Publication number Publication date
JP2012027925A (ja) 2012-02-09
EP2757757A1 (en) 2014-07-23
AU2005322870A1 (en) 2006-07-13
HK1200611A1 (en) 2015-08-07
EP2757757B1 (en) 2018-08-15
JP5372083B2 (ja) 2013-12-18
CN102281305A (zh) 2011-12-14
WO2006074072A3 (en) 2006-12-07
EP1832088A2 (en) 2007-09-12
IL184308A0 (en) 2007-10-31
WO2006074072A2 (en) 2006-07-13
JP2008527507A (ja) 2008-07-24
CN102281305B (zh) 2015-10-28
EP1832088B1 (en) 2016-09-14
CA2591905A1 (en) 2006-07-13
CN101133623B (zh) 2011-11-16
CN101133623A (zh) 2008-02-27

Similar Documents

Publication Publication Date Title
KR20070092720A (ko) 클라이언트측 가속 기술을 제공하는 시스템 및 방법
US8549149B2 (en) Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing
US8856777B2 (en) Systems and methods for automatic installation and execution of a client-side acceleration program
US8954595B2 (en) Systems and methods for providing client-side accelerated access to remote applications via TCP buffering
US8706877B2 (en) Systems and methods for providing client-side dynamic redirection to bypass an intermediary
US8700695B2 (en) Systems and methods for providing client-side accelerated access to remote applications via TCP pooling
US20060253605A1 (en) Systems and methods for providing integrated client-side acceleration techniques to access remote applications
US9497198B2 (en) Systems and methods for application based interception of SSL/VPN traffic
US8886822B2 (en) Systems and methods for accelerating delivery of a computing environment to a remote user
US8356101B2 (en) Systems and methods for managing a plurality of user sessions in a virtual private network environment
US9246878B2 (en) Methods and systems for routing packets in a VPN-client-to-VPN-client connection via an SSL/VPN network appliance
US7953889B2 (en) Systems and methods for routing VPN traffic around network disruption
WO2008017015A2 (en) Systems and methods for policy based triggering of client- authentication at directory level granularity
WO2008017011A2 (en) Systems and methods for application-based interception and authorization of ssl/vpn traffic
AU2012200921A1 (en) Systems and methods for accelerating delivery of a computing environment to a remote user
WO2008017030A2 (en) System and method for routing traffic at a client via a first or a second transport layer connection

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid