KR102304416B1 - Automatic Tuning of Hybrid WAN Links by Adaptive Replication of Packets on Alternate Links - Google Patents

Automatic Tuning of Hybrid WAN Links by Adaptive Replication of Packets on Alternate Links Download PDF

Info

Publication number
KR102304416B1
KR102304416B1 KR1020197030214A KR20197030214A KR102304416B1 KR 102304416 B1 KR102304416 B1 KR 102304416B1 KR 1020197030214 A KR1020197030214 A KR 1020197030214A KR 20197030214 A KR20197030214 A KR 20197030214A KR 102304416 B1 KR102304416 B1 KR 102304416B1
Authority
KR
South Korea
Prior art keywords
link
network
packet
packets
rate
Prior art date
Application number
KR1020197030214A
Other languages
Korean (ko)
Other versions
KR20190126143A (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
Application filed by 사이트릭스 시스템스, 인크. filed Critical 사이트릭스 시스템스, 인크.
Publication of KR20190126143A publication Critical patent/KR20190126143A/en
Application granted granted Critical
Publication of KR102304416B1 publication Critical patent/KR102304416B1/en

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/16Threshold monitoring
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/64Hybrid switching systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0876Network utilisation, e.g. volume of load or congestion level
    • H04L43/0894Packet rate
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/24Multipath
    • H04L67/322
    • 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/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/61Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources taking into account QoS or priority requirements
    • 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/14Multichannel or multilink protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W72/00Local resource management
    • H04W72/04Wireless resource allocation
    • H04W72/044Wireless resource allocation based on the type of the allocated resource
    • H04W72/0453Resources in frequency domain, e.g. a carrier in FDMA
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0823Errors, e.g. transmission errors
    • H04L43/0829Packet loss
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

본 개시의 실시예는 네트워크 패킷을 신뢰성 있는 링크 상으로 동적으로 복제하기 위한 시스템 및 방법을 설명한다. 네트워크 디바이스는 1차 링크와 2차 링크에 의해 접속될 수 있다. 1차 링크의 네트워크 품질이 저하됨에 따라, 시스템은 네트워크 패킷을 2차 링크에 적응적으로 복제할 수 있다. 높은 우선 순위의 링크로서 2차 링크는 1차 링크와 비교할 때 더 적은 총 대역폭을 가질 수 있다. 따라서, 1차 링크를 횡단하는 모든 트래픽이 1차 링크의 품질이 저하될 때 네트워크 신뢰성을 유지하기 위해 2차 링크에 복제될 수 없을 수 있다. 본 해결책은 2차 링크의 대역폭을 효과적으로 관리할 수 있고 2차 링크로의 패킷의 복제를 제어하는 복제 레이트를 설정할 수 있다.Embodiments of the present disclosure describe systems and methods for dynamically replicating network packets over a reliable link. A network device may be connected by a primary link and a secondary link. As the network quality of the primary link degrades, the system can adaptively replicate network packets to the secondary link. As a high priority link, the secondary link may have less total bandwidth compared to the primary link. Thus, all traffic traversing the primary link may not be able to be replicated on the secondary link to maintain network reliability when the quality of the primary link degrades. This solution can effectively manage the bandwidth of the secondary link and set the replication rate to control the replication of packets to the secondary link.

Figure R1020197030214
Figure R1020197030214

Description

대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 WAN 링크의 자동 튜닝Automatic Tuning of Hybrid WAN Links by Adaptive Replication of Packets on Alternate Links

관련 출원Related applications

본 특허 출원은 2017년 3월 20일자로 출원된 "대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 WAN 링크의 자동 튜닝"이라는 제목의 미국 특허 출원 번호 15/463,635호에 대해 우선권을 주장하며, 그 내용이 본원에 전체로 모든 목적을 위해 참조로 통합된다.This patent application claims priority to U.S. Patent Application Serial No. 15/463,635, entitled "Automatic Tuning of Hybrid WAN Links by Adaptive Replication of Packets on Alternate Links," filed March 20, 2017, and The content is incorporated herein by reference for all purposes in its entirety.

개시 분야initiation field

본 출원은 일반적으로 데이터 통신 네트워크에 관한 것이다. 특히, 본 출원은 네트워크 패킷을 동적으로 복제하기 위한 시스템 및 방법에 관한 것이다.BACKGROUND This application relates generally to data communication networks. In particular, this application relates to systems and methods for dynamically replicating network packets.

네트워크 디바이스는 복수의 가상 광역 네트워크(WAN) 또는 다른 네트워크를 통해 접속될 수 있다. 네트워크 디바이스 간의 다양한 접속은 패킷 손실 및 패킷 대기 시간 증가를 초래할 수 있는 네트워크 성능 저하 및 다른 네트워크 문제를 경험할 수 있다. 패킷 손실 및 패킷 대기 시간은 네트워크 디바이스 간 네트워크 중단을 초래할 수 있다.The network devices may be connected through multiple virtual wide area networks (WANs) or other networks. Various connections between network devices can experience reduced network performance and other network issues that can lead to packet loss and increased packet latency. Packet loss and packet latency can result in network outages between network devices.

본 해결책은 네트워크 패킷을 신뢰성 있는 링크로 동적으로 복제하기 위한 시스템 및 방법을 설명한다. 네트워크 디바이스는 1차 링크와 2차 링크에 의해 접속될 수 있다. 일부 경우에, 2차 링크는 높은 우선 순위의 링크일 수 있다. 1차 링크의 네트워크 품질이 저하됨에 따라, 시스템은 네트워크 패킷을 2차 링크에 적응적으로 복제할 수 있다. 높은 우선 순위의 링크로서 2차 링크는 1차 링크와 비교할 때 더 적은 총 대역폭을 가질 수 있다. 따라서, 1차 링크를 횡단하는 모든 트래픽이 1차 링크의 품질이 저하될 때 네트워크 신뢰성을 유지하기 위해 2차 링크에 복제될 수 없을 수 있다. 본 해결책은 2차 링크의 대역폭을 효과적으로 관리할 수 있고 2차 링크로의 패킷의 복제를 제어하는 복제 레이트를 설정할 수 있다. 복제 레이트는 수신 디바이스에서의 유효 패킷 손실 레이트(또는 패킷 지연 레이트)가 임계값 초과로 유지되도록 하는 1차 링크의 링크 품질에 기초하여 설정될 수 있다.The present solution describes a system and method for dynamically replicating network packets to a reliable link. A network device may be connected by a primary link and a secondary link. In some cases, the secondary link may be a high priority link. As the network quality of the primary link degrades, the system can adaptively replicate network packets to the secondary link. As a high priority link, the secondary link may have less total bandwidth compared to the primary link. Thus, all traffic traversing the primary link may not be able to be replicated on the secondary link to maintain network reliability when the quality of the primary link degrades. This solution can effectively manage the bandwidth of the secondary link and set the replication rate to control the replication of packets to the secondary link. The replication rate may be set based on the link quality of the primary link such that the effective packet loss rate (or packet delay rate) at the receiving device remains above a threshold.

본 개시의 일 양태에 따르면, 네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 방법은, 제1 디바이스에 의해, 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는지를 결정하는 단계를 포함한다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크를 통해 제1 디바이스로부터 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크 상에서 제1 디바이스로부터 제2 디바이스로 송신될 패킷들을 송신하는 단계를 포함할 수 있다. 본 방법은 디바이스에 의해, 제1 디바이스와 제2 디바이스 사이에 확립된 제2 링크 상에서 복제 패킷들을 송신하는 단계를 포함할 수 있다.According to an aspect of the present disclosure, there is provided a method for transmitting a duplicate packet based on a network state, wherein, by a first device, a metric of a network state of a first link established between a first device and a second device is a threshold value. determining whether it is within The method generates, in response to determining, by the first device, that a metric of a network state of the first link is within a threshold, duplicate packets of packets to be transmitted from a first device to a second device over the first link. may include the step of The method may include transmitting, by the first device, packets to be transmitted from the first device to the second device on the first link. The method may include transmitting, by the device, duplicate packets on a second link established between the first device and the second device.

본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 메트릭과 임계값 사이의 차이에 기초하여 패킷 복제 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 결정된 패킷 복제 레이트에 기초하여 복제 패킷들을 생성하는 단계를 포함할 수 있다. 임계값은 제1 임계값일 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태를 모니터링하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 네트워크 상태의 메트릭이 제2 임계값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 메트릭이 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 제2 링크 상에서 송신되는 레이트에 대응할 수 있는 패킷 복제 레이트를 수정하는 단계를 포함할 수 있다.The method may include determining, by the first device, a packet replication rate based on a difference between a metric and a threshold value of a network condition of the first link. The method may include generating, by the first device, the copy packets based on the determined packet copy rate. The threshold may be a first threshold. The method may include monitoring, by the first device, a network state of the first link. The method may include determining, by the first device, whether a metric of the network condition is within a second threshold. The method includes, in response to determining, by the first device, that the metric of a network condition of the first link is within a second threshold, a packet replication rate that may correspond to a rate at which duplicate packets are generated and transmitted on the second link. may include modifying

본 방법은 제1 디바이스에 의해, 제2 링크의 대역폭을 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 결정된 제2 링크의 대역폭 및 제1 링크의 네트워크 상태의 메트릭에 기초하여 패킷 복제 레이트를 결정하는 단계를 포함할 수 있다. 제1 링크를 통해 제1 디바이스로부터 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계는 패킷 복제 레이트에 기초하여 복제 패킷들을 생성하는 단계를 포함할 수 있다.The method may include determining, by the first device, a bandwidth of the second link. The method may include determining, by the first device, a packet duplication rate based on the determined metric of a bandwidth of the second link and a network state of the first link. Generating duplicate packets of packets to be transmitted from the first device to the second device via the first link may include generating duplicate packets based on a packet copy rate.

일부 실시예에서, 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭을 결정하는 단계는 제1 링크의 패킷 손실 레이트 또는 제1 링크의 패킷 지연 레이트 중 하나를 결정하는 단계를 포함할 수 있다.In some embodiments, determining the metric of the network state of the first link established between the first device and the second device comprises determining one of a packet loss rate of the first link or a packet delay rate of the first link. may include.

일부 실시예에서, 제1 링크는 인터넷 광대역 링크일 수 있고, 제2 링크는 멀티프로토콜 라벨(multiprotocol label) 스위칭 링크일 수 있다. 제1 디바이스 및 제2 디바이스는 가상 광역 네트워크 디바이스일 수 있다.In some embodiments, the first link may be an Internet broadband link and the second link may be a multiprotocol label switching link. The first device and the second device may be virtual wide area network devices.

본 방법은 제1 디바이스에 의해, 제1 링크 상에서 손실된 패킷들의 수에 대응하는 제1 링크의 제1 패킷 손실 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 패킷 손실 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 손실 레이트를 결정하는 단계를 포함할 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 손실 레이트일 수 있다.The method may include determining, by the first device, a first packet loss rate of the first link corresponding to a number of packets lost on the first link. The method may include determining, by the first device, a packet acceptance rate of the second link based on a number of duplicate packets accepted for lost packets on the first link. The method may include determining, by the first device, an effective packet loss rate of the first link based on a difference between the first packet loss rate and the packet acceptance rate. The metric of the network state of the first link may be an effective packet loss rate of the first link.

본 방법은 제1 디바이스에 의해, 제1 링크 상에서 지연된 패킷들의 수에 대응하는 제1 링크의 제1 패킷 지연 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 패킷 지연 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 지연 레이트를 결정하는 단계를 포함할 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 지연 레이트이다.The method may include determining, by the first device, a first packet delay rate of the first link corresponding to a number of packets delayed on the first link. The method may include determining, by the first device, a packet acceptance rate of the second link based on a number of duplicate packets accepted for delayed packets on the first link. The method may include determining, by the first device, an effective packet delay rate of the first link based on a difference between the first packet delay rate and the packet acceptance rate. The metric of the network state of the first link is the effective packet delay rate of the first link.

본 방법은 제1 디바이스에 의해, 네트워크 상태의 메트릭을 업데이트하기 위해 제1 링크의 네트워크 상태를 모니터링하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제2 링크 상에서 복제 패킷들을 송신하는 것에 응답하여, 제1 링크의 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시키는 단계를 포함할 수 있다.The method may include monitoring, by the first device, a network status of the first link to update a metric of the network status. The method may include determining, by the first device, in response to transmitting the duplicate packets on the second link, whether an updated metric of a network state of the first link is within a threshold. The method may include increasing, by the first device, a packet replication rate in response to determining, by the first device, that the updated metric of the network condition is within the threshold.

본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제2 링크의 대역폭 이용 메트릭이 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시키는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제2 링크의 대역폭 이용 메트릭이 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크 상의 복제 패킷들의 일부를 송신하는 단계를 포함할 수 있다.The method may include determining, by the first device, whether a current metric of a network state of the first link is within a threshold value. The method may include determining, by the first device, whether a bandwidth usage metric of the second link is within a predetermined maximum bandwidth usage value assigned to the second link. The method comprises, in response to determining, by the first device, that a current metric of a network state of the first link is within a threshold, increasing a packet replication rate to increase the number of replicated packets generated per unit time. may include steps. The method may include transmitting, by the first device, some of the duplicate packets on the first link in response to determining that the bandwidth usage metric of the second link is within a predetermined maximum bandwidth usage value.

본 개시의 다른 양태에 따르면, 네트워크 상태에 기초하여 복제 패킷들을 송신하기 위한 시스템은 제1 디바이스를 포함한다. 제1 디바이스는 제2 디바이스와의 제1 링크를 확립하고 제2 디바이스와의 제2 링크를 확립하도록 구성될 수 있다. 제1 디바이스는 제1 디바이스와 상기 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭을 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크를 통해 제1 디바이스로부터 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성할 수 있다. 제1 디바이스는 제1 링크 상에서 제1 디바이스로부터 제2 디바이스로 송신될 패킷들을 송신할 수 있다. 제1 디바이스는 제1 디바이스와 제2 디바이스 사이에 확립된 제2 링크 상에서 복제 패킷들을 송신할 수 있다.According to another aspect of the present disclosure, a system for transmitting duplicate packets based on a network condition includes a first device. The first device may be configured to establish a first link with the second device and establish a second link with the second device. The first device may be configured to determine a metric of a network state of a first link established between the first device and the second device. In response to determining that the metric of the network state of the first link is within the threshold, the first device may generate duplicate packets of packets to be transmitted from the first device to the second device over the first link. The first device may transmit packets to be transmitted from the first device to the second device on the first link. The first device may transmit duplicate packets on a second link established between the first device and the second device.

일부 실시예에서, 제1 디바이스는 제1 링크의 네트워크 상태의 메트릭과 임계값 사이의 차이에 기초하여 패킷 복제 레이트를 결정할 수 있다. 제1 디바이스는 또한 결정된 패킷 복제 레이트에 기초하여 복제 패킷들을 생성할 수 있다.In some embodiments, the first device may determine the packet replication rate based on a difference between the metric and the threshold of the network state of the first link. The first device may also generate duplicate packets based on the determined packet duplication rate.

일부 실시예에서, 임계값은 제1 임계값일 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태를 모니터링하도록 구성될 수 있다. 제1 디바이스는 네트워크 상태의 메트릭이 제2 임계값 내에 있는지 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태의 메트릭이 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 제2 링크 상에서 송신되는 레이트에 대응하는 패킷 복제 레이트를 수정하도록 구성될 수 있다.In some embodiments, the threshold may be a first threshold. The first device may be configured to monitor a network status of the first link. The first device may be configured to determine whether the metric of the network condition is within a second threshold. The first device may be configured to, in response to determining that the metric of a network state of the first link is within a second threshold, modify a packet replication rate corresponding to a rate at which duplicate packets are generated and transmitted on the second link. have.

제1 디바이스는 제2 링크의 대역폭을 결정하도록 구성될 수 있다. 제1 디바이스는 결정된 제2 링크의 대역폭 및 제1 링크의 네트워크 상태의 메트릭에 기초하여 패킷 복제 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 패킷 복제 레이트에 기초하여 복제 패킷들을 생성하도록 구성될 수 있다.The first device may be configured to determine a bandwidth of the second link. The first device may be configured to determine the packet replication rate based on the determined metric of a bandwidth of the second link and a network state of the first link. The first device may be configured to generate duplicate packets based on the packet duplication rate.

제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭을 결정하기 위해, 제1 디바이스는 제1 링크의 패킷 손실 레이트 또는 제1 링크의 패킷 지연 레이트 중 하나를 결정하도록 구성된다. 제1 링크는 인터넷 광대역 링크일 수 있고, 제2 링크는 멀티프로토콜 라벨 스위칭 링크일 수 있다. 제1 디바이스 및 제2 디바이스는 가상 광역 네트워크 디바이스일 수 있다.To determine a metric of a network state of a first link established between the first device and the second device, the first device is configured to determine one of a packet loss rate of the first link or a packet delay rate of the first link . The first link may be an Internet broadband link, and the second link may be a multiprotocol label switching link. The first device and the second device may be virtual wide area network devices.

제1 디바이스는 제1 링크 상에서 손실된 패킷들의 수에 대응할 수 있는 제1 링크의 제1 패킷 손실 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정할 수 있다. 제1 디바이스는 제1 패킷 손실 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 손실 레이트를 결정할 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 손실 레이트일 수 있다.The first device may be configured to determine a first packet loss rate of the first link that may correspond to a number of packets lost on the first link. The first device may determine the packet acceptance rate of the second link based on the number of duplicate packets accepted for lost packets on the first link. The first device may determine an effective packet loss rate of the first link based on a difference between the first packet loss rate and the packet acceptance rate. The metric of the network state of the first link may be an effective packet loss rate of the first link.

제1 디바이스는 제1 링크 상에서 지연된 패킷들의 수에 대응하는 제1 링크의 제1 패킷 지연 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 제1 패킷 지연 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 지연 레이트를 결정하도록 구성될 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 지연 레이트이다.The first device may be configured to determine a first packet delay rate of the first link corresponding to a number of packets delayed on the first link. The first device may be configured to determine a packet acceptance rate of the second link based on a number of duplicate packets accepted for delayed packets on the first link. The first device may be configured to determine an effective packet delay rate of the first link based on a difference between the first packet delay rate and the packet acceptance rate. The metric of the network state of the first link is the effective packet delay rate of the first link.

제1 디바이스는 네트워크 상태의 메트릭을 업데이트하기 위해 제1 링크의 네트워크 상태를 모니터링할 수 있다. 제1 디바이스는 제2 링크 상에서 복제 패킷들을 송신하는 것에 응답하여, 제1 링크의 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는지 결정할 수 있다. 제1 디바이스는 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시킬 수 있다.The first device may monitor the network status of the first link to update a metric of the network status. In response to transmitting the duplicate packets on the second link, the first device may determine whether an updated metric of a network state of the first link is within a threshold. The first device may increase the packet replication rate in response to determining that the updated metric of the network condition is within the threshold.

제1 디바이스는 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는지 결정할 수 있다. 제1 디바이스는 제2 링크의 대역폭 이용 메트릭이 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정할 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시킬 수 있다. 제1 디바이스는 제2 링크의 대역폭 이용 메트릭이 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크 상의 복제 패킷들의 일부를 송신하도록 구성될 수 있다.The first device may determine whether a current metric of a network state of the first link is within a threshold value. The first device may determine whether a bandwidth usage metric of the second link is within a predetermined maximum bandwidth usage value assigned to the second link. In response to determining that the current metric of the network state of the first link is within the threshold, the first device may increase the packet replication rate to increase the number of replicated packets generated per unit time. The first device may be configured to transmit the portion of the duplicate packets on the first link in response to determining that the bandwidth usage metric of the second link is within a predetermined maximum bandwidth usage value.

본 해결책의 상술한 그리고 다른 목적, 양태, 특징 및 이점은 첨부 도면과 관련하여 취해진 다음의 설명을 참조함으로써 보다 명백해지고 더 잘 이해될 것이다.
도 1a는 클라이언트가 기기를 통해 서버에 액세스하기 위한 네트워크 환경의 실시예의 블록도이다.
도 1b는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 실시예의 블록도이다.
도 1c는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 다른 실시예의 블록도이다.
도 1d는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 다른 실시예의 블록도이다.
도 1e 내지 도 1h는 컴퓨팅 디바이스의 실시예의 블록도이다.
도 2a는 클라이언트와 서버 사이의 통신을 프로세싱하기 위한 기기의 실시예의 블록도이다.
도 2b는 클라이언트와 서버 사이의 통신을 최적화, 가속화, 부하-밸런싱 및 라우팅하기 위한 기기의 다른 실시예의 블록도이다.
도 3은 기기를 통해 서버와 통신하기 위한 클라이언트의 실시예의 블록도이다.
도 4a는 가상화 환경의 실시예의 블록도이다.
도 4b는 가상화 환경의 다른 실시예의 블록도이다.
도 4c는 가상화된 기기의 실시예의 블록도이다.
도 5a는 멀티-코어 시스템에서 병렬 처리(parallelism)를 구현하기 위한 접근법의 실시예의 블록도이다.
도 5b는 멀티-코어 시스템을 이용하는 시스템의 실시예의 블록도이다.
도 5c는 멀티-코어 시스템의 양태의 다른 실시예의 블록도이다.
도 6은 클러스터 시스템의 실시예의 블록도이다.
도 7은 예시적인 중간 디바이스의 블록도를 나타낸다.
도 8a는 유효 패킷 손실 레이트에 기초한 패킷의 복제를 나타낸다.
도 8b는 유효 패킷 지연 레이트에 기초한 패킷의 복제를 나타낸다.
도 9는 네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 예시적인 방법의 예시적인 흐름도를 나타낸다.
본 발명의 특징 및 이점은 도면과 관련하여 후술될 상세한 설명으로부터 보다 명백해질 것이며, 도면에서 유사한 참조 문자는 전체에 걸쳐 대응하는 요소를 식별한다. 도면에서, 유사한 참조 번호는 일반적으로 동일하고, 기능적으로 유사하고 및/또는 구조적으로 유사한 요소를 나타낸다.
The above and other objects, aspects, features and advantages of the present solution will become more apparent and better understood by reference to the following description taken in conjunction with the accompanying drawings.
1A is a block diagram of an embodiment of a network environment for a client to access a server via a device.
1B is a block diagram of an embodiment of an environment for transferring a computing environment from a server to a client via a device.
1C is a block diagram of another embodiment of an environment for transferring a computing environment from a server to a client via a device.
1D is a block diagram of another embodiment of an environment for transferring a computing environment from a server to a client via a device.
1E-1H are block diagrams of an embodiment of a computing device.
2A is a block diagram of an embodiment of a device for processing communications between a client and a server;
2B is a block diagram of another embodiment of a device for optimizing, accelerating, load-balancing and routing communications between a client and a server;
3 is a block diagram of an embodiment of a client for communicating with a server via a device;
4A is a block diagram of an embodiment of a virtualized environment;
4B is a block diagram of another embodiment of a virtualized environment.
4C is a block diagram of an embodiment of a virtualized device.
5A is a block diagram of an embodiment of an approach for implementing parallelism in a multi-core system.
5B is a block diagram of an embodiment of a system utilizing a multi-core system.
5C is a block diagram of another embodiment of an aspect of a multi-core system.
6 is a block diagram of an embodiment of a cluster system.
7 shows a block diagram of an exemplary intermediate device.
Fig. 8a shows duplication of packets based on effective packet loss rate.
Fig. 8b shows duplication of packets based on effective packet delay rate.
9 shows an exemplary flow diagram of an exemplary method for transmitting a duplicate packet based on a network condition.
BRIEF DESCRIPTION OF THE DRAWINGS The features and advantages of the present invention will become more apparent from the detailed description set forth below in connection with the drawings, in which like reference characters identify corresponding elements throughout. In the drawings, like reference numbers generally indicate identical, functionally similar, and/or structurally similar elements.

이하의 다양한 실시예의 설명을 읽기 위해, 본 명세서의 섹션 및 그 각각의 내용에 대한 다음의 설명이 도움이 될 수 있다:In order to read the description of the various embodiments that follow, the following description of the sections of this specification and their respective contents may be helpful:

섹션 A는 본원에 설명되는 실시예를 실시하는 데 유용할 수 있는 네트워크 환경 및 컴퓨팅 환경을 설명하고;Section A describes network environments and computing environments that may be useful in practicing the embodiments described herein;

섹션 B는 컴퓨팅 환경을 원격 사용자에게 전달하기 위한 시스템 및 방법의 실시예를 설명하고;Section B describes embodiments of systems and methods for delivering a computing environment to a remote user;

섹션 C는 클라이언트와 서버 사이의 통신을 가속화하기 위한 시스템 및 방법의 실시예를 설명하고;Section C describes embodiments of systems and methods for accelerating communication between clients and servers;

섹션 D는 어플리케이션 전달 제어기를 가상화하기 위한 시스템 및 방법의 실시예를 설명하고;Section D describes an embodiment of a system and method for virtualizing an application delivery controller;

섹션 E는 멀티-코어 아키텍처 및 환경을 제공하기 위한 시스템 및 방법의 실시예를 설명하고;Section E describes embodiments of systems and methods for providing multi-core architectures and environments;

섹션 F는 클러스터형 기기 아키텍처 환경을 제공하기 위한 시스템 및 방법의 실시예를 설명하고; 그리고Section F describes embodiments of systems and methods for providing a clustered device architecture environment; and

섹션 G는 적응형 패킷 복제를 위한 시스템 및 방법의 실시예를 설명한다.Section G describes an embodiment of a system and method for adaptive packet replication.

A. 네트워크 및 컴퓨팅 환경A. Network and Computing Environments

기기 및/또는 클라이언트의 시스템 및 방법의 실시예의 구체적 사항을 논의하기 전에, 이러한 실시예가 전개될 수 있는 네트워크 및 컴퓨팅 환경을 논의하는 것이 도움이 될 수 있다. 이하 도 1a를 참조하면, 네트워크 환경의 실시예가 도시된다. 간략한 개요에서, 네트워크 환경은 하나 이상의 네트워크(104, 104')(일반적으로 네트워크(104)로 지칭됨)를 통해 하나 이상의 서버(106a-106n)(일반적으로 서버(들)(106) 또는 원격 머신(들)(106)으로도 지칭됨)와 통신하는 하나 이상의 클라이언트(102a-102n)(일반적으로 로컬 머신(들)(102) 또는 클라이언트(들)(102)로도 지칭됨)를 포함한다. 일부 실시예에서, 클라이언트(102)는 기기(200)를 통해 서버(106)와 통신한다.Before discussing the specifics of embodiments of systems and methods of devices and/or clients, it may be helpful to discuss the network and computing environments in which such embodiments may be deployed. Referring now to FIG. 1A, an embodiment of a network environment is illustrated. In a brief overview, a network environment includes one or more servers 106a - 106n (generally server(s) 106 or remote machines via one or more networks 104 , 104 ′ (generally referred to as network 104 ). one or more clients 102a - 102n (also commonly referred to as local machine(s) 102 or client(s) 102 ) in communication with ( also referred to as (s) 106 ). In some embodiments, the client 102 communicates with the server 106 via the device 200 .

비록 도 1a는 클라이언트(102)와 서버(106) 사이의 네트워크(104) 및 네트워크(104')를 나타내지만, 클라이언트(102)와 서버(106)는 동일한 네트워크(104) 상에 있을 수 있다. 네트워크(104 및 104')는 동일한 유형의 네트워크이거나 상이한 유형의 네트워크일 수 있다. 네트워크(104) 및/또는 네트워크(104')는 회사 인트라넷, 메트로폴리탄 영역 네트워크(MAN)와 같은 근거리 네트워크(LAN) 또는 인터넷 또는 월드 와이드 웹(World Wide Web)과 같은 광역 네트워크(WAN)일 수 있다. 일 실시예에서, 네트워크(104')는 사설 네트워크일 수 있고 네트워크(104)는 공용 네트워크일 수 있다. 일부 실시예에서, 네트워크(104)는 사설 네트워크일 수 있고 네트워크(104')는 공용 네트워크일 수 있다. 다른 실시예에서, 네트워크(104 및 104')는 모두 사설 네트워크일 수 있다. 일부 실시예에서, 클라이언트(102)는 네트워크(104)를 통해 회사 데이터 센터에 위치한 서버(106)와 WAN 접속을 통해 통신하는 회사 기업의 지점에 위치될 수 있다.Although FIG. 1A shows a network 104 and a network 104 ′ between a client 102 and a server 106 , the client 102 and the server 106 may be on the same network 104 . Networks 104 and 104' may be the same type of network or different types of networks. Network 104 and/or network 104' may be a corporate intranet, a local area network (LAN), such as a Metropolitan Area Network (MAN), or a wide area network (WAN), such as the Internet or the World Wide Web. . In one embodiment, network 104' may be a private network and network 104 may be a public network. In some embodiments, network 104 may be a private network and network 104' may be a public network. In other embodiments, networks 104 and 104' may both be private networks. In some embodiments, the client 102 may be located at a branch of the corporate enterprise that communicates via a WAN connection with a server 106 located in the corporate data center via the network 104 .

네트워크(104 및/또는 104')는 임의의 유형 및/또는 형태의 네트워크일 수 있으며, 포인트 대 포인트 네트워크, 브로드캐스트 네트워크, 광역 네트워크, 근거리 네트워크, 원격 통신 네트워크, 데이터 통신 네트워크, 컴퓨터 네트워크, ATM(Asynchronous Transfer Mode) 네트워크, SONET(Synchronous Optical Network) 네트워크, SDH(Synchronous Digital Hierarchy) 네트워크, 무선 네트워크 및 유선 네트워크 중 임의의 것을 포함할 수 있다. 일부 실시예에서, 네트워크(104)는 적외선 채널 또는 위성 대역과 같은 무선 링크를 포함할 수 있다. 네트워크(104 및/또는 104')의 토폴로지는 버스, 스타(star) 또는 링 네트워크 토폴로지일 수 있다. 네트워크(104 및/또는 104') 및 네트워크 토폴로지는 본원에서 설명되는 동작을 지원할 수 있는 본 기술 분야의 통상의 기술자에게 알려진 임의의 이러한 네트워크 또는 네트워크 토폴로지일 수 있다.Network 104 and/or 104' may be any type and/or type of network, and may be a point-to-point network, a broadcast network, a wide area network, a local area network, a telecommunications network, a data communication network, a computer network, an ATM It may include any of an Asynchronous Transfer Mode (Asynchronous Transfer Mode) network, a Synchronous Optical Network (SONET) network, a Synchronous Digital Hierarchy (SDH) network, a wireless network, and a wired network. In some embodiments, network 104 may include a wireless link such as an infrared channel or satellite band. The topology of networks 104 and/or 104' may be a bus, star or ring network topology. Networks 104 and/or 104' and network topologies may be any such networks or network topologies known to those of ordinary skill in the art capable of supporting the operations described herein.

도 1a에 나타낸 바와 같이, 인터페이스 유닛(200) 또는 게이트웨이(200)로도 지칭될 수 있는 기기(200)가 네트워크(104 및 104') 사이에 도시되어 있다. 일부 실시예에서, 기기(200)는 네트워크(104) 상에 위치될 수 있다. 예를 들어, 회사 기업의 지점은 기기(200)를 지점에 배치할 수 있다. 다른 실시예에서, 기기(200)는 네트워크(104') 상에 위치될 수 있다. 예를 들어, 기기(200)는 회사 데이터 센터에 위치될 수 있다. 또 다른 실시예에서, 복수의 기기(200)가 네트워크(104) 상에 배치될 수 있다. 일부 실시예에서, 복수의 기기(200)는 네트워크(104') 상에 배치될 수 있다. 일 실시예에서, 제1 기기(200)는 제2 기기(200')와 통신한다. 다른 실시예에서, 기기(200)는 클라이언트(102)와 동일하거나 상이한 네트워크(104, 104') 상의 임의의 클라이언트(102) 또는 서버(106)의 일부일 수 있다. 하나 이상의 기기(200)가 네트워크의 임의의 지점 또는 클라이언트(102)와 서버(106) 사이의 네트워크 통신 경로에 위치될 수 있다.As shown in FIG. 1A , a device 200 , which may also be referred to as an interface unit 200 or gateway 200 , is shown between networks 104 and 104 ′. In some embodiments, device 200 may be located on network 104 . For example, a branch of a company may place the device 200 at the branch. In other embodiments, device 200 may be located on network 104 ′. For example, device 200 may be located in a corporate data center. In another embodiment, a plurality of devices 200 may be deployed on the network 104 . In some embodiments, a plurality of devices 200 may be deployed on a network 104 ′. In one embodiment, the first device 200 communicates with the second device 200 ′. In other embodiments, device 200 may be part of any client 102 or server 106 on the same or different network 104 , 104 ′ as client 102 . One or more devices 200 may be located at any point in the network or in the network communication path between the client 102 and the server 106 .

일부 실시예에서, 기기(200)는 NetScaler® 디바이스로 지칭되는, Ft. Lauderdale Florida의 Citrix Systems, Inc.에 의해 제조된 임의의 네트워크 디바이스를 포함한다. 다른 실시예에서, 기기(200)는 Seattle, Washington의 F5 Networks, Inc.에 의해 제조된 WebAccelerator 및 BigIP로 지칭되는 임의의 제품 실시예를 포함한다. 다른 실시예에서, 기기(200)는 Sunnyvale, California의 Juniper Networks, Inc.에 의해 제조된 SA 700, SA 2000, SA 4000 및 SA 6000 디바이스와 같은 임의의 DX 가속 디바이스 플랫폼 및/또는 SSL VPN 디바이스 시리즈를 포함한다. 또 다른 실시예에서, 기기(200)는 Cisco ACE Application Control Engine Module 서비스 소프트웨어 및 네트워크 모듈 및 Cisco AVS Series Application Velocity System과 같은, San Jose, California의 Cisco Systems, Inc.에 의해 제조된 임의의 어플리케이션 가속화 및/또는 보안 관련 기기 및/또는 소프트웨어를 포함한다.In some embodiments, appliance 200 is referred to as a NetScaler® device, Ft. includes any network device manufactured by Citrix Systems, Inc. of Lauderdale Florida. In another embodiment, device 200 includes any product embodiment referred to as BigIP and WebAccelerator manufactured by F5 Networks, Inc. of Seattle, Washington. In another embodiment, appliance 200 is any DX acceleration device platform and/or SSL VPN device series, such as SA 700, SA 2000, SA 4000 and SA 6000 devices manufactured by Juniper Networks, Inc. of Sunnyvale, California. includes In another embodiment, the device 200 accelerates any application manufactured by Cisco Systems, Inc. of San Jose, California, such as the Cisco ACE Application Control Engine Module service software and network module and the Cisco AVS Series Application Velocity System. and/or security related devices and/or software.

일 실시예에서, 시스템은 복수의 논리적으로-그룹화된 서버(106)를 포함할 수 있다. 이들 실시예에서, 서버의 논리적 그룹은 서버 팜(farm)(38)으로 지칭될 수 있다. 이들 실시예 중 일부에서, 서버(106)는 지리적으로 분산될 수 있다. 일부 경우에, 팜(38)은 단일 엔티티로서 관리될 수 있다. 다른 실시예에서, 서버 팜(38)은 복수의 서버 팜(38)을 포함한다. 일 실시예에서, 서버 팜은 하나 이상의 클라이언트(102)를 대신해서 하나 이상의 어플리케이션을 실행한다.In one embodiment, the system may include a plurality of logically-grouped servers 106 . In these embodiments, a logical grouping of servers may be referred to as a server farm 38 . In some of these embodiments, the servers 106 may be geographically distributed. In some cases, the farm 38 may be managed as a single entity. In another embodiment, server farm 38 includes a plurality of server farms 38 . In one embodiment, the server farm runs one or more applications on behalf of one or more clients 102 .

각 팜(38) 내의 서버(106)는 이종(heterogeneous)일 수 있다. 하나 이상의 서버(106)는 하나의 유형의 운영 체제 플랫폼(예를 들어, Redmond, Washington의 Microsoft Corp.에 의해 제조된 WINDOWS NT)에 따라 동작할 수 있는 반면, 다른 서버(106) 중 하나 이상은 다른 유형의 운영 체제 플랫폼(예를 들어, Unix 또는 Linux)에 따라 동작할 수 있다. 각 팜(38)의 서버(106)는 동일한 팜(38)의 다른 서버(106)에 물리적으로 근접할 필요는 없다. 따라서, 팜(38)으로서 논리적으로 그룹화된 서버(106)의 그룹은 광역 네트워크(wide-area network: WAN) 접속 또는 중간 영역 네트워크(medium-area network: MAN) 접속을 사용하여 상호 접속될 수 있다. 예를 들어, 팜(38)은 상이한 대륙 또는 대륙, 국가, 주, 도시, 캠퍼스 또는 룸의 상이한 지역에 물리적으로 위치한 서버(106)를 포함할 수 있다. 서버(106)가 근거리 네트워크(local-area network: LAN) 접속 또는 어떤 형태의 직접 접속을 사용하여 접속되는 경우, 팜(38) 내에서의 서버(106) 사이의 데이터 송신 속도가 증가될 수 있다.The servers 106 in each farm 38 may be heterogeneous. One or more servers 106 may operate according to one type of operating system platform (eg, WINDOWS NT manufactured by Microsoft Corp. of Redmond, Washington), while one or more of the other servers 106 may be It can operate on different types of operating system platforms (eg Unix or Linux). A server 106 in each farm 38 need not be in physical proximity to another server 106 in the same farm 38 . Thus, groups of servers 106 logically grouped as farms 38 may be interconnected using wide-area network (WAN) connections or medium-area network (MAN) connections. . For example, farm 38 may include servers 106 physically located on different continents or on different continents, countries, states, cities, campuses, or different regions of the room. When the servers 106 are connected using a local-area network (LAN) connection or some form of direct connection, the data transfer rate between the servers 106 within the farm 38 can be increased. .

서버(106)는 파일 서버, 어플리케이션 서버, 웹 서버, 프록시 서버 또는 게이트웨이 서버로 지칭될 수 있다. 일부 실시예에서, 서버(106)는 어플리케이션 서버 또는 마스터 어플리케이션 서버로서 기능하는 능력을 가질 수 있다. 일 실시예에서, 서버(106)는 액티브 디렉토리(Active Directory)를 포함할 수 있다. 클라이언트(102)는 또한 클라이언트 노드 또는 엔드포인트로도 지칭될 수 있다. 일부 실시예에서, 클라이언트(102)는 서버 상의 어플리케이션에 대한 액세스를 찾는 클라이언트 노드 및 다른 클라이언트(102a-102n)에 대한 호스팅된 어플리케이션들에 대한 액세스를 제공하는 어플리케이션 서버 모두로서 기능하는 능력을 갖는다.Server 106 may be referred to as a file server, application server, web server, proxy server, or gateway server. In some embodiments, server 106 may have the ability to function as an application server or a master application server. In one embodiment, server 106 may include Active Directory. Client 102 may also be referred to as a client node or endpoint. In some embodiments, client 102 has the ability to function both as a client node seeking access to applications on the server and as an application server providing access to hosted applications for other clients 102a-102n.

일부 실시예에서, 클라이언트(102)는 서버(106)와 통신한다. 일 실시예에서, 클라이언트(102)는 팜(38)에서 서버(106) 중 하나와 직접 통신한다. 다른 실시예에서, 클라이언트(102)는 팜(38)의 서버(106)와 통신하기 위해 프로그램 이웃 어플리케이션을 실행한다. 또 다른 실시예에서, 서버(106)는 마스터 노드의 기능을 제공한다. 일부 실시예에서, 클라이언트(102)는 네트워크(104)를 통해 팜(38) 내의 서버(106)와 통신한다. 네트워크(104)를 통해, 클라이언트(102)는 예를 들어, 팜(38) 내의 서버(106a-106n)에 의해 호스팅되는 다양한 어플리케이션의 실행을 요청할 수 있고 디스플레이를 위해 어플리케이션 실행의 결과의 출력을 수신할 수 있다. 일부 실시예에서, 마스터 노드만이 요청된 어플리케이션을 호스팅하는 서버(106')와 연관된 주소 정보를 식별하고 제공하는 데 필요한 기능을 제공한다.In some embodiments, the client 102 communicates with the server 106 . In one embodiment, the client 102 communicates directly with one of the servers 106 in the farm 38 . In another embodiment, the client 102 runs a program neighbor application to communicate with the server 106 of the farm 38 . In another embodiment, the server 106 provides the functionality of a master node. In some embodiments, client 102 communicates with server 106 in farm 38 via network 104 . Via network 104 , client 102 may request execution of various applications hosted by servers 106a - 106n in farm 38 , for example, and receive output of the results of application execution for display. can do. In some embodiments, only the master node provides the functionality necessary to identify and provide address information associated with the server 106' hosting the requested application.

일 실시예에서, 서버(106)는 웹 서버의 기능을 제공한다. 다른 실시예에서, 서버(106a)는 클라이언트(102)로부터 요청을 수신하고, 그 요청을 제2 서버(106b)로 전달하고 제2 서버(106b)로부터의 요청에 대한 응답으로 클라이언트(102)에 의한 요청에 응답한다. 또 다른 실시예에서, 서버(106)는 클라이언트(102)에 이용 가능한 어플리케이션의 목록 및 어플리케이션의 목록에 의해 식별된 어플리케이션을 호스팅하는 서버(106)와 연관된 주소 정보를 획득한다. 또 다른 실시예에서, 서버(106)는 웹 인터페이스를 사용하여 요청에 대한 응답을 클라이언트(102)에 제시한다. 일 실시예에서, 클라이언트(102)는 식별된 어플리케이션에 액세스하기 위해 서버(106)와 직접 통신한다. 다른 실시예에서, 클라이언트(102)는 서버(106) 상에서 식별된 어플리케이션의 실행에 의해 생성된 디스플레이 데이터와 같은 어플리케이션 출력 데이터를 수신한다.In one embodiment, server 106 provides the functionality of a web server. In another embodiment, server 106a receives a request from client 102 and forwards the request to second server 106b and to client 102 in response to the request from second server 106b. respond to requests by In another embodiment, the server 106 obtains a list of applications available to the client 102 and address information associated with the server 106 hosting the application identified by the list of applications. In another embodiment, the server 106 presents a response to the request to the client 102 using a web interface. In one embodiment, the client 102 communicates directly with the server 106 to access the identified application. In another embodiment, the client 102 receives application output data, such as display data, generated by the execution of the identified application on the server 106 .

이하 도 1b를 참조하면, 복수의 기기(200)를 배치하는 네트워크 환경의 실시예가 도시된다. 제1 기기(200)는 제1 네트워크(104) 상에 배치되고 제2 기기(200')는 제2 네트워크(104') 상에 배치될 수 있다. 예를 들어, 회사 기업은 지점에 제1 기기(200)를 배치하고 데이터 센터에 제2 기기(200')를 배치할 수 있다. 다른 실시예에서, 제1 기기(200) 및 제2 기기(200')는 동일한 네트워크(104) 또는 네트워크(104') 상에 배치된다. 예를 들어, 제1 기기(200)는 제1 서버 팜(38)에 배치될 수 있고, 제2 기기(200)는 제2 서버 팜(38')에 배치될 수 있다. 다른 예에서, 제1 기기(200)는 제1 지점에 배치될 수 있고, 제2 기기(200')는 제2 지점에 배치될 수 있다. 일부 실시예에서, 제1 기기(200)와 제2 기기(200')는 네트워크 트래픽 또는 클라이언트와 서버 사이의 어플리케이션 및 데이터의 전달을 가속화하기 위해 서로 협력하거나 연계하여 동작한다.Hereinafter, referring to FIG. 1B , an embodiment of a network environment in which a plurality of devices 200 are disposed is illustrated. The first device 200 may be disposed on the first network 104 and the second device 200 ′ may be disposed on the second network 104 ′. For example, a company company may deploy a first device 200 in a branch office and a second device 200 ′ in a data center. In another embodiment, the first device 200 and the second device 200' are disposed on the same network 104 or network 104'. For example, the first device 200 may be disposed in the first server farm 38 , and the second device 200 may be disposed in the second server farm 38 ′. In another example, the first device 200 may be disposed at a first point, and the second device 200 ′ may be disposed at a second point. In some embodiments, the first device 200 and the second device 200 ′ cooperate or operate in conjunction with each other to accelerate network traffic or transfer of applications and data between a client and a server.

이하 도 1c를 참조하면, 하나 이상의 WAN 최적화 기기(205, 205')와 같은 하나 이상의 다른 유형의 기기를 사용하여 기기(200)를 배치하는 네트워크 환경의 다른 실시예가 도시된다. 예를 들어, 제1 WAN 최적화 기기(205)는 네트워크(104 및 104') 사이에 나타내어지고, 제2 WAN 최적화 기기(205')는 기기(200)와 하나 이상의 서버(106) 사이에 배치될 수 있다. 예를 들어, 회사 기업은 지점에 제1 WAN 최적화 기기(205)를 배치하고 데이터 센터에 제2 WAN 최적화 기기(205')를 배치할 수 있다. 일부 실시예에서, 기기(205)는 네트워크(104') 상에 위치될 수 있다. 다른 실시예에서, 기기(205')는 네트워크(104) 상에 위치될 수 있다. 일부 실시예에서, 기기(205')는 네트워크(104') 또는 네트워크(104") 상에 위치될 수 있다. 일 실시예에서 기기(205 및 205')는 동일한 네트워크 상에 있다. 다른 실시예에서, 기기(205 및 205')는 상이한 네트워크 상에 있다. 다른 예에서, 제1 WAN 최적화 기기(205)는 제1 서버 팜(38)에 대해 배치되고 제2 WAN 최적화 기기(205')는 제2 서버 팜(38')에 대해 배치될 수 있다.Referring now to FIG. 1C , another embodiment of a network environment for deploying devices 200 using one or more other types of devices, such as one or more WAN optimization devices 205 and 205', is shown. For example, a first WAN optimization device 205 may be represented between the networks 104 and 104 ′ and a second WAN optimization device 205 ′ may be disposed between the device 200 and the one or more servers 106 . can For example, a company enterprise may deploy a first WAN optimization device 205 in a branch office and a second WAN optimization device 205 ′ in a data center. In some embodiments, device 205 may be located on network 104 ′. In another embodiment, the device 205 ′ may be located on the network 104 . In some embodiments, device 205' may be located on network 104' or network 104". In one embodiment, devices 205 and 205' are on the same network. Other embodiments , the devices 205 and 205' are on different networks In another example, a first WAN optimizer 205 is deployed for a first server farm 38 and a second WAN optimizer 205' It may be deployed relative to the second server farm 38'.

일 실시예에서, 기기(205)는 WAN 접속으로의 및/또는 WAN 접속으로부터의 트래픽과 같은 임의의 유형 및 형태의 네트워크 트래픽의 성능, 동작 또는 서비스 품질을 가속화, 최적화 또는 이와 다르게 개선하기 위한 디바이스이다. 일부 실시예에서, 기기(205)는 성능 향상 프록시이다. 다른 실시예에서, 기기(205)는 임의의 유형 및 형태의 WAN 최적화 또는 가속화 디바이스이며, 때로는 WAN 최적화 제어기로도 칭해진다. 일 실시예에서, 기기(205)는 Ft. Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제조된 CloudBridge®로 지칭되는 임의의 제품 실시예이다. 다른 실시예에서, 기기(205)는 Seattle, Washington의 F5 Networks, Inc.에 의해 제조된 BIG-IP 링크 제어기 및 WANjet으로 지칭되는 임의의 제품 실시예를 포함한다. 다른 실시예에서, 기기(205)는 Sunnyvale, California의 Juniper Networks, Inc.에 의해 제조된 WX 및 WXC WAN 가속 디바이스 플랫폼 중 임의의 것을 포함한다. 일부 실시예에서, 기기(205)는 San Francisco, California의 Riverbed Technology에 의해 제조된 임의의 WAN 최적화 기기의 스틸헤드 라인 중 임의의 것을 포함한다. 다른 실시예에서, 기기(205)는 Roseland, New Jersey의 Expand Networks Inc.에 의해 제조된 WAN 관련 디바이스 중 임의의 것을 포함한다. 일 실시예에서, 기기(205)는 Packeteer가 제공하는 PacketShaper, iShared 및 SkyX 제품 실시예와 같은, Cupertino, California의 Packeteer Inc.에 의해 제조된 임의의 WAN 관련 기기를 포함한다. 또 다른 실시예에서, 기기(205)는 Cisco Wide Area Network Application services 소프트웨어 및 네트워크 모듈 및 Wide Area Network 엔진 기기와 같은, San Jose, California의 Cisco Systems, Inc.에 의해 제조된 임의의 WAN 관련 기기 및/또는 소프트웨어를 포함한다.In one embodiment, the appliance 205 is a device for accelerating, optimizing, or otherwise improving the performance, operation or quality of service of any type and form of network traffic, such as traffic to and/or from a WAN connection. am. In some embodiments, device 205 is a performance enhancing proxy. In other embodiments, appliance 205 is any type and form of WAN optimization or acceleration device, sometimes also referred to as a WAN optimization controller. In one embodiment, the device 205 uses Ft. Any product example referred to as CloudBridge® manufactured by Citrix Systems, Inc. of Lauderdale, Florida. In another embodiment, appliance 205 includes a BIG-IP link controller manufactured by F5 Networks, Inc. of Seattle, Washington and any product embodiment referred to as WANjet. In another embodiment, the appliance 205 includes any of the WX and WXC WAN acceleration device platforms manufactured by Juniper Networks, Inc. of Sunnyvale, California. In some embodiments, appliance 205 includes any of the steelhead lines of any WAN optimization appliance manufactured by Riverbed Technology of San Francisco, California. In another embodiment, the appliance 205 comprises any of the WAN related devices manufactured by Expand Networks Inc. of Roseland, New Jersey. In one embodiment, device 205 includes any WAN related device manufactured by Packeteer Inc. of Cupertino, California, such as the PacketShaper, iShared, and SkyX product embodiments provided by Packeteer. In another embodiment, device 205 includes any WAN related device manufactured by Cisco Systems, Inc. of San Jose, California, such as Cisco Wide Area Network Application services software and network modules and Wide Area Network Engine Appliance, and / or software.

일 실시예에서, 기기(205)는 지점 또는 원격 사무소에 어플리케이션 및 데이터 가속 서비스를 제공한다. 일 실시예에서, 기기(205)는 WAFS(Wide Area File Services)의 최적화를 포함한다. 다른 실시예에서, 기기(205)는 CIFS(Common Internet File System) 프로토콜을 통하는 것과 같이 파일의 전달을 가속화한다. 다른 실시예에서, 기기(205)는 어플리케이션 및 데이터의 전달을 가속화하기 위해 메모리 및/또는 저장소에 캐싱(cashing)을 제공한다. 일 실시예에서, 기기(205)는 임의의 레벨의 네트워크 스택 또는 임의의 프로토콜 또는 네트워크 계층에서 네트워크 트래픽의 압축을 제공한다. 다른 실시예에서, 기기(205)는 WAN 접속을 통한 어플리케이션 및 데이터의 전달을 가속화하기 위해 전송 계층 프로토콜 최적화, 흐름 제어, 성능 향상 또는 수정 및/또는 관리를 제공한다. 예를 들어, 일 실시예에서, 기기(205)는 TCP(Transport Control Protocol) 최적화를 제공한다. 다른 실시예에서, 기기(205)는 임의의 세션 또는 어플리케이션 계층 프로토콜에 대한 최적화, 흐름 제어, 성능 향상 또는 수정 및/또는 관리를 제공한다.In one embodiment, the device 205 provides application and data acceleration services to a branch or remote office. In one embodiment, the device 205 includes optimization of Wide Area File Services (WAFS). In another embodiment, the device 205 accelerates the transfer of files, such as via the Common Internet File System (CIFS) protocol. In another embodiment, the device 205 provides caching in memory and/or storage to accelerate delivery of applications and data. In one embodiment, the device 205 provides compression of network traffic at any level of the network stack or at any protocol or network layer. In another embodiment, the device 205 provides transport layer protocol optimization, flow control, performance enhancement or modification and/or management to accelerate the delivery of applications and data over a WAN connection. For example, in one embodiment, the device 205 provides a Transport Control Protocol (TCP) optimization. In other embodiments, the device 205 provides optimization, flow control, performance enhancement or modification and/or management for any session or application layer protocol.

다른 실시예에서, 기기(205)는 임의의 유형 및 형태의 데이터 또는 정보를 다른 기기(205')에 존재, 기능 또는 능력을 알리기 위해 네트워크 패킷의 커스텀 또는 표준 TCP 및/또는 IP 헤더 필드 또는 옵션 필드로 인코딩하였다. 다른 실시예에서, 기기(205')는 TCP 및/또는 IP 헤더 필드 또는 옵션 모두에서 인코딩된 데이터를 사용하여 다른 기기(205')와 통신할 수 있다. 예를 들어, 기기는 TCP 옵션(들) 또는 IP 헤더 필드 또는 옵션을 사용하여 WAN 가속과 같은 기능을 수행하거나 서로 연계하여 동작하기 위해 기기(205, 205')에 의해 사용될 하나 이상의 파라미터를 전달할 수 있다.In other embodiments, the device 205 may transmit any type and form of data or information to other devices 205' in custom or standard TCP and/or IP header fields or options in network packets to inform other devices 205' of their presence, function or capability. Encoded as a field. In other embodiments, a device 205' may communicate with another device 205' using data encoded in both TCP and/or IP header fields or options. For example, the device may use TCP option(s) or IP header fields or options to pass one or more parameters to be used by the devices 205, 205' to perform a function such as WAN acceleration or to operate in conjunction with each other. have.

일부 실시예에서, 기기(200)는 기기(205 및 205') 사이에서 전달되는 TCP 및/또는 IP 헤더 및/또는 옵션 필드로 인코딩된 정보 중 임의의 것을 보존한다. 예를 들어, 기기(200)는 클라이언트와 서버 횡단 기기(205 및 205') 사이의 전송 계층 접속과 같이, 기기(200)를 횡단하는 전송 계층 접속을 종료할 수 있다. 일 실시예에서, 기기(200)는 제1 전송 계층 접속을 통해 제1 기기(205)에 의해 송신된 전송 계층 패킷에서 임의의 인코딩된 정보를 식별 및 보존하고, 인코딩된 정보를 갖는 전송 계층 패킷을 제2 전송 계층 접속을 통해 제2 기기(205')로 전달한다.In some embodiments, device 200 preserves any of the information encoded in TCP and/or IP headers and/or option fields passed between devices 205 and 205'. For example, the device 200 may terminate a transport layer connection that traverses the device 200, such as a transport layer connection between the client and server traversing devices 205 and 205'. In one embodiment, the device 200 identifies and preserves any encoded information in the transport layer packet transmitted by the first device 205 over the first transport layer connection, and the transport layer packet with the encoded information. is transmitted to the second device 205' through the second transport layer connection.

이하 도 1d을 참조하면, 클라이언트(102) 상에서 컴퓨팅 환경을 전달 및/또는 운영하기 위한 네트워크 환경이 도시된다. 일부 실시예에서, 서버(106)는 컴퓨팅 환경 또는 어플리케이션 및/또는 데이터 파일을 하나 이상의 클라이언트(102)로 전달하기 위한 어플리케이션 전달 시스템(190)을 포함한다. 간략한 개요에서, 클라이언트(102)는 네트워크(104, 104') 및 기기(200)를 통해 서버(106)와 통신하고 있다. 예를 들어, 클라이언트(102)는 회사의 원격 사무실, 예를 들어, 지점에 상주할 수 있고, 서버(106)는 회사 데이터 센터에 상주할 수 있다. 클라이언트(102)는 클라이언트 에이전트(120) 및 컴퓨팅 환경(15)을 포함한다. 컴퓨팅 환경(15)은 데이터 파일을 액세스, 프로세싱 또는 사용하는 어플리케이션을 실행 또는 동작시킬 수 있다. 컴퓨팅 환경(15), 어플리케이션 및/또는 데이터 파일은 기기(200) 및/또는 서버(106)를 통해 전달될 수 있다.Referring now to FIG. 1D , a network environment for delivering and/or operating a computing environment on a client 102 is illustrated. In some embodiments, server 106 includes an application delivery system 190 for delivering a computing environment or application and/or data files to one or more clients 102 . In brief overview, client 102 is communicating with server 106 via network 104 , 104 ′ and device 200 . For example, client 102 may reside in a remote office, eg, a branch office, of a company, and server 106 may reside in a company data center. The client 102 includes a client agent 120 and a computing environment 15 . Computing environment 15 may run or operate applications that access, process, or use data files. Computing environment 15 , applications and/or data files may be delivered via device 200 and/or server 106 .

일부 실시예에서, 기기(200)는 클라이언트(102)에 대한 컴퓨팅 환경(15) 또는 그 임의의 일부의 전달을 가속화한다. 일 실시예에서, 기기(200)는 어플리케이션 전달 시스템(190)에 의해 컴퓨팅 환경(15)의 전달을 가속화한다. 예를 들어, 본원에 설명되는 실시예는 중앙 회사 데이터 센터로부터 회사의 지점과 같은 원격 사용자 위치로 어플리케이션에 의해 프로세싱 가능한 스트리밍 어플리케이션 및 데이터 파일의 전달을 가속화하는 데 사용될 수 있다. 다른 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 전송 계층 트래픽을 가속화한다. 기기(200)는 1) 전송 계층 접속 풀링(pooling), 2) 전송 계층 연결 다중화(multiplexing), 3) 전송 제어 프로토콜 버퍼링, 4) 압축 및 5) 캐싱과 같이, 서버(106)로부터 클라이언트(102)로의 임의의 전송 계층 페이로드를 가속화하기 위한 가속 기술을 제공할 수 있다. 일부 실시예에서, 기기(200)는 클라이언트(102)로부터의 요청에 응답하여 서버(106)의 부하 밸런싱을 제공한다. 다른 실시예에서, 기기(200)는 하나 이상의 서버(106)에 대한 액세스를 제공하기 위해 프록시 또는 액세스 서버로서 작용한다. 다른 실시예에서, 기기(200)는 SSL VPN 접속과 같이, 클라이언트(102)의 제1 네트워크(104)로부터 서버(106)의 제2 네트워크(104')로의 안전한 가상 사설 네트워크 접속을 제공한다. 또 다른 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 접속 및 통신의 어플리케이션 방화벽 보안, 제어 및 관리를 제공한다.In some embodiments, device 200 accelerates delivery of computing environment 15 or any portion thereof to client 102 . In one embodiment, device 200 accelerates delivery of computing environment 15 by application delivery system 190 . For example, embodiments described herein may be used to accelerate the delivery of streaming applications and data files processable by applications from a central corporate data center to a remote user location, such as a branch of a corporation. In another embodiment, the device 200 accelerates transport layer traffic between the client 102 and the server 106 . The device 200 is configured to perform such functions as 1) transport layer connection pooling, 2) transport layer connection multiplexing, 3) transport control protocol buffering, 4) compression, and 5) caching, from the server 106 to the client 102 ) can provide an acceleration technique to accelerate any transport layer payload to In some embodiments, device 200 provides load balancing of servers 106 in response to requests from clients 102 . In other embodiments, the device 200 acts as a proxy or access server to provide access to one or more servers 106 . In another embodiment, the device 200 provides a secure virtual private network connection from the first network 104 of the client 102 to the second network 104' of the server 106, such as an SSL VPN connection. In another embodiment, device 200 provides application firewall security, control and management of connections and communications between client 102 and server 106 .

일부 실시예에서, 어플리케이션 전달 관리 시스템(190)은 복수의 실행 방법에 기초하고 정책 엔진(195)을 통해 적용된 임의의 인증 및 허가 정책에 기초하여 원격 또는 다른 방식으로 사용자의 데스크탑에 컴퓨팅 환경을 전달하기 위한 어플리케이션 전달 기술을 제공한다. 이들 기술에 의해, 원격 사용자는 컴퓨팅 환경을 획득하고 임의의 네트워크 접속된 디바이스(100)로부터 서버 저장 어플리케이션 및 데이터 파일에 액세스할 수 있다. 일 실시예에서, 어플리케이션 전달 시스템(190)은 서버(106) 상에서 상주하거나 실행될 수 있다. 다른 실시예에서, 어플리케이션 전달 시스템(190)은 복수의 서버(106a-106n) 상에 상주하거나 실행될 수 있다. 일부 실시예에서, 어플리케이션 전달 시스템(190)은 서버 팜(38)에서 실행될 수 있다. 일 실시예에서, 어플리케이션 전달 시스템(190)을 실행하는 서버(106)는 또한 어플리케이션 및 데이터 파일을 저장하거나 제공할 수 있다. 다른 실시예에서, 하나 이상의 서버(106)의 제1 세트가 어플리케이션 전달 시스템(190)을 실행할 수 있고, 다른 서버(106n)는 어플리케이션 및 데이터 파일을 저장 또는 제공할 수 있다. 일부 실시예에서, 각각의 어플리케이션 전달 시스템(190), 어플리케이션 및 데이터 파일은 상이한 서버에 상주하거나 위치될 수 있다. 또 다른 실시예에서, 어플리케이션 전달 시스템(190)의 임의의 부분은 기기(200) 또는 복수의 기기에 상주, 실행 또는 저장되거나 분산될 수 있다.In some embodiments, the application delivery management system 190 delivers the computing environment to the user's desktop remotely or otherwise based on a plurality of execution methods and based on any authentication and authorization policies applied through the policy engine 195 . Provides application delivery technology for These techniques allow remote users to obtain a computing environment and access server-stored applications and data files from any network-connected device 100 . In one embodiment, the application delivery system 190 may reside or run on the server 106 . In other embodiments, the application delivery system 190 may reside or run on a plurality of servers 106a - 106n. In some embodiments, application delivery system 190 may run on server farm 38 . In one embodiment, the server 106 running the application delivery system 190 may also store or serve application and data files. In other embodiments, a first set of one or more servers 106 may run the application delivery system 190 and other servers 106n may store or serve application and data files. In some embodiments, each application delivery system 190, application, and data files may reside or be located on different servers. In yet another embodiment, any portion of the application delivery system 190 may reside, run, stored, or distributed on the device 200 or a plurality of devices.

클라이언트(102)는 데이터 파일을 사용하거나 프로세싱하는 어플리케이션을 실행하기 위한 컴퓨팅 환경(15)을 포함할 수 있다. 네트워크(104, 104') 및 기기(200)를 통한 클라이언트(102)는 서버(106)로부터 어플리케이션 및 데이터 파일을 요청할 수 있다. 일 실시예에서, 기기(200)는 클라이언트(102)로부터 서버(106)로 요청을 전달할 수 있다. 예를 들어, 클라이언트(102)는 로컬로 저장되거나 액세스 가능한 어플리케이션 및 데이터 파일을 갖지 않을 수 있다. 요청에 응답하여, 어플리케이션 전달 시스템(190) 및/또는 서버(106)는 어플리케이션 및 데이터 파일을 클라이언트(102)에 전달할 수 있다. 예를 들어, 일 실시예에서, 서버(106)는 클라이언트(102) 상의 컴퓨팅 환경(15)에서 동작하도록 어플리케이션 스트림으로서 어플리케이션을 송신할 수 있다.The client 102 may include a computing environment 15 for executing applications that use or process data files. Client 102 via network 104 , 104 ′ and device 200 may request application and data files from server 106 . In one embodiment, device 200 may forward a request from client 102 to server 106 . For example, client 102 may not have locally stored or accessible application and data files. In response to the request, the application delivery system 190 and/or the server 106 may deliver the application and data files to the client 102 . For example, in one embodiment, the server 106 may transmit the application as an application stream to operate in the computing environment 15 on the client 102 .

일부 실시예에서, 어플리케이션 전달 시스템(190)은 XenApp® 또는 XenDesktop®과 같은 Citrix Systems, Inc.의 Citrix Workspace Suite™의 임의의 부분 및/또는 Microsoft Corporation에 의해 제조된 Microsoft® Windows Terminal Services 중 임의의 것을 포함한다. 일 실시예에서, 어플리케이션 전달 시스템(190)은 원격-디스플레이 프로토콜 또는 이와 다르게 원격-기반 또는 서버-기반 컴퓨팅을 통해 하나 이상의 어플리케이션을 클라이언트(102) 또는 사용자에게 전달할 수 있다. 다른 실시예에서, 어플리케이션 전달 시스템(190)은 어플리케이션의 스트리밍을 통해 하나 이상의 어플리케이션을 클라이언트 또는 사용자에게 전달할 수 있다.In some embodiments, application delivery system 190 is any part of Citrix Workspace Suite™ by Citrix Systems, Inc., such as XenApp® or XenDesktop®, and/or any of Microsoft® Windows Terminal Services manufactured by Microsoft Corporation. include that In one embodiment, the application delivery system 190 may deliver one or more applications to the client 102 or user via a remote-display protocol or otherwise remote-based or server-based computing. In another embodiment, the application delivery system 190 may deliver one or more applications to a client or a user through streaming of the application.

일 실시예에서, 어플리케이션 전달 시스템(190)은 어플리케이션 실행 방법에 대한 액세스 선택 및 어플리케이션의 전달을 제어 및 관리하기 위한 정책 엔진(195)을 포함한다. 일부 실시예에서, 정책 엔진(195)은 사용자 또는 클라이언트(102)가 액세스할 수 있는 하나 이상의 어플리케이션을 결정한다. 다른 실시예에서, 정책 엔진(195)은, 어플리케이션이 어떻게 사용자 또는 클라이언트(102)에게 전달되어야 하는지, 예를 들어 실행 방법을 결정한다. 일부 실시예에서, 어플리케이션 전달 시스템(190)은 로컬 실행을 위해 서버-기반 컴퓨팅, 어플리케이션을 로컬로 클라이언트(120)에 스트리밍 또는 전달하는 것과 같은 어플리케이션 실행 방법을 선택하기 위한 복수의 전달 기술을 제공한다.In one embodiment, the application delivery system 190 includes a policy engine 195 for controlling and managing the delivery of applications and selection of access to application execution methods. In some embodiments, policy engine 195 determines one or more applications that a user or client 102 may access. In another embodiment, the policy engine 195 determines how the application should be delivered to the user or client 102 , eg, how to run it. In some embodiments, the application delivery system 190 provides a plurality of delivery technologies for selecting an application execution method, such as server-based computing for local execution, streaming or delivering the application locally to the client 120 . .

일 실시예에서, 클라이언트(102)는 어플리케이션 프로그램의 실행을 요청하고, 서버(106)를 포함하는 어플리케이션 전달 시스템(190)은 어플리케이션 프로그램을 실행하는 방법을 선택한다. 일부 실시예에서, 서버(106)는 클라이언트(102)로부터 인증서를 수신한다. 다른 실시예에서, 서버(106)는 클라이언트(102)로부터 이용 가능한 어플리케이션의 목록에 대한 요청을 수신한다. 일 실시예에서, 인증서의 요청 또는 수신에 응답하여, 어플리케이션 전달 시스템(190)은 클라이언트(102)에 이용 가능한 복수의 어플리케이션 프로그램을 열거한다. 어플리케이션 전달 시스템(190)은 열거된 어플리케이션을 실행하라는 요청을 수신한다. 어플리케이션 전달 시스템(190)은 예를 들어, 정책 엔진(195)의 정책에 응답하여 열거된 어플리케이션을 실행하기 위한 미리 정해진 수의 방법 중 하나를 선택한다. 어플리케이션 전달 시스템(190)은 클라이언트(102)가 서버(106) 상에서 어플리케이션 프로그램의 실행에 의해 생성된 어플리케이션 출력 데이터를 수신할 수 있게 하는 어플리케이션의 실행 방법을 선택할 수 있다. 어플리케이션 전달 시스템(190)은 어플리케이션을 포함하는 복수의 어플리케이션 파일을 검색한 후에 로컬 머신(10)이 어플리케이션 프로그램을 로컬로 실행할 수 있게 하는 어플리케이션의 실행 방법을 선택할 수 있다. 또 다른 실시예에서, 어플리케이션 전달 시스템(190)은 어플리케이션을 네트워크(104)를 통해 클라이언트(102)로 스트리밍하기 위한 어플리케이션의 실행 방법을 선택할 수 있다.In one embodiment, the client 102 requests execution of the application program, and the application delivery system 190 including the server 106 selects a method for executing the application program. In some embodiments, server 106 receives a certificate from client 102 . In another embodiment, the server 106 receives a request from the client 102 for a list of available applications. In one embodiment, in response to requesting or receiving a certificate, application delivery system 190 enumerates a plurality of application programs available to client 102 . The application delivery system 190 receives a request to run the enumerated application. The application delivery system 190 selects one of a predetermined number of methods for executing the enumerated application, for example in response to a policy of the policy engine 195 . The application delivery system 190 may select an application execution method that enables the client 102 to receive application output data generated by the execution of the application program on the server 106 . After searching for a plurality of application files including applications, the application delivery system 190 may select an application execution method that enables the local machine 10 to locally execute an application program. In another embodiment, the application delivery system 190 may select an execution method of the application for streaming the application to the client 102 over the network 104 .

클라이언트(102)는 임의의 유형 및/또는 형태의 소프트웨어, 프로그램, 또는 임의의 유형 및/또는 형태의 웹 브라우저, 웹-기반 클라이언트, 클라이언트-서버 어플리케이션, 씬(thin)-클라이언트 컴퓨팅 클라이언트, ActiveX 컨트롤 또는 Java 애플릿과 같은 실행 가능 명령, 또는 클라이언트(102) 상에서 실행될 수 있는 임의의 다른 유형 및/또는 형태의 실행 가능 명령일 수 있는 어플리케이션을 실행, 동작 또는 다르게 제공할 수 있다. 일부 실시예에서, 어플리케이션은 서버(106) 상에서 클라이언트(102)를 대신하여 실행되는 서버-기반 또는 원격-기반 어플리케이션일 수 있다. 일 실시예에서, 서버(106)는 Ft. Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제조된 ICA(Independent Computing Architecture) 프로토콜 또는 Redmond, Washington의 Microsoft Corporation에 의해 제조된 RDP(Remote Desktop Protocol)와 같은 임의의 씬-클라이언트 또는 원격-디스플레이 프로토콜을 사용하여 클라이언트(102)에 출력을 표시할 수 있다. 어플리케이션은 임의의 유형의 프로토콜을 사용할 수 있으며, 예를 들어, 이는 HTTP 클라이언트, FTP 클라이언트, Oscar 클라이언트 또는 Telnet 클라이언트일 수 있다. 다른 실시예에서, 어플리케이션은 소프트 IP 전화와 같은 VoIP 통신과 관련된 임의의 유형의 소프트웨어를 포함한다. 다른 실시예에서, 어플리케이션은 비디오 및/또는 오디오 스트리밍을 위한 어플리케이션과 같은 실시간 데이터 통신과 관련된 임의의 어플리케이션을 포함한다.Client 102 may be any type and/or form of software, program, or web browser, web-based client, client-server application, thin-client computing client, ActiveX control of any type and/or form. or execute, operate, or otherwise provide an application that may be executable instructions, such as a Java applet, or any other type and/or form of executable instructions that may be executed on the client 102 . In some embodiments, the application may be a server-based or remote-based application that runs on behalf of the client 102 on the server 106 . In one embodiment, the server 106 is Ft. any thin-client or remote-display protocol, such as the Independent Computing Architecture (ICA) protocol manufactured by Citrix Systems, Inc. of Lauderdale, Florida or the Remote Desktop Protocol (RDP) manufactured by Microsoft Corporation of Redmond, Washington. can be used to display the output to the client 102 . The application may use any type of protocol, for example it may be an HTTP client, an FTP client, an Oscar client, or a Telnet client. In another embodiment, the application includes any type of software related to VoIP communication, such as a soft IP phone. In another embodiment, the application includes any application related to real-time data communication, such as an application for streaming video and/or audio.

일부 실시예에서, 서버(106) 또는 서버 팜(38)은 씬-클라이언트 컴퓨팅 또는 원격 디스플레이 프리젠테이션 어플리케이션을 제공하는 어플리케이션과 같은 하나 이상의 어플리케이션을 실행할 수 있다. 일 실시예에서, 서버(106) 또는 서버 팜(38)은 어플리케이션으로서 XenApp®또는 XenDesktop®과 같은 Citrix Systems, Inc.의 Citrix Workspace Suite™의 임의의 부분 및/또는 Microsoft Corporation에 의해 제조된 Microsoft®Windows Terminal Services 중 임의의 것을 실행한다. 일 실시예에서, 어플리케이션은 Fort Lauderdale, Florida의 Citrix Systems, Inc.에 의해 개발된 ICA 클라이언트이다. 다른 실시예에서, 어플리케이션은 Redmond, Washington의 Microsoft Corporation에 의해 개발된 RDP(Remote Desktop) 클라이언트를 포함한다. 또한, 서버(106)는 어플리케이션을 실행할 수 있으며, 이는 예를 들어, Redmond, Washington의 Microsoft Corporation에 의해 제조된 Microsoft Exchange와 같은 이메일 서비스를 제공하는 어플리케이션 서버, 웹 또는 인터넷 서버, 또는 데스크탑 공유 서버 또는 협업 서버일 수 있다. 일부 실시예에서, 임의의 어플리케이션은 Fort Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제공되는 GoToMeeting™, San Jose, California의 Cisco Systems, Inc.에 의해 제공되는 WebEx™ 또는 Redmond, Washington의 Microsoft Corporation에 의해 제공되는 Microsoft Office Live Meeting과 같은 임의의 유형의 호스팅된 서비스 또는 제품을 포함할 수 있다.In some embodiments, server 106 or server farm 38 may run one or more applications, such as applications that provide thin-client computing or remote display presentation applications. In one embodiment, server 106 or server farm 38 is any portion of Citrix Workspace Suite™ from Citrix Systems, Inc. such as XenApp® or XenDesktop® as an application and/or Microsoft® manufactured by Microsoft Corporation. Run any of Windows Terminal Services. In one embodiment, the application is an ICA client developed by Citrix Systems, Inc. of Fort Lauderdale, Florida. In another embodiment, the application comprises a Remote Desktop (RDP) client developed by Microsoft Corporation of Redmond, Washington. Server 106 may also run an application, which may be, for example, an application server providing email services, such as Microsoft Exchange manufactured by Microsoft Corporation of Redmond, Washington, a web or Internet server, or a desktop sharing server or It may be a collaboration server. In some embodiments, any applications are GoToMeeting™ provided by Citrix Systems, Inc. of Fort Lauderdale, Florida, WebEx™ provided by Cisco Systems, Inc. of San Jose, California, or Microsoft Corporation of Redmond, Washington. may include any type of hosted service or product, such as Microsoft Office Live Meeting provided by

여전히 도 1d를 참조하면, 네트워크 환경의 실시예는 모니터링 서버(106A)를 포함할 수 있다. 모니터링 서버(106A)는 임의의 유형 및 형태의 성능 모니터링 서비스(198)를 포함할 수 있다. 성능 모니터링 서비스(198)는 모니터링, 측정 및/또는 관리 소프트웨어 및/또는 데이터 수집, 집계, 분석, 관리 및 보고를 포함하는 하드웨어를 포함할 수 있다. 일 실시예에서, 성능 모니터링 서비스(198)는 하나 이상의 모니터링 에이전트(197)를 포함한다. 모니터링 에이전트(197)는 클라이언트(102), 서버(106) 또는 기기(200, 205)와 같은 디바이스 상에서 모니터링, 측정 및 데이터 수집 활동을 수행하기 위한 임의의 소프트웨어, 하드웨어 또는 이들의 조합을 포함한다. 일부 실시예에서, 모니터링 에이전트(197)는 Visual Basic 스크립트 또는 Javascript와 같은 임의의 유형 및 형태의 스크립트를 포함한다. 일 실시예에서, 모니터링 에이전트(197)는 디바이스의 임의의 어플리케이션 및/또는 사용자에게 투명하게 실행된다. 일부 실시예에서, 모니터링 에이전트(197)는 어플리케이션 또는 클라이언트(102)에 눈에 띄지 않게 설치 및 동작된다. 또 다른 실시예에서, 모니터링 에이전트(197)는 어플리케이션 또는 디바이스에 대한 어떠한 계측 없이 설치 및 동작된다.Still referring to FIG. 1D , an embodiment of a network environment may include a monitoring server 106A. Monitoring server 106A may include any type and form of performance monitoring service 198 . The performance monitoring service 198 may include monitoring, measurement and/or management software and/or hardware including data collection, aggregation, analysis, management and reporting. In one embodiment, the performance monitoring service 198 includes one or more monitoring agents 197 . Monitoring agent 197 includes any software, hardware, or combination thereof for performing monitoring, measurement, and data collection activities on a device such as client 102 , server 106 or instrument 200 , 205 . In some embodiments, the monitoring agent 197 includes any type and form of script, such as a Visual Basic script or Javascript. In one embodiment, the monitoring agent 197 runs transparently to any application and/or user of the device. In some embodiments, monitoring agent 197 is installed and operated inconspicuously to applications or clients 102 . In another embodiment, the monitoring agent 197 is installed and operated without any instrumentation on the application or device.

일부 실시예에서, 모니터링 에이전트(197)는 미리 정해진 빈도로 데이터를 모니터링, 측정 및 수집한다. 다른 실시예에서, 모니터링 에이전트(197)는 임의의 유형 및 형태의 이벤트의 검출에 기초하여 데이터를 모니터링, 측정 및 수집한다. 예를 들어, 모니터링 에이전트(197)는 웹 페이지에 대한 요청 또는 HTTP 응답의 수신을 탐지할 때 데이터를 수집할 수 있다. 다른 예에서, 모니터링 에이전트(197)는 마우스 클릭과 같은 임의의 사용자 입력 이벤트의 검출시에 데이터를 수집할 수 있다. 모니터링 에이전트(197)는 임의의 모니터링, 측정 또는 수집된 데이터를 모니터링 서비스(198)에 보고하거나 제공할 수 있다. 일 실시예에서, 모니터링 에이전트(197)는 스케줄 또는 미리 정해진 빈도에 따라 모니터링 서비스(198)에 정보를 송신한다. 다른 실시예에서, 모니터링 에이전트(197)는 이벤트의 검출시에 정보를 모니터링 서비스(198)로 송신한다.In some embodiments, the monitoring agent 197 monitors, measures, and collects data at a predetermined frequency. In other embodiments, monitoring agent 197 monitors, measures, and collects data based on detection of any type and form of event. For example, the monitoring agent 197 may collect data when it detects the receipt of a request for a web page or an HTTP response. In another example, monitoring agent 197 may collect data upon detection of any user input event, such as a mouse click. The monitoring agent 197 may report or provide any monitored, measured, or collected data to the monitoring service 198 . In one embodiment, the monitoring agent 197 sends information to the monitoring service 198 according to a schedule or predetermined frequency. In another embodiment, the monitoring agent 197 sends information to the monitoring service 198 upon detection of an event.

일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트(102), 서버(106), 서버 팜(38), 기기(200), 기기(205) 또는 네트워크 접속과 같은 임의의 네트워크 자원 또는 네트워크 인프라스트럭처 요소의 모니터링 및 성능 측정을 수행한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 TCP 또는 UDP 접속과 같은 임의의 전송 계층 접속의 모니터링 및 성능 측정을 수행한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 네트워크 대기 시간을 모니터링하고 측정한다. 또 하나의 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 대역폭 이용을 모니터링하고 측정한다.In some embodiments, monitoring service 198 and/or monitoring agent 197 may be any such as client 102 , server 106 , server farm 38 , device 200 , device 205 , or a network connection. Monitoring and performance measurement of network resources or network infrastructure elements of In one embodiment, monitoring service 198 and/or monitoring agent 197 performs monitoring and performance measurement of any transport layer connection, such as a TCP or UDP connection. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures network latency. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures bandwidth usage.

다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 최종-사용자 응답 시간을 모니터링하고 측정한다. 일부 실시예에서, 모니터링 서비스(198)는 어플리케이션의 모니터링 및 성능 측정을 수행한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션에 대한 임의의 세션 또는 접속의 모니터링 및 성능 측정을 수행한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 브라우저의 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 HTTP 기반 트랜잭션의 성능을 모니터링하고 측정한다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 VoIP(Voice over IP) 어플리케이션 또는 세션의 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 ICA 클라이언트 또는 RDP 클라이언트와 같은 원격 디스플레이 프로토콜 어플리케이션의 성능을 모니터링하고 측정한다. 또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 유형 및 형태의 스트리밍 미디어의 성능을 모니터링하고 측정한다. 또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 호스팅된 어플리케이션 또는 SaaS(Software-As-A-Service) 전달 모델의 성능을 모니터링하고 측정한다.In other embodiments, monitoring service 198 and/or monitoring agent 197 monitors and measures end-user response times. In some embodiments, monitoring service 198 performs monitoring and performance measurement of applications. In another embodiment, monitoring service 198 and/or monitoring agent 197 performs monitoring and performance measurement of any session or connection to an application. In one embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures the performance of the browser. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures the performance of HTTP-based transactions. In some embodiments, monitoring service 198 and/or monitoring agent 197 monitors and measures the performance of a Voice over IP (VoIP) application or session. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures the performance of remote display protocol applications, such as ICA clients or RDP clients. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures the performance of any type and form of streaming media. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures the performance of hosted applications or Software-As-A-Service (SaaS) delivery models.

일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션과 관련된 하나 이상의 트랜잭션, 요청 또는 응답의 모니터링 및 성능 측정을 수행한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 .NET 또는 J2EE 호출과 같은 어플리케이션 계층 스택의 임의의 부분을 모니터링하고 측정한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 데이터베이스 또는 SQL 트랜잭션을 모니터링하고 측정한다. 또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 방법, 기능 또는 API(application programming interface) 호출을 모니터링하고 측정한다.In some embodiments, monitoring service 198 and/or monitoring agent 197 performs monitoring and performance measurement of one or more transactions, requests, or responses related to the application. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures any portion of the application layer stack, such as any .NET or J2EE call. In one embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures database or SQL transactions. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures any method, function, or application programming interface (API) call.

일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 기기(200) 및/또는 기기(205)와 같은 하나 이상의 기기를 통해 서버(106)로부터 클라이언트로(102)의 어플리케이션 및/또는 데이터의 전달의 모니터링 및 성능 측정을 수행한다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 가상화된 어플리케이션의 전달 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 스트리밍 어플리케이션의 전달 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트(102)로의 데스크탑 어플리케이션의 전달 및/또는 클라이언트(102) 상의 데스크탑 어플리케이션의 실행의 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트/서버 어플리케이션의 성능을 모니터링하고 측정한다.In one embodiment, the monitoring service 198 and/or the monitoring agent 197 may provide applications and /or perform monitoring and performance measurement of the transfer of data. In some embodiments, monitoring service 198 and/or monitoring agent 197 monitors and measures the delivery performance of virtualized applications. In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures the delivery performance of streaming applications. In another embodiment, the monitoring service 198 and/or the monitoring agent 197 monitors and measures the performance of the delivery of the desktop application to the client 102 and/or the execution of the desktop application on the client 102 . In another embodiment, monitoring service 198 and/or monitoring agent 197 monitors and measures the performance of client/server applications.

일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 전달 시스템(190)에 대한 어플리케이션 성능 관리를 제공하도록 설계 및 구성된다. 예를 들어, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 Citrix Presentation Server를 통해 어플리케이션의 전달 성능을 모니터링, 측정 및 관리할 수 있다. 이 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 개별 ICA 세션을 모니터링한다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 및 네트워킹 성능뿐만 아니라 전체 및 세션 당 시스템 자원 사용량을 측정할 수 있다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 주어진 사용자 및/또는 사용자 세션에 대한 활성 서버를 식별할 수 있다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 전달 시스템(190)과 어플리케이션 및/또는 데이터베이스 서버 사이의 백-엔드 접속을 모니터링한다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자-세션 또는 ICA 세션 당 네트워크 대기 시간, 지연 및 볼륨을 측정할 수 있다.In one embodiment, monitoring service 198 and/or monitoring agent 197 is designed and configured to provide application performance management for application delivery system 190 . For example, the monitoring service 198 and/or the monitoring agent 197 may monitor, measure, and manage the delivery performance of the application through Citrix Presentation Server. In this example, monitoring service 198 and/or monitoring agent 197 monitors individual ICA sessions. Monitoring service 198 and/or monitoring agent 197 may measure application and networking performance, as well as overall and per-session system resource usage. Monitoring service 198 and/or monitoring agent 197 may identify active servers for a given user and/or user session. In some embodiments, monitoring service 198 and/or monitoring agent 197 monitors back-end connections between application delivery system 190 and application and/or database servers. Monitoring service 198 and/or monitoring agent 197 may measure network latency, latency, and volume per user-session or ICA session.

일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 총 메모리 사용량, 사용자 세션 당 및/또는 프로세스 당과 같은 어플리케이션 전달 시스템(190)에 대한 메모리 사용량을 측정하고 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 총 CPU 사용량, 사용자 세션 당 및/또는 프로세스 당과 같은 어플리케이션 전달 시스템(190)의 CPU 사용량을 측정하고 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션, 서버(106), 또는 Citrix Presentation Server와 같은 어플리케이션 전달 시스템(190)에 로그-인하는 데 필요한 시간을 측정하고 모니터링한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자가 어플리케이션, 서버(106) 또는 어플리케이션 전달 시스템(190)에 로그인한 기간을 측정하고 모니터링한다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션, 서버(106) 또는 어플리케이션 전달 시스템(190) 세션에 대한 활성 및 비활성 세션 카운트를 측정하고 모니터링한다. 또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자 세션 대기 시간을 측정 및 모니터링한다.In some embodiments, monitoring service 198 and/or monitoring agent 197 measures and monitors memory usage for application delivery system 190, such as total memory usage, per user session and/or per process. In other embodiments, monitoring service 198 and/or monitoring agent 197 measures and monitors CPU usage of application delivery system 190, such as total CPU usage, per user session and/or per process. In another embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors the time required to log in to an application, server 106, or application delivery system 190, such as Citrix Presentation Server. do. In one embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors how long a user has logged into an application, server 106 or application delivery system 190 . In some embodiments, monitoring service 198 and/or monitoring agent 197 measures and monitors active and inactive session counts for application, server 106, or application delivery system 190 sessions. In another embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors user session latency.

또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 유형 및 형태의 서버 메트릭(metric)을 측정 및 모니터링한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 시스템 메모리, CPU 사용량 및 디스크 저장과 관련된 메트릭을 측정 및 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 초 당 페이지 결함과 같은 페이지 결함과 관련된 메트릭을 측정 및 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 왕복 시간 메트릭을 측정 및 모니터링한다. 또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 충돌, 오류 및/또는 정지와 관련된 메트릭을 측정 및 모니터링한다.In another embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors any type and form of server metrics. In one embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors metrics related to system memory, CPU usage, and disk storage. In another embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors metrics related to page faults, such as page faults per second. In another embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors round trip time metrics. In another embodiment, monitoring service 198 and/or monitoring agent 197 measures and monitors metrics related to application crashes, errors, and/or hangs.

일부 실시예에서, 모니터링 서비스(198) 및 모니터링 에이전트(197)는 Ft. Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제조된 EdgeSight로 지칭되는 임의의 제품 실시예를 포함한다. 다른 실시예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 Palo Alto, California의 Symphoniq Corporation에 의해 제조된 True View 제품군으로 지칭되는 제품 실시예의 임의의 부분을 포함한다. 일 실시예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 San Francisco, California의 TeaLeaf Technology Inc.에 의해 제조된 TeaLeaf CX 제품군으로 지칭되는 제품 실시예의 임의의 부분을 포함한다. 다른 실시예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 Houston, Texas의 BMC Software, Inc.에 의해 제조된 BMC Performance Manager and Patrol 제품과 같은 비즈니스 서비스 관리 제품의 임의의 부분을 포함한다.In some embodiments, monitoring service 198 and monitoring agent 197 may include Ft. Any product example referred to as EdgeSight manufactured by Citrix Systems, Inc. of Lauderdale, Florida is included. In other embodiments, performance monitoring service 198 and/or monitoring agent 197 comprises any portion of a product embodiment referred to as the True View suite manufactured by Symphoniq Corporation of Palo Alto, California. In one embodiment, performance monitoring service 198 and/or monitoring agent 197 comprises any portion of a product embodiment referred to as the TeaLeaf CX family manufactured by TeaLeaf Technology Inc. of San Francisco, California. In another embodiment, the performance monitoring service 198 and/or the monitoring agent 197 may manage any part of a business service management product, such as the BMC Performance Manager and Patrol product manufactured by BMC Software, Inc. of Houston, Texas. include

클라이언트(102), 서버(106) 및 기기(200)는 임의의 유형 및 형태의 네트워크 상에서 통신할 수 있고 본원에 설명되는 동작을 수행할 수 있는 컴퓨터, 네트워크 디바이스 또는 기기와 같은 임의의 유형 및 형태의 컴퓨팅 디바이스로서 배치될 수 있고/있거나 그 상에서 실행될 수 있다. 도 1e 및 도 1f는 클라이언트(102), 서버(106) 또는 기기(200)의 실시예를 실시하는 데 유용한 컴퓨팅 디바이스(100)의 블록도를 도시한다. 도 1e 및 도 1f에 나타낸 바와 같이, 각각의 컴퓨팅 디바이스(100)는 중앙 처리 장치(101) 및 메인 메모리 유닛(122)을 포함한다. 도 1e에 나타낸 바와 같이, 컴퓨팅 디바이스(100)는 시각 디스플레이 디바이스(124), 키보드(126) 및/또는 마우스와 같은 포인팅 디바이스(127)를 포함할 수 있다. 각각의 컴퓨팅 디바이스(100)는 또한 하나 이상의 입력/출력 디바이스(130a-130b)(일반적으로 참조 번호 130을 사용하여 참조됨) 및 중앙 처리 장치(101)와 통신하는 캐시 메모리(140)와 같은 추가적인 선택적 요소를 포함할 수 있다.Client 102 , server 106 , and appliance 200 can communicate over any type and form of network and can perform the operations described herein of any type and form, such as a computer, network device, or appliance. may be deployed as and/or executed on a computing device of 1E and 1F show block diagrams of a computing device 100 useful for practicing embodiments of a client 102 , a server 106 , or an appliance 200 . 1E and 1F , each computing device 100 includes a central processing unit 101 and a main memory unit 122 . As shown in FIG. 1E , computing device 100 may include a visual display device 124 , a keyboard 126 , and/or a pointing device 127 such as a mouse. Each computing device 100 also includes one or more input/output devices 130a - 130b (referred to generally using reference numeral 130 ) and additional, such as cache memory 140 in communication with central processing unit 101 . It may contain optional elements.

중앙 처리 장치(101)는 메인 메모리 유닛(122)으로부터 페칭(fetching)된 명령에 응답하고 이를 프로세싱하는 임의의 로직 회로이다. 많은 실시예에서, 중앙 처리 장치(101)는 Mountain View, California의 Intel Corporation에 의해 제조된 것; Schaumburg, Illinois의 Motorola Corporation에 의해 제조된 것; Santa Clara, California의 Transmeta Corporation에 의해 제조된 것; White Plains, New York의 International Business Machines에 의해 제조된 RS/6000 프로세서; 또는 Sunnyvale, California의 Advanced Micro Devices에 의해 제조된 것과 같은 마이크로프로세서 유닛에 의해 제공된다. 컴퓨팅 디바이스(100)는 이들 프로세서 중 임의의 것 또는 본원에 설명되는 바와 같이 동작할 수 있는 임의의 다른 프로세서에 기초할 수 있다.The central processing unit 101 is any logic circuit that responds to and processes commands fetched from the main memory unit 122 . In many embodiments, central processing unit 101 is manufactured by Intel Corporation of Mountain View, California; manufactured by Motorola Corporation of Schaumburg, Illinois; manufactured by Transmeta Corporation of Santa Clara, California; RS/6000 processor manufactured by International Business Machines of White Plains, New York; or by a microprocessor unit such as manufactured by Advanced Micro Devices of Sunnyvale, California. Computing device 100 may be based on any of these processors or any other processor capable of operating as described herein.

메인 메모리 유닛(122)은 SRAM(Static Random Access Memory), Burst SRAM 또는 SynchBurst SRAM(BSRAM), DRAM(Dynamic random access memory), FPM DRAM(Fast Page Mode DRAM), EDRAM(Enhanced DRAM), EDO RAM(Extended Data Output RAM), EDO DRAM(Extended Data Output DRAM), BEDO DRAM(Burst Extended Data Output DRAM), EDRAM(Enhanced DRAM), SDRAM(synchronous DRAM), JEDEC SRAM, PC100 SDRAM, DDR SDRAM(Double Data Rate SDRAM), ESDRAM(Enhanced SDRAM), SLDRAM(SyncLink DRAM), DRDRAM(Direct Rambus DRAM) 또는 FRAM(Ferroelectric RAM)과 같이 데이터를 저장할 수 있고 임의의 저장 위치가 마이크로프로세서(101)에 의해 직접 액세스될 수 있게 하는 하나 이상의 메모리 칩일 수 있다. 메인 메모리(122)는 상술한 메모리 칩 중 임의의 것 또는 본원에 설명되는 바와 같이 동작할 수 있는 임의의 다른 이용 가능한 메모리 칩에 기초할 수 있다. 도 1e에 나타낸 실시예에서, 프로세서(101)는 시스템 버스(150)를 통해 메인 메모리(122)와 통신한다(아래에 보다 상세히 설명됨). 도 1f는 프로세서(101)가 메모리 포트(103)를 통해 메인 메모리(122)와 직접 통신하는 컴퓨팅 디바이스(100)의 실시예를 도시한다. 예를 들어, 도 1f에서 메인 메모리(122)는 DRDRAM일 수 있다.Main memory unit 122 is SRAM (Static Random Access Memory), Burst SRAM or SynchBurst SRAM (BSRAM), Dynamic Random Access Memory (DRAM), FPM DRAM (Fast Page Mode DRAM), EDRAM (Enhanced DRAM), EDO RAM ( Extended Data Output RAM), EDO DRAM (Extended Data Output DRAM), BEDO DRAM (Burst Extended Data Output DRAM), EDRAM (Enhanced DRAM), SDRAM (synchronous DRAM), JEDEC SRAM, PC100 SDRAM, DDR SDRAM (Double Data Rate SDRAM) ), ESDRAM (Enhanced SDRAM), SLDRAM (SyncLink DRAM), DRDRAM (Direct Rambus DRAM), or FRAM (Ferroelectric RAM) to store data and allow any storage location to be directly accessed by the microprocessor 101 . may be one or more memory chips. Main memory 122 may be based on any of the memory chips described above or any other available memory chip capable of operating as described herein. In the embodiment shown in FIG. 1E , the processor 101 communicates with the main memory 122 via the system bus 150 (described in more detail below). 1F illustrates an embodiment of computing device 100 in which processor 101 communicates directly with main memory 122 via memory port 103 . For example, the main memory 122 in FIG. 1F may be a DRDRAM.

도 1f는 메인 프로세서(101)가 때로는 후측 버스라고도 칭해지는 2차 버스를 통해 캐시 메모리(140)와 직접 통신하는 실시예를 도시한다. 다른 실시예에서, 메인 프로세서(101)는 시스템 버스(150)를 사용하여 캐시 메모리(140)와 통신한다. 캐시 메모리(140)는 통상적으로 메인 메모리 유닛(122)보다 빠른 응답 시간을 가지며 통상적으로 SRAM, BSRAM 또는 EDRAM에 의해 제공된다. 도 1f에 나타낸 실시예에서, 프로세서(101)는 로컬 시스템 버스(150)를 통해 다양한 I/O 디바이스(130)와 통신한다. VESA VL 버스, ISA 버스, EISA 버스, MCA(MicroChannel Architecture) 버스, PCI 버스, PCI-X 버스, PCI-Express 버스 또는 NuBus를 포함하는 다양한 버스가 중앙 처리 장치(101)를 임의의 I/O 디바이스(130)에 접속하는 데 사용될 수 있다. I/O 디바이스(130)가 비디오 디스플레이(124)인 실시예에서, 프로세서(101)는 디스플레이(124)와 통신하기 위해 AGP(Advanced Graphics Port)를 사용할 수 있다. 도 1f는 메인 프로세서(101)가 하이퍼트랜스포트(HyperTransport), 래피드(Rapid) I/O 또는 인피니밴드(InfiniBand)를 통해 I/O 디바이스(130b)와 직접 통신하는 컴퓨팅 디바이스(100)의 실시예를 도시한다. 도 If는 또한 로컬 버스와 직접 통신이 혼합되는 실시예를 도시하며: 프로세서(101)는 I/O 디바이스(130a)와 직접 통신하면서 로컬 인터커넥트 버스를 사용하여 I/O 디바이스(130b)와 통신한다.1F shows an embodiment in which the main processor 101 communicates directly with the cache memory 140 via a secondary bus, sometimes also referred to as a backside bus. In another embodiment, main processor 101 communicates with cache memory 140 using system bus 150 . Cache memory 140 typically has a faster response time than main memory unit 122 and is typically provided by SRAM, BSRAM, or EDRAM. In the embodiment shown in FIG. 1F , processor 101 communicates with various I/O devices 130 via local system bus 150 . Various buses, including VESA VL bus, ISA bus, EISA bus, MicroChannel Architecture (MCA) bus, PCI bus, PCI-X bus, PCI-Express bus, or NuBus, connect the central processing unit 101 to any I/O device. 130 may be used. In embodiments where the I/O device 130 is a video display 124 , the processor 101 may use an Advanced Graphics Port (AGP) to communicate with the display 124 . 1F illustrates an embodiment of a computing device 100 in which main processor 101 communicates directly with I/O device 130b via HyperTransport, Rapid I/O, or InfiniBand. shows Figure If also shows an embodiment in which direct communication with a local bus is mixed: processor 101 communicates directly with I/O device 130a while using a local interconnect bus to communicate with I/O device 130b. .

컴퓨팅 디바이스(100)는 3.5 인치, 5.25 인치 디스크 또는 ZIP 디스크와 같은 플로피 디스크를 수용하기 위한 플로피 디스크 드라이브, CD-ROM 드라이브, CD-R/RW 드라이브, DVD-ROM 드라이브, 다양한 포맷의 테이프 드라이브, USB 디바이스, 하드-드라이브 또는 임의의 클라이언트 에이전트(120) 또는 그 일부와 같은 소프트웨어 및 프로그램을 설치하기에 적절한 임의의 다른 디바이스와 같은 임의의 적절한 설치 디바이스(116)를 지원할 수 있다. 컴퓨팅 디바이스(100)는 운영 체제 및 다른 관련 소프트웨어를 저장하고 클라이언트 에이전트(120)와 관련된 임의의 프로그램과 같은 어플리케이션 소프트웨어 프로그램을 저장하기 위한 하나 이상의 하드 디스크 드라이브 또는 독립 디스크의 리던던트 어레이와 같은 저장 디바이스(128)를 추가로 포함할 수 있다. 선택적으로, 임의의 설치 디바이스(116)는 또한 저장 디바이스(128)로서 사용될 수 있다. 또한, 운영 체제 및 소프트웨어는 부팅 가능한 매체, 예를 들어 KNOPPIX®와 같은 부팅 가능한 CD, knoppix.net에서 GNU/Linux 배포판으로 이용가능한 GNU/Linux용 부팅 가능 CD로부터 실행될 수 있다.Computing device 100 may include a floppy disk drive, a CD-ROM drive, a CD-R/RW drive, a DVD-ROM drive, a tape drive of various formats, for accommodating a floppy disk such as a 3.5 inch, 5.25 inch disk or a ZIP disk; Any suitable installation device 116 may be supported, such as a USB device, a hard-drive, or any other device suitable for installing software and programs, such as any client agent 120 or portions thereof. Computing device 100 is a storage device such as one or more hard disk drives or redundant arrays of independent disks for storing operating systems and other related software and for storing application software programs such as any programs associated with client agent 120 ( 128) may be further included. Optionally, any installation device 116 may also be used as the storage device 128 . The operating system and software can also be run from bootable media, for example a bootable CD such as KNOPPIX®, a bootable CD for GNU/Linux available as a GNU/Linux distribution at knoppix.net.

또한, 컴퓨팅 디바이스(100)는 표준 전화선, LAN 또는 WAN 링크(예를 들어, 802.11, T1, T3, 56kb, X.25), 광대역 접속(예를 들어, ISDN, 프레임 릴레이(Frame Relay), ATM), 무선 접속 또는 상술한 것의 임의의 것 또는 전부의 일부 조합에 제한되지는 않지만 이를 포함하는 다양한 접속을 통해 LAN(Local Area Network), WAN(Wide Area Network) 또는 인터넷에 인터페이싱하기 위한 네트워크 인터페이스(118)를 포함할 수 있다. 네트워크 인터페이스(118)는 내장형 네트워크 어댑터, 네트워크 인터페이스 카드, PCMCIA 네트워크 카드, 카드 버스 네트워크 어댑터, 무선 네트워크 어댑터, USB 네트워크 어댑터, 모뎀 또는 컴퓨팅 디바이스(100)를 본원에 설명되는 동작을 수행하고 통신할 수 있는 임의의 유형의 네트워크에 인터페이싱하기에 적절한 임의의 다른 디바이스를 포함할 수 있다.In addition, the computing device 100 may include a standard telephone line, LAN or WAN link (eg, 802.11, T1, T3, 56kb, X.25), broadband access (eg, ISDN, Frame Relay), ATM ), a wireless connection, or a network interface for interfacing to the Internet (Local Area Network), Wide Area Network (WAN) or the Internet via various connections including, but not limited to, some combination of any or all of the foregoing. 118) may be included. Network interface 118 may be capable of performing the operations described herein and communicating with an embedded network adapter, network interface card, PCMCIA network card, Card Bus network adapter, wireless network adapter, USB network adapter, modem, or computing device 100 . It may include any other device suitable for interfacing to any type of network.

광범위하게 다양한 I/O 디바이스(130a-130n)가 컴퓨팅 디바이스(100)에 존재할 수 있다. 입력 디바이스는 키보드, 마우스, 트랙패드, 트랙볼, 마이크로폰 및 드로잉 태블릿(drawing tablet)을 포함한다. 출력 디바이스는 비디오 디스플레이, 스피커, 잉크젯 프린터, 레이저 프린터 및 염료-승화(dye-sublimation) 프린터를 포함한다. I/O 디바이스(130)는 도 1e에 나타낸 바와 같이 I/O 제어기(123)에 의해 제어될 수 있다. I/O 제어기(123)는 키보드(126) 및 포인팅 디바이스(127), 예를 들어, 마우스 또는 광학 펜과 같은 하나 이상의 I/O 디바이스를 제어할 수 있다. 또한, I/O 디바이스는 또한 컴퓨팅 디바이스(100)를 위한 저장소(128) 및/또는 설치 매체(116)를 제공할 수 있다. 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 Los Alamitos, California의 Twintech Industry, Inc.에 의해 제조된 디바이스의 USB Flash Drive line과 같은 휴대용 USB 저장 디바이스를 수용하도록 USB 접속을 제공할 수 있다.A wide variety of I/O devices 130a - 130n may be present in computing device 100 . Input devices include keyboards, mice, trackpads, trackballs, microphones, and drawing tablets. Output devices include video displays, speakers, inkjet printers, laser printers, and dye-sublimation printers. I/O device 130 may be controlled by I/O controller 123 as shown in FIG. 1E . I/O controller 123 may control one or more I/O devices, such as keyboard 126 and pointing device 127 , for example, a mouse or optical pen. In addition, the I/O device may also provide storage 128 and/or installation media 116 for the computing device 100 . In another embodiment, computing device 100 may provide a USB connection to accommodate a portable USB storage device, such as a USB Flash Drive line of devices manufactured by Twintech Industry, Inc. of Los Alamitos, California.

일부 실시예에서, 컴퓨팅 디바이스(100)는 각각 동일하거나 상이한 유형 및/또는 형태일 수 있는 복수의 디스플레이 디바이스(124a-124n)를 포함하거나 이에 접속될 수 있다. 이와 같이, 임의의 I/O 디바이스(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)를 갖도록 구성될 수 있는 다양한 방식 및 실시예를 인식하고 이해할 것이다.In some embodiments, computing device 100 may include or be connected to a plurality of display devices 124a - 124n , each of which may be the same or a different type and/or form. As such, any of the I/O devices 130a - 130n and/or the I/O controller 123 supports, enables, and uses for the connection and use of the plurality of display devices 124a - 124n by the computing device 100 . It may include any type and/or form of suitable hardware, software, or combination of hardware and software for enabling or providing. For example, computing device 100 may include any type and/or form of video adapters, video cards, drivers, and/or libraries for interfacing, communicating, connecting, or otherwise using display devices 124a - 124n. can In one embodiment, the video adapter may include a plurality of connectors for interfacing to a plurality of display devices 124a-124n. In another embodiment, computing device 100 may include a plurality of video adapters, each video adapter connected to one or more display devices 124a - 124n . In some embodiments, any portion of the operating system of computing device 100 may be configured to use multiple displays 124a - 124n . In other embodiments, one or more display devices 124a - 124n may be provided by one or more other computing devices, such as, for example, computing devices 100a and 100b connected to computing device 100 via a network. . These embodiments may include any type of software designed and configured to use another computer's display device as the second display device 124a for the computing device 100 . Those skilled in the art will recognize and understand the various ways and embodiments in which computing device 100 may be configured to have a plurality of display devices 124a - 124n .

추가의 실시예에서, I/O 디바이스(130)는 USB 버스, 애플 데스크탑(Apple Desktop) 버스, RS-232 직렬 연결, SCSI 버스, FireWire 버스, FireWire 800 버스, 이더넷(Ethernet) 버스, 애플토크(AppleTalk) 버스, 기가비트 이더넷(Gigabit Ethernet) 버스, 비동기 전송 모드(Asynchronous Transfer Mode) 버스, HIPPI 버스, Super HIPPI 버스, SerialPlus 버스, SCI/LAMP 버스, FibreChannel 버스 또는 Serial Attached 소형 컴퓨터 시스템 인터페이스 버스와 같이, 외부 통신 버스와 시스템 버스(150) 사이의 브릿지(170)일 수 있다.In a further embodiment, I/O device 130 is a USB bus, Apple Desktop bus, RS-232 serial connection, SCSI bus, FireWire bus, FireWire 800 bus, Ethernet bus, AppleTalk ( AppleTalk) bus, Gigabit Ethernet bus, Asynchronous Transfer Mode bus, HIPPI bus, Super HIPPI bus, SerialPlus bus, SCI/LAMP bus, FiberChannel bus or Serial Attached small computer system interface bus; It may be a bridge 170 between the external communication bus and the system bus 150 .

도 1e 및 도 1f에 도시된 종류의 컴퓨팅 디바이스(100)는 시스템 자원에 대한 작업 및 액세스의 스케줄링을 제어하는 운영 체제의 제어 하에서 통상적으로 동작한다. 컴퓨팅 디바이스(100)는 임의의 버전의 Microsoft® Windows 운영 체제, Unix 및 Linux 운영 체제의 다른 릴리스, 임의의 버전의 Macintosh 컴퓨터용 Mac OS®, 임의의 내장형 운영 체제, 임의의 실시간 운영 체제, 임의의 개방 소스 운영 체제, 임의의 독점 운영 체제, 모바일 컴퓨팅 디바이스용 임의의 운영 체제 또는 컴퓨팅 디바이스에서 실행되고 본원에 설명되는 동작을 수행할 수 있는 임의의 다른 운영 체제와 같은 임의의 운영 체제를 실행할 수 있다. 통상적인 운영 체제는 그 중에서, Redmond, Washington의 Microsoft Corporation에 의해 모두 제조된 WINDOWS 3.x, WINDOWS 95, WINDOWS 98, WINDOWS 2000, WINDOWS NT 3.51, WINDOWS NT 4.0, WINDOWS CE 및 WINDOWS XP; Cupertino, California의 Apple Computer에 의해 제조된 MacOS; Armonk, New York의 International Business Machines에 의해 제조된 OS/2; 및 Salt Lake City, Utah의 Caldera Corp.에 의해 배포된 무료 이용 가능 운영 체제인 Linux, 또는 임의의 유형 및/또는 형태의 UNIX 운영 체제를 포함한다.A computing device 100 of the kind shown in FIGS. 1E and 1F typically operates under the control of an operating system that controls scheduling of tasks and access to system resources. Computing device 100 can be any version of the Microsoft® Windows operating system, any other release of Unix and Linux operating systems, any version of Mac OS® for Macintosh computers, any embedded operating system, any real-time operating system, any may run any operating system, such as an open source operating system, any proprietary operating system, any operating system for mobile computing devices, or any other operating system that runs on a computing device and is capable of performing the operations described herein. . Common operating systems include WINDOWS 3.x, WINDOWS 95, WINDOWS 98, WINDOWS 2000, WINDOWS NT 3.51, WINDOWS NT 4.0, WINDOWS CE and WINDOWS XP, all manufactured by Microsoft Corporation of Redmond, Washington, among others; MacOS manufactured by Apple Computer of Cupertino, California; OS/2 manufactured by International Business Machines of Armonk, New York; and Linux, a freely available operating system distributed by Caldera Corp. of Salt Lake City, Utah, or a UNIX operating system of any type and/or form.

다른 실시예에서, 컴퓨팅 디바이스(100)는 상이한 프로세서, 운영 체제 및 디바이스와 일치하는 입력 디바이스를 가질 수 있다. 예를 들어, 일 실시예에서, 컴퓨터(100)는 Palm, Inc.에 의해 제조된 Treo 180, 270, 1060, 600 또는 650 스마트 폰이다. 이 실시예에서, Treo 스마트 폰은 PalmOS 운영 체제의 제어 하에 동작되며 스타일러스 입력 디바이스뿐만 아니라 5-방향 내비게이터 디바이스를 포함한다. 또한, 컴퓨팅 디바이스(100)는 통신이 가능하고 본원에 설명되는 동작을 수행하기에 충분한 프로세스 능력 및 메모리 용량을 갖는 임의의 워크스테이션, 데스크탑 컴퓨터, 랩탑 또는 노트북 컴퓨터, 서버, 핸드헬드 컴퓨터, 모바일 전화, 임의의 다른 컴퓨터, 또는 다른 형태의 컴퓨팅 또는 원격 통신 디바이스일 수 있다.In other embodiments, computing device 100 may have different processors, operating systems, and input devices that match the device. For example, in one embodiment, computer 100 is a Treo 180, 270, 1060, 600 or 650 smart phone manufactured by Palm, Inc. In this embodiment, the Treo smartphone is operated under the control of the PalmOS operating system and includes a stylus input device as well as a 5-way navigator device. In addition, computing device 100 may be any workstation, desktop computer, laptop or notebook computer, server, handheld computer, mobile phone, capable of communication and having sufficient processing capability and memory capacity to perform the operations described herein. , any other computer, or other form of computing or telecommunications device.

도 1g에 나타낸 바와 같이, 컴퓨팅 디바이스(100)는 복수의 프로세서를 포함할 수 있고, 명령의 동시 실행 또는 한 피스보다 많은 데이터에 대한 하나의 명령의 동시 실행을 위한 기능을 제공할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(100)는 하나 이상의 코어를 갖는 병렬 프로세서를 포함할 수 있다. 이들 실시예 중 하나에서, 컴퓨팅 디바이스(100)는 복수의 프로세서 및/또는 복수의 프로세서 코어를 갖는 공유 메모리 병렬 디바이스이며, 단일 글로벌 주소 공간으로서 모든 가용 메모리에 액세스한다. 이들 실시예들 중 다른 실시예에서, 컴퓨팅 디바이스(100)는 각각 로컬 메모리에만 액세스하는 복수의 프로세서를 갖는 분산 메모리 병렬 디바이스이다. 이들 실시예 중 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 공유되는 일부 메모리 및 특정 프로세서 또는 프로세서의 서브세트에 의해서만 액세스될 수 있는 일부 메모리를 모두 갖는다. 이들 실시예 중 또 다른 실시예에서, 멀티-코어 마이크로 프로세서와 같은 컴퓨팅 디바이스(100)는 둘 이상의 독립 프로세서를 단일 패키지, 종종 단일 집적 회로(IC)로 조합한다. 이들 실시예 중 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 CELL BROADBAND ENGINE 아키텍처를 가지며 전력 프로세서 요소 및 복수의 시너지 프로세싱 요소, 요소 인터커넥트 버스로 지칭될 수 있는 내부 고속 버스에 의해 함께 링크되는 전력 프로세서 요소 및 복수의 시너지 프로세싱 요소를 포함하는 칩을 포함한다.As shown in FIG. 1G , computing device 100 may include a plurality of processors and may provide functionality for concurrent execution of instructions or concurrent execution of one instruction for more than one piece of data. In some embodiments, computing device 100 may include a parallel processor with one or more cores. In one of these embodiments, computing device 100 is a shared memory parallel device having multiple processors and/or multiple processor cores, accessing all available memory as a single global address space. In another of these embodiments, computing device 100 is a distributed memory parallel device having multiple processors each accessing only local memory. In another of these embodiments, computing device 100 has both some memory shared and some memory that can only be accessed by a particular processor or subset of processors. In another of these embodiments, computing device 100, such as a multi-core microprocessor, combines two or more independent processors into a single package, often a single integrated circuit (IC). In yet another of these embodiments, the computing device 100 has a CELL BROADBAND ENGINE architecture and is a power processor that is linked together by a power processor element and a plurality of synergistic processing elements, an internal high-speed bus, which may be referred to as an element interconnect bus. a chip comprising an element and a plurality of synergistic processing elements.

일부 실시예에서, 프로세서는 복수의 데이터(SIMD) 상에서 단일 명령을 동시에 실행하기 위한 기능을 제공한다. 다른 실시예에서, 프로세서는 복수의 데이터(MIMD) 상에서 복수의 명령을 동시에 실행하기 위한 기능을 제공한다. 또 다른 실시예에서, 프로세서는 단일 디바이스에서 SIMD 및 MIMD 코어의 임의의 조합을 사용할 수 있다.In some embodiments, the processor provides functionality for concurrently executing a single instruction on a plurality of data SIMDs. In another embodiment, the processor provides a function for concurrently executing a plurality of instructions on a plurality of data MIMD. In another embodiment, the processor may use any combination of SIMD and MIMD cores in a single device.

일부 실시예에서, 컴퓨팅 디바이스(100)는 그래픽 프로세싱 유닛을 포함할 수 있다. 도 1h에 나타낸 이들 실시예 중 하나에서, 컴퓨팅 디바이스(100)는 적어도 하나의 중앙 처리 장치(101) 및 적어도 하나의 그래픽 프로세싱 유닛(101')을 포함한다. 이들 실시예 중 다른 실시예에서, 컴퓨팅 디바이스(100)는 적어도 하나의 병렬 프로세싱 유닛 및 적어도 하나의 그래픽 프로세싱 유닛(101')을 포함한다. 이들 실시예 중 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 임의의 유형의 복수의 프로세싱 유닛을 포함하고, 복수의 프로세싱 유닛 중 하나는 그래픽 프로세싱 유닛(101')을 포함한다.In some embodiments, computing device 100 may include a graphics processing unit. In one of these embodiments shown in FIG. 1H , the computing device 100 includes at least one central processing unit 101 and at least one graphics processing unit 101 ′. In another of these embodiments, computing device 100 includes at least one parallel processing unit and at least one graphics processing unit 101 ′. In another of these embodiments, computing device 100 includes a plurality of processing units of any type, one of the plurality of processing units including graphics processing unit 101 ′.

일부 실시예에서, 제1 컴퓨팅 디바이스(100a)는 클라이언트 컴퓨팅 디바이스(100b)의 사용자를 대신하여 어플리케이션을 실행한다. 다른 실시예에서, 컴퓨팅 디바이스(100a)는 가상 머신을 실행하며, 가상 머신은 어플리케이션이 사용자 또는 클라이언트 컴퓨팅 디바이스(100b)를 대신하여 실행하는 실행 세션을 제공한다. 이들 실시예 중 하나에서, 실행 세션은 호스팅된 데스크탑 세션이다. 이들 실시예들 중 다른 실시예에서, 컴퓨팅 디바이스(100)는 단말 서비스 세션을 실행한다. 단말 서비스 세션은 호스팅된 데스크탑 환경을 제공할 수 있다. 이들 실시예들 중 또 다른 실시예에서, 실행 세션은 컴퓨팅 환경에 대한 액세스를 제공하며, 컴퓨팅 환경은 어플리케이션, 복수의 어플리케이션, 데스크탑 어플리케이션 및 하나 이상의 어플리케이션이 실행될 수 있는 데스크탑 세션 중 하나 이상을 포함할 수 있다.In some embodiments, first computing device 100a executes an application on behalf of a user of client computing device 100b . In another embodiment, computing device 100a executes a virtual machine, which provides an execution session in which an application executes on behalf of a user or client computing device 100b. In one of these embodiments, the launch session is a hosted desktop session. In another of these embodiments, the computing device 100 executes a terminal service session. The terminal service session may provide a hosted desktop environment. In yet another of these embodiments, the execution session provides access to a computing environment, the computing environment comprising one or more of an application, a plurality of applications, a desktop application, and a desktop session in which the one or more applications may be executed. can

B. 기기 아키텍처B. Instrument Architecture

도 2a는 기기(200)의 예시적인 실시예를 나타낸다. 도 2a의 기기(200)는 단지 예시의 방식으로 제공되며 제한적인 것으로 의도되지 않는다. 도 2에 나타낸 바와 같이, 기기(200)는 하드웨어 계층(206) 및 사용자 공간(202)과 커널 공간(204)으로 분할된 소프트웨어 계층을 포함한다.2A shows an exemplary embodiment of a device 200 . The device 200 of FIG. 2A is provided by way of example only and is not intended to be limiting. As shown in FIG. 2 , the device 200 includes a hardware layer 206 and a software layer divided into a user space 202 and a kernel space 204 .

하드웨어 계층(206)은 커널 공간(204) 및 사용자 공간(202) 내의 프로그램 및 서비스가 실행되는 하드웨어 요소를 제공한다. 하드웨어 계층(206)은 또한 커널 공간(204) 및 사용자 공간(202) 내의 프로그램 및 서비스가 기기(200)에 대해 내부적 및 외부적으로 모두 데이터를 통신할 수 있게 하는 구조 및 요소를 제공한다. 도 2에 나타낸 바와 같이, 하드웨어 계층(206)은 소프트웨어 프로그램 및 서비스를 실행하기 위한 프로세싱 유닛(262), 소프트웨어 및 데이터를 저장하기 위한 메모리(264), 네트워크를 통해 데이터를 송신 및 수신하기 위한 네트워크 포트(266) 및 네트워크를 통해 송신 및 수신된 데이터의 보안 소켓 계층(Secure Socket Layer) 프로세싱과 관련된 기능을 수행하기 위한 암호화 프로세서(260)를 포함한다. 일부 실시예에서, 중앙 처리 장치(262)가 단일 프로세서에서 암호화 프로세서(260)의 기능을 수행할 수 있다. 부가적으로, 하드웨어 계층(206)은 프로세싱 유닛(262) 및 암호화 프로세서(260) 각각에 대해 복수의 프로세서를 포함할 수 있다. 프로세서(262)는 도 1e 및 도 1f와 관련하여 상술한 프로세서(101) 중 임의의 것을 포함할 수 있다. 예를 들어, 일 실시예에서, 기기(200)는 제1 프로세서(262) 및 제2 프로세서(262')를 포함한다. 다른 실시예에서, 프로세서(262 또는 262')는 멀티-코어 프로세서를 포함한다.Hardware layer 206 provides the hardware elements on which programs and services in kernel space 204 and user space 202 run. Hardware layer 206 also provides structures and elements that allow programs and services in kernel space 204 and user space 202 to communicate data both internally and externally to device 200 . As shown in Figure 2, the hardware layer 206 includes a processing unit 262 for executing software programs and services, a memory 264 for storing software and data, and a network for transmitting and receiving data via a network. port 266 and a cryptographic processor 260 for performing functions related to Secure Socket Layer processing of data transmitted and received over the network. In some embodiments, central processing unit 262 may perform the functions of cryptographic processor 260 in a single processor. Additionally, the hardware layer 206 may include a plurality of processors for each of the processing unit 262 and the cryptographic processor 260 . The processor 262 may include any of the processors 101 described above with respect to FIGS. 1E and 1F . For example, in one embodiment, the device 200 includes a first processor 262 and a second processor 262 ′. In another embodiment, the processor 262 or 262' comprises a multi-core processor.

기기(200)의 하드웨어 계층(206)은 일반적으로 암호화 프로세서(260)로 나타내어지지만, 프로세서(260)는 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 프로토콜과 같은 임의의 암호화 프로토콜과 관련된 기능을 수행하기 위한 프로세서일 수 있다. 일부 실시예에서, 프로세서(260)는 범용 프로세서(GPP)일 수 있고, 추가의 실시예에서, 임의의 보안 관련 프로토콜의 프로세싱을 수행하기 위한 실행 가능한 명령을 가질 수 있다.While the hardware layer 206 of the device 200 is generally represented by a cryptographic processor 260 , the processor 260 provides functionality related to any cryptographic protocol, such as a Secure Socket Layer (SSL) or Transport Layer Security (TLS) protocol. It may be a processor for performing In some embodiments, the processor 260 may be a general purpose processor (GPP), and in further embodiments may have executable instructions to perform processing of any security related protocol.

기기(200)의 하드웨어 계층(206)이 도 2에서 특정 요소를 갖는 것으로 나타내어져 있지만, 기기(200)의 하드웨어 부분 또는 구성 요소는 도 1e 및 도 1f와 관련하여 본원에서 나타내어지고 논의된 컴퓨팅 디바이스(100)와 같은 컴퓨팅 디바이스의 임의의 유형 및 형태의 요소, 하드웨어 또는 소프트웨어를 포함할 수 있다. 일부 실시예에서, 기기(200)는 서버, 게이트웨이, 라우터, 스위치, 브리지 또는 다른 유형의 컴퓨팅 또는 네트워크 디바이스를 포함할 수 있으며, 이와 연관된 임의의 하드웨어 및/또는 소프트웨어 요소를 가질 수 있다.Although the hardware layer 206 of the device 200 is shown with certain elements in FIG. 2 , the hardware portion or component of the device 200 is a computing device shown and discussed herein with respect to FIGS. 1E and 1F . It may include elements, hardware or software of any type and form of a computing device such as 100 . In some embodiments, device 200 may include a server, gateway, router, switch, bridge, or other type of computing or network device, and may have any hardware and/or software elements associated therewith.

기기(200)의 운영 체제는 이용 가능한 시스템 메모리를 커널 공간(204) 및 사용자 공간(202)으로 할당, 관리 또는 이와 다르게 분리한다. 예시적인 소프트웨어 아키텍처(200)에서, 운영 체제는 임의의 유형 및/또는 형태의 UNIX 운영 체제일 수 있지만, 설명된 실시예는 제한되지 않는다. 이와 같이, 기기(200)는 임의의 버전의 Microsoft® Windows 운영 체제, Unix 및 Linux 운영 체제의 다른 릴리스, 임의의 버전의 Macintosh 컴퓨터용 Mac OS®, 임의의 내장형 운영 체제, 임의의 네트워크 운영 체제, 임의의 실시간 운영 체제, 임의의 개방 소스 운영 체제, 임의의 독점 운영 체제, 모바일 컴퓨팅 디바이스 또는 네트워크 디바이스용의 임의의 운영 체제 또는 기기(200) 상에서 실행되고 본원에 설명되는 동작을 수행할 수 있는 임의의 다른 운영 체제와 같은 임의의 운영 체제를 실행할 수 있다.The operating system of the device 200 allocates, manages, or otherwise separates the available system memory into kernel space 204 and user space 202 . In the example software architecture 200, the operating system may be any type and/or type of UNIX operating system, although the described embodiments are not limited. As such, device 200 may include any version of the Microsoft® Windows operating system, any other release of Unix and Linux operating systems, any version of Mac OS® for Macintosh computers, any embedded operating system, any network operating system; Any real-time operating system, any open source operating system, any proprietary operating system, any operating system or device 200 for a mobile computing device or network device and capable of performing the operations described herein and running on the appliance 200 . It can run any operating system like any other operating system in

커널 공간(204)은 임의의 디바이스 드라이버, 커널 확장 또는 다른 커널 관련 소프트웨어를 포함하여 커널(230)을 실행하기 위해 예약되어 있다. 본 기술 분야의 통상의 기술자에게 알려진 바와 같이, 커널(230)은 운영 체제의 코어이며, 어플리케이션(104)의 자원 및 하드웨어-관련 요소의 액세스, 제어 및 관리를 제공한다. 기기(200)의 실시예에 따르면, 커널 공간(204)은 또한 때로 통합 캐시라고도 지칭되는 캐시 관리자(232)와 연계하여 동작하는 다수의 네트워크 서비스 또는 프로세스를 포함하며, 그 이점은 본원에 더욱 상세히 설명된다. 또한, 커널(230)의 실시예는 디바이스(200)에 의해 설치, 구성 또는 달리 사용되는 운영 체제의 실시예에 따를 것이다.Kernel space 204 is reserved for executing kernel 230, including any device drivers, kernel extensions, or other kernel-related software. As is known to those skilled in the art, the kernel 230 is the core of the operating system and provides access, control, and management of resources and hardware-related elements of the application 104 . According to an embodiment of the device 200 , the kernel space 204 includes a number of network services or processes that operate in conjunction with a cache manager 232 , also sometimes referred to as a unified cache, the benefits of which are described in more detail herein. explained. Further, the embodiment of the kernel 230 will depend on the embodiment of the operating system installed, configured, or otherwise used by the device 200 .

일 실시예에서, 디바이스(200)는 클라이언트(102) 및/또는 서버(106)와 통신하기 위해 TCP/IP 기반 스택과 같은 하나의 네트워크 스택(267)을 포함한다. 일 실시예에서, 네트워크 스택(267)은 네트워크(108)와 같은 제1 네트워크 및 제2 네트워크(110)와 통신하기 위해 사용된다. 일부 실시예에서, 디바이스(200)는 클라이언트(102)의 TCP 접속과 같은 제1 전송 계층 접속을 종단하고, 클라이언트(102)에 의해 사용하기 위해 서버(106)에 대한 제2 전송 계층 접속을 확립하며, 예를 들어, 제2 전송 계층 접속은 기기(200) 및 서버(106)에서 종단된다. 제1 및 제2 전송 계층 접속은 단일 네트워크 스택(267)을 통해 확립될 수 있다. 다른 실시예에서, 디바이스(200)는 예를 들어, 267 및 267'와 같은 복수의 네트워크 스택을 포함할 수 있으며, 제1 전송 계층 접속은 하나의 네트워크 스택(267)에서, 그리고 제2 전송 계층 접속은 제2 네트워크 스택(267')에서 확립 또는 종단될 수 있다. 예를 들어, 하나의 네트워크 스택은 제1 네트워크 상에서 네트워크 패킷을 수신 및 송신하기 위한 것일 수 있고, 다른 네트워크 스택은 제2 네트워크 상에서 네트워크 패킷을 수신 및 송신하기 위한 것일 수 있다. 일 실시예에서, 네트워크 스택(267)은 기기(200)에 의한 송신을 위해 하나 이상의 네트워크 패킷을 큐잉(queuing)하기 위한 버퍼(243)를 포함한다.In one embodiment, device 200 includes one network stack 267 , such as a TCP/IP based stack, for communicating with client 102 and/or server 106 . In one embodiment, the network stack 267 is used to communicate with a first network such as network 108 and a second network 110 . In some embodiments, device 200 terminates a first transport layer connection, such as a TCP connection of client 102 , and establishes a second transport layer connection to server 106 for use by client 102 . and, for example, the second transport layer connection is terminated at the device 200 and the server 106 . The first and second transport layer connections may be established via a single network stack 267 . In another embodiment, the device 200 may include multiple network stacks, such as, for example, 267 and 267', a first transport layer connection in one network stack 267, and a second transport layer A connection may be established or terminated in the second network stack 267'. For example, one network stack may be for receiving and transmitting network packets on a first network, and another network stack may be for receiving and transmitting network packets on a second network. In one embodiment, the network stack 267 includes a buffer 243 for queuing one or more network packets for transmission by the device 200 .

도 2에 나타낸 바와 같이, 커널 공간(204)은 캐시 관리자(232), 고속 계층 2-7 통합 패킷 엔진(240), 암호화 엔진(234), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)을 포함한다. 사용자 공간(202) 대신 커널 공간(204) 또는 커널 모드에서 이들 구성 요소 또는 프로세스(232, 240, 234, 236 및 238)를 실행하는 것은 단독으로 그리고 조합하여 이들 구성 요소 각각의 성능을 향상시킨다. 커널 동작은 이들 구성 요소 또는 프로세스(232, 240, 234, 236 및 238)가 디바이스(200)의 운영 체제의 코어 주소 공간에서 실행됨을 의미한다. 예를 들어, 커널 모드에서 암호화 엔진(234)을 실행하는 것은 암호화 및 복호화 동작을 커널로 이동시킴으로써 암호화 성능을 향상시키고, 이에 의해 커널 모드에서의 메모리 공간 또는 커널 스레드와 사용자 모드에서의 메모리 공간 또는 스레드 사이의 천이의 수를 감소시킨다. 예를 들어, 커널 모드에서 얻은 데이터는 커널 레벨 데이터 구조에서 사용자 레벨 데이터 구조로 사용자 모드에서 실행되는 프로세스 또는 스레드로 전달되거나 복사될 필요가 없을 수 있다. 다른 양태에서, 커널 모드와 사용자 모드 사이의 컨텍스트 전환의 수가 또한 감소된다. 또한, 커널 공간(204)에서 임의의 구성 요소 또는 프로세스(232, 240, 235, 236 및 238) 사이의 동기화 및 통신이 보다 효율적으로 수행될 수 있다.As shown in FIG. 2 , kernel space 204 includes cache manager 232 , high-speed layer 2-7 unified packet engine 240 , encryption engine 234 , policy engine 236 , and multi-protocol compression logic 238 . ) is included. Running these components or processes 232 , 240 , 234 , 236 and 238 in kernel space 204 or kernel mode instead of user space 202 improves the performance of each of these components, alone and in combination. Kernel operation means that these components or processes 232 , 240 , 234 , 236 and 238 run in the core address space of the operating system of the device 200 . For example, running the encryption engine 234 in kernel mode improves encryption performance by moving encryption and decryption operations to the kernel, thereby improving the memory space in kernel mode or the memory space in kernel thread and user mode or Reduces the number of transitions between threads. For example, data obtained in kernel mode may not need to be passed or copied from a kernel level data structure to a user level data structure to a process or thread running in user mode. In another aspect, the number of context switches between kernel mode and user mode is also reduced. In addition, synchronization and communication between arbitrary components or processes 232 , 240 , 235 , 236 and 238 in kernel space 204 may be performed more efficiently.

일부 실시예에서, 구성 요소(232, 240, 234, 236 및 238)의 임의의 부분은 커널 공간(204)에서 실행되거나 동작할 수 있는 반면, 이들 구성 요소(232, 240, 234, 236 및 238)의 다른 부분은 사용자 공간(202)에서 실행되거나 동작할 수 있다. 일 실시예에서, 기기(200)는 하나 이상의 네트워크 패킷, 예를 들어, 클라이언트(102)로부터의 요청 또는 서버(106)로부터의 응답을 포함하는 네트워크 패킷의 임의의 부분에 대한 액세스를 제공하는 커널-레벨 데이터 구조를 사용한다. 일부 실시예에서, 커널-레벨 데이터 구조는 전송 계층 드라이버 인터페이스 또는 네트워크 스택(267)으로의 필터를 통해 패킷 엔진(240)에 의해 획득될 수 있다. 커널-레벨 데이터 구조는 네트워크 스택(267), 네트워크 트래픽 또는 네트워크 스택(267)에 의해 수신 또는 송신된 패킷과 관련된 커널 공간(204)을 통해 액세스 가능한 임의의 인터페이스 및/또는 데이터를 포함할 수 있다. 다른 실시예에서, 커널-레벨 데이터 구조는 임의의 구성 요소 또는 프로세스(232, 240, 234, 236 및 238)에 의해 사용되어, 구성 요소 또는 프로세스의 원하는 동작을 수행할 수 있다. 일 실시예에서, 구성 요소(232, 240, 234, 236 및 238)는 커널-레벨 데이터 구조를 사용할 때 커널 모드에서 실행되는 반면, 다른 실시예에서, 구성 요소(232, 240, 234, 236 및 238)는 커널-레벨 데이터 구조를 사용할 때 사용자 모드에서 실행된다. 일부 실시예에서, 커널-레벨 데이터 구조는 제2 커널-레벨 데이터 구조, 또는 임의의 원하는 사용자-레벨 데이터 구조로 복사되거나 전달될 수 있다.In some embodiments, any portion of components 232 , 240 , 234 , 236 and 238 may execute or operate in kernel space 204 , while these components 232 , 240 , 234 , 236 and 238 may be operable. ) may execute or operate in user space 202 . In one embodiment, device 200 is a kernel that provides access to one or more network packets, eg, any portion of a network packet including a request from a client 102 or a response from a server 106 . -Use a level data structure. In some embodiments, the kernel-level data structure may be obtained by the packet engine 240 via a transport layer driver interface or filter to the network stack 267 . Kernel-level data structures may include any interfaces and/or data accessible through kernel space 204 associated with network stack 267 , network traffic or packets received or transmitted by network stack 267 . . In other embodiments, kernel-level data structures may be used by any component or process 232 , 240 , 234 , 236 and 238 to perform the desired operation of the component or process. In one embodiment, components 232, 240, 234, 236, and 238 execute in kernel mode when using kernel-level data structures, while in another embodiment components 232, 240, 234, 236 and 238) runs in user mode when using kernel-level data structures. In some embodiments, the kernel-level data structure may be copied or passed to a second kernel-level data structure, or any desired user-level data structure.

캐시 관리자(232)는 발신 서버(106)에 의해 제공되는 객체 또는 동적으로 생성된 객체와 같은 임의의 유형 및 형태의 컨텐츠의 캐시 액세스, 제어 및 관리를 제공하기 위한 소프트웨어, 하드웨어 또는 소프트웨어 및 하드웨어의 임의의 조합을 포함할 수 있다. 캐시 관리자(232)에 의해 프로세싱되고 저장되는 데이터, 객체 또는 컨텐츠는 마크업 언어와 같은 임의의 포맷의 데이터를 포함하거나 임의의 프로토콜을 통해 전달될 수 있다. 일부 실시예에서, 캐시 관리자(232)는 다른 곳에 저장된 원본 데이터 또는 이전에 계산, 생성 또는 송신된 데이터를 복제하며, 여기서 원본 데이터는 캐시 메모리 요소를 판독하는 것에 대해 페치, 계산 또는 달리 획득하기 위해 더 긴 액세스 시간을 필요로 할 수 있다. 일단 데이터가 캐시 메모리 요소에 저장되면, 원본 데이터를 재페칭 또는 재계산하는 대신에 캐싱된 사본에 액세스함으로써 장래의 사용이 이루어질 수 있으며, 이에 의해 액세스 시간을 감소시킨다. 일부 실시예에서, 캐시 메모리 요소는 디바이스(200)의 메모리(264)에 데이터 객체를 포함할 수 있다. 다른 실시예에서, 캐시 메모리 요소는 메모리(264)보다 빠른 액세스 시간을 갖는 메모리를 포함할 수 있다. 다른 실시예에서, 캐시 메모리 요소는 하드 디스크의 일부와 같은 디바이스(200)의 임의의 유형 및 형태의 저장 요소를 포함할 수 있다. 일부 실시예에서, 프로세싱 유닛(262)은 캐시 관리자(232)에 의한 사용을 위해 캐시 메모리를 제공할 수 있다. 또 다른 실시예에서, 캐시 관리자(232)는 데이터, 객체 및 다른 컨텐츠를 캐싱하기 위해 메모리, 저장소 또는 프로세싱 유닛의 임의의 부분 및 조합을 사용할 수 있다.The cache manager 232 is a software, hardware or set of software and hardware components to provide cache access, control and management of content of any type and form, such as objects provided by the originating server 106 or dynamically created objects. It may include any combination. The data, objects, or content processed and stored by the cache manager 232 may include data in any format, such as a markup language, or be delivered via any protocol. In some embodiments, cache manager 232 duplicates original data stored elsewhere or previously computed, generated, or transmitted data, wherein the original data is fetched, computed, or otherwise obtained for reading a cache memory element. Longer access times may be required. Once data is stored in the cache memory element, future use can be made by accessing the cached copy instead of refetching or recalculating the original data, thereby reducing access time. In some embodiments, cache memory elements may contain data objects in memory 264 of device 200 . In another embodiment, the cache memory element may include a memory that has a faster access time than the memory 264 . In other embodiments, the cache memory element may include any type and form of storage element of the device 200, such as part of a hard disk. In some embodiments, processing unit 262 may provide cache memory for use by cache manager 232 . In yet another embodiment, cache manager 232 may use any portion and combination of memory, storage, or processing unit to cache data, objects, and other content.

또한, 캐시 관리자(232)는 본원에 설명되는 기기(200)의 기술의 임의의 실시예를 수행하기 위한 임의의 로직, 기능, 규칙 또는 동작을 포함한다. 예를 들어, 캐시 관리자(232)는 무효화 기간의 만료 또는 클라이언트(102) 또는 서버(106)로부터의 무효화 커맨드의 수신에 기초하여 객체를 무효화하는 로직 또는 기능을 포함한다. 캐시 관리자(232)는 일부 실시예에서 커널 공간(204)에서 그리고 다른 실시예에서는 사용자 공간(202)에서 실행되는 프로그램, 서비스, 프로세스 또는 작업으로서 동작할 수 있다. 일 실시예에서, 캐시 관리자(232)의 제1 부분은 사용자 공간(202)에서 실행되는 반면, 제2 부분은 커널 공간(204)에서 실행된다. 일부 실시예에서, 캐시 관리자(232)는 임의의 유형의 범용 프로세서(GPP), 또는 FPGA(Field Programmable Gate Array), PLC(Programmable Logic Device) 또는 ASIC(Application Specific Integrated Circuit)와 같은 임의의 다른 유형의 집적 회로를 포함할 수 있다.Additionally, cache manager 232 includes any logic, function, rule, or action for performing any embodiment of the technology of device 200 described herein. For example, cache manager 232 includes logic or functionality to invalidate objects based on expiration of an invalidation period or receipt of an invalidation command from client 102 or server 106 . The cache manager 232 may operate as a program, service, process, or task executing in kernel space 204 in some embodiments and in user space 202 in other embodiments. In one embodiment, a first portion of cache manager 232 runs in user space 202 , while a second portion runs in kernel space 204 . In some embodiments, cache manager 232 is any type of general purpose processor (GPP), or any other type, such as a Field Programmable Gate Array (FPGA), Programmable Logic Device (PLC), or Application Specific Integrated Circuit (ASIC). may include an integrated circuit of

정책 엔진(236)은 예를 들어, 지능형 통계 엔진 또는 다른 프로그램 가능한 어플리케이션(들)을 포함할 수 있다. 일 실시예에서, 정책 엔진(236)은 사용자가 캐싱 정책을 식별, 특정, 정의 또는 구성할 수 있게 하는 구성 메커니즘을 제공한다. 일부 실시예에서, 정책 엔진(236)은 또한 사용자-선택 캐싱 정책 결정을 가능하게 하기 위해 룩업 테이블 또는 해시 테이블과 같은 데이터 구조를 지원하기 위해 메모리에 대한 액세스를 갖는다. 다른 실시예에서, 정책 엔진(236)은 보안, 네트워크 트래픽, 네트워크 액세스, 압축 또는 기기(200)에 의해 수행되는 임의의 다른 기능 또는 동작의 액세스, 제어 및 관리에 추가하여 기기(200)에 의해 캐싱되는 객체, 데이터 또는 컨텐츠의 액세스, 제어 및 관리를 결정 및 제공하기 위한 임의의 로직, 규칙, 기능 또는 동작을 포함할 수 있다. 특정 캐싱 정책의 추가적인 예들이 본원에 더 설명된다.Policy engine 236 may include, for example, an intelligent statistics engine or other programmable application(s). In one embodiment, the policy engine 236 provides a configuration mechanism that allows a user to identify, specify, define, or configure a caching policy. In some embodiments, policy engine 236 also has access to memory to support data structures such as lookup tables or hash tables to facilitate user-selected caching policy decisions. In other embodiments, the policy engine 236 may be configured by the device 200 in addition to access, control and management of security, network traffic, network access, compression, or any other function or action performed by the device 200 . It may include any logic, rule, function, or action for determining and providing access, control, and management of objects, data, or content being cached. Additional examples of specific caching policies are further described herein.

암호화 엔진(234)은 SSL 또는 TLS와 같은 임의의 보안 관련 프로토콜의 프로세싱 또는 이와 관련된 임의의 기능을 취급하기 위한 임의의 로직, 비즈니스 규칙, 기능 또는 동작을 포함한다. 예를 들어, 암호화 엔진(234)은 기기(200)를 통해 통신된 네트워크 패킷 또는 그 임의의 일부를 암호화 및 복호화한다. 암호화 엔진(234)은 또한 클라이언트(102a-102n), 서버(106a-106n) 또는 기기(200)를 대신하여 SSL 또는 TLS 접속을 설정 또는 확립할 수 있다. 이와 같이, 암호화 엔진(234)은 SSL 프로세싱의 오프로딩 및 가속을 제공한다. 일 실시예에서, 암호화 엔진(234)은 터널링 프로토콜을 사용하여 클라이언트(102a-102n)와 서버(106a-106n) 사이에 가상 사설 네트워크를 제공한다. 일부 실시예에서, 암호화 엔진(234)은 암호화 프로세서(260)와 통신한다. 다른 실시예에서, 암호화 엔진(234)은 암호화 프로세서(260) 상에서 실행되는 실행 가능한 명령을 포함한다.Cryptographic engine 234 includes any logic, business rules, functions or actions for handling the processing of or any function related to any security related protocol, such as SSL or TLS. For example, the encryption engine 234 encrypts and decrypts network packets communicated via the device 200 or any portion thereof. Cryptographic engine 234 may also establish or establish SSL or TLS connections on behalf of clients 102a - 102n , servers 106a - 106n , or device 200 . As such, the encryption engine 234 provides offloading and acceleration of SSL processing. In one embodiment, encryption engine 234 provides a virtual private network between clients 102a-102n and servers 106a-106n using a tunneling protocol. In some embodiments, the cryptographic engine 234 is in communication with the cryptographic processor 260 . In another embodiment, cryptographic engine 234 includes executable instructions executing on cryptographic processor 260 .

멀티-프로토콜 압축 엔진(238)은 디바이스(200)의 네트워크 스택(267)에 의해 사용되는 임의의 프로토콜과 같은 네트워크 패킷의 하나 이상의 프로토콜을 압축하기 위한 임의의 로직, 비즈니스 규칙, 기능 또는 동작을 포함한다. 일 실시예에서, 멀티-프로토콜 압축 엔진(238)은 클라이언트(102a-102n)와 서버(106a-106n) 사이에서 양방향으로 MAPI(Messaging Application Programming Interface)(이메일), FTP(File Transfer Protocol), HTTP(HyperText Transfer Protocol), CIFS(Common Internet File System) 프로토콜(파일 전송), ICA(Independent Computing Architecture) 프로토콜, RDP(Remote Desktop Protocol), WAP(Wireless Application Protocol), 모바일 IP 프로토콜 및 VoIP(Voice over IP) 프로토콜을 포함하여 임의의 TCP/IP 기반 프로토콜을 압축한다. 다른 실시예에서, 멀티-프로토콜 압축 엔진(238)은 HTML(Hypertext Markup Language) 기반 프로토콜의 압축을 제공하고, 일부 실시예에서, XML(Extensible Markup Language)과 같은 임의의 마크 업 언어의 압축을 제공한다. 일 실시예에서, 멀티-프로토콜 압축 엔진(238)은 기기(200) 대 기기(200) 통신을 위해 설계된 임의의 프로토콜과 같은 임의의 고성능 프로토콜의 압축을 제공한다. 다른 실시예에서, 멀티-프로토콜 압축 엔진(238)은 트랜잭션 TCP(T/TCP), 선택 확인 응답(acknowledgement)을 가진 TCP(TCP-SACK), 큰 윈도우를 가진 TCP(TCP-LW), TCP-Vegas 프로토콜과 같은 혼잡 예측 프로토콜 및 TCP 스푸핑(spoofing) 프로토콜과 같은 수정된 전송 제어 프로토콜을 사용하여 임의의 페이로드 또는 임의의 통신을 압축한다.The multi-protocol compression engine 238 includes any logic, business rules, functions, or actions for compressing one or more protocols of a network packet, such as any protocol used by the network stack 267 of the device 200 . do. In one embodiment, multi-protocol compression engine 238 is bidirectional between clients 102a-102n and servers 106a-106n, Messaging Application Programming Interface (MAPI) (email), File Transfer Protocol (FTP), HTTP (HyperText Transfer Protocol), Common Internet File System (CIFS) protocol (file transfer), Independent Computing Architecture (ICA) protocol, Remote Desktop Protocol (RDP), Wireless Application Protocol (WAP), Mobile IP protocol, and Voice over IP (VoIP) protocol. ) to compress any TCP/IP-based protocol. In other embodiments, the multi-protocol compression engine 238 provides compression of Hypertext Markup Language (HTML) based protocols, and in some embodiments, compression of any markup language, such as Extensible Markup Language (XML). do. In one embodiment, the multi-protocol compression engine 238 provides compression of any high performance protocol, such as any protocol designed for device 200 to device 200 communication. In another embodiment, the multi-protocol compression engine 238 is a transactional TCP (T/TCP), TCP with selective acknowledgment (TCP-SACK), TCP with large window (TCP-LW), TCP- It compresses any payload or any communication using a congestion prediction protocol such as the Vegas protocol and a modified transmission control protocol such as the TCP spoofing protocol.

이와 같이, 멀티-프로토콜 압축 엔진(238)은 데스크톱 클라이언트, 예를 들어, Microsoft Outlook 및 Oracle, SAP 및 Siebel과 같은 널리 사용되는 기업 어플리케이션에 의해 론칭되는 임의의 클라이언트와 같은 논(non)-웹 씬 클라이언트, 심지어는 Pocket PC와 같은 모바일 클라이언트를 통해 어플리케이션에 액세스하는 사용자에 대한 성능을 가속화한다. 일부 실시예에서, 커널 모드에서 실행되고 네트워크 스택(267)에 액세스하는 패킷 프로세싱 엔진(240)과 통합함으로써 멀티-프로토콜 압축 엔진(238)은 임의의 어플리케이션 계층 프로토콜과 같은 TCP/IP 프로토콜에 의해 운반되는 임의의 프로토콜을 압축할 수 있다.As such, the multi-protocol compression engine 238 is a desktop client, for example, a non-web thin, such as Microsoft Outlook and any client launched by popular enterprise applications such as Oracle, SAP and Siebel. Accelerates performance for users accessing applications through clients, even mobile clients such as Pocket PCs. In some embodiments, the multi-protocol compression engine 238 by integrating with the packet processing engine 240 running in kernel mode and accessing the network stack 267 is carried by a TCP/IP protocol, such as any application layer protocol. It can compress any protocol that can be used.

일반적으로 패킷 프로세싱 엔진 또는 패킷 엔진으로도 지칭되는 고속 계층 2-7 통합 패킷 엔진(240)은 네트워크 포트(266)를 통해 기기(200)에 의해 수신 및 송신되는 패킷의 커널-레벨 프로세싱을 관리하는 역할을 한다. 고속 계층 2-7 통합 패킷 엔진(240)은 네트워크 패킷의 수신 또는 네트워크 패킷의 송신과 같은 프로세싱 동안 하나 이상의 네트워크 패킷을 큐잉하기 위한 버퍼(243)를 포함할 수 있다. 또한, 고속 계층 2-7 통합 패킷 엔진(240)은 하나 이상의 네트워크 스택(267)과 통신하여 네트워크 포트(266)를 통해 네트워크 패킷을 전송 및 수신한다. 고속 계층 2-7 통합 패킷 엔진(240)은 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)과 연계하여 동작한다. 특히, 암호화 엔진(234)은 패킷의 SSL 프로세싱을 수행하도록 구성되고, 정책 엔진(236)은 요청-레벨 컨텐츠 스위칭 및 요청-레벨 캐시 리디렉션과 같은 트래픽 관리와 관련된 기능을 수행하도록 구성되고, 멀티-프로토콜 압축 로직(238)은 데이터의 압축 및 압축 해제와 관련된 기능을 수행하도록 구성된다.High-speed Layer 2-7 Unified Packet Engine 240 , also commonly referred to as packet processing engine or packet engine, manages kernel-level processing of packets received and transmitted by device 200 over network port 266 . play a role The high-speed layer 2-7 aggregation packet engine 240 may include a buffer 243 for queuing one or more network packets during processing, such as reception of network packets or transmission of network packets. In addition, the high-speed layer 2-7 aggregation packet engine 240 communicates with one or more network stacks 267 to transmit and receive network packets through a network port 266 . The high-speed layer 2-7 unified packet engine 240 operates in conjunction with the encryption engine 234 , the cache manager 232 , the policy engine 236 and the multi-protocol compression logic 238 . In particular, the encryption engine 234 is configured to perform SSL processing of packets, and the policy engine 236 is configured to perform functions related to traffic management, such as request-level content switching and request-level cache redirection, and multi- Protocol compression logic 238 is configured to perform functions related to compression and decompression of data.

고속 계층 2-7 통합 패킷 엔진(240)은 패킷 프로세싱 타이머(242)를 포함한다. 일 실시예에서, 패킷 프로세싱 타이머(242)는 진입, 즉, 수신 또는 진출, 즉 송신되는 네트워크 패킷의 프로세싱을 트리거링하기 위한 하나 이상의 시간 간격을 제공한다. 일부 실시예에서, 고속 계층 2-7 통합 패킷 엔진(240)은 타이머(242)에 응답하여 네트워크 패킷을 프로세싱한다. 패킷 프로세싱 타이머(242)는 시간 관련 이벤트, 간격 또는 발생을 통지, 트리거링 또는 전달하기 위해 패킷 엔진(240)에 임의의 유형 및 형태의 신호를 제공한다. 많은 실시예에서, 패킷 프로세싱 타이머(242)는 예를 들어, 100 ms, 50 ms 또는 25 ms와 같은 대략 밀리초로 동작한다. 예를 들어, 일부 실시예에서, 패킷 프로세싱 타이머(242)는 시간 간격을 제공하거나 다른 방식으로 네트워크 패킷이 10 ms 시간 간격으로 고속 계층 2-7 통합 패킷 엔진(240)에 의해 프로세싱되도록 하며, 다른 실시예에서는 5 ms 시간 간격이고, 또 다른 실시예에서는 3, 2 또는 1 ms 시간 간격만큼 짧다. 고속 계층 2-7 통합 패킷 엔진(240)은 동작 동안 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 엔진(238)과 인터페이싱하거나 통합되거나 통신할 수 있다. 이와 같이, 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)의 임의의 로직, 기능 또는 동작은 패킷 프로세싱 타이머(242) 및/또는 패킷 엔진(240)에 응답하여 수행될 수 있다. 따라서, 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)의 임의의 로직, 기능 또는 동작은 패킷 프로세싱 타이머(242)를 통해 제공되는 시간 간격의 세분화 정도, 예를 들어, 10 ms 이하의 시간 간격으로 수행될 수 있다. 예를 들어, 일 실시예에서, 캐시 관리자(232)는 고속 계층 2-7 통합 패킷 엔진(240) 및/또는 패킷 프로세싱 타이머(242)에 응답하여 임의의 캐싱된 객체의 무효화를 수행할 수 있다. 다른 실시예에서, 캐싱된 객체의 만료 또는 무효화 시간은 매 10 ms와 같이 패킷 프로세싱 타이머(242)의 시간 간격과 동일한 세분화 정도로 설정될 수 있다.The high-speed layer 2-7 aggregation packet engine 240 includes a packet processing timer 242 . In one embodiment, packet processing timer 242 provides one or more time intervals for triggering ingress, ie, reception or egress, ie, processing of a transmitted network packet. In some embodiments, the fast layer 2-7 aggregation packet engine 240 processes the network packets in response to the timer 242 . Packet processing timer 242 provides signals of any type and form to packet engine 240 to notify, trigger, or communicate time-related events, intervals, or occurrences. In many embodiments, the packet processing timer 242 operates on the order of milliseconds, such as, for example, 100 ms, 50 ms, or 25 ms. For example, in some embodiments, the packet processing timer 242 provides a time interval or otherwise causes network packets to be processed by the high-speed layer 2-7 unified packet engine 240 at 10 ms time intervals; In an embodiment it is a 5 ms time interval, in another embodiment as short as a 3, 2 or 1 ms time interval. The high-speed layer 2-7 unified packet engine 240 may interface, integrate, or communicate with the encryption engine 234 , the cache manager 232 , the policy engine 236 and the multi-protocol compression engine 238 during operation. As such, any logic, function, or operation of the encryption engine 234 , the cache manager 232 , the policy engine 236 and the multi-protocol compression logic 238 is dependent on the packet processing timer 242 and/or the packet engine ( 240) may be performed. Accordingly, any logic, function, or operation of the encryption engine 234 , the cache manager 232 , the policy engine 236 , and the multi-protocol compression logic 238 is dependent on the time interval provided via the packet processing timer 242 . The degree of subdivision, for example, may be performed at a time interval of 10 ms or less. For example, in one embodiment, cache manager 232 may perform invalidation of any cached objects in response to fast layer 2-7 unified packet engine 240 and/or packet processing timer 242 . . In another embodiment, the expiration or invalidation time of a cached object may be set to the same granularity as the time interval of the packet processing timer 242, such as every 10 ms.

커널 공간(204)과 대조적으로, 사용자 공간(202)은 사용자 모드에서 달리 실행되는 사용자 모드 어플리케이션 또는 프로그램에 의해 사용되는 운영 체제의 메모리 영역 또는 부분이다. 사용자 모드 어플리케이션은 커널 공간(204)에 직접 액세스할 수 없을 수 있고 커널 서비스에 액세스하기 위해 서비스 호출을 사용한다. 도 2에 나타낸 바와 같이, 기기(200)의 사용자 공간(202)은 GUI(graphical user interface)(210), CLI(command line interface)(212), 쉘(shell) 서비스(214), 건강 모니터링 프로그램(216) 및 데몬(daemon) 서비스(218)를 포함한다. GUI(210) 및 CLI(212)는 기기(200)의 운영 체제를 통하는 것과 같이, 시스템 관리자 또는 다른 사용자가 기기(200)의 동작과 상호 작용하고 제어할 수 있는 수단을 제공한다. GUI(210) 또는 CLI(212)는 사용자 공간(202) 또는 커널 공간(204)에서 실행되는 코드를 포함할 수 있다. GUI(210)는 임의의 유형 및 형태의 그래픽 사용자 인터페이스일 수 있고, 텍스트, 그래픽 또는 다르게 브라우저와 같은 임의의 유형의 프로그램 또는 어플리케이션에 의해 제시될 수 있다. CLI(212)는 운영 체제에 의해 제공되는 커맨드 라인과 같은 임의의 유형 및 형태의 커맨드 라인 또는 텍스트-기반 인터페이스일 수 있다. 예를 들어, CLI(212)는 사용자가 운영 체제와 상호 작용할 수 있게 하는 도구인 쉘을 포함할 수 있다. 일부 실시예에서, CLI(212)는 bash, csh, tcsh 또는 ksh 유형 쉘을 통해 제공될 수 있다. 쉘 서비스(214)는 GUI(210) 및/또는 CLI(212)를 통해 사용자에 의해 기기(200) 또는 운영 체제와의 상호 작용을 지원하기 위한 프로그램, 서비스, 작업, 프로세스 또는 실행 가능한 명령을 포함한다.In contrast to kernel space 204, user space 202 is a memory area or portion of an operating system used by user mode applications or programs that otherwise run in user mode. User mode applications may not have direct access to kernel space 204 and use service calls to access kernel services. As shown in FIG. 2 , the user space 202 of the device 200 includes a graphical user interface (GUI) 210 , a command line interface (CLI) 212 , a shell service 214 , and a health monitoring program. 216 and a daemon service 218 . GUI 210 and CLI 212 provide a means for a system administrator or other user to interact with and control the operation of device 200 , such as through the operating system of device 200 . GUI 210 or CLI 212 may include code executing in user space 202 or kernel space 204 . GUI 210 may be any type and form of graphical user interface, and may be presented as text, graphics, or otherwise by any type of program or application, such as a browser. CLI 212 may be a command line or text-based interface of any type and form, such as a command line provided by an operating system. For example, CLI 212 may include a shell, which is a tool that allows a user to interact with an operating system. In some embodiments, CLI 212 may be provided through a bash, csh, tcsh, or ksh type shell. Shell service 214 includes programs, services, tasks, processes, or executable commands to support interaction with device 200 or an operating system by a user via GUI 210 and/or CLI 212 . do.

건강 모니터링 프로그램(216)은 네트워크 시스템이 적절하게 기능하고 있는지 그리고 사용자가 네트워크를 통해 요청된 컨텐츠를 수신하고 있는지 모니터링, 확인, 보고 및 보장하기 위해 사용된다. 건강 모니터링 프로그램(216)은 기기(200)의 임의의 활동을 모니터링하기 위한 로직, 규칙, 기능 또는 동작을 제공하기 위한 하나 이상의 프로그램, 서비스, 작업, 프로세스 또는 실행 가능한 명령을 포함한다. 일부 실시예에서, 건강 모니터링 프로그램(216)은 기기(200)를 통과하는 임의의 네트워크 트래픽을 인터셉팅하여 검사한다. 다른 실시예에서, 건강 모니터링 프로그램(216)은 임의의 적절한 수단 및/또는 메커니즘에 의해 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236), 멀티-프로토콜 압축 로직(238), 패킷 엔진(240), 데몬 서비스(218) 및 쉘 서비스(214) 중 하나 이상과 인터페이싱한다. 이와 같이, 건강 모니터링 프로그램(216)은 기기(200)의 임의의 부분의 상태, 상황 또는 건강을 결정하기 위해 임의의 API(application programming interface)를 호출할 수 있다. 예를 들어, 건강 모니터링 프로그램(216)은 프로그램, 프로세스, 서비스 또는 작업이 활성화되어 있고 현재 실행되고 있는지 확인하기 위해 주기적으로 상태 조회를 핑(ping)하거나 전송할 수 있다. 다른 예에서, 건강 모니터링 프로그램(216)은 임의의 프로그램, 프로세스, 서비스 또는 작업에 의해 제공된 임의의 상태, 오류 또는 이력 로그를 확인하여 기기(200)의 임의의 부분의 임의의 상태, 상황 또는 오류를 결정할 수 있다.Health monitoring program 216 is used to monitor, verify, report and ensure that network systems are functioning properly and that users are receiving requested content over the network. The health monitoring program 216 includes one or more programs, services, tasks, processes, or executable instructions for providing logic, rules, functions, or actions for monitoring any activity of the device 200 . In some embodiments, health monitoring program 216 intercepts and inspects any network traffic passing through device 200 . In another embodiment, health monitoring program 216 may include encryption engine 234 , cache manager 232 , policy engine 236 , multi-protocol compression logic 238 , packets by any suitable means and/or mechanism. interfaces with one or more of engine 240 , daemon service 218 , and shell service 214 . As such, the health monitoring program 216 may call any application programming interface (API) to determine the state, situation, or health of any part of the device 200 . For example, health monitoring program 216 may periodically ping or send status queries to determine if a program, process, service, or task is active and currently running. In another example, the health monitoring program 216 checks any status, error, or historical log provided by any program, process, service, or task to determine any status, condition, or error of any part of the device 200 . can be decided

데몬 서비스(218)는 연속적으로 또는 백그라운드에서 실행되고 기기(200)에 의해 수신된 주기적 서비스 요청을 취급하는 프로그램이다. 일부 실시예에서, 데몬 서비스는 적절한 다른 데몬 서비스(218)와 같은 다른 프로그램 또는 프로세스로 요청을 전달할 수 있다. 본 기술 분야의 통상의 기술자에게 알려진 바와 같이, 데몬 서비스(218)는 네트워크 제어와 같은 연속적 또는 주기적인 시스템 전체 기능을 수행하거나 임의의 원하는 작업을 수행하기 위해 무인으로 실행될 수 있다. 일부 실시예에서, 하나 이상의 데몬 서비스(218)는 사용자 공간(202)에서 실행되는 반면, 다른 실시예에서, 하나 이상의 데몬 서비스(218)는 커널 공간(204)에서 실행된다.Daemon service 218 is a program that runs continuously or in the background and handles periodic service requests received by device 200 . In some embodiments, the daemon service may forward requests to other programs or processes, such as other suitable daemon services 218 . As will be known to those skilled in the art, daemon services 218 may run unattended to perform continuous or periodic system-wide functions, such as network control, or to perform any desired task. In some embodiments, one or more daemon services 218 run in user space 202 , while in other embodiments one or more daemon services 218 run in kernel space 204 .

이하 도 2b를 참조하면, 기기(200)의 다른 실시예가 도시되어 있다. 간략한 개요에서, 기기(200)는 SSL VPN 접속(280), 스위칭/부하 밸런싱(284), 도메인 이름 서비스 해상도(286), 가속(288) 및 하나 이상의 클라이언트(102)와 하나 이상의 서버(106) 사이의 통신을 위한 어플리케이션 방화벽(290) 중 하나 이상의 서비스, 기능 또는 동작을 제공한다. 각각의 서버(106)는 하나 이상의 네트워크 관련 서비스(270a-270n)(서비스(270)로 지칭됨)를 제공할 수 있다. 예를 들어, 서버(106)는 http 서비스(270)를 제공할 수 있다. 기기(200)는 vServer, VIP 서버 또는 단지 VIP(275a-275n)(또한 본원에서 vServer(275)로 지칭됨)로 지칭되는 하나 이상의 가상 서버 또는 가상 인터넷 프로토콜 서버를 포함한다. vServer(275)는 기기(200)의 구성 및 동작에 따라 클라이언트(102)와 서버(106) 사이의 통신을 수신하거나, 인터셉팅하거나 다르게 프로세싱한다.Referring now to FIG. 2B , another embodiment of the device 200 is illustrated. In brief overview, device 200 includes SSL VPN connection 280 , switching/load balancing 284 , domain name service resolution 286 , acceleration 288 and one or more clients 102 and one or more servers 106 . Provides a service, function, or operation of one or more of the application firewalls 290 for communication between them. Each server 106 may provide one or more network related services 270a - 270n (referred to as services 270 ). For example, server 106 may provide http service 270 . Device 200 includes one or more virtual servers or virtual Internet Protocol servers referred to as vServers, VIP servers, or merely VIPs 275a - 275n (also referred to herein as vServers 275 ). vServer 275 receives, intercepts, or otherwise processes communications between client 102 and server 106 depending on the configuration and operation of device 200 .

vServer(275)는 소프트웨어, 하드웨어 또는 소프트웨어 및 하드웨어의 임의의 조합을 포함할 수 있다. vServer(275)는 기기(200)에서 사용자 모드, 커널 모드 또는 이들의 임의의 조합으로 동작하는 임의의 유형 및 형태의 프로그램, 서비스, 작업, 프로세스 또는 실행 가능 명령을 포함할 수 있다. vServer(275)는 임의의 로직, 기능, 규칙 또는 SSL VPN(280), 스위칭/부하 밸런싱(284), 도메인 이름 서비스 해상도(286), 가속(288) 및 어플리케이션 방화벽(290)과 같은 본원에 설명되는 기술의 임의의 실시예를 수행하는 동작을 포함한다. 일부 실시예에서, vServer(275)는 서버(106)의 서비스(270)에 대한 접속을 확립한다. 서비스(270)는 기기(200), 클라이언트(102) 또는 vServer(275)에 접속하고 통신할 수 있는 임의의 프로그램, 어플리케이션, 프로세스, 작업 또는 실행 가능한 명령의 세트를 포함할 수 있다. 예를 들어, 서비스(270)는 웹 서버, http 서버, ftp, 이메일 또는 데이터베이스 서버를 포함할 수 있다. 일부 실시예에서, 서비스(270)는 이메일, 데이터베이스 또는 기업 어플리케이션과 같은 어플리케이션에 대한 통신을 청취, 수신 및/또는 전송하기 위한 데몬 프로세스 또는 네트워크 드라이버이다. 일부 실시예에서, 서비스(270)는 특정 IP 주소, 또는 IP 주소 및 포트 상에서 통신할 수 있다.vServer 275 may include software, hardware, or any combination of software and hardware. vServer 275 may include any type and form of programs, services, tasks, processes, or executable instructions that operate in user mode, kernel mode, or any combination thereof on device 200 . vServer 275 may be any logic, function, rule or described herein, such as SSL VPN 280 , Switching/Load Balancing 284 , Domain Name Service Resolution 286 , Acceleration 288 and Application Firewall 290 . and performing any embodiment of the technology. In some embodiments, vServer 275 establishes a connection to service 270 of server 106 . Services 270 may include any program, application, process, task, or set of executable instructions that can connect and communicate with device 200 , client 102 , or vServer 275 . For example, service 270 may include a web server, http server, ftp, email or database server. In some embodiments, service 270 is a daemon process or network driver for listening, receiving, and/or sending communications to applications such as email, databases, or enterprise applications. In some embodiments, services 270 may communicate over a specific IP address, or IP address and port.

일부 실시예에서, vServer(275)는 정책 엔진(236)의 하나 이상의 정책을 클라이언트(102)와 서버(106) 사이의 네트워크 통신에 적용한다. 일 실시예에서, 정책은 vServer(275)와 연관된다. 다른 실시예에서, 정책은 사용자 또는 사용자 그룹에 기초한다. 또 다른 실시예에서, 정책은 글로벌이며 하나 이상의 vServer(275a-275n) 및 기기(200)를 통해 통신하는 임의의 사용자 또는 사용자 그룹에 적용된다. 일부 실시예에서, 정책 엔진(236)의 정책은 인터넷 프로토콜 주소, 포트, 프로토콜 유형, 패킷의 헤더 또는 필드, 또는 사용자, 사용자 그룹, vServer(275), 전송 계층 접촉, 및/또는 클라이언트(102) 또는 서버(106)의 식별 또는 속성과 같은 통신의 컨텐츠와 같은 통신의 임의의 컨텐츠에 기초하여 정책이 적용되는 상태를 갖는다.In some embodiments, vServer 275 applies one or more policies of policy engine 236 to network communications between client 102 and server 106 . In one embodiment, the policy is associated with vServer 275 . In another embodiment, the policy is based on a user or group of users. In another embodiment, the policy is global and applies to any user or group of users communicating through one or more vServers 275a - 275n and device 200 . In some embodiments, the policy of the policy engine 236 is an Internet protocol address, port, protocol type, header or field in a packet, or user, user group, vServer 275, transport layer contact, and/or client 102 . or a state in which the policy is applied based on any content of the communication, such as the content of the communication, such as an identification or attribute of the server 106 .

다른 실시예에서, 기기(200)는 서버(106)로부터 컴퓨팅 환경(15), 어플리케이션 및/또는 데이터 파일에 액세스하기 위해 원격 사용자 또는 원격 클라이언트(102)의 인증 및/또는 허가를 결정하기 위해 정책 엔진(236)과 통신하거나 인터페이싱한다. 다른 실시예에서, 기기(200)는 어플리케이션 전달 시스템(190)이 하나 이상의 컴퓨팅 환경(15), 어플리케이션 및/또는 데이터 파일을 전달하도록 원격 사용자 또는 원격 클라이언트(102)의 인증 및/또는 허가를 결정하기 위해 정책 엔진(236)과 통신하거나 인터페이싱한다. 또 다른 실시예에서, 기기(200)는 원격 사용자 또는 원격 클라이언트(102)의 정책 엔진(236)의 인증 및/또는 허가에 기초하여 VPN 또는 SSL VPN 접속을 확립한다. 일 실시예에서, 기기(200)는 정책 엔진(236)의 정책에 기초하여 네트워크 트래픽의 흐름 및 통신 세션을 제어한다. 예를 들어, 기기(200)는 정책 엔진(236)에 기초하여 컴퓨팅 환경(15), 어플리케이션 또는 데이터 파일에 대한 액세스를 제어할 수 있다.In another embodiment, the device 200 may use a policy to determine authentication and/or authorization of a remote user or remote client 102 to access the computing environment 15 , applications and/or data files from the server 106 . It communicates with or interfaces with the engine 236 . In another embodiment, the device 200 determines the authentication and/or authorization of the remote user or remote client 102 for the application delivery system 190 to deliver one or more computing environments 15 , applications and/or data files. communicates or interfaces with the policy engine 236 to In another embodiment, the device 200 establishes a VPN or SSL VPN connection based on authentication and/or authorization of the policy engine 236 of the remote user or remote client 102 . In one embodiment, the device 200 controls the flow of network traffic and communication sessions based on the policies of the policy engine 236 . For example, device 200 may control access to computing environment 15 , applications, or data files based on policy engine 236 .

일부 실시예에서, vServer(275)는 클라이언트 에이전트(120)를 통해 클라이언트(102)와의 TCP 또는 UDP 접속과 같은 전송 계층 접속을 확립한다. 일 실시예에서, vServer(275)는 클라이언트(102)로부터 통신을 청취하고 수신한다. 다른 실시예에서, vServer(275)는 클라이언트 서버(106)와의 TCP 또는 UDP 접속과 같은 전송 계층 접속을 확립한다. 일 실시예에서, vServer(275)는 서버(106) 상에서 실행되는 서버(270)의 인터넷 프로토콜 주소 및 포트에 대한 전송 계층 접속을 확립한다. 다른 실시예에서, vServer(275)는 클라이언트(102)에 대한 제1 전송 계층 접속을 서버(106)에 대한 제2 전송 계층 접속과 연관시킨다. 일부 실시예에서, vServer(275)는 서버(106)에 대한 전송 계층 접속의 풀(pool)을 확립하고 풀링(pooling)된 전송 계층 접속을 통한 클라이언트 요청을 다중화한다.In some embodiments, vServer 275 establishes a transport layer connection, such as a TCP or UDP connection, with client 102 via client agent 120 . In one embodiment, vServer 275 listens for and receives communications from clients 102 . In another embodiment, vServer 275 establishes a transport layer connection, such as a TCP or UDP connection, with client server 106 . In one embodiment, vServer 275 establishes a transport layer connection to the Internet Protocol address and port of server 270 running on server 106 . In another embodiment, vServer 275 associates a first transport layer connection to client 102 with a second transport layer connection to server 106 . In some embodiments, vServer 275 establishes a pool of transport layer connections to server 106 and multiplexes client requests over the pooled transport layer connections.

일부 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이에 SSL VPN 접속(280)을 제공한다. 예를 들어, 제1 네트워크(104) 상의 클라이언트(102)는 제2 네트워크(104') 상의 서버(106)와의 접속의 확립을 요청한다. 일부 실시예에서, 제2 네트워크(104')는 제1 네트워크(104)로부터 라우팅 가능하지 않다. 다른 실시예에서, 클라이언트(102)는 공용 네트워크(104) 상에 있고 서버(106)는 회사 네트워크와 같은 사설 네트워크(104') 상에 있다. 일 실시예에서, 클라이언트 에이전트(120)는 제1 네트워크(104) 상에서 클라이언트(102)의 통신을 인터셉팅하고, 통신을 암호화하고, 제1 전송 계층 접속을 통해 통신을 기기(200)로 송신한다. 기기(200)는 제1 네트워크(104) 상의 제1 전송 계층 접속을 제2 네트워크(104') 상의 서버(106)에 대한 제2 전송 계층 접속에 연관시킨다. 기기(200)는 클라이언트 에이전트(102)로부터 인터셉팅된 통신을 수신하고, 통신을 복호화하며, 제2 전송 계층 접속을 통해 제2 네트워크(104') 상의 서버(106)로 통신을 송신한다. 제2 전송 계층 접속은 풀링된 전송 계층 접속일 수 있다. 이와 같이, 기기(200)는 2개의 네트워크(104, 104') 사이에서 클라이언트(102)에 대한 종단 간 보안 전송 계층 접속을 제공한다.In some embodiments, device 200 provides an SSL VPN connection 280 between client 102 and server 106 . For example, a client 102 on a first network 104 requests establishment of a connection with a server 106 on a second network 104'. In some embodiments, the second network 104 ′ is not routable from the first network 104 . In another embodiment, the client 102 is on a public network 104 and the server 106 is on a private network 104', such as a corporate network. In one embodiment, the client agent 120 intercepts communications of the client 102 over the first network 104 , encrypts the communications, and sends the communications to the device 200 over the first transport layer connection. . The device 200 associates a first transport layer connection on the first network 104 with a second transport layer connection to the server 106 on the second network 104'. The device 200 receives the intercepted communication from the client agent 102 , decrypts the communication, and sends the communication to the server 106 on the second network 104 ′ via a second transport layer connection. The second transport layer connection may be a pooled transport layer connection. As such, the device 200 provides an end-to-end secure transport layer connection for the client 102 between the two networks 104 and 104'.

일 실시예에서, 기기(200)는 가상 사설 네트워크(104) 상의 클라이언트(102)의 인트라넷 인터넷 프로토콜 또는 IntranetIP(282) 주소를 호스팅한다. 클라이언트(102)는 인터넷 프로토콜(IP) 주소 및/또는 제1 네트워크(104) 상의 호스트 이름과 같은 로컬 네트워크 식별자를 갖는다. 기기(200)를 통해 제2 네트워크(104')에 접속될 때, 기기(200)는 제2 네트워크(104') 상의 클라이언트(102)에 대해 IP 주소 및/또는 호스트 이름과 같은 네트워크 식별자인 IntranetIP 주소(282)를 확립, 할당 또는 이와 다르게 제공한다. 기기(200)는 클라이언트의 확립된 IntranetIP(282)를 사용하여 클라이언트(102)를 향해 지향된 임의의 통신에 대해 제2 또는 사설 네트워크(104') 상에서 청취하고 수신한다. 일 실시예에서, 기기(200)는 제2 사설 네트워크(104) 상의 클라이언트(102)로서 또는 클라이언트(102)를 대신하여 작용한다. 예를 들어, 다른 실시예에서, vServer(275)는 클라이언트(102)의 IntranetIP(282)에 대한 통신을 청취하고 이에 응답한다. 일부 실시예에서, 제2 네트워크(104') 상의 컴퓨팅 디바이스(100)가 요청을 송신하면, 기기(200)는 클라이언트(102)인 것처럼 요청을 프로세싱한다. 예를 들어, 기기(200)는 클라이언트의 IntranetIP(282)에 대한 핑에 응답할 수 있다. 다른 예에서, 기기는 TCP 또는 UDP 접속과 같은 접속을 확립할 수 있으며, 제2 네트워크(104') 상의 컴퓨팅 디바이스(100)는 클라이언트의 IntranetIP(282)와의 접속을 요청한다.In one embodiment, device 200 hosts an Intranet Internet Protocol or IntranetIP 282 address of client 102 on virtual private network 104 . The client 102 has a local network identifier, such as an Internet Protocol (IP) address and/or a host name on the first network 104 . When connected to the second network 104' via the device 200, the device 200 provides an IntranetIP network identifier such as an IP address and/or hostname for the client 102 on the second network 104'. The address 282 is established, assigned, or otherwise provided. The device 200 listens and receives on the second or private network 104 ′ for any communication directed towards the client 102 using the client's established IntranetIP 282 . In one embodiment, the device 200 acts as or on behalf of the client 102 on the second private network 104 . For example, in another embodiment, vServer 275 listens for and responds to client 102's IntranetIP 282 communication. In some embodiments, when computing device 100 on second network 104 ′ sends a request, device 200 processes the request as if it were client 102 . For example, the device 200 may respond to a ping of the client's IntranetIP 282 . In another example, the device may establish a connection, such as a TCP or UDP connection, and the computing device 100 on the second network 104 ′ requests a connection with the client's IntranetIP 282 .

일부 실시예에서, 기기(200)는 1) 압축; 2) 압축 해제; 3) 전송 제어 프로토콜 풀링; 4) 전송 제어 프로토콜 다중화; 5) 전송 제어 프로토콜 버퍼링; 및 6) 캐싱과 같은 가속 기술(288) 중 하나 이상을 클라이언트(102)와 서버(106) 사이의 통신에 제공한다.In some embodiments, device 200 may include: 1) compression; 2) decompress; 3) transmission control protocol pooling; 4) Transmission control protocol multiplexing; 5) Buffering Transmission Control Protocol; and 6) an acceleration technique 288 , such as caching, for communication between the client 102 and the server 106 .

일 실시예에서, 기기(200)는 각각의 서버(106)와 하나 이상의 전송 계층 접속을 개방하고 이들 접속을 유지함으로써 인터넷을 통해 클라이언트에 의한 반복되는 데이터 액세스를 허용함으로써 클라이언트(102)에 대한 전송 계층 접속을 반복적으로 개방 및 폐쇄함으로써 야기되는 프로세싱 부하의 많은 부분을 서버(106)에서 경감시킨다. 이 기술은 본원에서 "접속 풀링"으로 지칭된다.In one embodiment, the device 200 opens one or more transport layer connections with each server 106 and maintains these connections to allow repeated data access by the client over the Internet, thereby transmitting to the client 102 . Offloading much of the processing load on the server 106 caused by repeatedly opening and closing hierarchical connections. This technique is referred to herein as “connection pooling”.

일부 실시예에서, 풀링된 전송 계층 접속을 통해 클라이언트(102)로부터 서버(106)로의 통신을 끊김 없이 스플라이싱하기 위해, 기기(200)는 전송 계층 프로토콜 레벨에서 시퀀스 번호 및 확인 응답 번호를 수정함으로써 통신을 트랜슬레이팅하거나 다중화한다. 이를 "접속 다중화"로 칭한다. 일부 실시예에서, 어플리케이션 계층 프로토콜 상호 작용은 필요하지 않다. 예를 들어, 인-바운드(in-bound) 패킷(즉, 클라이언트(102)로부터 수신된 패킷)의 경우, 패킷의 소스 네트워크 주소는 기기(200)의 출력 포트의 주소로 변경되고, 착신 네트워크 주소는 의도한 서버의 주소로 변경된다. 아웃바운드(outbound) 패킷(즉, 서버(106)로부터 수신된 패킷)의 경우, 소스 네트워크 주소는 서버(106)의 주소로부터 기기(200)의 출력 포트의 주소로 변경되고 착신 주소는 기기(200)의 주소로부터 요청 클라이언트(102)의 주소로 변경된다. 패킷의 시퀀스 번호 및 확인 응답 번호는 또한 클라이언트(102)에 대한 기기(200)의 전송 계층 접속에서 클라이언트(102)에 의해 예상되는 시퀀스 번호 및 확인 응답 번호로 트랜슬레이팅된다. 일부 실시예에서, 이러한 트랜슬레이션을 설명하기 위해 전송 계층 프로토콜의 패킷 체크섬(checksum)이 재계산된다.In some embodiments, the device 200 modifies the sequence number and acknowledgment number at the transport layer protocol level to seamlessly splice communication from the client 102 to the server 106 over the pooled transport layer connection. Translates or multiplexes communications by doing so. This is referred to as "connection multiplexing". In some embodiments, application layer protocol interaction is not required. For example, in the case of an in-bound packet (ie, a packet received from the client 102 ), the source network address of the packet is changed to the address of the output port of the device 200 , and the destination network address is changed to the address of the intended server. For an outbound packet (ie, a packet received from the server 106 ), the source network address is changed from the address of the server 106 to the address of the output port of the device 200 and the destination address is the address of the device 200 . ) is changed from the address of the requesting client 102 to the address of the requesting client 102 . The sequence number and acknowledgment number of the packet are also translated into the sequence number and acknowledgment number expected by the client 102 in the transport layer connection of the device 200 to the client 102 . In some embodiments, the packet checksum of the transport layer protocol is recomputed to account for these translations.

다른 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 통신을 위한 스위칭 또는 부하-밸런싱 기능(284)을 제공한다. 일부 실시예에서, 기기(200)는 트래픽을 분배하고 계층 4 또는 어플리케이션-계층 요청 데이터에 기초하여 클라이언트 요청을 서버(106)로 디렉팅한다. 일 실시예에서, 네트워크 패킷의 네트워크 계층 또는 계층 2가 착신 서버(106)를 식별하지만, 기기(200)는 어플리케이션 정보 및 전송 계층 패킷의 페이로드로서 운반되는 데이터에 의해 네트워크 패킷을 분배할 서버(106)를 결정한다. 일 실시예에서, 기기(200)의 건강 모니터링 프로그램(216)은 서버의 건강을 모니터링하여 클라이언트의 요청을 분배할 서버(106)를 결정한다. 일부 실시예에서, 기기(200)가, 서버(106)가 이용 가능하지 않거나 미리 정해진 임계값을 초과하는 부하를 갖는 것으로 검출하는 경우, 기기(200)는 클라이언트 요청을 다른 서버(106)에 디렉팅하거나 분배할 수 있다.In another embodiment, the device 200 provides a switching or load-balancing function 284 for communication between the client 102 and the server 106 . In some embodiments, device 200 distributes traffic and directs client requests to server 106 based on layer 4 or application-layer request data. In one embodiment, the network layer or layer 2 of the network packet identifies the destination server 106, but the device 200 determines the server that will distribute the network packet with application information and data carried as the payload of the transport layer packet. 106) is determined. In one embodiment, the health monitoring program 216 of the device 200 monitors the health of the server to determine which server 106 to distribute the client's request to. In some embodiments, when device 200 detects that server 106 is unavailable or has a load that exceeds a predetermined threshold, device 200 directs the client request to another server 106 . or it can be distributed.

일부 실시예에서, 기기(200)는 도메인 이름 서비스(DNS) 리졸버(resolver)로서 작용하거나 이와 다르게 클라이언트(102)로부터의 DNS 요청의 분석을 제공한다. 일부 실시예에서, 기기는 클라이언트(102)에 의해 송신된 DNS 요청을 인터셉팅한다. 일 실시예에서, 기기(200)는 기기(200)의 IP 주소 또는 기기(200)에 의해 호스팅된 IP 주소로 클라이언트의 DNS 요청에 응답한다. 이 실시예에서, 클라이언트(102)는 도메인 이름에 대한 네트워크 통신을 기기(200)에 송신한다. 다른 실시예에서, 기기(200)는 제2 기기(200')의 IP 주소 또는 제2 기기(200')에 의해 호스팅된 IP 주소로 클라이언트의 DNS 요청에 응답한다. 일부 실시예에서, 기기(200)는 기기(200)에 의해 결정된 서버(106)의 IP 주소로 클라이언트의 DNS 요청에 응답한다.In some embodiments, device 200 acts as a domain name service (DNS) resolver or otherwise provides resolution of DNS requests from clients 102 . In some embodiments, the device intercepts DNS requests sent by the client 102 . In one embodiment, the device 200 responds to the client's DNS request with the IP address of the device 200 or the IP address hosted by the device 200 . In this embodiment, the client 102 sends a network communication for the domain name to the device 200 . In another embodiment, the device 200 responds to the client's DNS request with the IP address of the second device 200' or the IP address hosted by the second device 200'. In some embodiments, device 200 responds to the client's DNS request with the IP address of server 106 determined by device 200 .

또 다른 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 통신을 위한 어플리케이션 방화벽 기능(290)을 제공한다. 일 실시예에서, 정책 엔진(236)은 위법 요청을 검출 및 차단하기 위한 규칙을 제공한다. 일부 실시예에서, 어플리케이션 방화벽(290)은 서비스 거부(DoS) 공격으로부터 보호한다. 다른 실시예에서, 기기(200)는 어플리케이션-기반 공격을 식별하고 차단하기 위해 인터셉팅된 요청의 컨텐츠를 검사한다. 일부 실시예에서, 규칙/정책 엔진(236)은 다음 중 하나 이상과 같은 다양한 클래스 및 유형의 웹 또는 인터넷 기반 취약성에 대한 보호를 제공하기 위한 하나 이상의 어플리케이션 방화벽 또는 보안 제어 정책을 포함한다: 1) 버퍼 오버플로우, 2) CGI-BIN 파라미터 조작, 3) 폼(form)/숨겨진 필드 조작, 4) 강력한 브라우징, 5) 쿠키 또는 세션 중독, 6) 고장난 액세스 제어 목록(ACL) 또는 취약한 패스워드, 7) 크로스-사이트 스크립팅(XSS), 8) 커맨드 주입, 9) SQL 주입, 10) 민감한 정보 유출을 트리거링하는 오류, 11) 암호화의 안전하지 않은 사용, 12) 서버 구성 오류, 13) 백도어(backdoor) 및 디버그 옵션, 14) 웹 사이트 손상, 15) 플랫폼 또는 운영 체제 취약성 및 16) 제로-데이 익스플로잇(zero-day exploit). 일 실시예에서, 어플리케이션 방화벽(290)은 다음 중 하나 이상에 대한 네트워크 통신을 검사 또는 분석하는 형태로 HTML 폼 필드 보호를 제공한다: 1) 요청된 필드가 리턴됨, 2) 추가된 필드가 허용되지 않음, 3) 판독-전용 및 숨겨진 필드 시행, 4) 드롭-다운 리스트 및 라디오 버튼 필드 적합성 및 5) 폼-필드 최대-길이 시행. 일부 실시예에서, 어플리케이션 방화벽(290)은 쿠키가 수정되지 않도록 보장한다. 다른 실시예에서, 어플리케이션 방화벽(290)은 법적 URL을 시행함으로써 강력한 브라우징을 방지한다.In another embodiment, the device 200 provides an application firewall function 290 for communication between the client 102 and the server 106 . In one embodiment, the policy engine 236 provides rules for detecting and blocking illegal requests. In some embodiments, application firewall 290 protects against denial of service (DoS) attacks. In another embodiment, the device 200 examines the content of the intercepted request to identify and block application-based attacks. In some embodiments, the rules/policy engine 236 includes one or more application firewall or security control policies to provide protection against various classes and types of web or Internet based vulnerabilities, such as one or more of: 1) Buffer overflow, 2) CGI-BIN parameter manipulation, 3) form/hidden field manipulation, 4) strong browsing, 5) cookie or session poisoning, 6) broken access control list (ACL) or weak password, 7) Cross-site scripting (XSS), 8) command injection, 9) SQL injection, 10) errors triggering sensitive information leak, 11) insecure use of encryption, 12) server misconfiguration, 13) backdoor and Debug options, 14) website compromise, 15) platform or operating system vulnerabilities, and 16) zero-day exploits. In one embodiment, application firewall 290 provides HTML form field protection in the form of inspecting or parsing network communications for one or more of the following: 1) requested fields returned, 2) added fields allowed not, 3) read-only and hidden field enforcement, 4) drop-down list and radio button field conformance, and 5) form-field max-length enforcement. In some embodiments, application firewall 290 ensures that cookies are not modified. In another embodiment, application firewall 290 prevents strong browsing by enforcing legal URLs.

또 다른 실시예에서, 어플리케이션 방화벽(290)은 네트워크 통신에 포함된 임의의 기밀 정보를 보호한다. 어플리케이션 방화벽(290)은 엔진(236)의 규칙 또는 정책에 따라 네트워크 패킷의 임의의 필드에서 임의의 기밀 정보를 식별하기 위해 임의의 네트워크 통신을 검사 또는 분석할 수 있다. 일부 실시예에서, 어플리케이션 방화벽(290)은 네트워크 통신에서 신용 카드 번호, 패스워드, 주민등록번호, 이름, 환자 코드, 연락처 정보 및 연령의 하나 이상의 발생을 식별한다. 네트워크 통신의 인코딩된 부분은 이러한 발생 또는 기밀 정보를 포함할 수 있다. 이러한 발생에 기초하여, 일 실시예에서, 어플리케이션 방화벽(290)은 네트워크 통신의 송신을 방지하는 것과 같이, 네트워크 통신에 대한 정책 조치를 취할 수 있다. 다른 실시예에서, 어플리케이션 방화벽(290)은 이러한 식별된 발생 또는 기밀 정보를 재기록, 제거 또는 이와 다르게 마스킹(masking)할 수 있다.In another embodiment, application firewall 290 protects any confidential information contained in network communications. The application firewall 290 may inspect or analyze any network communication to identify any confidential information in any field of the network packet according to the rules or policies of the engine 236 . In some embodiments, application firewall 290 identifies one or more occurrences of a credit card number, password, social security number, name, patient code, contact information, and age in network communications. The encoded portion of the network communication may contain such generated or confidential information. Based on these occurrences, in one embodiment, application firewall 290 may take policy actions on network communications, such as preventing the transmission of network communications. In other embodiments, the application firewall 290 may rewrite, remove, or otherwise mask such identified occurrence or confidential information.

여전히 도 2b를 참조하면, 기기(200)는 도 1d와 관련하여 상술한 바와 같은 성능 모니터링 에이전트(197)를 포함할 수 있다. 일 실시예에서, 기기(200)는 도 1d에 도시된 바와 같이, 모니터링 서비스(198) 또는 모니터링 서버(106)로부터 모니터링 에이전트(197)를 수신한다. 일부 실시예에서, 기기(200)는 기기(200)와 통신하는 임의의 클라이언트(102) 또는 서버(106)로 전달하기 위해 디스크와 같은 저장소에 모니터링 에이전트(197)를 저장한다. 예를 들어, 일 실시예에서, 기기(200)는 전송 계층 접속을 확립하라는 요청을 수신할 시에 모니터링 에이전트(197)를 클라이언트(102)로 송신한다. 다른 실시예에서, 기기(200)는 클라이언트(102)와의 전송 계층 접속을 확립할 시에 모니터링 에이전트(197)를 송신한다. 다른 실시예에서, 기기(200)는 웹 페이지에 대한 요청을 인터셉팅하거나 검출할 시에 클라이언트(102)에 모니터링 에이전트(197)를 송신한다. 또 다른 실시예에서, 기기(200)는 모니터링 서버(198)로부터의 요청에 응답하여 모니터링 에이전트(197)를 클라이언트(102) 또는 서버(106)로 송신한다. 일 실시예에서, 기기(200)는 모니터링 에이전트(197)를 제2 기기(200') 또는 기기(205)로 송신한다.Still referring to FIG. 2B , the device 200 may include a performance monitoring agent 197 as described above with respect to FIG. 1D . In one embodiment, device 200 receives monitoring agent 197 from monitoring service 198 or monitoring server 106 , as shown in FIG. 1D . In some embodiments, the device 200 stores the monitoring agent 197 in storage, such as a disk, for delivery to any client 102 or server 106 that communicates with the device 200 . For example, in one embodiment, device 200 sends monitoring agent 197 to client 102 upon receiving a request to establish a transport layer connection. In another embodiment, the device 200 sends the monitoring agent 197 upon establishing a transport layer connection with the client 102 . In another embodiment, the device 200 sends a monitoring agent 197 to the client 102 upon intercepting or detecting a request for a web page. In another embodiment, device 200 sends monitoring agent 197 to client 102 or server 106 in response to a request from monitoring server 198 . In one embodiment, the device 200 sends the monitoring agent 197 to the second device 200 ′ or device 205 .

다른 실시예에서, 기기(200)는 모니터링 에이전트(197)를 실행한다. 일 실시예에서, 모니터링 에이전트(197)는 기기(200) 상에서 실행되는 임의의 어플리케이션, 프로그램, 프로세스, 서비스, 작업 또는 스레드의 성능을 측정 및 모니터링한다. 예를 들어, 모니터링 에이전트(197)는 vServer(275A-275N)의 성능 및 동작을 모니터링하고 측정할 수 있다. 다른 실시예에서, 모니터링 에이전트(197)는 기기(200)의 임의의 전송 계층 접속의 성능을 측정 및 모니터링한다. 일부 실시예에서, 모니터링 에이전트(197)는 기기(200)를 횡단하는 임의의 사용자 세션의 성능을 측정 및 모니터링한다. 일 실시예에서, 모니터링 에이전트(197)는 SSL VPN 세션과 같은 기기(200)를 횡단하는 임의의 가상 사설 네트워크 접속 및/또는 세션의 성능을 측정 및 모니터링한다. 또 다른 실시예에서, 모니터링 에이전트(197)는 기기(200)의 메모리, CPU 및 디스크 사용량 및 성능을 측정 및 모니터링한다. 또 다른 실시예에서, 모니터링 에이전트(197)는 SSL 오프로딩, 접속 풀링 및 다중화, 캐싱 및 압축과 같이 기기(200)에 의해 수행되는 임의의 가속 기술(288)의 성능을 측정 및 모니터링한다. 일부 실시예에서, 모니터링 에이전트(197)는 기기(200)에 의해 수행되는 임의의 부하 밸런싱 및/또는 컨텐츠 스위칭(284)의 성능을 측정 및 모니터링한다. 다른 실시예에서, 모니터링 에이전트(197)는 기기(200)에 의해 수행되는 어플리케이션 방화벽(290) 보호 및 프로세싱의 성능을 측정 및 모니터링한다.In another embodiment, the device 200 runs the monitoring agent 197 . In one embodiment, the monitoring agent 197 measures and monitors the performance of any application, program, process, service, task or thread running on the device 200 . For example, the monitoring agent 197 may monitor and measure the performance and operation of the vServers 275A-275N. In another embodiment, the monitoring agent 197 measures and monitors the performance of any transport layer connection of the device 200 . In some embodiments, monitoring agent 197 measures and monitors the performance of any user sessions traversing device 200 . In one embodiment, the monitoring agent 197 measures and monitors the performance of any virtual private network connection and/or session traversing the device 200, such as an SSL VPN session. In another embodiment, the monitoring agent 197 measures and monitors memory, CPU and disk usage and performance of the device 200 . In another embodiment, the monitoring agent 197 measures and monitors the performance of any acceleration techniques 288 performed by the device 200, such as SSL offloading, connection pooling and multiplexing, caching and compression. In some embodiments, the monitoring agent 197 measures and monitors the performance of any load balancing and/or content switching 284 performed by the device 200 . In another embodiment, the monitoring agent 197 measures and monitors the performance of the application firewall 290 protection and processing performed by the device 200 .

C. 클라이언트 에이전트C. Client Agent

이하 도 3을 참조하면, 클라이언트 에이전트(120)의 실시예가 도시되어 있다. 클라이언트(102)는 네트워크(104)를 통해 기기(200) 및/또는 서버(106)와의 통신을 확립 및 교환하기 위한 클라이언트 에이전트(120)를 포함한다. 간략한 개요에서, 클라이언트(102)는 커널 모드(302) 및 사용자 모드(303)를 갖는 운영 체제 및 하나 이상의 계층(310a-310b)을 갖는 네트워크 스택(310)을 갖는 컴퓨팅 디바이스(100) 상에서 동작한다. 클라이언트(102)는 하나 이상의 어플리케이션을 설치 및/또는 실행할 수 있다. 일부 실시예에서, 하나 이상의 어플리케이션은 네트워크 스택(310)을 통해 네트워크(104)에 전달될 수 있다. 웹 브라우저와 같은 어플리케이션 중 하나는 또한 제1 프로그램(322)을 포함할 수 있다. 예를 들어, 제1 프로그램(322)은 일부 실시예에서 클라이언트 에이전트(120) 또는 그 임의의 부분을 설치 및/또는 실행하는 데 사용될 수 있다. 클라이언트 에이전트(120)는 하나 이상의 어플리케이션으로부터 네트워크 스택(310)으로부터의 네트워크 통신을 인터셉팅하기 위한 인터셉션 메커니즘 또는 인터셉터(350)를 포함한다.Referring now to Figure 3, an embodiment of a client agent 120 is shown. Client 102 includes a client agent 120 for establishing and exchanging communication with device 200 and/or server 106 over network 104 . In a brief overview, a client 102 operates on a computing device 100 having an operating system with kernel mode 302 and user mode 303 and a network stack 310 with one or more layers 310a-310b. . Client 102 may install and/or run one or more applications. In some embodiments, one or more applications may be delivered to the network 104 via the network stack 310 . One of the applications, such as a web browser, may also include a first program 322 . For example, the first program 322 may be used to install and/or run the client agent 120 or any portion thereof in some embodiments. The client agent 120 includes an interception mechanism or interceptor 350 for intercepting network communications from the network stack 310 from one or more applications.

클라이언트(102)의 네트워크 스택(310)은 네트워크와의 접속 및 통신을 제공하기 위한 임의의 유형 및 형태의 소프트웨어, 또는 하드웨어 또는 이들의 임의의 조합을 포함할 수 있다. 일 실시예에서, 네트워크 스택(310)은 네트워크 프로토콜 스위트를 위한 소프트웨어 실시예를 포함한다. 네트워크 스택(310)은 본 기술 분야의 통상의 기술자가 인식하고 이해하는 OSI(Open Systems Interconnection) 통신 모델의 임의의 네트워크 계층과 같은 하나 이상의 네트워크 계층을 포함할 수 있다. 이와 같이, 네트워크 스택(310)은 OSI 모델의 다음 계층 중 임의의 계층에 대한 임의의 유형 및 형태의 프로토콜을 포함할 수 있다: 1) 물리적 링크 계층, 2) 데이터 링크 계층, 3) 네트워크 계층, 4) 전송 계층, 5) 세션 계층, 6) 프리젠테이션 계층 및 7) 어플리케이션 계층. 일 실시예에서, 네트워크 스택(310)은 일반적으로 TCP/IP로 지칭되는 인터넷 프로토콜(IP)의 네트워크 계층 프로토콜을 통한 전송 제어 프로토콜(TCP)을 포함할 수 있다. 일부 실시예에서, TCP/IP 프로토콜은 이더넷 프로토콜을 통해 전달될 수 있으며, 이는 IEEE 802.3에 의해 커버되는 이러한 프로토콜과 같은 IEEE WAN(wide-area-network) 또는 LAN(local-area-network) 프로토콜의 패밀리 중 임의의 것을 포함할 수 있다. 일부 실시예에서, 네트워크 스택(310)은 IEEE 802.11 및/또는 모바일 인터넷 프로토콜과 같은 임의의 유형 및 형태의 무선 프로토콜을 포함한다.The network stack 310 of the client 102 may include any type and form of software, or hardware, or any combination thereof, for providing connectivity and communication with a network. In one embodiment, the network stack 310 includes a software embodiment for a network protocol suite. The network stack 310 may include one or more network layers, such as any network layer of the Open Systems Interconnection (OSI) communication model recognized and understood by those of ordinary skill in the art. As such, the network stack 310 may include any type and type of protocol for any of the following layers of the OSI model: 1) a physical link layer, 2) a data link layer, 3) a network layer, 4) transport layer, 5) session layer, 6) presentation layer and 7) application layer. In one embodiment, network stack 310 may include Transmission Control Protocol (TCP) over the Network Layer Protocol of Internet Protocol (IP), commonly referred to as TCP/IP. In some embodiments, the TCP/IP protocol may be carried over an Ethernet protocol, which is equivalent to an IEEE wide-area-network (WAN) or local-area-network (LAN) protocol, such as these protocols covered by IEEE 802.3. It can include any of the families. In some embodiments, network stack 310 includes any type and form of wireless protocol, such as IEEE 802.11 and/or Mobile Internet Protocol.

TCP/IP 기반 네트워크의 관점에서, MAPI(Messaging Application Programming Interface)(이메일), FTP(File Transfer Protocol), HTTP(HyperText Transfer Protocol), CIFS(Common Internet File System) 프로토콜(파일 전송), ICA(Independent Computing Architecture) 프로토콜, RDP(Remote Desktop Protocol), WAP(Wireless Application Protocol), 모바일 IP 프로토콜 및 VoIP(Voice over IP) 프로토콜을 포함하여 임의의 TCP/IP 기반 프로토콜이 사용될 수 있다. 다른 실시예에서, 네트워크 스택(310)은 수정된 전송 제어 프로토콜, 예를 들어, 트랜잭션 TCP(T/TCP), 선택 확인 응답을 갖는 TCP(TCP-SACK), 큰 윈도우를 가진 TCP(TCP-LW), TCP-Vegas 프로토콜과 같은 혼잡 예측 프로토콜 및 TCP 스푸핑 프로토콜과 같은 임의의 유형 및 형태의 전송 제어 프로토콜을 포함한다. 다른 실시예에서, UDP over IP와 같은 임의의 유형 및 형태의 사용자 데이터그램 프로토콜(UDP)이 음성 통신 또는 실시간 데이터 통신에 대해서와 같이 네트워크 스택(310)에 의해 사용될 수 있다.From the perspective of a TCP/IP-based network, MAPI (Messaging Application Programming Interface) (email), FTP (File Transfer Protocol), HTTP (HyperText Transfer Protocol), CIFS (Common Internet File System) protocol (file transfer), ICA (Independent) Any TCP/IP based protocol may be used, including Computing Architecture) protocol, Remote Desktop Protocol (RDP), Wireless Application Protocol (WAP), Mobile IP protocol, and Voice over IP (VoIP) protocol. In another embodiment, the network stack 310 implements a modified transmission control protocol, e.g., transactional TCP (T/TCP), TCP with selective acknowledgment (TCP-SACK), TCP with large window (TCP-LW). ), congestion prediction protocols such as the TCP-Vegas protocol, and transmission control protocols of any type and form, such as the TCP spoofing protocol. In other embodiments, any type and form of User Datagram Protocol (UDP), such as UDP over IP, may be used by the network stack 310, such as for voice communications or real-time data communications.

또한, 네트워크 스택(310)은 TCP 드라이버 또는 네트워크 계층 드라이버와 같은 하나 이상의 계층을 지원하는 하나 이상의 네트워크 드라이버를 포함할 수 있다. 네트워크 드라이버는 컴퓨팅 디바이스(100)의 운영 체제의 일부로서 또는 컴퓨팅 디바이스(100)의 임의의 네트워크 인터페이스 카드 또는 다른 네트워크 액세스 구성 요소의 일부로서 포함될 수 있다. 일부 실시예에서, 네트워크 스택(310)의 임의의 네트워크 드라이버는 본원에 설명된 임의의 기술을 지원하는 네트워크 스택(310)의 커스텀 또는 수정된 부분을 제공하도록 맞춤화, 수정 또는 적응될 수 있다. 다른 실시예에서, 가속 프로그램(302)은 클라이언트(102)의 운영 체제에 의해 설치되거나 이와 다르게 제공되는 네트워크 스택(310)과 함께 동작하거나 이와 연계하여 작동하도록 설계 및 구성된다.Additionally, the network stack 310 may include one or more network drivers that support one or more layers, such as a TCP driver or a network layer driver. The network driver may be included as part of the operating system of the computing device 100 or as part of any network interface card or other network access component of the computing device 100 . In some embodiments, any network drivers of the network stack 310 may be customized, modified, or adapted to provide custom or modified portions of the network stack 310 that support any of the technologies described herein. In another embodiment, the acceleration program 302 is designed and configured to operate with or in conjunction with the network stack 310 installed by or otherwise provided by the operating system of the client 102 .

네트워크 스택(310)은 클라이언트(102)의 네트워크 통신과 관련된 임의의 정보 및 데이터를 수신, 획득, 제공 또는 이와 다르게 액세스하기 위한 임의의 유형 및 형태의 인터페이스를 포함한다. 일 실시예에서, 네트워크 스택(310)에 대한 인터페이스는 어플리케이션 프로그래밍 인터페이스(API)를 포함한다. 인터페이스는 또한 임의의 함수 호출, 후킹(hooking) 또는 필터링 메커니즘, 이벤트 또는 콜 백 메커니즘, 또는 임의의 유형의 인터페이스 기술을 포함할 수 있다. 인터페이스를 통한 네트워크 스택(310)은 네트워크 스택(310)의 기능 또는 동작과 관련된 객체와 같은 임의의 유형 및 형태의 데이터 구조를 수신하거나 제공할 수 있다. 예를 들어, 데이터 구조는 네트워크 패킷 또는 하나 이상의 네트워크 패킷과 관련된 정보 및 데이터를 포함할 수 있다. 일부 실시예에서, 데이터 구조는 전송 계층의 네트워크 패킷과 같은 네트워크 스택(310)의 프로토콜 계층에서 프로세싱되는 네트워크 패킷의 일부를 포함한다. 일부 실시예에서, 데이터 구조(325)는 커널-레벨 데이터 구조를 포함하는 반면, 다른 실시예에서, 데이터 구조(325)는 사용자-모드 데이터 구조를 포함한다. 커널-레벨 데이터 구조는 커널 모드(302)에서 동작하는 네트워크 스택(310)의 일부와 관련되거나 획득된 데이터 구조, 또는 커널-모드(302)에서 실행되는 네트워크 드라이버 또는 다른 소프트웨어, 또는 운영 체제의 커널-모드에서 실행 또는 동작되는 서비스, 프로세스, 작업, 스레드 또는 다른 실행 가능 명령에 의해 획득 또는 수신되는 임의의 데이터 구조를 포함할 수 있다.Network stack 310 includes any type and form of interfaces for receiving, obtaining, providing, or otherwise accessing any information and data related to network communications of client 102 . In one embodiment, the interface to the network stack 310 includes an application programming interface (API). Interfaces may also include any function calls, hooking or filtering mechanisms, event or callback mechanisms, or any type of interface technology. The network stack 310 via the interface may receive or provide data structures of any type and form, such as objects related to the function or operation of the network stack 310 . For example, a data structure may include information and data related to a network packet or one or more network packets. In some embodiments, the data structure includes a portion of a network packet that is processed at the protocol layer of the network stack 310 , such as a network packet at the transport layer. In some embodiments, data structure 325 includes a kernel-level data structure, while in other embodiments, data structure 325 includes a user-mode data structure. A kernel-level data structure is a data structure associated with or obtained from a portion of the network stack 310 operating in kernel mode 302 , or a network driver or other software running in kernel-mode 302 , or the kernel of the operating system. may contain any data structure obtained or received by a service, process, task, thread, or other executable instruction executing or operating in a -mode.

또한, 네트워크 스택(310)의 일부 부분은 커널 모드(302), 예를 들어, 데이터 링크 또는 네트워크 계층에서 실행 또는 동작할 수 있는 반면, 다른 부분은 네트워크 스택(310)의 어플리케이션 계층과 같은 사용자-모드(303)에서 실행 또는 동작할 수 있다. 예를 들어, 네트워크 스택(310)의 제1 부분(310a)은 네트워크 스택(310)의 사용자-모드 액세스를 어플리케이션에 제공하는 한편, 네트워크 스택(310)의 제2 부분(310a)은 네트워크에 액세스를 제공한다. 일부 실시예에서, 네트워크 스택(310)의 제1 부분(310a)은 임의의 계층 5-7과 같은 네트워크 스택(310)의 하나 이상의 상위 계층을 포함할 수 있다. 다른 실시예에서, 네트워크 스택(310)의 제2 부분(310b)은 임의의 계층 1-4와 같은 하나 이상의 하위 계층을 포함한다. 네트워크 스택(310)의 제1 부분(310a) 및 제2 부분(310b) 각각은 사용자-모드(303), 커널-모드(302) 또는 이들의 조합에서의 임의의 하나 이상의 네트워크 계층에서, 또는 네트워크 계층의 임의의 부분에서 또는 네트워크 계층에 대한 인터페이스 지점 또는 사용자-모드(303) 및 커널-모드(302)의 임의의 부분 또는 이에 대한 인터페이스 지점에서 네트워크 스택(310)의 임의의 부분을 포함할 수 있다.Additionally, some portions of the network stack 310 may run or operate in kernel mode 302 , for example, the data link or network layer, while other portions may be user-like, such as the application layer of the network stack 310 . It can run or operate in mode 303 . For example, a first portion 310a of the network stack 310 provides user-mode access of the network stack 310 to an application, while a second portion 310a of the network stack 310 accesses the network. provides In some embodiments, the first portion 310a of the network stack 310 may include one or more upper layers of the network stack 310, such as any of layers 5-7. In another embodiment, the second portion 310b of the network stack 310 includes one or more lower layers, such as any of layers 1-4. Each of the first portion 310a and the second portion 310b of the network stack 310 is at any one or more network layers in user-mode 303 , kernel-mode 302 , or a combination thereof, or a network may include any portion of the network stack 310 at any portion of the layer or interface point to the network layer or any portion of or interface point to user-mode 303 and kernel-mode 302 . have.

인터셉터(350)는 소프트웨어, 하드웨어, 또는 소프트웨어 및 하드웨어의 임의의 조합을 포함할 수 있다. 일 실시예에서, 인터셉터(350)는 네트워크 스택(310)의 임의의 지점에서 네트워크 통신을 인터셉팅하고, 인터셉터(350) 또는 클라이언트 에이전트(120)에 의해 원하거나 관리되거나 제어되는 착신지로 네트워크 통신을 리디렉팅 또는 송신한다. 예를 들어, 인터셉터(350)는 제1 네트워크의 네트워크 스택(310)의 네트워크 통신을 인터셉팅하고 제2 네트워크(104) 상의 송신을 위해 기기(200)로 네트워크 통신을 송신할 수 있다. 일부 실시예에서, 임의의 유형의 인터셉터(350)를 포함하는 인터셉터(350)는 네트워크 스택(310)과 인터페이싱 및 작동하도록 구성 및 설계된 네트워크 드라이버와 같은 드라이버를 포함한다. 일부 실시예에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 전송 계층에서와 같이 네트워크 스택(310)의 하나 이상의 계층에서 동작한다. 일 실시예에서, 인터셉터(350)는 필터 드라이버, 후킹 메커니즘, 또는 전송 드라이버 인터페이스(TDI)를 통해서와 같이, 네트워크 스택의 전송 계층에 인터페이싱하는 임의의 형태 및 유형의 적절한 네트워크 드라이버 인터페이스를 포함한다. 일부 실시예에서, 인터셉터(350)는 전송 프로토콜 계층 위의 임의의 계층, 예를 들어, 어플리케이션 프로토콜 계층과 같은 전송 계층 및 다른 프로토콜 계층과 같은 제1 프로토콜 계층에 인터페이싱한다. 일 실시예에서, 인터셉터(350)는 NDIS(Network Driver Interface Specification)를 따르는 드라이버 또는 NDIS 드라이버를 포함할 수 있다. 다른 실시예에서, 인터셉터(350)는 미니-필터 또는 미니-포트 드라이버를 포함할 수 있다. 일 실시예에서, 인터셉터(350) 또는 그 일부는 커널-모드(302)에서 동작한다. 다른 실시예에서, 인터셉터(350) 또는 그 일부는 사용자-모드(303)에서 동작한다. 일부 실시예에서, 인터셉터(350)의 일부는 커널-모드(302)에서 동작하는 반면, 인터셉터(350)의 다른 부분은 사용자-모드(303)에서 동작한다. 다른 실시예에서, 클라이언트 에이전트(120)는 사용자 모드(303)에서 동작하지만 인터셉터(350)를 통해 커널-레벨 데이터 구조(225)를 획득하기 위해서와 같이, 커널-모드 드라이버, 프로세스, 서비스, 작업 또는 운영 체제의 일부에 인터페이싱한다. 추가의 실시예에서, 인터셉터(350)는 어플리케이션과 같은 사용자-모드 어플리케이션 또는 프로그램이다.Interceptor 350 may include software, hardware, or any combination of software and hardware. In one embodiment, interceptor 350 intercepts network communications at any point in network stack 310 and directs network communications to destinations desired, managed, or controlled by interceptor 350 or client agent 120 . redirect or send For example, the interceptor 350 may intercept the network communication of the network stack 310 of the first network and transmit the network communication to the device 200 for transmission on the second network 104 . In some embodiments, interceptor 350 , including any type of interceptor 350 , includes a driver, such as a network driver, configured and designed to interface and operate with network stack 310 . In some embodiments, client agent 120 and/or interceptor 350 operate at one or more layers of network stack 310, such as at the transport layer. In one embodiment, interceptor 350 includes any form and type of suitable network driver interface that interfaces to the transport layer of the network stack, such as through a filter driver, hooking mechanism, or transport driver interface (TDI). In some embodiments, interceptor 350 interfaces to any layer above the transport protocol layer, eg, a transport layer, such as an application protocol layer, and a first protocol layer, such as another protocol layer. In one embodiment, the interceptor 350 may include a driver or NDIS driver conforming to the Network Driver Interface Specification (NDIS). In another embodiment, the interceptor 350 may include a mini-filter or a mini-port driver. In one embodiment, interceptor 350 , or a portion thereof, operates in kernel-mode 302 . In another embodiment, interceptor 350 , or a portion thereof, operates in user-mode 303 . In some embodiments, portions of interceptor 350 operate in kernel-mode 302 , while other portions of interceptor 350 operate in user-mode 303 . In another embodiment, the client agent 120 operates in user mode 303 but a kernel-mode driver, process, service, task, such as to obtain a kernel-level data structure 225 via the interceptor 350 . Or interface to part of the operating system. In a further embodiment, the interceptor 350 is a user-mode application or program, such as an application.

일 실시예에서, 인터셉터(350)는 임의의 전송 계층 접속 요청을 인터셉팅한다. 이들 실시예에서, 인터셉터(350)는 착신 IP 주소 및/또는 포트와 같은 착신 정보를 그 위치에 대해 원하는 위치로 설정하기 위해 전송 계층 어플리케이션 프로그래밍 인터페이스(API) 호출을 실행한다. 이러한 방식으로, 인터셉터(350)는 전송 계층 접속을 인터셉터(350) 또는 클라이언트 에이전트(120)에 의해 제어 또는 관리되는 IP 주소 및 포트로 인터셉팅 및 리디렉팅한다. 일 실시예에서, 인터셉터(350)는 접속을 위한 착신 정보를 클라이언트 에이전트(120)가 청취하고 있는 클라이언트(102)의 로컬 IP 주소 및 포트로 설정한다. 예를 들어, 클라이언트 에이전트(120)는 리디렉팅된 전송 계층 통신을 위해 로컬 IP 주소 및 포트 상에서 청취하는 프록시 서비스를 포함할 수 있다. 일부 실시예에서, 클라이언트 에이전트(120)는 그 후 리디렉팅된 전송 계층 통신을 기기(200)에 전달한다.In one embodiment, interceptor 350 intercepts any transport layer connection request. In these embodiments, interceptor 350 executes a transport layer application programming interface (API) call to set destination information, such as destination IP address and/or port, to the desired location for that location. In this manner, interceptor 350 intercepts and redirects transport layer connections to IP addresses and ports controlled or managed by interceptor 350 or client agent 120 . In one embodiment, the interceptor 350 sets the incoming information for the connection to the local IP address and port of the client 102 on which the client agent 120 is listening. For example, the client agent 120 may include a proxy service that listens on a local IP address and port for redirected transport layer communications. In some embodiments, the client agent 120 then forwards the redirected transport layer communication to the device 200 .

일부 실시예에서, 인터셉터(350)는 DNS(Domain Name Service) 요청을 인터셉팅한다. 일 실시예에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 DNS 요청을 분석한다. 다른 실시예에서, 인터셉터는 인터셉팅된 DNS 요청을 DNS 분석을 위해 기기(200)에 송신한다. 일 실시예에서, 기기(200)는 DNS 요청을 분석하고 DNS 응답을 클라이언트 에이전트(120)에 전달한다. 일부 실시예에서, 기기(200)는 다른 기기(200') 또는 DNS 서버(106)를 통해 DNS 요청을 분석한다.In some embodiments, interceptor 350 intercepts Domain Name Service (DNS) requests. In one embodiment, client agent 120 and/or interceptor 350 parses the DNS request. In another embodiment, the interceptor sends the intercepted DNS request to the device 200 for DNS resolution. In one embodiment, the device 200 parses the DNS request and forwards the DNS response to the client agent 120 . In some embodiments, device 200 resolves DNS requests via another device 200 ′ or DNS server 106 .

또 다른 실시예에서, 클라이언트 에이전트(120)는 2개의 에이전트(120 및 120')를 포함할 수 있다. 일 실시예에서, 제1 에이전트(120)는 네트워크 스택(310)의 네트워크 계층에서 동작하는 인터셉터(350)를 포함할 수 있다. 일부 실시예에서, 제1 에이전트(120)는 ICMP(Internet Control Message Protocol) 요청(예를 들어, 핑 및 추적 루트(traceroute))과 같은 네트워크 계층 요청을 인터셉팅한다. 다른 실시예에서, 제2 에이전트(120')는 전송 계층에서 동작하고 전송 계층 통신을 인터셉팅할 수 있다. 일부 실시예에서, 제1 에이전트(120)는 네트워크 스택(210)의 하나의 계층에서의 통신을 인터셉팅하고 인터셉팅된 통신을 제2 에이전트(120')에 전달하거나 이와 인터페이싱한다.In another embodiment, the client agent 120 may include two agents 120 and 120'. In one embodiment, the first agent 120 may include an interceptor 350 operating in the network layer of the network stack 310 . In some embodiments, first agent 120 intercepts network layer requests, such as Internet Control Message Protocol (ICMP) requests (eg, pings and traceroute). In another embodiment, the second agent 120' may operate at the transport layer and intercept transport layer communications. In some embodiments, first agent 120 intercepts communications in one layer of network stack 210 and forwards the intercepted communications to or interfaces with second agent 120'.

클라이언트 에이전트(120) 및/또는 인터셉터(350)는 네트워크 스택(310)의 임의의 다른 프로토콜 계층에 투명한 방식으로 프로토콜 계층에서 동작하거나 이와 인터페이싱할 수 있다. 예를 들어, 일 실시예에서, 인터셉터(350)는 네트워크 계층과 같은 전송 계층 아래의 임의의 프로토콜 계층 및 세션, 프리젠테이션 또는 어플리케이션 계층 프로토콜과 같은 전송 계층 위의 임의의 프로토콜 계층에 투명하게 네트워크 스택(310)의 전송 계층과 인터페이싱하거나 동작한다. 이것은 네트워크 스택(310)의 다른 프로토콜 계층이 원하는 대로 그리고 인터셉터(350)를 사용하기 위해 수정 없이 동작할 수 있게 한다. 이와 같이, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 전송 계층과 인터페이싱하여 TCP/IP를 통한 임의의 어플리케이션 계층 프로토콜과 같이 전송 계층에 의해 전달되는 임의의 프로토콜을 통해 제공되는 임의의 통신을 보안화, 최적화, 가속화, 라우팅 또는 부하-밸런싱할 수 있다.The client agent 120 and/or the interceptor 350 may operate at or interface with the protocol layer in a manner that is transparent to any other protocol layer of the network stack 310 . For example, in one embodiment, the interceptor 350 is transparent to any protocol layer below the transport layer, such as a network layer, and any protocol layer, above the transport layer, such as a session, presentation, or application layer protocol, the network stack. It interfaces with or operates with the transport layer of 310 . This allows the other protocol layers of the network stack 310 to operate as desired and without modification to use the interceptor 350 . As such, the client agent 120 and/or interceptor 350 interfaces with the transport layer to receive any communication provided over any protocol carried by the transport layer, such as any application layer protocol over TCP/IP. It can be secured, optimized, accelerated, routed or load-balanced.

또한, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 임의의 어플리케이션, 클라이언트(102)의 사용자 및 클라이언트(102)와 통신하는 서버와 같은 임의의 다른 컴퓨팅 디바이스에 투명한 방식으로 네트워크 스택(310)에서 동작하거나 이와 인터페이싱할 수 있다. 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 어플리케이션의 수정 없이 클라이언트(102) 상에 설치 및/또는 실행될 수 있다. 일부 실시예에서, 클라이언트(102) 또는 클라이언트(102)와 통신하는 컴퓨팅 디바이스의 사용자는 클라이언트 에이전트(120) 및/또는 인터셉터(350)의 존재, 실행 또는 동작을 인식하지 못한다. 이와 같이, 일부 실시예에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 어플리케이션, 클라이언트(102)의 사용자, 서버와 같은 다른 컴퓨팅 디바이스, 또는 인터셉터(350)에 의해 인터페이싱되는 프로토콜 계층 위 및/또는 아래의 임의의 프로토콜 계층에 투명하게 설치, 실행 및/또는 동작된다.In addition, the client agent 120 and/or interceptor 350 can be configured to network stack 310 in a manner transparent to any application, user of client 102 and any other computing device, such as a server in communication with client 102 . can operate on or interface with The client agent 120 and/or the interceptor 350 may be installed and/or executed on the client 102 without modification of the application. In some embodiments, the client 102 or the user of the computing device communicating with the client 102 is unaware of the presence, execution, or operation of the client agent 120 and/or interceptor 350 . As such, in some embodiments, the client agent 120 and/or the interceptor 350 is above and above the protocol layer interfaced by the application, the user of the client 102 , another computing device such as a server, or the interceptor 350 . It is transparently installed, executed and/or operated on any protocol layer below.

클라이언트 에이전트(120)는 가속 프로그램(302), 스트리밍 클라이언트(306), 수집 에이전트(304) 및/또는 모니터링 에이전트(197)를 포함한다. 일 실시예에서, 클라이언트 에이전트(120)는 Fort Lauderdale, Florida의 Citrix Systems, Inc.에 의해 개발된 ICA(Independent Computing Architecture) 클라이언트 또는 그 일부를 포함하고, 또한 ICA 클라이언트라고도 칭해진다. 일부 실시예에서, 클라이언트(120)는 서버(106)로부터 클라이언트(102)로 어플리케이션을 스트리밍하기 위한 어플리케이션 스트리밍 클라이언트(306)를 포함한다. 일부 실시예에서, 클라이언트 에이전트(120)는 클라이언트(102)와 서버(106) 사이의 통신을 가속화하기 위한 가속 프로그램(302)을 포함한다. 다른 실시예에서, 클라이언트 에이전트(120)는 엔드-포인트 검출/스캐닝을 수행하고 기기(200) 및/또는 서버(106)에 대한 엔드-포인트 정보를 수집하기 위한 수집 에이전트(304)를 포함한다.The client agent 120 includes an acceleration program 302 , a streaming client 306 , an aggregation agent 304 and/or a monitoring agent 197 . In one embodiment, client agent 120 includes an Independent Computing Architecture (ICA) client, or a portion thereof, developed by Citrix Systems, Inc. of Fort Lauderdale, Florida, also referred to as an ICA client. In some embodiments, client 120 includes an application streaming client 306 for streaming applications from server 106 to client 102 . In some embodiments, the client agent 120 includes an accelerator program 302 for accelerating communication between the client 102 and the server 106 . In another embodiment, client agent 120 includes aggregation agent 304 for performing endpoint detection/scanning and collecting endpoint information for device 200 and/or server 106 .

일부 실시예에서, 가속 프로그램(302)은 서버(106)에 의해 제공되는 어플리케이션에 액세스하는 것과 같이, 서버(106)와의 클라이언트의 통신 및/또는 서버(106)에 대한 액세스를 가속화, 향상 또는 달리 개선하기 위한 하나 이상의 가속 기술을 수행하기 위한 클라이언트-측 가속 프로그램을 포함한다. 가속 프로그램(302)의 실행 가능한 명령의 로직, 기능 및/또는 동작은 다음 가속 기술 중 하나 이상을 수행할 수 있다: 1) 멀티-프로토콜 압축, 2) 전송 제어 프로토콜 풀링, 3) 전송 제어 프로토콜 다중화, 4) 전송 제어 프로토콜 버퍼링 및 5) 캐시 관리자를 통한 캐싱. 부가적으로, 가속 프로그램(302)은 클라이언트(102)에 의해 수신 및/또는 송신된 임의의 통신의 암호화 및/또는 복호화를 수행할 수 있다. 일부 실시예에서, 가속 프로그램(302)은 가속 기술 중 하나 이상을 통합된 방식 또는 양식으로 수행한다. 또한, 가속 프로그램(302)은 전송 계층 프로토콜의 네트워크 패킷의 페이로드로서 운반되는 임의의 프로토콜 또는 복수의-프로토콜에 대해 압축을 수행할 수 있다.In some embodiments, the accelerator program 302 accelerates, enhances, or otherwise accelerates, enhances, or otherwise accesses a client's communication with the server 106 and/or access to the server 106 , such as accessing applications provided by the server 106 . and a client-side acceleration program for performing one or more acceleration techniques to improve upon. The logic, functions, and/or operations of the executable instructions of the acceleration program 302 may perform one or more of the following acceleration techniques: 1) multi-protocol compression, 2) transmission control protocol pooling, 3) transmission control protocol multiplexing. , 4) Transmission Control Protocol Buffering and 5) Caching via Cache Manager. Additionally, the acceleration program 302 may perform encryption and/or decryption of any communications received and/or transmitted by the client 102 . In some embodiments, the acceleration program 302 performs one or more of the acceleration techniques in an integrated manner or modality. In addition, the acceleration program 302 may perform compression for any protocol or multi-protocol carried as a payload of a network packet of a transport layer protocol.

스트리밍 클라이언트(306)는 서버(106)로부터 스트리밍된 어플리케이션을 수신 및 실행하기 위한 어플리케이션, 프로그램, 프로세스, 서비스, 작업 또는 실행 가능한 명령을 포함한다. 서버(106)는 재생, 실행 또는 이와 다르게 클라이언트(102) 상의 어플리케이션을 실행되게 하기 위해 하나 이상의 어플리케이션 데이터 파일을 스트리밍 클라이언트(306)로 스트리밍할 수 있다. 일부 실시예에서, 서버(106)는 압축 또는 패키징된 어플리케이션 데이터 파일의 세트를 스트리밍 클라이언트(306)로 송신한다. 일부 실시예에서, 복수의 어플리케이션 파일은 압축되어 CAB, ZIP, SIT, TAR, JAR 또는 다른 아카이브와 같은 아카이브 파일 내에 파일 서버 상에 저장된다. 일 실시예에서, 서버(106)는 어플리케이션 파일을 압축 해제, 언패키징 또는 아카이빙 해제하여 파일을 클라이언트(102)로 송신한다. 다른 실시예에서, 클라이언트(102)는 어플리케이션 파일을 압축 해제, 언패키징 또는 아카이빙 해제한다. 스트리밍 클라이언트(306)는 어플리케이션 또는 그 일부를 동적으로 설치하고 어플리케이션을 실행한다. 일 실시예에서, 스트리밍 클라이언트(306)는 실행 가능한 프로그램일 수 있다. 일부 실시예에서, 스트리밍 클라이언트(306)는 다른 실행 가능한 프로그램을 론칭할 수 있다.The streaming client 306 includes applications, programs, processes, services, tasks, or executable instructions for receiving and executing applications streamed from the server 106 . The server 106 may stream one or more application data files to the streaming client 306 for playback, execution, or otherwise causing the application on the client 102 to be executed. In some embodiments, server 106 sends a set of compressed or packaged application data files to streaming client 306 . In some embodiments, the plurality of application files are compressed and stored on a file server in an archive file such as a CAB, ZIP, SIT, TAR, JAR, or other archive. In one embodiment, the server 106 decompresses, unpackages, or de-archives the application file and sends the file to the client 102 . In another embodiment, the client 102 decompresses, unpackages, or de-archives the application files. The streaming client 306 dynamically installs an application or a portion thereof and executes the application. In one embodiment, the streaming client 306 may be an executable program. In some embodiments, streaming client 306 may launch other executable programs.

수집 에이전트(304)는 클라이언트(102)에 대한 정보를 식별, 획득 및/또는 수집하기 위한 어플리케이션, 프로그램, 프로세스, 서비스, 작업 또는 실행 가능한 명령을 포함한다. 일부 실시예에서, 기기(200)는 수집 에이전트(304)를 클라이언트(102) 또는 클라이언트 에이전트(120)로 송신한다. 수집 에이전트(304)는 기기(200)의 정책 엔진(236)의 하나 이상의 정책에 따라 구성될 수 있다. 다른 실시예에서, 수집 에이전트(304)는 클라이언트(102)에 대한 수집된 정보를 기기(200)에 송신한다. 일 실시예에서, 기기(200)의 정책 엔진(236)은 수집된 정보를 사용하여 네트워크(104)에 대한 클라이언트의 접속의 액세스, 인증 및 허가 제어를 결정 및 제공한다.The aggregation agent 304 includes an application, program, process, service, task, or executable instruction for identifying, obtaining, and/or collecting information about the client 102 . In some embodiments, device 200 sends aggregation agent 304 to client 102 or client agent 120 . The aggregation agent 304 may be configured according to one or more policies of the policy engine 236 of the device 200 . In another embodiment, the aggregation agent 304 sends the collected information about the client 102 to the device 200 . In one embodiment, the policy engine 236 of the device 200 uses the collected information to determine and provide access, authentication, and admission control of the client's connection to the network 104 .

일 실시예에서, 수집 에이전트(304)는 클라이언트의 하나 이상의 속성 또는 특성을 식별 및 결정하는 엔드-포인트 검출 및 스캐닝 메커니즘을 포함한다. 예를 들어, 수집 에이전트(304)는 다음의 클라이언트-측 속성 중 임의의 하나 이상을 식별 및 결정할 수 있다: 1) 운영 체제 및/또는 운영 체제의 버전, 2) 운영 체제의 서비스 팩, 3) 실행중인 서비스, 4) 실행중인 프로세스 및 5) 파일. 수집 에이전트(304)는 또한 클라이언트 상에서 다음 중 임의의 하나 이상의 존재 또는 버전을 식별 및 결정한다: 1) 안티바이러스 소프트웨어, 2) 개인 방화벽 소프트웨어, 3) 안티-스팸 소프트웨어 및 4) 인터넷 보안 소프트웨어. 정책 엔진(236)은 클라이언트의 속성 또는 특성 또는 클라이언트-측 속성 중 임의의 하나 이상에 기초하여 하나 이상의 정책을 가질 수 있다.In one embodiment, the aggregation agent 304 includes an endpoint detection and scanning mechanism that identifies and determines one or more attributes or characteristics of the client. For example, the aggregation agent 304 may identify and determine any one or more of the following client-side attributes: 1) the operating system and/or version of the operating system, 2) the service pack of the operating system, 3) Running services, 4) running processes, and 5) files. The aggregation agent 304 also identifies and determines the presence or version of any one or more of the following on the client: 1) anti-virus software, 2) personal firewall software, 3) anti-spam software, and 4) Internet security software. The policy engine 236 may have one or more policies based on any one or more of a client-side attribute or an attribute or characteristic of the client.

일부 실시예에서, 클라이언트 에이전트(120)는 도 1d 및 도 2b와 관련하여 논의된 모니터링 에이전트(197)를 포함한다. 모니터링 에이전트(197)는 Visual Basic 또는 Java 스크립트와 같은 임의의 유형 및 형태의 스크립트일 수 있다. 일 실시예에서, 모니터링 에이전트(197)는 클라이언트 에이전트(120)의 임의의 부분의 성능을 모니터링 및 측정한다. 예를 들어, 일부 실시예에서, 모니터링 에이전트(197)는 가속 프로그램(302)의 성능을 모니터링 및 측정한다. 다른 실시예에서, 모니터링 에이전트(197)는 스트리밍 클라이언트(306)의 성능을 모니터링 및 측정한다. 다른 실시예에서, 모니터링 에이전트(197)는 수집 에이전트(304)의 성능을 모니터링 및 측정한다. 또 다른 실시예에서, 모니터링 에이전트(197)는 인터셉터(350)의 성능을 모니터링 및 측정한다. 일부 실시예에서, 모니터링 에이전트(197)는 메모리, CPU 및 디스크와 같은 클라이언트(102)의 임의의 자원을 모니터링 및 측정한다.In some embodiments, client agent 120 includes monitoring agent 197 discussed with respect to FIGS. 1D and 2B . The monitoring agent 197 may be any type and type of script, such as Visual Basic or Java script. In one embodiment, monitoring agent 197 monitors and measures the performance of any portion of client agent 120 . For example, in some embodiments, the monitoring agent 197 monitors and measures the performance of the acceleration program 302 . In another embodiment, the monitoring agent 197 monitors and measures the performance of the streaming client 306 . In another embodiment, the monitoring agent 197 monitors and measures the performance of the aggregation agent 304 . In another embodiment, the monitoring agent 197 monitors and measures the performance of the interceptor 350 . In some embodiments, the monitoring agent 197 monitors and measures any resources of the client 102, such as memory, CPU, and disk.

모니터링 에이전트(197)는 클라이언트의 임의의 어플리케이션의 성능을 모니터링 및 측정할 수 있다. 일 실시예에서, 모니터링 에이전트(197)는 클라이언트(102) 상의 브라우저의 성능을 모니터링 및 측정한다. 일부 실시예에서, 모니터링 에이전트(197)는 클라이언트 에이전트(120)를 통해 전달되는 임의의 어플리케이션의 성능을 모니터링 및 측정한다. 다른 실시예에서, 모니터링 에이전트(197)는 웹-기반 또는 HTTP 응답 시간과 같은 어플리케이션에 대한 최종 사용자 응답 시간을 측정 및 모니터링한다. 모니터링 에이전트(197)는 ICA 또는 RDP 클라이언트의 성능을 모니터링 및 측정할 수 있다. 다른 실시예에서, 모니터링 에이전트(197)는 사용자 세션 또는 어플리케이션 세션에 대한 메트릭을 측정 및 모니터링한다. 일부 실시예에서, 모니터링 에이전트(197)는 ICA 또는 RDP 세션을 측정 및 모니터링한다. 일 실시예에서, 모니터링 에이전트(197)는 어플리케이션 및/또는 데이터의 클라이언트(102)로의 전달을 가속시키는 데 있어서 기기(200)의 성능을 측정 및 모니터링한다.The monitoring agent 197 may monitor and measure the performance of any application of the client. In one embodiment, the monitoring agent 197 monitors and measures the performance of the browser on the client 102 . In some embodiments, monitoring agent 197 monitors and measures the performance of any applications communicated through client agent 120 . In another embodiment, the monitoring agent 197 measures and monitors end user response times for applications such as web-based or HTTP response times. The monitoring agent 197 may monitor and measure the performance of the ICA or RDP client. In another embodiment, the monitoring agent 197 measures and monitors metrics for user sessions or application sessions. In some embodiments, monitoring agent 197 measures and monitors ICA or RDP sessions. In one embodiment, the monitoring agent 197 measures and monitors the performance of the device 200 in accelerating the delivery of applications and/or data to the client 102 .

일부 실시예에서 여전히 도 3을 참조하면, 제1 프로그램(322)은 클라이언트 에이전트(120) 또는 인터셉터(350)와 같은 그 일부를 자동으로, 조용하게, 투명하게 또는 다른 방식으로 설치 및/또는 실행하는 데 사용될 수 있다. 일 실시예에서, 제1 프로그램(322)은 어플리케이션으로 로드되어 이에 의해 실행되는 ActiveX 컨트롤 또는 Java 컨트롤 또는 스크립트와 같은 플러그인 구성 요소를 포함한다. 예를 들어, 제1 프로그램(322)은 메모리 공간 또는 어플리케이션의 컨텍스트와 같은 웹 브라우저 어플리케이션에 의해 로딩되고 실행되는 ActiveX 컨트롤을 포함한다. 다른 실시예에서, 제1 프로그램(322)은 브라우저와 같은 어플리케이션으로 로딩되고 이에 의해 실행되는 실행 가능 명령의 세트를 포함한다. 일 실시예에서, 제1 프로그램(322)은 클라이언트 에이전트(120)를 설치하기 위해 설계되고 구성된 프로그램을 포함한다. 일부 실시예에서, 제1 프로그램(322)은 다른 컴퓨팅 디바이스로부터 네트워크를 통해 클라이언트 에이전트(120)를 획득, 다운로드 또는 수신한다. 다른 실시예에서, 제1 프로그램(322)은 네트워크 드라이버와 같은 프로그램을 클라이언트(102)의 운영 체제에 설치하기 위한 인스톨러 프로그램 또는 플러그 앤드 플레이(plug and play) 관리자이다.3 , in some embodiments still referring to FIG. 3 , first program 322 automatically, silently, transparently or otherwise installs and/or executes a portion thereof, such as client agent 120 or interceptor 350 . can be used to In one embodiment, first program 322 includes plug-in components such as ActiveX controls or Java controls or scripts that are loaded into and executed by applications. For example, the first program 322 includes an ActiveX control that is loaded and executed by a web browser application, such as a memory space or context of an application. In another embodiment, the first program 322 includes a set of executable instructions that are loaded into and executed by an application, such as a browser. In one embodiment, the first program 322 includes a program designed and configured to install the client agent 120 . In some embodiments, first program 322 obtains, downloads, or receives client agent 120 over a network from another computing device. In another embodiment, the first program 322 is an installer program or plug and play manager for installing a program, such as a network driver, into the operating system of the client 102 .

D. 가상화된 어플리케이션 전달 제어기를 제공하기 위한 시스템 및 방법D. Systems and Methods for Providing Virtualized Application Delivery Controllers

이하 도 4a를 참조하면, 블록도는 가상화 환경(400)의 일 실시예를 도시한다. 간략한 개요에서, 컴퓨팅 디바이스(100)는 하이퍼바이저(hypervisor) 계층, 가상화 계층 및 하드웨어 계층을 포함한다. 하이퍼바이저 계층은 가상화 계층에서 실행되는 적어도 하나의 가상 머신에 의해 하드웨어 계층의 다수의 물리적 자원(예를 들어, 프로세서(들)(421) 및 디스크(들)(428))에 대한 액세스를 할당하고 관리하는 하이퍼바이저(401)(가상화 관리자라고도 지칭함)를 포함한다. 가상화 계층은 적어도 하나의 운영 체제(410) 및 적어도 하나의 운영 체제(410)에 할당된 복수의 가상 자원을 포함한다. 가상 자원은 가상 메모리 및 가상 네트워크 인터페이스와 같은 가상 자원뿐만 아니라 복수의 가상 프로세서(432a, 432b, 432c(일반적으로 432)) 및 가상 디스크(442a, 442b, 442c(일반적으로 442))를 제한 없이 포함할 수 있다. 복수의 가상 자원 및 운영 체제(410)는 가상 머신(406)으로 지칭될 수 있다. 가상 머신(406)은 하이퍼바이저(401)와 통신하고 컴퓨팅 디바이스(100) 상에서 다른 가상 머신을 관리 및 구성하기 위한 어플리케이션을 실행하는 데 사용되는 제어 운영 체제(405)를 포함할 수 있다.Referring now to FIG. 4A , a block diagram illustrates one embodiment of a virtualized environment 400 . In a brief overview, computing device 100 includes a hypervisor layer, a virtualization layer, and a hardware layer. The hypervisor layer allocates access to multiple physical resources (eg, processor(s) 421 and disk(s) 428 ) of the hardware layer by at least one virtual machine executing in the virtualization layer, and and a managing hypervisor 401 (also referred to as a virtualization manager). The virtualization layer includes at least one operating system 410 and a plurality of virtual resources allocated to the at least one operating system 410 . Virtual resources include, without limitation, multiple virtual processors 432a, 432b, 432c (typically 432) and virtual disks 442a, 442b, 442c (typically 442), as well as virtual resources such as virtual memory and virtual network interfaces. can do. The plurality of virtual resources and operating systems 410 may be referred to as virtual machines 406 . The virtual machine 406 may include a controlling operating system 405 that communicates with the hypervisor 401 and is used to run applications on the computing device 100 to manage and configure other virtual machines.

보다 상세하게, 하이퍼바이저(401)는 물리적 디바이스에 액세스하는 운영 체제를 시뮬레이팅하는 임의의 방식으로 가상 자원을 운영 체제에 제공할 수 있다. 하이퍼바이저(401)는 가상 자원을 임의의 수의 게스트 운영 체제(410a, 410b)(일반적으로 410)에 제공할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(100)는 하나 이상의 유형의 하이퍼바이저를 실행한다. 이들 실시예에서, 하이퍼바이저는 가상 하드웨어를 에뮬레이팅하고, 물리적 하드웨어를 분할하고, 물리적 하드웨어를 가상화하고, 컴퓨팅 환경에 대한 액세스를 제공하는 가상 머신을 실행하는 데 사용될 수 있다. 하이퍼바이저는 Palo Alto, California의 VMWare, Inc.에 의해 제조된 것; 오픈 소스 Xen.org 커뮤니티에서 개발이 감독되는 오픈 소스 제품인 XEN 하이퍼바이저; Microsoft 또는 기타 업체에서 제공되는 HyperV, VirtualServer 또는 가상 PC 하이퍼바이저를 포함할 수 있다. 일부 실시예에서, 게스트 운영 체제가 실행될 수 있는 가상 머신 플랫폼을 생성하는 하이퍼바이저를 실행하는 컴퓨팅 디바이스(100)를 호스트 서버라고 칭한다. 이들 실시예 중 하나에서, 예를 들어, 컴퓨팅 디바이스(100)는 Fort Lauderdale, FL.의 Citrix Systems, Inc.에 의해 제공되는 XEN SERVER이다.More specifically, hypervisor 401 may provide virtual resources to an operating system in any manner that simulates an operating system accessing a physical device. Hypervisor 401 may provide virtual resources to any number of guest operating systems 410a, 410b (generally 410). In some embodiments, computing device 100 executes one or more types of hypervisors. In these embodiments, a hypervisor may be used to run a virtual machine that emulates virtual hardware, partitions the physical hardware, virtualizes the physical hardware, and provides access to the computing environment. The hypervisor is manufactured by VMWare, Inc. of Palo Alto, California; XEN Hypervisor, an open source product overseen in development by the open source Xen.org community; may include HyperV, VirtualServer, or Virtual PC hypervisors provided by Microsoft or other vendors. In some embodiments, a computing device 100 running a hypervisor that creates a virtual machine platform on which a guest operating system may run is referred to as a host server. In one of these embodiments, for example, computing device 100 is a XEN SERVER provided by Citrix Systems, Inc. of Fort Lauderdale, FL.

일부 실시예에서, 하이퍼바이저(401)는 컴퓨팅 디바이스 상에서 실행되는 운영 체제 내에서 실행된다. 이들 실시예 중 하나에서, 운영 체제 및 하이퍼바이저(401)를 실행하는 컴퓨팅 디바이스는 호스트 운영 체제(컴퓨팅 디바이스 상에서 실행되는 운영 체제) 및 게스트 운영 체제(하이퍼바이저(401)에 의해 제공되는 컴퓨팅 자원 파티션 내에서 실행되는 운영 체제)를 가진다고 말할 수 있다. 다른 실시예에서, 하이퍼바이저(401)는 호스트 운영 체제 상에서 실행되는 대신 컴퓨팅 디바이스 상의 하드웨어와 직접 상호 작용한다. 이들 실시예 중 하나에서, 하이퍼바이저(401)는 컴퓨팅 디바이스를 포함하는 하드웨어를 참조하여 "베어 메탈(bare metal)" 상에서 실행되는 것으로 말할 수 있다.In some embodiments, hypervisor 401 runs within an operating system running on the computing device. In one of these embodiments, the computing device running the operating system and hypervisor 401 includes a host operating system (an operating system running on the computing device) and a guest operating system (computing resource partitions provided by hypervisor 401 ). It can be said to have an operating system running within it. In another embodiment, the hypervisor 401 interacts directly with hardware on the computing device instead of running on the host operating system. In one of these embodiments, the hypervisor 401 may be said to run on “bare metal” with reference to the hardware comprising the computing device.

일부 실시예에서, 하이퍼바이저(401)는 운영 체제(410)가 실행하는 가상 머신(406a-c)(일반적으로 406)을 생성할 수 있다. 이들 실시예 중 하나에서, 예를 들어, 하이퍼바이저(401)는 가상 머신 이미지를 로드하여 가상 머신(406)을 생성한다. 이들 실시예 중 다른 실시예에서, 하이퍼바이저(401)는 가상 머신(406) 내에서 운영 체제(410)를 실행한다. 이들 실시예 중 또 다른 실시예에서, 가상 머신(406)은 운영 체제(410)를 실행한다.In some embodiments, hypervisor 401 may create virtual machines 406a - c (generally 406 ) on which operating system 410 runs. In one of these embodiments, for example, hypervisor 401 loads a virtual machine image to create virtual machine 406 . In another of these embodiments, hypervisor 401 runs operating system 410 within virtual machine 406 . In another of these embodiments, virtual machine 406 runs operating system 410 .

일부 실시예에서, 하이퍼바이저(401)는 컴퓨팅 디바이스(100) 상에서 실행되는 가상 머신(406)에 대한 프로세서 스케줄링 및 메모리 분할을 제어한다. 이들 실시예 중 하나에서, 하이퍼바이저(401)는 적어도 하나의 가상 머신(406)의 실행을 제어한다. 이들 실시예 중 다른 실시예에서, 하이퍼바이저(401)는 컴퓨팅 디바이스(100)에 의해 제공되는 적어도 하나의 하드웨어 자원의 앱스트랙션(abstraction)을 적어도 하나의 가상 머신(406)에 제시한다. 다른 실시예에서, 하이퍼바이저(401)는 물리적 프로세서 능력이 가상 머신(406)에 제공되는지 여부 및 그 방식을 제어한다.In some embodiments, hypervisor 401 controls processor scheduling and memory partitioning for virtual machine 406 executing on computing device 100 . In one of these embodiments, the hypervisor 401 controls the execution of the at least one virtual machine 406 . In another of these embodiments, the hypervisor 401 presents an abstraction of the at least one hardware resource provided by the computing device 100 to the at least one virtual machine 406 . In another embodiment, the hypervisor 401 controls whether and how physical processor capabilities are provided to the virtual machine 406 .

제어 운영 체제(405)는 게스트 운영 체제를 관리 및 구성하기 위한 적어도 하나의 어플리케이션을 실행할 수 있다. 일 실시예에서, 제어 운영 체제(405)는 가상 머신을 실행하거나, 가상 머신의 실행을 종료하거나, 가상 머신에 대한 할당을 위해 물리적 자원의 유형을 식별하기 위한 기능을 포함하여 가상 머신의 실행을 관리하기 위한 기능에 대한 액세스를 관리자에게 제공하는 사용자 인터페이스를 포함하는 어플리케이션과 같은 관리 어플리케이션을 실행할 수 있다. 다른 실시예에서, 하이퍼바이저(401)는 하이퍼바이저(401)에 의해 생성된 가상 머신(406) 내에서 제어 운영 체제(405)를 실행한다. 또 다른 실시예에서, 제어 운영 체제(405)는 컴퓨팅 디바이스(100) 상의 물리적 자원에 직접 액세스할 수 있는 권한을 갖는 가상 머신(406)에서 실행된다. 일부 실시예에서, 컴퓨팅 디바이스(100a) 상의 제어 운영 체제(405a)는 하이퍼바이저(401a)와 하이퍼바이저(401b) 사이의 통신을 통해 컴퓨팅 디바이스(100b) 상의 제어 운영 체제(405b)와 데이터를 교환할 수 있다. 이러한 방식으로, 하나 이상의 컴퓨팅 디바이스(100)는 자원의 풀(pool)에서 이용 가능한 프로세서 및 다른 물리적 자원에 관한 하나 이상의 다른 컴퓨팅 디바이스(100)와 데이터를 교환할 수 있다. 이들 실시예 중 하나에서, 이 기능은 하이퍼바이저가 복수의 물리적 컴퓨팅 디바이스에 분산된 자원의 풀을 관리할 수 있게 한다. 이들 실시예들 중 다른 실시예에서, 복수의 하이퍼바이저는 컴퓨팅 디바이스(100) 중 하나 상에서 실행되는 하나 이상의 게스트 운영 체제를 관리한다.The controlling operating system 405 may execute at least one application for managing and configuring the guest operating system. In one embodiment, the controlling operating system 405 controls the execution of the virtual machine, including functions for executing the virtual machine, terminating the execution of the virtual machine, or identifying the type of physical resource for allocation to the virtual machine. A management application may be executed, such as an application comprising a user interface that provides an administrator with access to functionality for management. In another embodiment, the hypervisor 401 runs the controlling operating system 405 within the virtual machine 406 created by the hypervisor 401 . In yet another embodiment, the controlling operating system 405 runs on a virtual machine 406 having direct access to physical resources on the computing device 100 . In some embodiments, the controlling operating system 405a on the computing device 100a exchanges data with the controlling operating system 405b on the computing device 100b via communication between the hypervisor 401a and the hypervisor 401b. can do. In this manner, one or more computing devices 100 may exchange data with one or more other computing devices 100 regarding processors and other physical resources available in the pool of resources. In one of these embodiments, this functionality enables the hypervisor to manage a pool of resources distributed across multiple physical computing devices. In another of these embodiments, the plurality of hypervisors manage one or more guest operating systems running on one of the computing devices 100 .

일 실시예에서, 제어 운영 체제(405)는 적어도 하나의 게스트 운영 체제(410)와 상호 작용하도록 허가된 가상 머신(406)에서 실행된다. 다른 실시예에서, 게스트 운영 체제(410)는 디스크 또는 네트워크에 대한 액세스를 요청하기 위하여 하이퍼바이저(401)를 통해 제어 운영 체제(405)와 통신한다. 또 다른 실시예에서, 게스트 운영 체제(410) 및 제어 운영 체제(405)는 예를 들어, 하이퍼바이저(401)에 의해 이용 가능하게 된 복수의 공유 메모리 페이지를 통하는 것과 같이, 하이퍼바이저(401)에 의해 확립된 통신 채널을 통해 통신할 수 있다.In one embodiment, the controlling operating system 405 runs in a virtual machine 406 authorized to interact with at least one guest operating system 410 . In another embodiment, the guest operating system 410 communicates with the controlling operating system 405 via the hypervisor 401 to request access to a disk or network. In another embodiment, the guest operating system 410 and the controlling operating system 405 communicate with the hypervisor 401 , such as via a plurality of shared memory pages made available by the hypervisor 401 , for example. It can communicate through the communication channel established by

일부 실시예에서, 제어 운영 체제(405)는 컴퓨팅 디바이스(100)에 의해 제공된 네트워킹 하드웨어와 직접 통신하기 위한 네트워크 백-엔드 드라이버를 포함한다. 이들 실시예 중 하나에서, 네트워크 백-엔드 드라이버는 적어도 하나의 게스트 운영 체제(110)로부터의 적어도 하나의 가상 머신 요청을 프로세싱한다. 다른 실시예에서, 제어 운영 체제(405)는 컴퓨팅 디바이스(100) 상의 저장 요소와 통신하기 위한 블록 백-엔드 드라이버를 포함한다. 이들 실시예 중 하나에서, 블록 백-엔드 드라이버는 게스트 운영 체제(410)로부터 수신된 적어도 하나의 요청에 기초하여 저장 요소로부터 데이터를 판독 및 기입한다.In some embodiments, the controlling operating system 405 includes a network back-end driver for communicating directly with the networking hardware provided by the computing device 100 . In one of these embodiments, the network back-end driver processes at least one virtual machine request from at least one guest operating system 110 . In another embodiment, the controlling operating system 405 includes a block back-end driver for communicating with a storage element on the computing device 100 . In one of these embodiments, the block back-end driver reads and writes data from the storage element based on at least one request received from the guest operating system 410 .

일 실시예에서, 제어 운영 체제(405)는 툴(tool) 스택(404)을 포함한다. 다른 실시예에서, 툴 스택(404)은 하이퍼바이저(401)와 상호 작용하고, (예를 들어, 제2 컴퓨팅 디바이스(100b) 상의) 다른 제어 운영 체제(405)와 통신하고, 컴퓨팅 디바이스(100) 상의 가상 머신(406b, 406c)을 관리하기 위한 기능을 제공한다. 다른 실시예에서, 툴 스택(404)은 개선된 관리 기능을 가상 머신 팜의 관리자에게 제공하기 위한 맞춤형 어플리케이션을 포함한다. 일부 실시예에서, 툴 스택(404) 및 제어 운영 체제(405) 중 적어도 하나는 컴퓨팅 디바이스(100) 상에서 실행되는 가상 머신(406)을 원격으로 구성 및 제어하기 위한 인터페이스를 제공하는 관리 API를 포함한다. 다른 실시예에서, 제어 운영 체제(405)는 툴 스택(404)을 통해 하이퍼바이저(401)와 통신한다.In one embodiment, the controlling operating system 405 includes a tool stack 404 . In another embodiment, the tool stack 404 interacts with the hypervisor 401 , communicates with another controlling operating system 405 (eg, on the second computing device 100b ), and the computing device 100 . ) provides a function for managing the virtual machines 406b and 406c. In another embodiment, the tool stack 404 includes custom applications for providing enhanced management capabilities to administrators of a virtual machine farm. In some embodiments, at least one of the tool stack 404 and the controlling operating system 405 includes a management API that provides an interface for remotely configuring and controlling the virtual machine 406 running on the computing device 100 . do. In another embodiment, the controlling operating system 405 communicates with the hypervisor 401 via the tool stack 404 .

일 실시예에서, 하이퍼바이저(401)는 하이퍼바이저(401)에 의해 생성된 가상 머신(406) 내에서 게스트 운영 체제(410)를 실행한다. 다른 실시예에서, 게스트 운영 체제(410)는 컴퓨팅 환경 내의 자원에 대한 액세스를 컴퓨팅 디바이스(100)의 사용자에게 제공한다. 또 다른 실시예에서, 자원은 프로그램, 어플리케이션, 문서, 파일, 복수의 어플리케이션, 복수의 파일, 실행 가능한 프로그램 파일, 데스크탑 환경, 컴퓨팅 환경, 또는 컴퓨팅 디바이스(100)의 사용자에게 이용 가능하게 된 다른 자원을 포함한다. 또 다른 실시예에서, 자원은 컴퓨팅 디바이스(100) 상으로의 종래의 직접 설치, 어플리케이션 스트리밍을 위한 방법을 통한 컴퓨팅 디바이스(100)의 전달, 제2 컴퓨팅 디바이스(100') 상의 자원의 실행에 의해 생성되고 프리젠테이션 계층 프로토콜을 통해 컴퓨팅 디바이스(100)에 전달되는 출력 데이터의 컴퓨팅 디바이스(100)로의 전달, 제2 컴퓨팅 디바이스(100') 상에서 실행되는 가상 머신을 통한 자원의 실행에 의해 생성된 출력 데이터의 컴퓨팅 디바이스(100)로의 전달, 또는 USB 디바이스와 같은 컴퓨팅 디바이스(100)에 접속된 제거 가능한 저장 디바이스로부터, 또는 컴퓨팅 디바이스(100) 상에서 실행되고 출력 데이터를 생성하는 가상 머신을 통한 실행에 한정되지 않지만 이를 포함하는 복수의 액세스 방법을 통해 컴퓨팅 디바이스(100)로 전달될 수 있다.In one embodiment, hypervisor 401 runs a guest operating system 410 within virtual machine 406 created by hypervisor 401 . In another embodiment, the guest operating system 410 provides a user of the computing device 100 with access to resources within the computing environment. In another embodiment, a resource is a program, application, document, file, plurality of applications, plurality of files, executable program file, desktop environment, computing environment, or other resource made available to a user of computing device 100 . includes In another embodiment, the resource is provided by conventional direct installation onto the computing device 100 , delivery of the computing device 100 via a method for application streaming, execution of the resource on the second computing device 100 ′. Output generated by delivery of output data to computing device 100 that is generated and passed to computing device 100 via a presentation layer protocol, execution of a resource via a virtual machine running on second computing device 100' Limited to transfer of data to computing device 100 , or from a removable storage device connected to computing device 100 , such as a USB device, or via a virtual machine running on computing device 100 and generating output data. However, it may be transmitted to the computing device 100 through a plurality of access methods including the same.

일 실시예에서, 게스트 운영 체제(410)는 그것이 실행되는 가상 머신과 연계하여 가상 머신임을 인식하지 못하는 완전히-가상화된 가상 머신을 형성하고; 이러한 머신을 "도메인 U HVM(Hardware Virtual Machine) 가상 머신"이라 칭할 수 있다. 다른 실시예에서, 완전히-가상화된 머신은 완전히-가상화된 머신 내에서 운영 체제를 실행하기 위해 BIOS(Basic Input/Output System)를 에뮬레이팅하는 소프트웨어를 포함한다. 또 다른 실시예에서, 완전히-가상화된 머신은 하이퍼바이저(401)와 통신함으로써 기능을 제공하는 드라이버를 포함할 수 있다. 이러한 실시예에서, 드라이버는 가상화된 환경 내에서 실행된다는 것을 인식할 수 있다. 다른 실시예에서, 게스트 운영 체제(410)는 그것이 실행되는 가상 머신과 연계하여 반가상화된(paravirtualized) 가상 머신을 형성하며, 이는 가상 머신임을 인식하고; 이러한 머신을 "도메인 U PV 가상 머신"이라 칭할 수 있다. 다른 실시예에서, 반가상화된 머신은 완전히-가상화된 머신이 포함하지 않는 추가의 드라이버를 포함한다. 또 다른 실시예에서, 반가상화된 머신은 상술한 바와 같이, 제어 운영 시스템(405)에 포함된 네트워크 백-엔드 드라이버 및 블록 백-엔드 드라이버를 포함한다.In one embodiment, the guest operating system 410 forms a fully-virtualized virtual machine that is unaware that it is a virtual machine in association with the virtual machine in which it runs; Such a machine may be referred to as a “Domain U Hardware Virtual Machine (HVM) virtual machine”. In another embodiment, a fully-virtualized machine includes software that emulates a Basic Input/Output System (BIOS) to run an operating system within the fully-virtualized machine. In another embodiment, a fully-virtualized machine may include a driver that provides functionality by communicating with the hypervisor 401 . In such an embodiment, the driver may recognize that it runs within a virtualized environment. In another embodiment, the guest operating system 410 forms a paravirtualized virtual machine in association with the virtual machine in which it runs, recognizing that it is a virtual machine; Such a machine may be referred to as a “Domain U PV Virtual Machine”. In other embodiments, the paravirtualized machine includes additional drivers that the fully-virtualized machine does not include. In another embodiment, the paravirtualized machine includes a network back-end driver and a block back-end driver included in the control operating system 405, as described above.

이하 도 4b를 참조하면, 블록도는 적어도 하나의 물리적 호스트가 가상 머신을 실행하는 시스템에서 복수의 네트워킹된 컴퓨팅 디바이스의 일 실시예를 도시한다. 간략한 개요에서, 시스템은 관리 구성 요소(404) 및 하이퍼바이저(401)를 포함한다. 시스템은 복수의 컴퓨팅 디바이스(100), 복수의 가상 머신(406), 복수의 하이퍼바이저(401), 툴 스택(404) 또는 관리 구성 요소(404)라 다양하게 지칭되는 복수의 관리 구성 요소, 및 물리적 자원(421, 428)을 포함한다. 복수의 물리적 머신(100)은 각각 도 1e-1h 및 도 4a와 관련하여 상술한 바와 같이, 컴퓨팅 디바이스(100)로서 제공될 수 있다.Referring now to FIG. 4B , a block diagram illustrates one embodiment of a plurality of networked computing devices in a system in which at least one physical host executes a virtual machine. In a brief overview, the system includes a management component 404 and a hypervisor 401 . The system includes a plurality of computing devices 100 , a plurality of virtual machines 406 , a plurality of hypervisors 401 , a plurality of management components, variously referred to as a tool stack 404 or management component 404 , and Physical resources 421 and 428 are included. A plurality of physical machines 100 may be provided as computing devices 100 , as described above with respect to FIGS. 1E-1H and 4A , respectively.

보다 구체적으로, 물리적 디스크(428)는 컴퓨팅 디바이스(100)에 의해 제공되고 가상 디스크(442)의 적어도 일부를 저장한다. 일부 실시예에서, 가상 디스크(442)는 복수의 물리적 디스크(428)와 연관된다. 이들 실시예 중 하나에서, 하나 이상의 컴퓨팅 디바이스(100)는 자원의 풀에서 이용 가능한 프로세서 및 다른 물리적 자원에 관하여 하나 이상의 다른 컴퓨팅 디바이스(100)와 데이터를 교환할 수 있어, 하이퍼바이저가 복수의 물리적 컴퓨팅 디바이스에 걸쳐 분산된 자원의 풀을 관리할 수 있게 한다. 일부 실시예에서, 가상 머신(406)이 실행되는 컴퓨팅 디바이스(100)는 물리적 호스트(100) 또는 호스트 머신(100)으로 지칭된다.More specifically, physical disk 428 is provided by computing device 100 and stores at least a portion of virtual disk 442 . In some embodiments, virtual disk 442 is associated with a plurality of physical disks 428 . In one of these embodiments, one or more computing devices 100 may exchange data with one or more other computing devices 100 regarding the processors and other physical resources available in the pool of resources, such that the hypervisor may Allows management of a pool of resources distributed across computing devices. In some embodiments, the computing device 100 on which the virtual machine 406 runs is referred to as the physical host 100 or host machine 100 .

하이퍼바이저(401)는 컴퓨팅 디바이스(100) 상의 프로세서 상에서 실행된다. 하이퍼바이저(401)는 물리적 디스크에 대한 액세스 량을 가상 디스크에 할당한다. 일 실시예에서, 하이퍼바이저(401)는 물리적 디스크 상에 소정량의 공간을 할당한다. 다른 실시예에서, 하이퍼바이저(401)는 물리적 디스크 상에 복수의 페이지를 할당한다. 일부 실시예에서, 하이퍼바이저(401)는 가상 머신(450)을 초기화 및 실행하는 프로세스의 일부로서 가상 디스크(442)를 제공한다.Hypervisor 401 runs on a processor on computing device 100 . The hypervisor 401 allocates the amount of access to the physical disk to the virtual disk. In one embodiment, the hypervisor 401 allocates an amount of space on the physical disk. In another embodiment, the hypervisor 401 allocates a plurality of pages on the physical disk. In some embodiments, hypervisor 401 provides virtual disk 442 as part of the process of initializing and running virtual machine 450 .

일 실시예에서, 관리 구성 요소(404a)는 풀 관리 구성 요소(404a)로 지칭된다. 다른 실시예에서, 제어 운영 체제(405a)로 지칭될 수 있는 관리 운영 체제(405a)는 관리 구성 요소를 포함한다. 일부 실시예에서, 관리 구성 요소는 툴 스택으로 지칭된다. 이들 실시예 중 하나에서, 관리 구성 요소는 도 4a와 관련하여 상술한 툴 스택(404)이다. 다른 실시예에서, 관리 구성 요소(404)는 관리자와 같은 사용자로부터 제공 및/또는 실행되는 가상 머신(406)의 식별을 수신하기 위한 사용자 인터페이스를 제공한다. 또 다른 실시예에서, 관리 구성 요소(404)는 관리자와 같은 사용자로부터 하나의 물리적 머신(100)에서 다른 물리적 머신(100)으로의 가상 머신(406b)의 이동 요청을 수신하기 위한 사용자 인터페이스를 제공한다. 추가의 실시예에서, 관리 구성 요소(404a)는 요청된 가상 머신(406d)을 실행할 컴퓨팅 디바이스(100b)를 식별하고 식별된 컴퓨팅 디바이스(100b) 상의 하이퍼바이저(401b)에게 식별된 가상 머신을 실행하도록 지시하고; 이러한 관리 구성 요소는 풀 관리 구성 요소로 지칭될 수 있다.In one embodiment, the management component 404a is referred to as the pool management component 404a. In another embodiment, the management operating system 405a, which may be referred to as the controlling operating system 405a, includes a management component. In some embodiments, the management component is referred to as a tool stack. In one of these embodiments, the management component is the tool stack 404 described above with respect to FIG. 4A . In another embodiment, the management component 404 provides a user interface for receiving an identification of the virtual machine 406 being provided and/or running from a user, such as an administrator. In another embodiment, the management component 404 provides a user interface for receiving a request to move a virtual machine 406b from one physical machine 100 to another physical machine 100 from a user, such as an administrator. do. In a further embodiment, the management component 404a identifies the computing device 100b to execute the requested virtual machine 406d and executes the identified virtual machine to the hypervisor 401b on the identified computing device 100b. instructed to do; Such a management component may be referred to as a pool management component.

이하 도 4c를 참조하면, 가상 어플리케이션 전달 제어기 또는 가상 기기(450)의 실시예가 도시되어 있다. 간략한 개요에서, 도 2a 및 도 2b와 관련하여 상술한 기기(200)(예를 들어, 어플리케이션 전달 제어기)의 기능 및/또는 실시예 중 임의의 것이 도 4a 및 도 4b와 관련하여 상술한 가상화된 환경의 임의의 실시예에 배치될 수 있다. 어플리케이션 전달 제어기의 기능이 기기(200)의 형태로 배치되는 대신에, 이러한 기능은 클라이언트(102), 서버(106) 또는 기기(200)와 같은 임의의 컴퓨팅 디바이스(100) 상의 가상화된 환경(400)에 배치될 수 있다.Referring now to FIG. 4C , an embodiment of a virtual application delivery controller or virtual appliance 450 is illustrated. In a brief overview, any of the functions and/or embodiments of the device 200 (eg, an application delivery controller) described above with respect to FIGS. 2A and 2B may be virtualized as described above with respect to FIGS. 4A and 4B . It can be deployed in any embodiment of the environment. Instead of the functionality of the application delivery controller being deployed in the form of appliance 200 , such functionality is implemented in virtualized environment 400 on client 102 , server 106 , or any computing device 100 , such as appliance 200 . ) can be placed in

이하 도 4c를 참조하면, 서버(106)의 하이퍼바이저(401) 상에서 동작하는 가상 기기(450)의 실시예의 도면이 도시되어 있다. 도 2a 및 도 2b의 기기(200)와 마찬가지로, 가상 기기(450)는 가용성, 성능, 오프로드 및 보안을 위한 기능을 제공할 수 있다. 가용성을 위해, 가상 기기(450)는 네트워크의 계층 4와 7 사이에서 부하 밸런싱을 수행하고 또한 지능형 서비스 건강 모니터링을 수행할 수도 있다. 네트워크 트래픽 가속화를 통한 성능 향상을 위해, 가상 기기(450)는 캐싱 및 압축을 수행할 수 있다. 임의의 서버의 프로세싱을 오프로딩하기 위해, 가상 기기(450)는 접속 다중화 및 풀링 및/또는 SSL 프로세싱을 수행할 수 있다. 보안을 위해, 가상 기기(450)는 기기(200)의 임의의 어플리케이션 방화벽 기능 및 SSL VPN 기능을 수행할 수 있다.Referring now to FIG. 4C , a diagram of an embodiment of a virtual device 450 operating on a hypervisor 401 of a server 106 is shown. Similar to device 200 of FIGS. 2A and 2B , virtual device 450 may provide functionality for availability, performance, offload, and security. For availability, the virtual appliance 450 performs load balancing between layers 4 and 7 of the network and may also perform intelligent service health monitoring. To improve performance through network traffic acceleration, the virtual device 450 may perform caching and compression. To offload processing of any server, the virtual machine 450 may perform connection multiplexing and pooling and/or SSL processing. For security, the virtual device 450 may perform any application firewall function and SSL VPN function of the device 200 .

도 2a와 관련하여 설명된 바와 같은 기기(200)의 임의의 모듈은 기성(off the shelf) 서버와 같은 임의의 서버 상의 가상화된 환경(300) 또는 비가상화된 환경에서 실행 가능한 하나 이상의 소프트웨어 모듈 또는 구성 요소로서 배치될 수 있는 가상화된 기기 전달 제어기(450)의 형태로 패키징, 조합, 설계 또는 구성될 수 있다. 예를 들어, 가상 기기(450)는 컴퓨팅 디바이스 상에 설치하기 위한 설치 패키지 형태로 제공될 수 있다. 도 2a를 참조하면, 캐시 관리자(232), 정책 엔진(236), 압축(238), 암호화 엔진(234), 패킷 엔진(240), GUI(210), CLI(212), 쉘 서비스(214) 및 건강 모니터링 프로그램(216) 중 임의의 것이 소프트웨어 구성 요소 또는 모듈로서 설계 및 구성되어 컴퓨팅 디바이스 및/또는 가상화된 환경(300)의 임의의 운영 체제 상에서 실행될 수 있다. 기기(200)의 암호화 프로세서(260), 프로세서(262), 메모리(264) 및 네트워크 스택(267)을 사용하는 대신에, 가상화 기기(450)는 가상화된 환경(400)에 의해 제공되거나 이와 다르게 서버(106) 상에서 이용 가능한 이들 자원 중 임의의 것을 사용할 수 있다.Any module of device 200 as described in connection with FIG. 2A may include one or more software modules executable in virtualized environment 300 or non-virtualized environment on any server, such as an off the shelf server, or It may be packaged, combined, designed, or configured in the form of a virtualized device delivery controller 450 that may be deployed as a component. For example, the virtual device 450 may be provided in the form of an installation package for installation on a computing device. Referring to FIG. 2A , cache manager 232 , policy engine 236 , compression 238 , encryption engine 234 , packet engine 240 , GUI 210 , CLI 212 , shell service 214 . and any of the health monitoring programs 216 may be designed and configured as software components or modules to run on the computing device and/or any operating system of the virtualized environment 300 . Instead of using the cryptographic processor 260 , processor 262 , memory 264 and network stack 267 of appliance 200 , virtual appliance 450 may be provided by or otherwise provided by virtualized environment 400 . Any of these resources available on the server 106 may be used.

여전히 도 4c를 참조하고, 간략한 개요에서, 임의의 하나 이상의 vServer(275a-275n)는 임의의 서버(106)와 같은 임의의 유형의 컴퓨팅 디바이스(100)의 가상화된 환경(400)에서 동작 또는 실행될 수 있다. 도 2b와 관련하여 설명된 기기(200)의 임의의 모듈 또는 기능은 서버의 가상화된 환경 또는 비가상화된 환경 중 어느 하나에서 동작하도록 설계 및 구성될 수 있다. 임의의 vServer(275), SSL VPN(280), 인트라넷 UP(282), 스위칭(284), DNS(286), 가속(288), AppFW(290) 및 모니터링 에이전트(197)는 하나 이상의 소프트웨어 모듈 또는 디바이스 및/또는 가상화된 환경(400) 상에서 실행 가능한 구성 요소로서 배치 가능한 어플리케이션 전달 제어기(450)의 형태로 패키징, 조합, 설계 또는 구성될 수 있다.Still referring to FIG. 4C , in a brief overview, any one or more vServers 275a - 275n may be operated or executed in the virtualized environment 400 of any type of computing device 100 , such as any server 106 . can Any module or function of the device 200 described with respect to FIG. 2B may be designed and configured to operate in either a virtualized or non-virtualized environment of a server. Any vServer (275), SSL VPN (280), Intranet UP (282), Switching (284), DNS (286), Acceleration (288), AppFW (290), and Monitoring Agents (197) may contain one or more software modules or It may be packaged, combined, designed, or configured in the form of a deployable application delivery controller 450 as a component executable on the device and/or virtualized environment 400 .

일부 실시예에서, 서버는 가상 환경에서 복수의 가상 머신(406a-406n)을 실행할 수 있으며, 각각의 가상 머신은 가상 어플리케이션 전달 제어기(450)의 동일하거나 상이한 실시예를 실행한다. 일부 실시예에서, 서버는 멀티-코어 프로세싱 시스템의 코어 상의 하나 이상의 가상 머신 상의 하나 이상의 가상 기기(450)를 실행할 수 있다. 일부 실시예에서, 서버는 복수의 프로세서 디바이스의 각각의 프로세서 상의 하나 이상의 가상 머신 상에서 하나 이상의 가상 기기(450)를 실행할 수 있다.In some embodiments, the server may run a plurality of virtual machines 406a - 406n in a virtual environment, each virtual machine running the same or a different embodiment of the virtual application delivery controller 450 . In some embodiments, the server may run one or more virtual machines 450 on one or more virtual machines on the core of the multi-core processing system. In some embodiments, the server may execute one or more virtual machines 450 on one or more virtual machines on each processor of the plurality of processor devices.

E. 멀티-코어 아키텍처 제공을 위한 시스템 및 방법E. Systems and Methods for Providing Multi-Core Architectures

무어의 법칙(Moore's Law)에 따르면, 집적 회로에 배치될 수 있는 트랜지스터의 수는 근사적으로 2년마다 두 배로 될 수 있다. 그러나, CPU 속도 증가는 정점에 도달할 수 있으며, 예를 들어, CPU 속도는 2005년 이후 대략 3.5-4 GHz 범위였다. 일부 경우에, CPU 제조업체는 추가 성능을 얻기 위해 CPU 속도 증가에 의존하지 않을 수 있다. 일부 CPU 제조업체는 추가 성능을 제공하기 위해 그 프로세서에 부가적인 코어를 추가할 수 있다. 성능 이득을 위해 CPU에 의존하는 소프트웨어 및 네트워킹 벤더의 제품과 같은 제품은 이러한 멀티-코어 CPU를 활용하여 그 성능을 향상시킬 수 있다. 단일 CPU를 위해 설계 및 구성된 소프트웨어는 멀티-스레드, 병렬 아키텍처 또는 이와 다르게 멀티-코어 아키텍처를 이용하도록 재설계 및/또는 재작성될 수 있다.According to Moore's Law, the number of transistors that can be placed in an integrated circuit can double approximately every two years. However, CPU speed increases can peak, for example, CPU speeds have been in the approximate 3.5-4 GHz range since 2005. In some cases, CPU manufacturers may not rely on increasing CPU speed to gain additional performance. Some CPU manufacturers may add additional cores to their processors to provide additional performance. Products such as those from software and networking vendors that rely on CPUs for performance gains can take advantage of these multi-core CPUs to improve their performance. Software designed and configured for a single CPU may be redesigned and/or rewritten to take advantage of multi-threaded, parallel architectures or otherwise multi-core architectures.

nCore 또는 멀티-코어 기술로 지칭되는 기기(200)의 멀티-코어 아키텍처는 일부 실시예에서 기기가 단일 코어 성능 장벽을 깨고 멀티-코어 CPU의 능력을 활용할 수 있게 한다. 도 2a와 관련하여 설명된 이전 아키텍처에서, 단일 네트워크 또는 패킷 엔진이 실행된다. nCore 기술 및 아키텍처의 복수의 코어는 복수의 패킷 엔진이 동시에 및/또는 병렬로 실행될 수 있게 한다. 각 코어에서 패킷 엔진을 실행하면, 기기 아키텍처는 추가 코어의 프로세싱 용량을 활용한다. 일부 실시예에서, 이는 7배까지의 성능 증가 및 확장성을 제공한다.The multi-core architecture of device 200 , referred to as nCore or multi-core technology, in some embodiments allows the device to break single-core performance barriers and utilize the power of multi-core CPUs. In the previous architecture described with respect to FIG. 2A, a single network or packet engine is running. The multiple cores of the nCore technology and architecture allow multiple packet engines to run concurrently and/or in parallel. By running the packet engine on each core, the device architecture utilizes the processing capacity of the additional cores. In some embodiments, this provides up to 7x performance increase and scalability.

도 5a에는 기능적 병렬 처리, 데이터 병렬 처리 또는 흐름-기반 데이터 병렬 처리와 같은 병렬 처리 또는 병렬 컴퓨팅 스킴의 유형에 따라 하나 이상의 프로세서 코어에 걸친 작동, 작업, 부하 또는 네트워크 트래픽 분배의 일부 실시예가 나타내어져 있다. 간략한 개요에서, 도 5a는 n-코어, 총 코어 수가 1 내지 N인 기기(200')와 같은 멀티-코어 시스템의 실시예를 나타낸다. 일 실시예에서, 작업, 부하 또는 네트워크 트래픽은 제1 코어(505A), 제2 코어(505B), 제3 코어(505C), 제4 코어(505D), 제5 코어(505E), 제6 코어(505F), 제7 코어(505G) 등에 분배될 수 있어, n 코어(505N)(이하, 총괄적으로 코어(505)로 지칭함)의 전부 또는 둘 이상에 걸쳐 분배된다. 복수의 코어 중 각각의 코어 상에서 각각 실행되는 복수의 VIP(275)가 있을 수 있다. 복수의 코어 중 각각의 코어 상에서 각각 실행되는 복수의 패킷 엔진(240)이 있을 수 있다. 사용된 임의의 접근법은 임의의 코어에 걸쳐 상이하고, 가변적이거나 유사한 작업 부하 또는 성능 레벨(515)로 이어질 수 있다. 기능적 병렬 처리 접근법의 경우, 각 코어는 패킷 엔진, VIP(275) 또는 기기(200)에 의해 제공되는 기능들 중 다른 기능을 실행할 수 있다. 데이터 병렬 처리 접근법에서, 데이터는 데이터를 수신하는 NIC(Network Interface Card) 또는 VIP(275)에 기초하여 코어를 통해 병렬 처리 또는 분배될 수 있다. 다른 데이터 병렬 처리 접근법에서, 프로세싱은 각 코어에 대한 데이터 흐름을 분배함으로써 코어에 걸쳐 분배될 수 있다.5A illustrates some embodiments of distribution of operations, tasks, loads, or network traffic across one or more processor cores according to a type of parallel processing or parallel computing scheme, such as functional parallelism, data parallelism, or flow-based data parallelism. have. In brief overview, FIG. 5A depicts an embodiment of a multi-core system, such as device 200', with n-cores, a total number of cores of 1 to N. In one embodiment, the task, load or network traffic is a first core 505A, a second core 505B, a third core 505C, a fourth core 505D, a fifth core 505E, a sixth core. 505F, the seventh core 505G, etc. may be distributed over all or two or more of the n cores 505N (hereinafter collectively referred to as core 505 ). There may be multiple VIPs 275 each running on each of the multiple cores. There may be a plurality of packet engines 240 each running on each of the plurality of cores. Any approach used may lead to a different, variable or similar workload or performance level 515 across any core. For a functional parallel processing approach, each core may execute another of the functions provided by the packet engine, VIP 275 or device 200 . In the data parallel processing approach, data may be parallelized or distributed through cores based on a network interface card (NIC) or VIP 275 that receives the data. In another data parallel processing approach, processing may be distributed across cores by distributing the data flow to each core.

도 5a에 대한 추가적인 상세 사항에서, 일부 실시예에서, 부하, 작업 또는 네트워크 트래픽은 기능적 병렬 처리(500)에 따라 코어(505) 사이에 분배될 수 있다. 기능적 병렬 처리(500)는 하나 이상의 각각의 기능을 수행하는 각각의 코어에 기초할 수 있다. 일부 실시예에서, 제1 코어는 제1 기능을 수행하는 한편, 제2 코어는 제2 기능을 수행한다. 기능적 병렬 처리 접근법에서, 멀티-코어 시스템에 의해 수행될 기능은 기능에 따라 각 코어에 분할 및 분배된다. 일부 실시예에서, 기능적 병렬 처리(500)는 작업 병렬 처리로 지칭될 수 있고, 각각의 프로세서 또는 코어가 동일하거나 상이한 데이터에 대해 상이한 프로세스 또는 기능을 실행할 때 달성될 수 있다. 코어 또는 프로세서는 동일하거나 상이한 코드를 실행할 수 있다. 일부 경우에, 상이한 실행 스레드 또는 코드가 작동할 때 서로 통신할 수 있다. 작업 흐름의 일부로서 하나의 스레드에서 다음 스레드로 데이터를 전달하기 위해 통신이 이루어질 수 있다.In further detail with respect to FIG. 5A , in some embodiments, loads, tasks, or network traffic may be distributed among cores 505 according to functional parallelism 500 . Functional parallelism 500 may be based on each core performing one or more respective functions. In some embodiments, the first core performs a first function, while the second core performs a second function. In the functional parallel processing approach, the functions to be performed by a multi-core system are divided and distributed to each core according to the function. In some embodiments, functional parallelism 500 may be referred to as task parallelism, and may be achieved when each processor or core executes a different process or function on the same or different data. A core or processor may execute the same or different code. In some cases, different threads of execution or code may communicate with each other as they operate. As part of a workflow, communication may occur to pass data from one thread to the next.

일부 실시예에서, 기능적 병렬 처리(500)에 따라 코어(505)에 걸쳐 작업을 분배하는 것은 네트워크 입력/출력 관리(NW I/O)(510A), 보안 소켓 계층(SSL) 암호화 및 복호화(510B), 송신 제어 프로토콜(TCP) 기능(510C)과 같이 특정 기능에 따라 네트워크 트래픽을 분배하는 것을 포함할 수 있다. 이는 사용되는 기능의 볼륨 또는 레벨에 기초한 작업, 성능 또는 컴퓨팅 부하(515)로 이어질 수 있다. 일부 실시예에서, 데이터 병렬 처리(540)에 따라 코어(505)에 걸쳐 작업을 분배하는 것은 특정 하드웨어 또는 소프트웨어 구성 요소와 연관된 분배 데이터에 기초하여 작업량(515)을 분배하는 것을 포함할 수 있다. 일부 실시예에서, 흐름-기반 데이터 병렬 처리(520)에 따라 코어(505)에 걸쳐 작업을 분배하는 것은, 각각의 코어 상의 작업량(515A-N)이 유사하거나, 실질적으로 동등하거나 비교적 균등하게 분배될 수 있도록 컨텍스트 또는 흐름에 기초하여 데이터를 분배하는 것을 포함할 수 있다.In some embodiments, distributing tasks across cores 505 according to functional parallelism 500 may include network input/output management (NW I/O) 510A, secure socket layer (SSL) encryption and decryption 510B. ), and distributing network traffic according to a specific function, such as a Transmission Control Protocol (TCP) function 510C. This may lead to a workload, performance, or computing load 515 based on the volume or level of functionality being used. In some embodiments, distributing tasks across cores 505 according to data parallelism 540 may include distributing workload 515 based on distributed data associated with particular hardware or software components. In some embodiments, distributing work across cores 505 according to flow-based data parallelism 520 may result in a similar, substantially equal, or relatively evenly distributed workload 515A-N on each core. may include distributing data based on context or flow so that

기능적 병렬 접근법의 경우, 각각의 코어는 패킷 엔진 또는 기기의 VIP에 의해 제공된 복수의 기능 중 하나 이상의 기능을 실행하도록 구성될 수 있다. 예를 들어, 코어 1은 기기(200')에 대한 네트워크 I/O 프로세싱을 수행할 수 있는 반면, 코어 2는 기기(200')에 대한 TCP 접속 관리를 수행한다. 마찬가지로, 코어 3은 SSL 오프로딩을 수행할 수 있는 반면, 코어 4는 계층 7 또는 어플리케이션 계층 프로세싱 및 트래픽 관리를 수행할 수 있다. 각각의 코어는 동일한 기능 또는 상이한 기능을 수행할 수 있다. 각각의 코어는 하나 초과의 기능을 수행할 수 있다. 임의의 코어는 도 2a 및 도 2b와 관련하여 식별되고 및/또는 설명된 임의의 기능 또는 그 일부를 실행할 수 있다. 이러한 접근법에서, 코어에 걸친 작업은 거친 방식 또는 세밀한 방식 중 어느 하나로 기능에 의해 분할될 수 있다. 일부 경우에, 도 5a에 나타낸 바와 같이, 기능에 의한 분할은 상이한 레벨의 성능 또는 부하(515)에서 실행되는 상이한 코어로 이어질 수 있다.For a functionally parallel approach, each core may be configured to execute one or more of a plurality of functions provided by the packet engine or the device's VIP. For example, core 1 may perform network I/O processing for device 200', while core 2 performs TCP connection management for device 200'. Similarly, core 3 may perform SSL offloading, while core 4 may perform layer 7 or application layer processing and traffic management. Each core may perform the same function or a different function. Each core may perform more than one function. Any core may perform any function or portion thereof identified and/or described with respect to FIGS. 2A and 2B . In this approach, work across the core can be partitioned by function in either a coarse or fine-grained manner. In some cases, as shown in FIG. 5A , partitioning by function may lead to different cores running at different levels of performance or load 515 .

기능적 병렬 처리 접근법의 경우, 각각의 코어는 기기의 패킷 엔진에 의해 제공된 복수의 기능 중 하나 이상의 기능을 실행하도록 구성될 수 있다. 예를 들어, 코어 1은 기기(200')에 대한 네트워크 I/O 프로세싱을 수행할 수 있는 반면, 코어 2는 기기(200')에 대한 TCP 접속 관리를 수행한다. 마찬가지로, 코어 3은 SSL 오프 로딩을 수행할 수 있는 반면, 코어 4는 계층 7 또는 어플리케이션 계층 프로세싱 및 트래픽 관리를 수행할 수 있다. 각각의 코어는 동일한 기능 또는 상이한 기능을 수행할 수 있다. 각각의 코어는 하나 초과의 기능을 수행할 수 있다. 임의의 코어는 도 2a 및 도 2b와 관련하여 식별되고 및/또는 설명된 임의의 기능 또는 그 일부를 실행할 수 있다. 이러한 접근법에서, 코어에 걸친 작업은 거친 방식 또는 세밀한 방식 중 어느 하나로 기능에 의해 분할될 수 있다. 일부 경우에, 도 5a에 나타낸 바와 같이, 기능에 의한 분할은 상이한 레벨의 부하 또는 성능에서 실행되는 상이한 코어로 이어질 수 있다.For a functionally parallel processing approach, each core may be configured to execute one or more of a plurality of functions provided by the device's packet engine. For example, core 1 may perform network I/O processing for device 200', while core 2 performs TCP connection management for device 200'. Similarly, core 3 may perform SSL offloading, while core 4 may perform layer 7 or application layer processing and traffic management. Each core may perform the same function or a different function. Each core may perform more than one function. Any core may perform any function or portion thereof identified and/or described with respect to FIGS. 2A and 2B . In this approach, work across the core can be partitioned by function in either a coarse or fine-grained manner. In some cases, as shown in FIG. 5A , partitioning by function may lead to different cores running at different levels of load or performance.

기능 또는 작업은 임의의 배열 및 스킴으로 분배될 수 있다. 예를 들어, 도 5b는 네트워크 I/O 기능(51OA)과 연관된 어플리케이션 및 프로세스를 프로세싱하는 제1 코어인 코어 1(505A)을 나타낸다. 일부 실시예에서, 네트워크 I/O와 연관된 네트워크 트래픽은 특정 포트 번호와 연관될 수 있다. 따라서, NW I/O(51OA)와 연관된 포트 착신지를 갖는 진출 및 진입 패킷은 NW I/O 포트와 연관된 모든 네트워크 트래픽을 처리하는 데 전용인 코어 1(505A)을 향할 것이다. 유사하게, 코어 2(505B)는 SSL 프로세싱과 연관된 기능을 처리하는 데 전용이며, 코어 4(505D)는 모든 TCP 레벨 프로세싱 및 기능을 처리하는 데 전용일 수 있다.Functions or tasks may be distributed in any arrangement and scheme. For example, FIG. 5B illustrates Core 1 505A, which is a first core processing applications and processes associated with network I/O function 51OA. In some embodiments, network traffic associated with network I/O may be associated with a particular port number. Thus, outgoing and ingress packets having a port destination associated with the NW I/O 51OA will be destined for core 1 505A dedicated to handling all network traffic associated with the NW I/O port. Similarly, core 2 505B may be dedicated to handling functions associated with SSL processing, and core 4 505D may be dedicated to handling all TCP level processing and functions.

도 5a는 네트워크 I/O, SSL 및 TCP와 같은 기능을 나타내지만, 다른 기능이 코어에 할당될 수 있다. 이러한 다른 기능은 본원에 설명되는 기능 또는 동작 중 임의의 하나 이상을 포함할 수 있다. 예를 들어, 도 2a 및 도 2b와 관련하여 설명된 기능들 중 임의의 기능은 기능 기반으로 코어에 걸쳐 분배될 수 있다. 일부 경우에, 제1 VIP(275A)는 제1 코어 상에서 실행될 수 있는 반면, 다른 구성을 갖는 제2 VIP(275B)는 제2 코어 상에서 실행될 수 있다. 일부 실시예에서, 각각의 코어(505)는 특정 기능을 처리할 수 있어, 각각의 코어(505)는 그 특정 기능과 연관된 프로세싱을 처리할 수 있다. 예를 들어, 코어 2(505B)는 SSL 오프로딩을 처리할 수 있지만, 코어 4(505D)는 어플리케이션 계층 프로세싱 및 트래픽 관리를 처리할 수 있다.5A shows functions such as network I/O, SSL and TCP, but other functions may be assigned to the core. Such other functions may include any one or more of the functions or operations described herein. For example, any of the functions described with respect to FIGS. 2A and 2B may be distributed across cores on a functional basis. In some cases, a first VIP 275A may run on a first core, while a second VIP 275B with a different configuration may run on a second core. In some embodiments, each core 505 may handle a particular function, such that each core 505 may handle processing associated with that particular function. For example, core 2 505B may handle SSL offloading, while core 4 505D may handle application layer processing and traffic management.

다른 실시예에서, 작업, 부하 또는 네트워크 트래픽은 임의의 유형 및 형태의 데이터 병렬 처리(540)에 따라 코어(505) 사이에 분배될 수 있다. 일부 실시예에서, 데이터 병렬 처리(540)는 분배된 상이한 단편의 데이터에 대해 동일한 작업 또는 기능을 수행하는 각각의 코어에 의해 멀티-코어 시스템에서 달성될 수 있다. 일부 실시예에서, 단일 실행 스레드 또는 코드는 모든 데이터 단편에 대한 동작을 제어한다. 다른 실시예에서, 상이한 스레드 또는 명령이 동작을 제어하지만, 동일한 코드를 실행할 수 있다. 일부 실시예에서, 데이터 병렬 처리(540)는 패킷 엔진, vServer(VIP)(275A-C), 네트워크 인터페이스 카드(NIC)(542D-E) 및/또는 기기(200)에 포함되거나 기기(200)와 연관된 임의의 다른 네트워킹 하드웨어 또는 소프트웨어의 관점에서 달성된다. 예를 들어, 각 코어는 동일한 패킷 엔진 또는 VIP 코드 또는 구성을 실행할 수 있지만, 다른 분배 데이터 세트 상에서 동작할 수 있다. 각각의 네트워킹 하드웨어 또는 소프트웨어 구성은 상이하거나, 가변적이거나 또는 실질적으로 동일한 양의 데이터를 수신할 수 있고, 결과적으로 변하거나 상이하거나 상대적으로 동일한 양의 부하(515)를 가질 수 있다.In other embodiments, work, load, or network traffic may be distributed among cores 505 according to any type and form of data parallelism 540 . In some embodiments, data parallelism 540 may be achieved in a multi-core system with each core performing the same task or function on different pieces of data distributed. In some embodiments, a single thread of execution or code controls operations on all data fragments. In other embodiments, different threads or instructions may control the operation, but execute the same code. In some embodiments, data parallel processing 540 is included in or included in device 200 , packet engine, vServer (VIP) 275A-C, network interface card (NIC) 542D-E, and/or device 200 . in terms of any other networking hardware or software associated with it. For example, each core may run the same packet engine or VIP code or configuration, but may operate on a different set of distributed data. Each networking hardware or software configuration may receive a different, varying, or substantially the same amount of data and, consequently, may have a varying, different, or relatively equal amount of load 515 .

데이터 병렬 처리 접근법의 경우, VIP, NIC 및/또는 VIP 또는 NIC의 데이터 흐름을 기반으로 작업이 분할 및 분배될 수 있다. 이들 접근법 중 하나에서, 멀티-코어 시스템의 작업은 분배된 데이터 세트에 대해 각각의 VIP 작업을 가짐으로써 VIP 간에 분할되거나 분배될 수 있다. 예를 들어, 각 코어는 하나 이상의 VIP를 실행하도록 구성될 수 있다. 네트워크 트래픽은 해당 트래픽을 처리하는 각 VIP에 대해 코어에 분배될 수 있다. 이들 접근법 중 다른 접근법에서, 기기의 작업은 어느 NIC가 네트워크 트래픽을 수신하는지에 기초하여 코어 사이에서 분할 또는 분배될 수 있다. 예를 들어, 제1 NIC의 네트워크 트래픽은 제1 코어에 분배될 수 있는 반면, 제2 NIC의 네트워크 트래픽은 제2 코어에 분배될 수 있다. 일부 경우에, 코어가 복수의 NIC로부터의 데이터를 프로세싱할 수 있다.For the data parallel processing approach, tasks may be partitioned and distributed based on VIPs, NICs and/or data flows from VIPs or NICs. In either of these approaches, the tasks of a multi-core system can be split or distributed among VIPs by having each VIP task for a distributed data set. For example, each core may be configured to run one or more VIPs. Network traffic can be distributed to a core for each VIP that handles that traffic. In another of these approaches, the work of a device may be partitioned or distributed among cores based on which NIC receives the network traffic. For example, the network traffic of the first NIC may be distributed to the first core, while the network traffic of the second NIC may be distributed to the second core. In some cases, a core may process data from multiple NICs.

도 5a는 VIP1(275A), VIP2(275B) 및 VIP3(275C)의 경우에서와 같이, 단일 코어(505)와 연관된 단일 vServer를 나타낸다. 일부 실시예에서, 단일 vServer는 하나 이상의 코어(505)와 연관될 수 있다. 대조적으로, 하나 이상의 vServer는 단일 코어(505)와 연관될 수 있다. vServer를 코어(505)와 연관시키는 것은 코어(505)가 특정 vServer와 연관된 모든 기능을 프로세싱하는 것을 포함할 수 있다. 일부 실시예에서, 각각의 코어는 동일한 코드 및 구성을 갖는 VIP를 실행한다. 다른 실시예에서, 각각의 코어는 동일한 코드이지만 상이한 구성을 갖는 VIP를 실행한다. 일부 실시예에서, 각각의 코어는 상이한 코드 및 동일하거나 상이한 구성을 갖는 VIP를 실행한다.5A shows a single vServer associated with a single core 505, as in the case of VIP1 275A, VIP2 275B and VIP3 275C. In some embodiments, a single vServer may be associated with more than one core 505 . In contrast, more than one vServer may be associated with a single core 505 . Associating a vServer with the core 505 may include the core 505 processing all functions associated with a particular vServer. In some embodiments, each core runs a VIP with the same code and configuration. In another embodiment, each core runs a VIP with the same code but different configurations. In some embodiments, each core runs a VIP with different code and the same or different configuration.

vServer와 마찬가지로, NIC는 또한 특정 코어(505)와 연관될 수 있다. 많은 실시예에서, NIC는 하나 이상의 코어(505)에 접속될 수 있어, NIC가 데이터 패킷을 수신 또는 송신할 때 특정 코어(505)는 데이터 패킷의 수신 및 송신과 관련된 프로세싱을 처리한다. 일 실시예에서, NIC1(542D) 및 NIC2(542E)의 경우와 같이, 단일 NIC는 단일 코어(505)와 연관될 수 있다. 다른 실시예에서, 하나 이상의 NIC는 단일 코어(505)와 연관될 수 있다. 다른 실시예에서, 단일 NIC는 하나 이상의 코어(505)와 연관될 수 있다. 이들 실시예에서, 부하는 하나 이상의 코어(505) 사이에 분배될 수 있어, 각각의 코어(505)는 실질적으로 유사한 양의 부하를 프로세싱한다. NIC와 연관된 코어(505)는 특정 NIC와 연관된 모든 기능 및/또는 데이터를 프로세싱할 수 있다.Like a vServer, a NIC may also be associated with a particular core 505 . In many embodiments, a NIC may be coupled to one or more cores 505 such that when the NIC receives or transmits data packets, a particular core 505 handles processing related to the reception and transmission of data packets. In one embodiment, as in the case of NIC1 542D and NIC2 542E, a single NIC may be associated with a single core 505 . In other embodiments, more than one NIC may be associated with a single core 505 . In other embodiments, a single NIC may be associated with more than one core 505 . In these embodiments, the load may be distributed among one or more cores 505 such that each core 505 processes a substantially similar amount of load. A core 505 associated with a NIC may process all functions and/or data associated with a particular NIC.

VIP 또는 NIC의 데이터에 기초하여 코어에 걸쳐 작업을 분배하는 것은 어느 정도의 독립성을 가질 수 있지만, 일부 실시예에서, 이는 도 5a의 가변 부하(515)에 의해 나타낸 바와 같이 코어의 불균형한 사용으로 이어질 수 있다.Distributing tasks across cores based on data from VIPs or NICs may have some degree of independence, but in some embodiments, this may lead to disproportionate use of cores, as indicated by variable load 515 in FIG. 5A . can lead

일부 실시예에서, 부하, 작업 또는 네트워크 트래픽은 임의의 유형 및 형태의 데이터 흐름에 기초하여 코어(505) 사이에 분배될 수 있다. 이들 접근법 중 다른 하나에서, 작업은 데이터 흐름에 기초하여 코어 간에 분할 및 분배될 수 있다. 예를 들어, 기기를 횡단하는 클라이언트와 서버 사이의 네트워크 트래픽은 복수의 코어 중 하나의 코어에 의해 분배되어 프로세싱될 수 있다. 일부 경우에, 세션 또는 접속을 초기에 확립하는 코어는 해당 세션 또는 접속에 대한 네트워크 트래픽이 분배되는 코어일 수 있다. 일부 실시예에서, 데이터 흐름은 트랜잭션, 요청/응답 통신 또는 클라이언트 상의 어플리케이션으로부터 발생되는 트래픽과 같은 네트워크 트래픽의 임의의 단위 또는 부분에 기초한다. 이러한 방식으로 그리고 일부 실시예에서, 기기(200')를 횡단하는 클라이언트와 서버 사이의 데이터 흐름은 다른 접근법보다 더 균형 잡힌 방식으로 분배될 수 있다.In some embodiments, loads, tasks, or network traffic may be distributed among cores 505 based on any type and form of data flow. In another of these approaches, work may be partitioned and distributed among cores based on data flow. For example, network traffic between a client and a server traversing a device may be distributed and processed by one of a plurality of cores. In some cases, the core that initially establishes the session or connection may be the core to which network traffic for that session or connection is distributed. In some embodiments, data flow is based on any unit or portion of network traffic, such as traffic originating from a transaction, request/response communication, or application on a client. In this manner and in some embodiments, the data flow between the client and server traversing the device 200 ′ may be distributed in a more balanced manner than other approaches.

흐름-기반 데이터 병렬 처리(520)에서, 데이터의 분배는 요청/응답 페어링(pairing), 트랜잭션, 세션, 접속 또는 어플리케이션 통신과 같은 임의의 유형의 데이터 흐름과 관련된다. 예를 들어, 기기를 횡단하는 클라이언트와 서버 간의 네트워크 트래픽은 복수의 코어 중 하나의 코어에 분배되어 프로세싱될 수 있다. 일부 경우에, 세션 또는 접속을 초기에 확립하는 코어는 해당 세션 또는 접속에 대한 네트워크 트래픽이 분배되는 코어일 수 있다. 데이터 흐름의 분배는 각각의 코어(505)가 실질적으로 동일하거나 상대적으로 균등하게 분배된 부하, 데이터 또는 네트워크 트래픽의 양을 운반하도록 하는 것일 수 있다.In flow-based data parallelism 520, distribution of data involves any type of data flow, such as request/response pairing, transaction, session, connection, or application communication. For example, network traffic between a client and a server crossing a device may be distributed to one core among a plurality of cores for processing. In some cases, the core that initially establishes the session or connection may be the core to which network traffic for that session or connection is distributed. The distribution of data flows may be such that each core 505 carries a substantially equal or relatively evenly distributed amount of load, data, or network traffic.

일부 실시예에서, 데이터 흐름은 트랜잭션, 요청/응답 통신 또는 클라이언트 상의 어플리케이션으로부터 발생하는 트래픽과 같은 네트워크 트래픽의 임의의 단위 또는 부분에 기초한다. 이러한 방식으로 그리고 일부 실시예에서, 기기(200')를 횡단하는 클라이언트와 서버 사이의 데이터 흐름은 다른 접근법보다 더 균형 잡힌 방식으로 분배될 수 있다. 일 실시예에서, 데이터 흐름은 트랜잭션 또는 일련의 트랜잭션에 기초하여 분배될 수 있다. 일부 실시예에서, 이 트랜잭션은 클라이언트와 서버 사이에 있을 수 있고, IP 주소 또는 다른 패킷 식별자에 의해 특성화될 수 있다. 예를 들어, 코어 1(505A)은 특정 클라이언트와 특정 서버 간의 트랜잭션에 전용일 수 있으므로, 코어 1(505A) 상의 부하(515A)는 특정 클라이언트와 서버 간의 트랜잭션과 연관된 네트워크 트래픽으로 구성될 수 있다. 코어 1(505A)에 네트워크 트래픽을 할당하는 것은 특정 클라이언트 또는 서버로부터 발생하는 모든 데이터 패킷을 코어 1(505A)로 라우팅함으로써 달성될 수 있다.In some embodiments, data flow is based on any unit or portion of network traffic, such as traffic originating from a transaction, request/response communication, or application on a client. In this manner and in some embodiments, the data flow between the client and server traversing the device 200 ′ may be distributed in a more balanced manner than other approaches. In one embodiment, the data flow may be distributed based on a transaction or series of transactions. In some embodiments, this transaction may be between a client and a server, and may be characterized by an IP address or other packet identifier. For example, since core 1 505A may be dedicated to transactions between specific clients and specific servers, load 515A on core 1 505A may consist of network traffic associated with transactions between specific clients and servers. Allocating network traffic to core 1 505A may be accomplished by routing all data packets originating from a particular client or server to core 1 505A.

작업 또는 부하는 트랜잭션에 부분적으로 기초하여 코어에 분배될 수 있지만, 다른 실시예에서, 부하 또는 작업은 패킷마다 할당될 수 있다. 이들 실시예에서, 기기(200)는 데이터 패킷을 인터셉팅하여 최소량의 부하를 갖는 코어(505)에 이를 할당할 수 있다. 예를 들어, 기기(200)는, 코어 1(505A) 상의 부하(515A)가 나머지 코어(505B-N) 상의 부하(515B-N)보다 작기 때문에 제1 진입 데이터 패킷을 코어 1(505A)에 할당할 수 있다. 일단 제1 데이터 패킷이 코어 1(505A)에 할당되면, 코어 1(505A) 상의 부하(515A)는 제1 데이터 패킷을 프로세싱하기 위해 필요한 프로세싱 자원의 양에 비례하여 증가된다. 기기(200)가 제2 데이터 패킷을 인터셉팅할 때, 기기(200)는, 코어 4(505D)가 두 번째로 적은 양의 부하를 갖기 때문에 코어 4(505D)에 부하를 할당할 것이다. 최소량의 부하를 갖는 코어에 데이터 패킷을 할당하는 것은 일부 실시예에서, 각 코어(505)에 분배된 부하(515A-N)가 실질적으로 동일하게 유지되도록 보장할 수 있다.The work or load may be distributed among the cores based in part on transactions, but in other embodiments, the load or task may be assigned per packet. In these embodiments, the device 200 may intercept the data packet and assign it to the core 505 with the least amount of load. For example, the device 200 sends the first incoming data packet to the core 1 505A because the load 515A on core 1 505A is less than the load 515B-N on the remaining cores 505B-N. can be assigned Once the first data packet is assigned to core 1 505A, the load 515A on core 1 505A is increased proportionally to the amount of processing resources needed to process the first data packet. When device 200 intercepts the second data packet, device 200 will assign a load to core 4 505D because core 4 505D has the second least amount of load. Allocating data packets to the cores with the least amount of load may, in some embodiments, ensure that the loads 515A-N distributed to each core 505 remain substantially the same.

다른 실시예에서, 부하는 네트워크 트래픽의 섹션이 특정 코어(505)에 할당되는 단위 별로 할당될 수 있다. 상술한 예는 패킷별로 부하 밸런싱을 나타낸다. 다른 실시예에서, 부하는 최소량의 부하를 갖는 코어(505)에 10, 100 또는 1000개의 패킷마다 할당되도록 패킷의 수에 기초하여 할당될 수 있다. 코어(505)에 할당된 패킷의 수는 어플리케이션, 사용자 또는 관리자에 의해 결정된 수일 수 있으며 제로보다 큰 임의의 수일 수 있다. 또 다른 실시예에서, 패킷이 미리 정해진 시간 동안 특정 코어(505)에 분배되도록 시간 메트릭에 기초하여 부하가 할당될 수 있다. 이들 실시예에서, 패킷은 5 밀리초 동안 또는 사용자, 프로그램, 시스템, 관리자 또는 다른 것에 의해 결정된 임의의 시간 구간 동안 특정 코어(505)에 분배될 수 있다. 미리 정해진 시간이 경과한 후, 데이터 패킷은 미리 정해진 시간 구간 동안 다른 코어(505)로 송신된다.In another embodiment, the load may be allocated on a per-unit basis in which a section of network traffic is allocated to a particular core 505 . The above example shows load balancing on a per-packet basis. In other embodiments, the load may be assigned based on the number of packets such that every 10, 100, or 1000 packets is assigned to the core 505 with the least amount of load. The number of packets allocated to the core 505 may be a number determined by an application, user, or administrator, and may be any number greater than zero. In another embodiment, loads may be assigned based on time metrics such that packets are distributed to specific cores 505 for a predetermined amount of time. In these embodiments, a packet may be distributed to a particular core 505 for 5 milliseconds or for any period of time determined by a user, program, system, administrator, or otherwise. After a predetermined time has elapsed, the data packet is transmitted to the other core 505 for a predetermined period of time.

하나 이상의 코어(505) 사이에 작업, 부하 또는 네트워크 트래픽을 분배하기 위한 흐름-기반 데이터 병렬 처리 방법은 상술한 실시예의 임의의 조합을 포함할 수 있다. 이러한 방법은 기기(200)의 임의의 부분에 의해, 패킷 엔진과 같은 코어(505) 중 하나 상에서 실행되는 어플리케이션 또는 실행 가능한 명령의 세트에 의해, 또는 임의의 어플리케이션, 프로그램 또는 기기(200)와 통신하는 컴퓨팅 디바이스 상에서 실행되는 에이전트에 의해 수행될 수 있다.A flow-based data parallel processing method for distributing work, load, or network traffic among one or more cores 505 may include any combination of the above-described embodiments. This method may be performed by any part of the device 200 , by an application or set of executable instructions executing on one of the cores 505 , such as a packet engine, or in communication with any application, program or device 200 . may be performed by an agent running on a computing device.

도 5a에 나타낸 기능 및 데이터 병렬 처리 컴퓨팅 스킴은 기능 병렬 처리(500), 데이터 병렬 처리(540), 흐름-기반 데이터 병렬 처리(520) 또는 이들의 임의의 부분을 포함하는 하이브리드 병렬 처리 또는 분산 프로세싱 스킴을 생성하도록 임의의 방식으로 조합될 수 있다. 일부 경우에, 멀티-코어 시스템은 하나 이상의 코어(505) 중에 부하를 분배하기 위한 임의의 유형 및 형태의 부하 밸런싱 스킴을 사용할 수 있다. 부하 밸런싱 스킴은 임의의 기능적 및 데이터 병렬 처리 스킴 또는 이들의 조합과의 임의의 조합으로 사용될 수 있다.The functional and data parallel processing computing scheme shown in FIG. 5A is a hybrid parallel processing or distributed processing comprising functional parallel processing 500 , data parallel processing 540 , flow-based data parallel processing 520 , or any portion thereof. They can be combined in any way to create a scheme. In some cases, a multi-core system may use any type and form of load balancing scheme for distributing the load among one or more cores 505 . The load balancing scheme may be used in any combination with any functional and data parallel processing scheme or combinations thereof.

도 5b에는 임의의 유형 및 형태의 하나 이상의 시스템, 기기, 디바이스 또는 구성 요소일 수 있는 멀티-코어 시스템(545)의 실시예가 나타내어져 있다. 이 시스템(545)은, 일부 실시예에서, 하나 이상의 프로세싱 코어(505A-N)를 갖는 기기(200) 내에 포함될 수 있다. 시스템(545)은 메모리 버스(556)와 통신하는 하나 이상의 패킷 엔진(PE) 또는 패킷 프로세싱 엔진(PPE)(548A-N)을 추가로 포함할 수 있다. 메모리 버스는 하나 이상의 프로세싱 코어(505A-N)와 통신하는 데 사용될 수 있다. 또한, 시스템(545) 내에는 하나 이상의 네트워크 인터페이스 카드(NIC)(552) 및 하나 이상의 프로세싱 코어(505A-N)와 추가로 통신할 수 있는 흐름 분배기(550)가 포함될 수 있다. 흐름 분배기(550)는 수신 측 스케일러(RSS: Receive Side Scaler) 또는 수신 측 스케일링(RSS: Receive Side Scaling) 모듈을 포함할 수 있다.5B shows an embodiment of a multi-core system 545, which may be one or more systems, appliances, devices, or components of any type and form. This system 545 may, in some embodiments, be included within a device 200 having one or more processing cores 505A-N. System 545 may further include one or more packet engines (PEs) or packet processing engines (PPEs) 548A-N in communication with memory bus 556 . A memory bus may be used to communicate with one or more processing cores 505A-N. Also included within the system 545 may be a flow distributor 550 that may further communicate with one or more network interface cards (NICs) 552 and one or more processing cores 505A-N. The flow distributor 550 may include a Receive Side Scaler (RSS) or a Receive Side Scaling (RSS) module.

추가로 도 5b를 참조하고, 더욱 상세하게, 일 실시예에서 패킷 엔진(들)(548A-N)은 도 2a 및 도 2b에 설명된 기기의 임의의 부분과 같이 본원에 설명되는 기기(200)의 임의의 부분을 포함할 수 있다. 패킷 엔진(들)(548A-N)은 일부 실시예에서, 다음 요소들 중 임의의 것을 포함할 수 있다: 패킷 엔진(240), 네트워크 스택(267); 캐시 관리자(232); 정책 엔진(236); 압축 엔진(238); 암호화 엔진(234); GUI(210); CLI(212); 쉘 서비스(214); 모니터링 프로그램(216); 및 메모리 버스(556) 또는 하나 이상의 코어(505A-N) 중 어느 하나로부터 데이터 패킷을 수신할 수 있는 임의의 다른 소프트웨어 또는 하드웨어 요소. 일부 실시예에서, 패킷 엔진(들)(548A-N)은 하나 이상의 vServer(275A-N) 또는 임의의 그 일부를 포함할 수 있다. 다른 실시예에서, 패킷 엔진(들)(548A-N)은 다음 기능들의 임의의 조합을 제공할 수 있다: SSL VPN(280); 인트라넷 UP(282); 스위칭(284); DNS(286); 패킷 가속(288); App FW(290); 모니터링 에이전트(197)에 의해 제공되는 모니터링과 같은 모니터링; TCP 스택으로서의 기능과 연관된 기능; 부하 밸런싱; SSL 오프 로딩 및 프로세싱; 컨텐츠 스위칭; 정책 평가; 캐싱; 압축; 인코딩; 압축 해제; 디코딩; 어플리케이션 방화벽 기능; XML 프로세싱 및 가속; 및 SSL VPN 접속.Referring further to FIG. 5B and more particularly, in one embodiment packet engine(s) 548A-N are device 200 described herein, such as any part of the device described in FIGS. 2A and 2B . may include any part of Packet engine(s) 548A-N may, in some embodiments, include any of the following elements: packet engine 240 , network stack 267 ; cache manager 232; policy engine 236; compression engine 238; encryption engine 234; GUI 210; CLI (212); shell service 214; monitoring program 216; and any other software or hardware element capable of receiving data packets from either the memory bus 556 or one or more cores 505A-N. In some embodiments, packet engine(s) 548A-N may include one or more vServers 275A-N, or any portion thereof. In other embodiments, packet engine(s) 548A-N may provide any combination of the following functions: SSL VPN 280; intranet UP 282; switching 284; DNS (286); packet acceleration 288; App FW (290); monitoring, such as monitoring provided by monitoring agent 197; Functions associated with functions as a TCP stack; load balancing; SSL offloading and processing; content switching; policy evaluation; caching; compression; encoding; decompress; decoding; application firewall function; XML processing and acceleration; and SSL VPN connections.

패킷 엔진(들)(548A-N)은 일부 실시예에서 특정 서버, 사용자, 클라이언트 또는 네트워크와 연관될 수 있다. 패킷 엔진(548)이 특정 엔티티와 연관될 때, 해당 패킷 엔진(548)은 해당 엔티티와 연관된 데이터 패킷을 프로세싱할 수 있다. 예를 들어, 패킷 엔진(548)이 제1 사용자와 연관되어야 하는 경우, 해당 패킷 엔진(548)은 제1 사용자에 의해 생성된 패킷, 또는 제1 사용자와 연관된 착신 주소를 갖는 패킷에 대해 프로세싱 및 동작할 것이다. 유사하게, 패킷 엔진(548)은 특정 엔티티와 연관되지 않도록 선택할 수 있어, 패킷 엔진(548)은 해당 엔티티에 의해 생성되지 않거나 해당 엔티티로 예정된 임의의 데이터 패킷에 대해 프로세싱 및 이와 다르게 동작할 수 있다.Packet engine(s) 548A-N may be associated with a particular server, user, client, or network in some embodiments. When a packet engine 548 is associated with a particular entity, the packet engine 548 may process the data packet associated with that entity. For example, if a packet engine 548 is to be associated with a first user, that packet engine 548 may process and it will work Similarly, the packet engine 548 may choose not to associate with a particular entity, so that the packet engine 548 may process and otherwise operate on any data packets not generated by or destined for that entity. .

일부 예에서, 패킷 엔진(들)(548A-N)은 도 5a에 나타낸 기능적 및/또는 데이터 병렬 처리 스킴 중 임의의 것을 수행하도록 구성될 수 있다. 이러한 예에서, 패킷 엔진(들)(548A-N)은, 분배가 병렬 처리 또는 분배 스킴에 따르도록 프로세싱 코어(505A-N) 중에서 기능 또는 데이터를 분배할 수 있다. 일부 실시예에서, 단일 패킷 엔진(들)(548A-N)이 부하 밸런싱 스킴을 수행하는 반면, 다른 실시예에서 하나 이상의 패킷 엔진(들)(548A-N)이 부하 밸런싱 스킴을 수행한다. 일 실시예에서, 각각의 코어(505A-N)는, 부하 밸런싱이 패킷 엔진에 의해 수행될 수 있도록 특정 패킷 엔진(548)과 연관될 수 있다. 부하 밸런싱은 이 실시예에서, 코어(505)와 연관된 각각의 패킷 엔진(548A-N)이 코어와 연관된 다른 패킷 엔진과 통신하여 패킷 엔진(548A-N)이 부하를 어디에 분배할지를 총괄적으로 결정할 수 있도록 요구할 수 있다. 이 프로세스의 일 실시예는 부하에 대해 각각의 패킷 엔진으로부터 투표를 수신하는 중재자를 포함할 수 있다. 중재자는 엔진의 투표 연령 및 일부 경우 엔진의 연관된 코어(505) 상의 현재 부하량과 연관된 우선 순위값에 일부 기초하여 각각의 패킷 엔진(548A-N)에 부하를 분배할 수 있다.In some examples, packet engine(s) 548A-N may be configured to perform any of the functional and/or data parallel processing schemes shown in FIG. 5A . In this example, the packet engine(s) 548A-N may distribute the function or data among the processing cores 505A-N such that the distribution conforms to a parallel processing or distribution scheme. In some embodiments, a single packet engine(s) 548A-N performs a load balancing scheme, while in other embodiments one or more packet engine(s) 548A-N performs a load balancing scheme. In one embodiment, each core 505A-N may be associated with a particular packet engine 548 such that load balancing may be performed by the packet engine. Load balancing may, in this embodiment, allow each packet engine 548A-N associated with a core 505 to communicate with other packet engines associated with the core to collectively determine where packet engines 548A-N distribute the load. you can request to have One embodiment of this process may include a moderator receiving a vote from each packet engine for a load. The moderator may distribute the load to each packet engine 548A-N based in part on a priority value associated with the engine's voting age and in some cases the current load on the engine's associated core 505 .

코어 상에서 실행되는 임의의 패킷 엔진은 사용자 모드, 커널 또는 이들의 임의의 조합으로 실행될 수 있다. 일부 실시예에서, 패킷 엔진은 실행중인 어플리케이션 또는 프로그램이 사용자 또는 어플리케이션 공간인 것과 같이 동작한다. 이들 실시예에서, 패킷 엔진은 커널에 의해 제공된 임의의 기능에 액세스하기 위해 임의의 유형 및 형태의 인터페이스를 사용할 수 있다. 일부 실시예에서, 패킷 엔진은 커널 모드 또는 커널의 일부로서 동작한다. 일부 실시예에서, 패킷 엔진의 제1 부분은 사용자 모드에서 동작하는 반면, 패킷 엔진의 제2 부분은 커널 모드에서 동작한다. 일부 실시예에서, 제1 코어 상의 제1 패킷 엔진은 커널 모드에서 실행되는 반면, 제2 코어 상의 제2 패킷 엔진은 사용자 모드에서 실행된다. 일부 실시예에서, 패킷 엔진 또는 그 임의의 부분은 NIC 또는 그 임의의 드라이버 상에서 또는 이와 연계하여 동작한다.Any packet engine running on the core may run in user mode, kernel, or any combination thereof. In some embodiments, the packet engine operates as if the running application or program is the user or application space. In these embodiments, the packet engine may use any type and form of interface to access any functionality provided by the kernel. In some embodiments, the packet engine operates in kernel mode or as part of the kernel. In some embodiments, a first portion of the packet engine operates in user mode, while a second portion of the packet engine operates in kernel mode. In some embodiments, the first packet engine on the first core runs in kernel mode, while the second packet engine on the second core runs in user mode. In some embodiments, the packet engine or any portion thereof operates on or in conjunction with the NIC or any driver thereof.

일부 실시예에서, 메모리 버스(556)는 임의의 유형 및 형태의 메모리 또는 컴퓨터 버스일 수 있다. 단일 메모리 버스(556)가 도 5b에 도시되어 있지만, 시스템(545)은 임의의 수의 메모리 버스(556)를 포함할 수 있다. 일 실시예에서, 각각의 패킷 엔진(548)은 하나 이상의 개별 메모리 버스(556)와 연관될 수 있다.In some embodiments, memory bus 556 may be any type and form of memory or computer bus. Although a single memory bus 556 is shown in FIG. 5B , the system 545 may include any number of memory buses 556 . In one embodiment, each packet engine 548 may be associated with one or more separate memory buses 556 .

NIC(552)는 일부 실시예에서 본원에 설명되는 네트워크 인터페이스 카드 또는 메커니즘 중 임의의 것일 수 있다. NIC(552)는 임의의 개수의 포트를 가질 수 있다. NIC(552)는 임의의 유형 및 형태의 네트워크(104)에 접속되도록 설계 및 구성될 수 있다. 단일 NIC(552)가 나타내어져 있지만, 시스템(545)은 임의의 개수의 NIC(552)를 포함할 수 있다. 일부 실시예에서, 각각의 코어(505A-N)는 하나 이상의 단일 NIC(552)와 연관될 수 있다. 따라서, 각각의 코어(505)는 특정 코어(505)에 전용인 단일 NIC(552)와 연관될 수 있다.The NIC 552 may in some embodiments be any of the network interface cards or mechanisms described herein. The NIC 552 may have any number of ports. The NIC 552 may be designed and configured to connect to any type and type of network 104 . Although a single NIC 552 is shown, the system 545 may include any number of NICs 552 . In some embodiments, each core 505A-N may be associated with one or more single NICs 552 . Thus, each core 505 may be associated with a single NIC 552 dedicated to a particular core 505 .

코어(505A-N)는 본원에 설명되는 임의의 프로세서를 포함할 수 있다. 또한, 코어(505A-N)는 본원에 설명되는 코어(505) 구성 중 임의의 것에 따라 구성될 수 있다. 또한, 코어(505A-N)는 본원에 설명되는 코어(505) 기능 중 임의의 것을 가질 수 있다. 도 5b는 7개의 코어(505A-G)를 나타내지만, 임의의 수의 코어(505)가 시스템(545) 내에 포함될 수 있다. 특히, 시스템(545)은 "N"개의 코어를 포함할 수 있으며, 여기서 "N"은 0보다 큰 정수이다.Cores 505A-N may include any of the processors described herein. Further, the cores 505A-N may be configured according to any of the core 505 configurations described herein. Additionally, cores 505A-N may have any of the core 505 functions described herein. 5B shows seven cores 505A-G, any number of cores 505 may be included in system 545 . In particular, system 545 may include “N” cores, where “N” is an integer greater than zero.

코어(505)는 해당 코어(505)에 사용하기 위해 할당 또는 배당된 메모리를 갖거나 사용할 수 있다. 메모리는 해당 코어(505)의 개인 또는 로컬 메모리로 간주되며 해당 코어(505)에 의해서만 액세스될 수 있다. 코어(505)는 복수 코어(505)에 공유되거나 할당된 메모리를 가지거나 사용할 수 있다. 메모리는 하나 초과의 코어(505)에 의해 액세스될 수 있는 공용 또는 공유 메모리로 간주될 수 있다. 코어(505)는 개인 메모리와 공용 메모리의 임의의 조합을 사용할 수 있다. 각 코어(505)에 대해 별도의 주소 공간을 사용하면, 동일한 주소 공간을 사용하는 경우로부터 어느 정도의 조정이 제거된다. 별도의 주소 공간을 사용하면, 코어(505)는 다른 코어(505)와의 충돌에 대한 걱정 없이 코어(505)의 자체 주소 공간의 정보 및 데이터에 대한 작업을 수행할 수 있다. 각 패킷 엔진은 TCP 및/또는 SSL 접속을 위한 별도의 메모리 풀을 가질 수 있다.The core 505 may have or use memory allocated or allocated for use in the core 505 . Memory is considered private or local memory of that core 505 and can only be accessed by that core 505 . The core 505 may have or use memory shared or allocated to multiple cores 505 . Memory may be considered public or shared memory that may be accessed by more than one core 505 . Core 505 may use any combination of private and public memory. Using a separate address space for each core 505 eliminates some coordination from using the same address space. If a separate address space is used, the core 505 can perform operations on information and data in the core 505's own address space without worrying about collisions with other cores 505 . Each packet engine may have a separate memory pool for TCP and/or SSL connections.

추가로 도 5b를 참조하면, 도 5a와 관련하여 상술한 코어(505)의 기능 및/또는 실시예 중 임의의 것이 도 4a 및 도 4b와 관련하여 상술한 가상화된 환경의 임의의 실시예에 배치될 수 있다. 코어(505)의 기능이 물리적 프로세서(505)의 형태로 배치되는 대신에, 이러한 기능은 클라이언트(102), 서버(106) 또는 기기(200)와 같은 임의의 컴퓨팅 디바이스(100) 상의 가상화된 환경(400)에 배치될 수 있다. 다른 실시예에서, 코어(505)의 기능이 기기 또는 단일 디바이스의 형태로 배치되는 대신에, 기능은 임의의 배열로 복수의 디바이스에 걸쳐 배치될 수 있다. 예를 들어, 하나의 디바이스가 둘 이상의 코어(505)를 포함할 수 있고 다른 디바이스가 둘 이상의 코어(505)를 포함할 수 있다. 예를 들어, 멀티-코어 시스템은 컴퓨팅 디바이스의 클러스터, 서버 팜 또는 컴퓨팅 디바이스의 네트워크를 포함할 수 있다. 일부 실시예에서, 코어(505)의 기능이 코어 형태로 배치되는 대신에, 기능은 복수의 단일 코어 프로세서와 같은 복수의 프로세서 상에 배치될 수 있다.With further reference to FIG. 5B , any of the functions and/or embodiments of the core 505 described above with respect to FIG. 5A may be deployed in any embodiment of the virtualized environment described above with respect to FIGS. 4A and 4B . can be Instead of the functionality of the core 505 being deployed in the form of a physical processor 505 , such functionality is implemented in a virtualized environment on any computing device 100 , such as the client 102 , server 106 or appliance 200 . 400 may be disposed. In other embodiments, instead of the functionality of the core 505 being deployed in the form of a device or a single device, the functionality may be deployed across a plurality of devices in any arrangement. For example, one device may include two or more cores 505 and another device may include two or more cores 505 . For example, a multi-core system may include a cluster of computing devices, a server farm, or a network of computing devices. In some embodiments, instead of the functionality of the core 505 being deployed in core form, the functionality may be deployed on multiple processors, such as multiple single core processors.

일 실시예에서, 코어(505)는 임의의 유형 및 형태의 프로세서일 수 있다. 일부 실시예에서, 코어(505)는 본원에 설명되는 임의의 프로세서 또는 중앙 처리 장치와 실질적으로 유사하게 기능할 수 있다. 일부 실시예에서, 코어(505)는 본원에 설명되는 임의의 프로세서의 임의의 부분을 포함할 수 있다. 도 5a는 7개의 코어를 나타내지만, 기기(200) 내에 임의의 "N"개의 코어(505A-N)가 존재할 수 있으며, 여기서 "N"은 1보다 큰 임의의 정수이다. 일부 실시예에서, 코어(505)는 공통 기기(200) 내에 설치될 수 있는 반면, 다른 실시예에서 코어(505)는 서로 통신 가능하게 접속된 하나 이상의 기기(들)(200) 내에 설치될 수 있다. 코어(505)는 일부 실시예에서 그래픽 프로세싱 소프트웨어를 포함할 수 있는 반면, 다른 실시예에서 코어(505)는 일반적인 프로세싱 기능을 제공한다. 코어(505)는 서로 가까이에 물리적으로 설치될 수 있고 및/또는 서로 통신 가능하게 접속될 수 있다. 코어(505)는 코어(505)로, 코어(505)로부터 및/또는 코어(505) 사이에서 데이터를 전달하기 위해 코어(505)에 물리적으로 및/또는 통신 가능하게 커플링된 임의의 유형 및 형태의 버스 또는 서브시스템에 의해 접속될 수 있다.In one embodiment, core 505 may be any type and type of processor. In some embodiments, core 505 may function substantially similar to any processor or central processing unit described herein. In some embodiments, core 505 may include any portion of any processor described herein. 5A shows seven cores, there may be any “N” cores 505A-N in device 200 , where “N” is any integer greater than one. In some embodiments, the core 505 may be installed within a common device 200 , while in other embodiments the core 505 may be installed within one or more device(s) 200 communicatively connected to each other. have. Core 505 may include graphics processing software in some embodiments, while in other embodiments core 505 provides general processing functions. The cores 505 may be physically installed close to each other and/or may be communicatively connected to each other. The core 505 may be any type and/or physically and/or communicatively coupled to the core 505 for passing data to, from, and/or between the cores 505 . It can be connected by a bus or subsystem of the form.

각각의 코어(505)는 다른 코어(505)와 통신하기 위한 소프트웨어를 포함할 수 있지만, 일부 실시예에서 코어 관리자(미도시)는 각 코어(505) 사이의 통신을 용이하게 할 수 있다. 일부 실시예에서, 커널이 코어 관리를 제공할 수 있다. 코어(505)는 다양한 인터페이스 메커니즘을 사용하여 서로 인터페이싱하거나 통신할 수 있다. 일부 실시예에서, 코어 대 코어 메시징이 코어(505)를 접속하는 버스 또는 서브시스템을 통해 메시지 또는 데이터를 제2 코어로 전송하는 제1 코어와 같이, 코어(505) 사이의 통신에 사용될 수 있다. 일부 실시예에서, 코어(505)는 임의의 유형 및 형태의 공유 메모리 인터페이스를 통해 통신할 수 있다. 일 실시예에서, 모든 코어들(505) 간에 공유되는 하나 이상의 메모리 위치가 있을 수 있다. 일부 실시예에서, 각각의 코어(505)는 서로 코어(505)와 공유되는 별도의 메모리 위치를 가질 수 있다. 예를 들어, 제1 코어(505A)는 제2 코어(505B)와의 제1 공유 메모리 및 제3 코어(505C)와의 제2 공유 메모리를 가질 수 있다. 일부 실시예에서, 코어(505)는 커널을 통한 함수 호출과 같은 임의의 유형의 프로그래밍 또는 API를 통해 통신할 수 있다. 일부 실시예에서, 운영 체제는 복수의 코어 디바이스를 인식 및 지원하고 코어 간 통신을 위한 인터페이스 및 API를 제공할 수 있다.Each core 505 may include software for communicating with other cores 505 , although in some embodiments a core manager (not shown) may facilitate communication between each core 505 . In some embodiments, the kernel may provide core management. The cores 505 may interface or communicate with each other using various interface mechanisms. In some embodiments, core-to-core messaging may be used for communication between cores 505 , such as a first core sending messages or data to a second core via a bus or subsystem that connects the cores 505 . . In some embodiments, core 505 may communicate via any type and form of shared memory interface. In one embodiment, there may be more than one memory location shared among all cores 505 . In some embodiments, each core 505 may have a separate memory location shared with each other and core 505 . For example, the first core 505A may have a first shared memory with the second core 505B and a second shared memory with the third core 505C. In some embodiments, the core 505 may communicate via any type of programming or API, such as a function call via the kernel. In some embodiments, the operating system may recognize and support multiple core devices and provide interfaces and APIs for inter-core communication.

흐름 분배기(550)는 임의의 유형 및 형태의 하드웨어 상에서 실행되는 임의의 어플리케이션, 프로그램, 라이브러리, 스크립트, 작업, 서비스, 프로세스 또는 임의의 유형 및 형태의 실행 가능한 명령일 수 있다. 일부 실시예에서, 흐름 분배기(550)는 본원에 설명된 동작 및 기능 중 임의의 것을 수행하기 위한 회로의 임의의 설계 및 구성일 수 있다. 일부 실시예에서, 흐름 분배기(550)는 코어(505) 및/또는 코어(505) 상에서 실행되는 패킷 엔진 또는 VIP 사이에서 데이터 패킷의 분배를 분산, 전달, 라우팅, 제어 및/또는 관리한다. 일부 실시예에서, 흐름 분배기(550)는 인터페이스 마스터로 지칭될 수 있다. 일 실시예에서, 흐름 분배기(550)는 기기(200)의 코어(505) 또는 프로세서 상에서 실행되는 실행 가능한 명령의 세트를 포함한다. 다른 실시예에서, 흐름 분배기(550)는 기기(200)와 통신하는 컴퓨팅 머신 상에서 실행되는 실행 가능 명령의 세트를 포함한다. 일부 실시예에서, 흐름 분배기(550)는 펌웨어와 같은 NIC(552) 상에서 실행되는 실행 가능 명령의 세트를 포함한다. 또 다른 실시예에서, 흐름 분배기(550)는 코어(505) 또는 프로세서 간에 데이터 패킷을 분배하기 위한 소프트웨어 및 하드웨어의 임의의 조합을 포함한다. 일 실시예에서, 흐름 분배기(550)는 코어(505A-N) 중 적어도 하나에서 실행되는 반면, 다른 실시예에서, 각각의 코어(505A-N)에 할당된 개별 흐름 분배기(550)는 연관된 코어(505A-N) 상에서 실행된다. 흐름 분배기(550)는 임의의 유형 및 형태의 통계 또는 확률적 알고리즘 또는 의사 결정을 사용하여 코어(505)에 걸친 흐름의 균형을 맞출 수 있다. NIC(552) 또는 커널과 같은 기기의 하드웨어는 NIC(552) 및/또는 코어(505)에 걸쳐 순차적인 동작을 지원하도록 설계 및 구성될 수 있다.Flow distributor 550 may be any application, program, library, script, task, service, process, or executable instruction of any type and form running on any type and type of hardware. In some embodiments, flow distributor 550 may be any design and configuration of circuitry for performing any of the operations and functions described herein. In some embodiments, flow distributor 550 distributes, forwards, routes, controls and/or manages distribution of data packets between core 505 and/or packet engines or VIPs running on core 505 . In some embodiments, flow distributor 550 may be referred to as an interface master. In one embodiment, flow distributor 550 includes a set of executable instructions that are executed on a processor or core 505 of device 200 . In another embodiment, flow distributor 550 includes a set of executable instructions that are executed on a computing machine in communication with device 200 . In some embodiments, flow distributor 550 includes a set of executable instructions that are executed on NIC 552, such as firmware. In another embodiment, flow distributor 550 includes any combination of software and hardware for distributing data packets between cores 505 or processors. In one embodiment, flow distributors 550 run on at least one of the cores 505A-N, while in another embodiment, individual flow distributors 550 assigned to each core 505A-N are associated with an associated core. (505A-N). The flow distributor 550 may use any type and form of statistical or probabilistic algorithm or decision making to balance the flow across the core 505 . Hardware of a device, such as NIC 552 or kernel, may be designed and configured to support sequential operation across NIC 552 and/or core 505 .

시스템(545)이 하나 이상의 흐름 분배기(550)를 포함하는 실시예에서, 각각의 흐름 분배기(550)는 프로세서(505) 또는 패킷 엔진(548)과 연관될 수 있다. 흐름 분배기(550)는 각각의 흐름 분배기(550)가 시스템(545) 내에서 실행되는 다른 흐름 분배기(550)와 통신할 수 있게 하는 인터페이스 메커니즘을 포함할 수 있다. 하나의 예에서, 하나 이상의 흐름 분배기(550)는 서로 통신함으로써 부하를 밸런싱하는 방식을 결정할 수 있다. 이 프로세스는 중재자에게 투표를 제출하기 위해 상술한 프로세스와 실질적으로 유사하게 동작할 수 있으며, 그 후 중재자는 어떠한 흐름 분배기(550)가 부하를 수신해야 하는지를 결정한다. 다른 실시예에서, 제1 흐름 분배기(550')는 다음의 기준들 중 임의의 것에 기초하여 연관된 코어(505) 상의 부하를 식별하고 제1 데이터 패킷을 연관된 코어(505)로 전달할지 여부를 결정할 수 있다: 연관된 코어(505) 상의 부하가 미리 정해진 임계값을 초과함; 연관된 코어(505) 상의 부하가 미리 정해진 임계값 미만임; 연관된 코어(505) 상의 부하가 다른 코어(505) 상의 부하 미만임; 또는 프로세서 상의 부하량에 부분적으로 기초하여 데이터 패킷을 전달할 위치를 결정하는 데 사용될 수 있는 임의의 다른 메트릭.In embodiments where system 545 includes one or more flow distributors 550 , each flow distributor 550 may be associated with a processor 505 or packet engine 548 . Flow distributors 550 may include an interface mechanism that enables each flow distributor 550 to communicate with other flow distributors 550 executing within system 545 . In one example, one or more flow distributors 550 may communicate with each other to determine how to balance the load. This process may operate substantially similar to the process described above for submitting votes to a moderator, whereupon the moderator determines which flow distributor 550 should receive the load. In another embodiment, the first flow distributor 550 ′ identifies a load on the associated core 505 and determines whether to forward the first data packet to the associated core 505 based on any of the following criteria. may: the load on the associated core 505 exceeds a predetermined threshold; the load on the associated core 505 is below a predetermined threshold; the load on the associated core 505 is less than the load on the other core 505; or any other metric that may be used to determine where to forward the data packet based in part on the amount of load on the processor.

흐름 분배기(550)는 본원에 설명된 것과 같은 분배, 컴퓨팅 또는 부하 밸런싱 스킴에 따라 코어(505) 사이에 네트워크 트래픽을 분배할 수 있다. 일 실시예에서, 흐름 분배기(550)는 기능적 병렬 처리 분배 스킴(550), 데이터 병렬 처리 부하 분배 스킴(540), 흐름-기반 데이터 병렬 처리 분배 스킴(520), 또는 이들 분배 스킴의 임의의 조합 또는 복수의 프로세서 사이에 부하를 분배하기 위한 임의의 부하 밸런싱 스킴 중 임의의 하나에 따라 네트워크 트래픽을 분배할 수 있다. 따라서, 흐름 분배기(550)는 데이터 패킷을 취하여 동작 부하 밸런싱 또는 분배 스킴에 따라 프로세서에 걸쳐 이를 분배함으로써 부하 분배기로서 작용할 수 있다. 일 실시예에서, 흐름 분배기(550)는 그에 따라 패킷, 작업 또는 부하를 분배하는 방식을 결정하기 위한 하나 이상의 동작, 기능 또는 로직을 포함할 수 있다. 또 다른 실시예에서, 흐름 분배기(550)는 소스 주소 및 데이터 패킷과 연관된 착신 주소를 식별하고 그에 따라 패킷을 분배할 수 있는 하나 이상의 서브 동작, 기능 또는 로직을 포함할 수 있다.The flow distributor 550 may distribute network traffic among the cores 505 according to a distribution, computing, or load balancing scheme as described herein. In one embodiment, the flow distributor 550 is a functional parallel processing distribution scheme 550 , a data parallel processing load distribution scheme 540 , a flow-based data parallel processing distribution scheme 520 , or any combination of these distribution schemes. or distribute the network traffic according to any one of any load balancing scheme for distributing the load among the plurality of processors. Thus, flow divider 550 may act as a load divider by taking data packets and distributing them across processors according to an operating load balancing or distribution scheme. In one embodiment, flow distributor 550 may include one or more operations, functions, or logic for determining how to distribute packets, tasks, or loads accordingly. In yet another embodiment, flow distributor 550 may include one or more sub-operations, functions, or logic capable of identifying source addresses and destination addresses associated with data packets and distributing packets accordingly.

일부 실시예에서, 흐름 분배기(550)는 수신-측 스케일링(RSS) 네트워크 드라이버, 모듈 또는 하나 이상의 코어(505) 사이에 데이터 패킷을 분배하는 임의의 유형 및 형태의 실행 가능 명령을 포함할 수 있다. RSS 모듈은 하드웨어와 소프트웨어의 임의의 조합을 포함할 수 있다. 일부 실시예에서, RSS 모듈은 흐름 분배기(550)와 연계하여 작동하여 코어(505A-N)에 걸친 또는 멀티-프로세서 네트워크의 복수의 프로세서 사이에 데이터 패킷을 분배한다. RSS 모듈은 일부 실시예에서 NIC(552) 내에서 실행될 수 있고, 다른 실시예에서 코어(505) 중 임의의 하나 상에서 실행될 수 있다.In some embodiments, flow distributor 550 may include receive-side scaling (RSS) network drivers, modules, or executable instructions of any type and form to distribute data packets between one or more cores 505 . . The RSS module may include any combination of hardware and software. In some embodiments, the RSS module operates in conjunction with flow distributor 550 to distribute data packets across cores 505A-N or among multiple processors of a multi-processor network. The RSS module may run within the NIC 552 in some embodiments, and may run on any one of the cores 505 in other embodiments.

일부 실시예에서, RSS 모듈은 MICROSOFT 수신-측-스케일링(RSS) 스킴을 사용한다. 일 실시예에서, RSS는 데이터의 순서대로의 전달을 유지하면서 수신 프로세싱이 시스템의 복수의 프로세서에 걸쳐 균형을 잡을 수 있게 하는 Microsoft Scalable Networking 이니셔티브 기술이다. RSS는 네트워크 패킷을 프로세싱하기 위한 코어 또는 프로세서를 결정하기 위해 임의의 유형 및 형태의 해싱(hashing) 스킴을 사용할 수 있다.In some embodiments, the RSS module uses a MICROSOFT receive-side-scaling (RSS) scheme. In one embodiment, RSS is a Microsoft Scalable Networking initiative technology that allows incoming processing to be balanced across multiple processors in a system while maintaining in-order delivery of data. RSS may use any type and form of hashing scheme to determine which core or processor to process a network packet.

RSS 모듈은 Toeplitz 해시 함수와 같은 임의의 유형 및 형태의 해시 함수를 적용할 수 있다. 해시 함수는 해시 유형 또는 임의의 시퀀스의 값에 적용될 수 있다. 해시 함수는 임의의 보안 레벨의 보안 해시일 수 있거나 이와 다르게 암호학적으로 안전하다. 해시 함수는 해시 키를 사용할 수 있다. 키의 크기는 해시 함수에 따른다. Toeplitz 해시의 경우, 크기는 IPv6의 경우 40 바이트, IPv4의 경우 16 바이트일 수 있다.The RSS module can apply a hash function of any type and form, such as the Toeplitz hash function. A hash function can be applied to a hash type or any sequence of values. The hash function may be a secure hash of any security level, or otherwise cryptographically secure. A hash function can use a hash key. The size of the key depends on the hash function. For the Toeplitz hash, the size can be 40 bytes for IPv6 and 16 bytes for IPv4.

해시 함수는 하나 이상의 기준 또는 설계 목표에 기초하여 설계 및 구성될 수 있다. 일부 실시예에서, TCP/IPv4, TCP/IPv6, IPv4 및 IPv6 헤더를 포함하는 상이한 해시 입력 및 상이한 해시 유형에 대한 해시 결과의 균일한 분배를 제공하는 해시 함수가 사용될 수 있다. 일부 실시예에서, 적은 수(예를 들어, 2개 또는 4개)의 버킷이 존재할 때 균일하게 분배되는 해시 결과를 제공하는 해시 함수가 사용될 수 있다. 일부 실시예에서, 많은 수의 버킷(예를 들어, 64개의 버킷)이 존재할 때 랜덤하게 분배되는 해시 결과를 제공하는 해시 함수가 사용될 수 있다. 일부 실시예에서, 해시 함수는 계산 레벨 또는 자원 사용량에 기초하여 결정된다. 일부 실시예에서, 해시 함수는 하드웨어에서 해시를 구현하는 용이성 또는 곤란성에 기초하여 결정된다. 일부 실시예에서, 해시 함수는 악의적인 원격 호스트가 동일한 버킷으로 모두 해싱하는 패킷을 전송하는 데 있어서의 용이성 또는 곤란성에 기초하여 결정된다.The hash function may be designed and constructed based on one or more criteria or design goals. In some embodiments, hash functions may be used that provide uniform distribution of hash results for different hash inputs and different hash types, including TCP/IPv4, TCP/IPv6, IPv4 and IPv6 headers. In some embodiments, a hash function may be used that provides a uniformly distributed hash result when there are a small number (eg, two or four) of buckets. In some embodiments, a hash function may be used that provides a randomly distributed hash result when there is a large number of buckets (eg, 64 buckets). In some embodiments, the hash function is determined based on computational level or resource usage. In some embodiments, the hash function is determined based on the ease or difficulty of implementing the hash in hardware. In some embodiments, the hash function is determined based on the ease or difficulty of a malicious remote host sending a packet that it all hashes into the same bucket.

RSS는 일련의 값과 같은 임의의 유형 및 형태의 입력으로부터 해시를 생성할 수 있다. 이러한 일련의 값은 네트워크 패킷의 임의의 헤더, 필드 또는 페이로드 또는 그 일부와 같은 네트워크 패킷의 임의의 부분을 포함할 수 있다. 일부 실시예에서, 해시로의 입력은 해시 유형으로 지칭될 수 있고, 이하 중 임의의 것과 같이, 네트워크 패킷 또는 데이터 흐름과 연관된 정보의 임의의 튜플을 포함할 수 있다: 적어도 2개의 IP 주소 및 2개의 포트를 포함하는 4개의 튜플; 임의의 4개의 값의 세트를 포함하는 4개의 튜플; 6개의 튜플; 2개의 튜플; 및/또는 임의의 다른 일련의 숫자 또는 값. 다음은 RSS에 의해 사용될 수 있는 해시 유형의 예이다:RSS can generate hashes from inputs of any type and form, such as a series of values. This set of values may include any part of a network packet, such as any header, field, or payload of the network packet or a portion thereof. In some embodiments, the input to the hash may be referred to as a hash type and may include any tuple of information associated with a network packet or data flow, such as any of the following: at least two IP addresses and two 4 tuples containing ports; 4 tuples containing any set of 4 values; 6 tuples; 2 tuples; and/or any other series of numbers or values. The following are examples of hash types that can be used by RSS:

소스 TCP 포트, 소스 IP 버전 4(IPv4) 주소, 착신 TCP 포트 및 착신 IPv4 주소의 4-튜플.A 4-tuple of source TCP port, source IP version 4 (IPv4) address, destination TCP port, and destination IPv4 address.

소스 TCP 포트, 소스 IP 버전 6(IPv6) 주소, 착신 TCP 포트 및 착신 IPv6 주소의 4-튜플.A 4-tuple of the source TCP port, the source IP version 6 (IPv6) address, the destination TCP port, and the destination IPv6 address.

소스 IPv4 주소 및 착신 IPv4 주소의 2-튜플.A 2-tuple of the source IPv4 address and destination IPv4 address.

소스 IPv6 주소 및 착신 IPv6 주소의 2-튜플.A 2-tuple of the source IPv6 address and destination IPv6 address.

IPv6 확장 헤더 파싱(parsing)에 대한 지원을 포함하여, 소스 IPv6 주소 및 착신 IPv6 주소의 2-튜플.2-tuple of source IPv6 address and destination IPv6 address, including support for parsing IPv6 extended headers.

해시 결과 또는 임의의 그 일부는 네트워크 패킷을 분배하기 위한 패킷 엔진 또는 VIP와 같은 코어(505) 또는 엔티티를 식별하는 데 사용될 수 있다. 일부 실시예에서, 하나 이상의 해시 비트 또는 마스크가 해시 결과에 적용된다. 해시 비트 또는 마스크는 임의의 개수의 비트 또는 바이트일 수 있다. NIC(552)는 7 비트와 같은 임의의 수의 비트를 지원할 수 있다. 네트워크 스택은 초기화 동안 사용될 실제 비트 수를 설정할 수 있다. 숫자는 1과 7을 포함하여, 1과 7 사이일 것이다.The hash result, or any portion thereof, may be used to identify a core 505 or entity, such as a VIP or a packet engine for distributing network packets. In some embodiments, one or more hash bits or masks are applied to the hash result. A hash bit or mask can be any number of bits or bytes. The NIC 552 may support any number of bits, such as 7 bits. The network stack can set the actual number of bits to be used during initialization. The number will be between 1 and 7, inclusive of 1 and 7.

해시 결과는 버킷 테이블 또는 인디렉션(indirection) 테이블과 같은 임의의 유형 및 형태의 테이블을 통해 코어(505) 또는 엔티티를 식별하는 데 사용될 수 있다. 일부 실시예에서, 해시-결과 비트의 수가 테이블로 인덱싱하기 위해 사용된다. 해시 마스크의 범위는 인디렉션 테이블의 크기를 효과적으로 정의할 수 있다. 해시 결과 또는 해시 결과 자체의 일부는 인디렉션 테이블을 인덱싱하는 데 사용될 수 있다. 테이블의 값은 코어(505) 또는 프로세서 식별자에 의한 것과 같이, 임의의 코어(505) 또는 프로세서를 식별할 수 있다. 일부 실시예에서, 멀티-코어 시스템의 모든 코어(505)가 테이블에서 식별된다. 다른 실시예에서, 멀티-코어 시스템의 코어(505)의 포트가 테이블에서 식별된다. 인디렉션 테이블은 해시 마스크에 의해 인덱싱될 수 있는 임의의 수의 버킷, 예를 들어 2 내지 128개의 버킷을 포함할 수 있다. 각 버킷은 코어(505) 또는 프로세서를 식별하는 범위의 인덱스 값을 포함할 수 있다. 일부 실시예에서, 흐름 제어기 및/또는 RSS 모듈은 인디렉션 테이블을 변경함으로써 네트워크 부하를 리밸런싱할 수 있다.The hash result may be used to identify the core 505 or entity via any type and type of table, such as a bucket table or an indirection table. In some embodiments, the number of hash-result bits is used to index into the table. The range of the hash mask can effectively define the size of the direction table. The hash result, or part of the hash result itself, can be used to index the direction table. A value in the table may identify any core 505 or processor, such as by a core 505 or processor identifier. In some embodiments, all cores 505 of a multi-core system are identified in the table. In another embodiment, the ports of the core 505 of the multi-core system are identified in the table. The direction table may contain any number of buckets that may be indexed by a hash mask, for example from 2 to 128 buckets. Each bucket may contain an index value of a range that identifies the core 505 or processor. In some embodiments, the flow controller and/or RSS module may rebalance the network load by changing the direction table.

일부 실시예에서, 멀티-코어 시스템(545)은 RSS 드라이버 또는 RSS 모듈을 포함하지 않는다. 이들 실시예 중 일부에서, 시스템 내의 RSS 모듈의 소프트웨어 스티어링 모듈(미도시) 또는 소프트웨어 실시예는 흐름 분배기(550)의 일부와 연계하여 또는 일부로서 동작하여 멀티-코어 시스템(545) 내에서 코어(505)로 패킷을 스티어링할 수 있다.In some embodiments, the multi-core system 545 does not include an RSS driver or RSS module. In some of these embodiments, a software steering module (not shown) or software embodiment of an RSS module in the system operates in conjunction with or as part of a flow distributor 550 to operate as a core ( 505) to steer the packet.

흐름 분배기(550)는 일부 실시예에서 기기(200) 상의 임의의 모듈 또는 프로그램 내에서, 코어(505) 중 임의의 하나 및 멀티-코어 시스템(545) 내에 포함된 디바이스 또는 구성 요소 중 임의의 하나 상에서 실행된다. 일부 실시예에서, 흐름 분배기(550')는 제1 코어(505A) 상에서 실행될 수 있는 반면, 다른 실시예에서 흐름 분배기(550")는 NIC(552) 상에서 실행될 수 있다. 또 다른 실시예에서, 흐름 분배기(550')의 인스턴스는 멀티-코어 시스템(545)에 포함된 각각의 코어(505) 상에서 실행될 수 있다. 이 실시예에서, 흐름 분배기(550')의 각 인스턴스는 흐름 분배기(550')의 다른 인스턴스와 통신하여 코어(505)에 걸쳐 전후로 패킷을 전달할 수 있다. 요청 패킷에 대한 응답이 동일 코어에 의해 프로세싱되지 않을 수 있는 상황이 존재할 수 있으며, 즉, 제1 코어(505A)는 요청을 프로세싱하는 반면, 제2 코어(505B)는 응답을 프로세싱한다. 이러한 상황에서, 흐름 분배기(550')의 인스턴스는 패킷을 인터셉팅하여 이를 원하는, 또는 정확한 코어(505)로 전달할 수 있으며, 즉, 흐름 분배기 인스턴스(550')는 응답을 제1 코어(505A)로 전달할 수 있다. 흐름 분배기(550')의 복수의 인스턴스는 임의의 수의 코어(505) 및 임의의 조합의 코어(505) 상에서 실행될 수 있다.The flow distributor 550 in some embodiments within any module or program on the appliance 200 , any one of the cores 505 and any one of the devices or components included within the multi-core system 545 . run on top In some embodiments, the flow splitter 550' may run on the first core 505A, while in other embodiments the flow splitter 550" may run on the NIC 552. In another embodiment, An instance of flow distributor 550' may run on each core 505 included in multi-core system 545. In this embodiment, each instance of flow distributor 550' is ) to pass packets back and forth across core 505. There may be situations where a response to a request packet may not be processed by the same core, i.e., first core 505A While processing the request, the second core 505B processes the response In this situation, an instance of the flow distributor 550' can intercept the packet and forward it to the desired, or correct, core 505; That is, the flow distributor instance 550' may communicate the response to the first core 505A. The plurality of instances of the flow distributor 550' may include any number of cores 505 and any combination of cores 505. ) can be executed on

흐름 분배기(550)는 임의의 하나 이상의 규칙 또는 정책에 응답하여 동작할 수 있다. 규칙은 네트워크 패킷, 데이터 또는 데이터 흐름을 수신하는 코어 또는 패킷 프로세싱 엔진을 식별할 수 있다. 규칙은 소스 및 착신 IP 주소와 소스 및 착신 포트의 4-튜플과 같은 네트워크 패킷과 관련된 임의의 유형 및 형태의 튜플 정보를 식별할 수 있다. 규칙에 의해 특정된 튜플과 매칭되는 수신된 패킷에 기초하여, 흐름 분배기(550)는 패킷을 코어(505) 또는 패킷 엔진으로 전달할 수 있다. 일부 실시예에서, 패킷은 공유 메모리 및/또는 코어 대 코어 메시징을 통해 코어로 전달된다.Flow distributor 550 may operate in response to any one or more rules or policies. A rule may identify a core or packet processing engine receiving a network packet, data, or data flow. A rule may identify any type and form of tuple information associated with a network packet, such as a 4-tuple of source and destination IP addresses and source and destination ports. Based on the received packets matching the tuple specified by the rule, the flow distributor 550 may forward the packet to the core 505 or the packet engine. In some embodiments, packets are delivered to the core via shared memory and/or core-to-core messaging.

도 5b는 멀티-코어 시스템(545) 내에서 실행되는 흐름 분배기(550)를 나타내지만, 일부 실시예에서, 흐름 분배기(550)는 멀티-코어 시스템(545)으로부터 원격에 위치된 컴퓨팅 디바이스 또는 기기 상에서 실행될 수 있다. 이러한 실시예에서, 흐름 분배기(550)는 멀티-코어 시스템(545)과 통신하여 데이터 패킷을 취하고 하나 이상의 코어(505)에 걸쳐 패킷을 분배할 수 있다. 일 실시예에서, 흐름 분배기(550)는 기기(200)로 예정된 데이터 패킷을 수신하여, 분배 스킴을 수신된 데이터 패킷에 적용하고, 데이터 패킷을 멀티-코어 시스템(545)의 하나 이상의 코어(505)에 분배한다. 일 실시예에서, 흐름 분배기(550)는, 각 패킷이 멀티-코어 시스템(545)의 서브-노드를 향해 타겟팅되도록 각 패킷과 연관된 메타 데이터를 변경함으로써 라우터가 특정 코어(505)를 타겟팅할 수 있도록 라우터 또는 다른 기기에 포함될 수 있다. 이러한 실시예에서, CISCO의 vn-태그 메커니즘이 적절한 메타 데이터로 각 패킷을 변경하거나 태깅하는 데 사용될 수 있다.5B illustrates flow distributor 550 running within multi-core system 545 , in some embodiments, flow distributor 550 is a computing device or appliance located remotely from multi-core system 545 . can be run on In such an embodiment, the flow distributor 550 may communicate with the multi-core system 545 to take data packets and distribute the packets across one or more cores 505 . In one embodiment, flow distributor 550 receives data packets destined for device 200 , applies a distribution scheme to the received data packets, and applies the data packets to one or more cores 505 of multi-core system 545 . ) is distributed to In one embodiment, the flow distributor 550 allows the router to target a particular core 505 by changing the metadata associated with each packet such that each packet is targeted towards a sub-node of the multi-core system 545 . It can be included in a router or other device to In such an embodiment, CISCO's vn-tag mechanism may be used to alter or tag each packet with the appropriate metadata.

도 5c에는 하나 이상의 프로세싱 코어(505A-N)를 포함하는 멀티-코어 시스템(575)의 실시예가 나타내어져 있다. 간략한 개요에서, 코어(505) 중 하나는 제어 코어(505A)로 지정될 수 있고 다른 코어(505)에 대한 제어 평면(570)으로서 사용될 수 있다. 다른 코어(505)는, 제어 코어(505A)가 제어 평면(570)을 제공하는 동안 데이터 평면에서 동작하는 2차 코어일 수 있다. 코어(505A-N)는 글로벌 캐시(580)를 공유할 수 있다. 제어 코어(505A)는 제어 평면(570)을 제공하지만, 멀티-코어 시스템(575)의 다른 코어(505)는 데이터 평면을 형성하거나 제공한다. 이들 코어(505)는 네트워크 트래픽에 대한 데이터 프로세싱 기능을 수행하는 반면, 제어는 멀티-코어 시스템(575)의 초기화, 구성 및 제어를 제공한다.5C shows an embodiment of a multi-core system 575 including one or more processing cores 505A-N. In a brief overview, one of the cores 505 may be designated as the control core 505A and may be used as the control plane 570 for the other core 505 . The other core 505 may be a secondary core operating in the data plane while the control core 505A provides the control plane 570 . Cores 505A-N may share a global cache 580 . The control core 505A provides the control plane 570 , while the other cores 505 of the multi-core system 575 form or provide the data plane. These cores 505 perform data processing functions for network traffic, while control provides initialization, configuration, and control of the multi-core system 575 .

추가로 도 5c를 참조하고, 더욱 상세하게, 제어 코어(505A)뿐만 아니라 코어(505A-N)는 본원에 설명된 임의의 프로세서일 수 있다. 또한, 코어(505A-N) 및 제어 코어(505A)는 도 5c에 설명된 시스템(575) 내에서 기능할 수 있는 임의의 프로세서일 수 있다. 또한, 코어(505A-N) 및 제어 코어(505A)는 본원에 설명된 임의의 코어 또는 코어 그룹일 수 있다. 제어 코어(505A)는 다른 코어(505)와 다른 유형의 코어 또는 프로세서일 수 있다. 일부 실시예에서, 제어는 다른 패킷 엔진을 동작시키거나 다른 코어(505)의 패킷 엔진과 다르게 구성된 패킷 엔진을 가질 수 있다.Referring further to FIG. 5C , and more particularly, control core 505A as well as cores 505A-N may be any of the processors described herein. Further, cores 505A-N and control core 505A may be any processor capable of functioning within system 575 described in FIG. 5C . Also, cores 505A-N and control core 505A may be any core or group of cores described herein. The control core 505A may be a different type of core or processor than the other cores 505 . In some embodiments, the control may operate a different packet engine or have a packet engine configured differently from the packet engine of the other core 505 .

각각의 코어(505)의 메모리의 임의의 부분은 코어(505)에 의해 공유되는 글로벌 캐시(580)에 할당되거나 이에 대해 사용될 수 있다. 간략한 개요에서, 각 코어(505)의 메모리 각각의 미리 정해진 백분율 또는 미리 정해진 양이 글로벌 캐시(580)에 사용될 수 있다. 예를 들어, 각 코어(505)의 각 메모리의 50%는 공유 글로벌 캐시(580)에 전용 또는 할당될 수 있다. 즉, 나타낸 실시예에서, 제어 평면 코어 또는 코어 1을 제외한 각 코어(505)의 2GB는 28GB 공유 글로벌 캐시(580)를 형성하는 데 사용될 수 있다. 구성 서비스를 통한 것과 같은 제어 평면(570)의 구성은 공유 글로벌 캐시(580)에 사용되는 메모리의 양을 결정할 수 있다. 일부 실시예에서, 각각의 코어(505)는 글로벌 캐시(580)에 의해 사용하기 위해 상이한 양의 메모리를 제공할 수 있다. 다른 실시예에서, 임의의 하나의 코어(505)는 임의의 메모리를 제공하지 않거나 글로벌 캐시(580)를 사용하지 않을 수 있다. 일부 실시예에서, 임의의 코어(505)는 또한 글로벌 공유 메모리에 할당되지 않은 메모리의 로컬 캐시를 가질 수 있다. 각각의 코어(505)는 네트워크 트래픽의 임의의 부분을 글로벌 공유 캐시(580)에 저장할 수 있다. 각각의 코어(505)는 요청 또는 응답에 사용하기 위한 임의의 컨텐츠에 대해 캐시를 확인할 수 있다. 임의의 코어(505)는 데이터 흐름, 요청 또는 응답에 사용하기 위해 글로벌 공유 캐시(580)로부터 컨텐츠를 얻을 수 있다.Any portion of the memory of each core 505 may be allocated to or used for the global cache 580 shared by the cores 505 . In a brief overview, a predetermined percentage or predetermined amount of each of the memory of each core 505 may be used for the global cache 580 . For example, 50% of each memory of each core 505 may be dedicated or allocated to the shared global cache 580 . That is, in the embodiment shown, 2 GB of each core 505 except for the control plane core or core 1 may be used to form a 28 GB shared global cache 580 . Configuration of the control plane 570 , such as via a configuration service, may determine the amount of memory used for the shared global cache 580 . In some embodiments, each core 505 may provide a different amount of memory for use by the global cache 580 . In other embodiments, any one core 505 may not provide any memory or use the global cache 580 . In some embodiments, any core 505 may also have a local cache of memory that is not allocated to global shared memory. Each core 505 may store any portion of network traffic in a global shared cache 580 . Each core 505 may check the cache for any content for use in a request or response. Any core 505 may obtain content from the global shared cache 580 for use in a data flow, request or response.

글로벌 캐시(580)는 본원에 설명된 임의의 메모리 또는 저장 요소와 같은 임의의 유형 및 형태의 메모리 또는 저장 요소일 수 있다. 일부 실시예에서, 코어(505)는 미리 정해진 양의 메모리(즉, 시스템(575)에 상응하는 32GB 또는 임의의 다른 메모리 양)에 액세스할 수 있다. 글로벌 캐시(580)는 미리 정해진 양의 메모리로부터 할당될 수 있는 반면, 이용 가능한 나머지 메모리는 코어(505) 사이에 할당될 수 있다. 다른 실시예에서, 각각의 코어(505)는 미리 정해진 양의 메모리를 가질 수 있다. 글로벌 캐시(580)는 각각의 코어(505)에 할당된 메모리의 양을 포함할 수 있다. 이 메모리 양은 바이트로 측정될 수 있거나, 각 코어(505)에 할당된 메모리의 백분율로 측정될 수 있다. 따라서, 글로벌 캐시(580)는 각각의 코어(505)와 연관된 메모리로부터의 1GB의 메모리를 포함할 수 있거나, 각각의 코어(505)와 연관된 메모리의 20% 또는 절반을 포함할 수 있다. 일부 실시예에서, 코어(505)의 일부만이 메모리를 글로벌 캐시(580)에 제공하고, 다른 실시예에서, 글로벌 캐시(580)는 코어(505)에 할당되지 않은 메모리를 포함할 수 있다.Global cache 580 may be any type and form of memory or storage element, such as any memory or storage element described herein. In some embodiments, core 505 may access a predetermined amount of memory (ie, 32 GB or any other amount of memory corresponding to system 575 ). Global cache 580 may be allocated from a predetermined amount of memory, while the remaining available memory may be allocated between cores 505 . In other embodiments, each core 505 may have a predetermined amount of memory. The global cache 580 may contain the amount of memory allocated to each core 505 . This amount of memory can be measured in bytes, or it can be measured as a percentage of the memory allocated to each core 505 . Accordingly, the global cache 580 may include 1 GB of memory from the memory associated with each core 505 , or may include 20% or half of the memory associated with each core 505 . In some embodiments, only a portion of core 505 provides memory to global cache 580 , and in other embodiments, global cache 580 may include memory that is not allocated to core 505 .

각각의 코어(505)는 글로벌 캐시(580)를 사용하여 네트워크 트래픽 또는 캐시 데이터를 저장할 수 있다. 일부 실시예에서, 코어(505)의 패킷 엔진은 글로벌 캐시(580)를 사용하여 복수의 패킷 엔진에 의해 저장된 데이터를 캐싱하여 사용한다. 예를 들어, 도 2a의 캐시 관리자 및 도 2b의 캐시 기능이 글로벌 캐시(580)를 사용하여 가속을 위해 데이터를 공유할 수 있다. 예를 들어, 각각의 패킷 엔진은 HTML 데이터와 같은 응답을 글로벌 캐시(580)에 저장할 수 있다. 코어(505) 상에서 동작하는 임의의 캐시 관리자는 글로벌 캐시(580)에 액세스하여 클라이언트 요청에 대한 서버 캐시 응답을 캐싱할 수 있다.Each core 505 may use a global cache 580 to store network traffic or cache data. In some embodiments, the packet engine of the core 505 uses the global cache 580 to cache and use data stored by a plurality of packet engines. For example, the cache manager of FIG. 2A and the cache function of FIG. 2B may share data for acceleration using the global cache 580 . For example, each packet engine may store a response, such as HTML data, in the global cache 580 . Any cache manager running on core 505 may access global cache 580 to cache server cache responses to client requests.

일부 실시예에서, 코어(505)는 포트에 부분적으로 기초하여 데이터 흐름을 결정하는 데 사용될 수 있는 포트 할당 테이블을 저장하기 위해 글로벌 캐시(580)를 사용할 수 있다. 다른 실시예에서, 코어(505)는 글로벌 캐시(580)를 사용하여 진입 및 진출 데이터 패킷이 어디를 향하는지 결정하기 위해 흐름 분배기에 의해 사용될 수 있는 주소 룩업 테이블 또는 임의의 다른 테이블 또는 리스트를 저장할 수 있다. 코어(505)는 일부 실시예에서 글로벌 캐시(580)로부터 또는 글로벌 캐시(580)에 판독 및 기입할 수 있는 반면, 다른 실시예에서 코어(505)는 글로벌 캐시(580)로부터 또는 글로벌 캐시(580)에 오직 판독 또는 기입만 할 수 있다. 코어(505)는 글로벌 캐시(580)를 사용하여 코어 대 코어 통신을 수행할 수 있다.In some embodiments, core 505 may use global cache 580 to store port allocation tables that may be used to determine data flow based in part on ports. In another embodiment, the core 505 uses the global cache 580 to store an address lookup table or any other table or list that can be used by the flow distributor to determine where incoming and outgoing data packets are destined for. can Core 505 may in some embodiments read and write to or from global cache 580 , while in other embodiments core 505 may read from or write to global cache 580 or global cache 580 . ) can only be read or written to. The core 505 may perform core-to-core communication using the global cache 580 .

글로벌 캐시(580)는 각각의 섹션이 특정 코어(505)에 전용될 수 있는 개별 메모리 섹션으로 분할될 수 있다. 일 실시예에서, 제어 코어(505A)는 더 많은 양의 가용 캐시를 수신할 수 있는 반면, 다른 코어(505)는 다양한 양을 수신하거나 글로벌 캐시(580)에 액세스할 수 있다.The global cache 580 may be partitioned into separate memory sections, each section of which may be dedicated to a particular core 505 . In one embodiment, the control core 505A may receive a larger amount of available cache, while the other core 505 may receive various amounts or access the global cache 580 .

일부 실시예에서, 시스템(575)은 제어 코어(505A)를 포함할 수 있다. 도 5c는 제어 코어로서 코어 1(505A)을 나타내지만, 제어 코어는 기기(200) 또는 멀티-코어 시스템 내의 임의의 코어일 수 있다. 또한, 단일 제어 코어만이 도시되어 있지만, 시스템(575)은 각각 시스템(575)에 대한 제어 레벨을 갖는 하나 이상의 제어 코어를 포함할 수 있다. 일부 실시예에서, 하나 이상의 제어 코어는 각각 시스템(575)의 특정 양태를 제어할 수 있다. 예를 들어, 하나의 코어는 어떤 분배 스킴을 사용할지를 결정하는 것을 제어할 수 있는 반면, 다른 코어는 글로벌 캐시(580)의 크기를 결정할 수 있다.In some embodiments, system 575 may include a control core 505A. 5C shows core 1 505A as the control core, the control core may be the device 200 or any core in a multi-core system. Also, although only a single control core is shown, system 575 may include one or more control cores, each having a level of control for system 575 . In some embodiments, one or more control cores may each control a particular aspect of system 575 . For example, one core may control determining which distribution scheme to use, while the other may determine the size of the global cache 580 .

멀티-코어 시스템(575)의 제어 평면은 전용 관리 코어 또는 마스터 코어로서의 코어(505)의 지정 및 구성일 수 있다. 이 제어 평면 코어는 멀티-코어 시스템(575)에서 복수의 코어(505)의 동작 및 기능의 제어, 관리 및 조정을 제공할 수 있다. 이 제어 평면 코어는 멀티-코어 시스템(575)의 초기화 및 구성을 포함하여, 멀티-코어 시스템(575)의 복수의 코어(505) 중 시스템의 메모리 할당 및 사용의 제어, 관리 및 조정을 제공할 수 있다. 일부 실시예에서, 제어 평면은 데이터 흐름에 기초하여 코어(505)에 대한 데이터 흐름의 할당 및 코어(505)에 대한 네트워크 패킷의 분배를 제어하기 위한 흐름 분배기를 포함한다. 일부 실시예에서, 제어 평면 코어는 패킷 엔진을 실행하고, 다른 실시예에서, 제어 평면 코어는 시스템(575)의 다른 코어의 관리 및 제어에 전용이다.The control plane of the multi-core system 575 may be a dedicated management core or the designation and configuration of the core 505 as a master core. This control plane core may provide control, management, and coordination of the operations and functions of the plurality of cores 505 in the multi-core system 575 . This control plane core may provide control, management and coordination of memory allocation and usage of the system among the plurality of cores 505 of the multi-core system 575 , including initialization and configuration of the multi-core system 575 . can In some embodiments, the control plane includes a flow distributor for controlling allocation of data flows to core 505 and distribution of network packets to core 505 based on data flows. In some embodiments, the control plane core runs the packet engine, and in other embodiments, the control plane core is dedicated to managing and controlling other cores of the system 575 .

제어 코어(505A)는 각 코어(505)에 얼마나 많은 메모리가 할당되어야 하는지를 결정하거나 특정 기능 또는 하드웨어/소프트웨어 엔티티를 처리하기 위해 어떤 코어(505)가 할당되어야 하는지를 결정하는 것과 같이, 다른 코어(505)에 대한 제어 레벨을 행사할 수 있다. 일부 실시예에서, 제어 코어(505A)는 제어 평면(570) 내에서 이들 코어(505)에 대한 제어를 행사할 수 있다. 따라서, 제어 코어(505A)에 의해 제어되지 않는 제어 평면(570)의 외부에 프로세서가 존재할 수 있다. 제어 평면(570)의 경계를 결정하는 것은 제어 코어(505A) 또는 시스템(575) 내에서 실행되는 에이전트에 의해 제어 코어(505A)에 의해 제어되는 이들 코어(505)의 리스트를 유지하는 것을 포함할 수 있다. 제어 코어(505A)는 다음 중 임의의 것을 제어할 수 있다: 코어(505)의 초기화; 코어(505)가 이용 불가능한 때를 결정; 하나의 코어(505)가 고장 났을 때 다른 코어(505)로 부하를 재분배; 구현할 분배 스킴을 결정; 네트워크 트래픽을 수신해야 하는 코어(505)를 결정; 각 코어(505)에 얼마나 많은 캐시가 할당되어야 하는지를 결정; 특정 기능 또는 요소를 특정 코어(505)에 할당할지 여부를 결정; 코어(505)가 서로 통신할 수 있게 할지 여부를 결정; 글로벌 캐시(580)의 크기를 결정; 및 시스템(575) 내의 코어(505)의 기능, 구성 또는 동작의 임의의 다른 결정.The control core 505A controls the other cores 505, such as determining how much memory should be allocated to each core 505 or determining which cores 505 should be allocated to process a particular function or hardware/software entity. ) can exercise a level of control for In some embodiments, the control cores 505A may exercise control over these cores 505 within the control plane 570 . Accordingly, the processor may exist outside the control plane 570 that is not controlled by the control core 505A. Determining the boundaries of the control plane 570 may include maintaining a list of these cores 505 controlled by the control core 505A by the control core 505A or an agent executing within the system 575. can Control core 505A may control any of the following: initialization of core 505; determine when the core 505 is unavailable; redistribution of load to other cores 505 when one core 505 fails; Decide which distribution scheme to implement; determining the core 505 that should receive network traffic; determining how much cache should be allocated to each core 505; determining whether to assign a specific function or element to a specific core 505; determining whether to enable the cores 505 to communicate with each other; determine the size of the global cache 580; and any other determination of the function, configuration, or operation of the core 505 within the system 575 .

F. 분배된 클러스터 아키텍처를 제공하기 위한 시스템 및 방법F. Systems and Methods for Providing a Distributed Cluster Architecture

이전 섹션에서 논의한 바와 같이, 트랜지스터 간격 및 CPU 속도 증가에 대한 제한을 극복하기 위해, 많은 CPU 제조업체는 단일의 보다 높은 속도의 CPU도 능가할 수 있는 성능을 향상시키기 위해 멀티-코어 CPU를 통합했다. 단일 또는 멀티-코어인 복수의 기기를 분배 또는 클러스터링된 기기로서 함께 동작시킴으로써 유사하거나 추가적인 성능 이득이 이루어질 수 있다. 개별 컴퓨팅 디바이스 또는 기기는 클러스터의 노드로 지칭될 수 있다. 집중식 관리 시스템은 부하 밸런싱, 분배, 구성 또는 다른 작업을 수행할 수 있어, 노드가 단일 컴퓨팅 시스템으로서 연계하여 동작할 수 있게 한다. 많은 실시예에서, 외부 또는 서버 및 클라이언트를 포함하는 다른 디바이스에 대해, 통상의 개별 기기보다 뛰어난 성능을 갖지만, 클러스터는 단일 가상 디바이스 또는 컴퓨팅 디바이스로 볼 수 있다.As discussed in the previous section, to overcome limitations on transistor spacing and CPU speed increases, many CPU manufacturers have integrated multi-core CPUs to improve performance that can outperform even a single higher speed CPU. Similar or additional performance gains may be achieved by operating multiple devices, either single or multi-core, together as distributed or clustered devices. An individual computing device or appliance may be referred to as a node of a cluster. A centralized management system may perform load balancing, distribution, configuration, or other tasks, allowing nodes to work together as a single computing system. A cluster may be viewed as a single virtual device or computing device, although in many embodiments it outperforms typical individual appliances for external or other devices, including servers and clients.

이하 도 6을 참조하면, 컴퓨팅 디바이스 클러스터 또는 기기 클러스터(600)의 실시예가 나타내어져 있다. 때때로 데스크탑 컴퓨터, 서버, 랙 마운트(rack mount) 서버, 블레이드 서버 또는 임의의 다른 유형 및 형태의 컴퓨팅 디바이스와 같은 노드로 지칭되는 복수의 기기(200a-200n) 또는 다른 컴퓨팅 디바이스는 단일 기기 클러스터(600)에 결합될 수 있다. 기기 클러스터라고 칭하더라도, 많은 실시예에서, 클러스터는 어플리케이션 서버, 네트워크 저장 서버, 백업 서비스, 또는 임의의 다른 유형의 컴퓨팅 디바이스로서 제한 없이 동작할 수 있다. 많은 실시예에서, 기기 클러스터(600)는 기기(200), WAN 최적화 디바이스, 네트워크 가속 기기 또는 상술한 다른 디바이스의 많은 기능을 수행하는 데 사용될 수 있다.Referring now to FIG. 6 , an embodiment of a computing device cluster or appliance cluster 600 is illustrated. A plurality of appliances 200a-200n, or other computing devices, sometimes referred to as nodes, such as desktop computers, servers, rack mount servers, blade servers, or any other type and type of computing device, is a single appliance cluster 600 ) can be combined. Although referred to as an appliance cluster, in many embodiments, the cluster may operate without limitation as an application server, network storage server, backup service, or any other type of computing device. In many embodiments, the appliance cluster 600 may be used to perform many of the functions of the appliance 200 , a WAN optimization device, a network accelerator appliance, or other devices described above.

일부 실시예에서, 기기 클러스터(600)는 동일한 기기, 하나 이상의 섀시 내의 블레이드 서버, 데스크탑 또는 랙 마운트 컴퓨팅 디바이스, 또는 다른 디바이스와 같은 동종의 컴퓨팅 디바이스의 세트를 포함할 수 있다. 다른 실시예에서, 기기 클러스터(600)는 상이한 모델의 기기, 혼합 기기 및 서버, 또는 임의의 다른 컴퓨팅 디바이스의 세트를 포함하는 이종 또는 혼합 디바이스 세트를 포함할 수 있다. 이는 예를 들어, 새로운 모델 또는 디바이스로 시간이 지남에 따라 기기 클러스터(600)가 확장 또는 업그레이드될 수 있게 한다.In some embodiments, appliance cluster 600 may include a set of homogeneous computing devices, such as the same appliance, blade servers in one or more chassis, desktop or rack mount computing devices, or other devices. In other embodiments, device cluster 600 may include heterogeneous or mixed device sets including sets of different models of devices, mixed devices and servers, or any other computing devices. This may allow the appliance cluster 600 to expand or upgrade over time, for example, with new models or devices.

일부 실시예에서, 기기 클러스터(600)의 각 컴퓨팅 디바이스 또는 기기(200)는 상술한 바와 같이 멀티-코어 기기를 포함할 수 있다. 이러한 많은 실시예에서, 상술한 코어 관리 및 흐름 분배 방법은 본원에서 논의된 노드 관리 및 분배 방법 외에 각 개별 기기에 의해 이용될 수 있다. 이것은 2-계층 분배 시스템으로 생각할 수 있으며, 하나의 기기는 복수의 노드에 데이터를 포함하고 분배하며 각 노드는 복수의 코어에 프로세싱하기 위해 데이터를 포함하고 분배한다. 따라서, 이러한 실시예에서, 노드 분배 시스템은 상술한 바와 같이 마스터 또는 제어 코어에 의해 처리될 수 있는 개별 코어로의 흐름 분배를 관리할 필요가 없다.In some embodiments, each computing device or device 200 of the device cluster 600 may include a multi-core device as described above. In many of these embodiments, the core management and flow distribution methods described above may be utilized by each individual appliance in addition to the node management and distribution methods discussed herein. This can be thought of as a two-tier distribution system, where one device contains and distributes data to multiple nodes, and each node contains and distributes data to multiple cores for processing. Thus, in this embodiment, the node distribution system does not need to manage the distribution of flows to individual cores, which may be handled by the master or control core as described above.

많은 실시예에서, 기기 클러스터(600)는 섀시 내의 복수의 블레이드 서버 또는 단일 랙에서의 복수의 랙 마운트 디바이스와 같이 물리적으로 그룹화될 수 있지만, 다른 실시예에서, 기기 클러스터(600)는 복수의 섀시, 복수의 랙, 데이터 센터의 복수의 방, 복수의 데이터 센터 또는 임의의 다른 물리적 배치로 분배될 수 있다. 따라서, 기기 클러스터(600)는 물리적 그룹이 아니라 공통 구성, 관리 및 목적을 통해 그룹화된 가상 기기로 간주될 수 있다.In many embodiments, appliance cluster 600 may be physically grouped, such as multiple blade servers within a chassis or multiple rack mount devices in a single rack, although in other embodiments, appliance cluster 600 may include multiple chassis , multiple racks, multiple rooms in a data center, multiple data centers, or any other physical arrangement. Accordingly, the device cluster 600 may not be regarded as a physical group, but as a virtual device grouped through a common configuration, management, and purpose.

일부 실시예에서, 기기 클러스터(600)는 하나 이상의 네트워크(104, 104')에 접속될 수 있다. 예를 들어, 간단히 도 1a를 다시 참조하면, 일부 실시예에서, 기기(200)는 하나 이상의 클라이언트(102)에 연결된 네트워크(104)와 하나 이상의 서버(106)에 연결된 네트워크(104') 사이에 배치될 수 있다. 기기 클러스터(600)는 단일 기기로서 동작하도록 유사하게 배치될 수 있다. 많은 실시예에서, 이것은 기기 클러스터(600) 외부의 임의의 네트워크 토폴로지 변경을 요구하지 않을 수 있어서, 단일 기기 시나리오로부터 용이한 설치 및 확장성을 가능하게 한다. 다른 실시예에서, 기기 클러스터(600)는 도 1b 내지 도 1d에 나타내거나 상술한 바와 유사하게 배치될 수 있다. 또 다른 실시예에서, 기기 클러스터(600)는 하나 이상의 서버에 의해 실행되는 복수의 가상 머신 또는 프로세스를 포함할 수 있다. 예를 들어, 그러한 일 실시예에서, 서버 팜은 복수의 가상 머신을 실행할 수 있고, 각각의 가상 머신은 기기(200)로 구성되고, 복수의 가상 머신은 기기 클러스터(600)로서 협력하여 동작한다. 또 다른 실시예에서, 기기 클러스터(600)는 기기(200) 또는 기기(200)로서 구성된 가상 머신의 혼합을 포함할 수 있다. 일부 실시예에서, 기기 클러스터(600)는 복수의 기기(200)가 함께 위치하지 않은 상태로 지리적으로 분산될 수 있다. 예를 들어, 도 6을 다시 참조하면, 하나의 이러한 실시예에서, 제1 기기(200a)는 데이터 센터와 같은 제1 사이트에 위치될 수 있고, 제2 기기(200b)는 중앙 사무소 또는 회사 본사와 같은 제2 사이트에 위치될 수 있다. 추가의 실시예에서, 이러한 지리적 원격 기기는 T1 또는 T3 포인트-대-포인트 접속과 같은 전용 네트워크; VPN; 또는 임의의 다른 유형 및 형태의 네트워크에 의해 연결될 수 있다. 따라서, 함께 위치된 기기(200a-200b)와 비교하여 추가의 통신 대기 시간이 있을 수 있지만, 사이트 전원 고장 또는 통신 중단, 확장성 또는 다른 이점의 경우 신뢰성에 이점이 있을 수 있다. 일부 실시예에서, 데이터 흐름의 지리적 또는 네트워크-기반 분산을 통해 대기 시간 문제가 감소될 수 있다. 예를 들어, 기기 클러스터(600)로서 구성되어 있지만, 회사 본사에 있는 클라이언트 및 서버로부터의 통신은 사이트에 배치된 기기(200b)로 전달될 수 있고, 부하 밸런싱은 위치에 의해 가중될 수 있거나, 유사한 단계가 대기 시간을 완화시키기 위해 취해질 수 있다.In some embodiments, the device cluster 600 may be connected to one or more networks 104 , 104 ′. For example, and referring briefly back to FIG. 1A , in some embodiments, the device 200 may be configured between a network 104 coupled to one or more clients 102 and a network 104 ′ coupled to one or more servers 106 . can be placed. Device cluster 600 may be similarly arranged to operate as a single device. In many embodiments, this may not require any network topology changes outside of the device cluster 600 , allowing for easy installation and scalability from a single device scenario. In other embodiments, the device cluster 600 may be arranged similarly as shown in FIGS. 1B-1D or described above. In another embodiment, the device cluster 600 may include a plurality of virtual machines or processes executed by one or more servers. For example, in one such embodiment, a server farm may run a plurality of virtual machines, each virtual machine configured with a device 200 , wherein the plurality of virtual machines operate cooperatively as a device cluster 600 . In another embodiment, device cluster 600 may include device 200 or a mixture of virtual machines configured as device 200 . In some embodiments, the device cluster 600 may be geographically distributed without a plurality of devices 200 co-located. For example, referring back to FIG. 6 , in one such embodiment, the first device 200a may be located at a first site, such as a data center, and the second device 200b may be located at a central office or corporate headquarters. It may be located on a second site such as In further embodiments, such geographic remote devices may include a dedicated network, such as a T1 or T3 point-to-point connection; VPN; or by any other type and type of network. Thus, there may be additional communication latency compared to co-located devices 200a-200b, but may have reliability advantages in case of site power failure or communication interruption, scalability or other benefits. In some embodiments, latency issues may be reduced through geographic or network-based distribution of data flows. For example, although configured as a device cluster 600, communications from clients and servers located at the company headquarters may be directed to devices 200b located at the site, and load balancing may be weighted by location; Similar steps can be taken to mitigate latency.

여전히 도 6을 참조하면, 기기 클러스터(600)는 클라이언트 데이터 평면(602)을 통해 네트워크에 접속될 수 있다. 일부 실시예에서, 클라이언트 데이터 평면(602)은 클라이언트와 기기 클러스터(600) 사이에 데이터를 전달하는 네트워크(104)와 같은 통신 네트워크를 포함할 수 있다. 일부 실시예에서, 클라이언트 데이터 평면(602)은 외부 네트워크(104)와 기기 클러스터(600)의 복수의 기기(200a-200n)를 브릿징하는 스위치, 허브, 라우터 또는 다른 네트워크 디바이스를 포함할 수 있다. 예를 들어, 이러한 실시예에서, 라우터는 외부 네트워크(104)에 접속되고 각각의 기기(200a-200n)의 네트워크 인터페이스에 접속될 수 있다. 일부 실시예에서, 이러한 라우터 또는 스위치는 인터페이스 관리자로 지칭될 수 있고, 기기 클러스터(600) 내의 노드에 걸쳐 트래픽을 균등하게 분배하도록 추가로 구성될 수 있다. 따라서, 많은 실시예에서, 인터페이스 마스터(608)는 기기 클러스터(600) 외부의 흐름 분배기를 포함할 수 있다. 다른 실시예에서, 인터페이스 마스터(608)는 기기(200a-200n) 중 하나를 포함할 수 있다. 예를 들어, 제1 기기(200a)는 기기 클러스터(600)에 대한 진입 트래픽을 수신하고 각각의 기기(200b-200n)에 걸쳐 트래픽을 분배하는 인터페이스 마스터(608)로서 기능할 수 있다. 일부 실시예에서, 리턴 트래픽은 인터페이스 마스터(608)로서 기능하는 제1 기기(200a)를 통해 각각의 기기(200b-200n)로부터 유사하게 흐를 수 있다. 다른 실시예에서, 각각의 기기(200b-200n)로부터의 리턴 트래픽은 네트워크(104, 104')로 직접 또는 외부 라우터, 스위치 또는 다른 디바이스를 통해 송신될 수 있다. 일부 실시예에서, 인터페이스 마스터(608)로서 기능하지 않는 기기 클러스터(600)의 기기(200)는 인터페이스 슬레이브(610a-610n)로 지칭될 수 있다.Still referring to FIG. 6 , the device cluster 600 may be connected to a network via a client data plane 602 . In some embodiments, the client data plane 602 may include a communications network, such as the network 104 that passes data between the client and the device cluster 600 . In some embodiments, the client data plane 602 may include a switch, hub, router, or other network device that bridges the external network 104 and the plurality of devices 200a - 200n of the device cluster 600 . . For example, in this embodiment, the router is connected to the external network 104 and may be connected to the network interface of each device 200a-200n. In some embodiments, such a router or switch may be referred to as an interface manager and may be further configured to evenly distribute traffic across nodes within the device cluster 600 . Thus, in many embodiments, the interface master 608 may include a flow distributor external to the instrument cluster 600 . In another embodiment, the interface master 608 may include one of the devices 200a-200n. For example, the first device 200a may serve as the interface master 608 receiving ingress traffic to the device cluster 600 and distributing the traffic across each device 200b - 200n . In some embodiments, return traffic may similarly flow from each device 200b - 200n via the first device 200a serving as the interface master 608 . In other embodiments, the return traffic from each device 200b - 200n may be transmitted directly to the networks 104 , 104 ′ or via an external router, switch, or other device. In some embodiments, devices 200 of device cluster 600 that do not function as interface masters 608 may be referred to as interface slaves 610a - 610n.

인터페이스 마스터(608)는 임의의 다양한 방식으로 부하 밸런싱 또는 트래픽 흐름 분배를 수행할 수 있다. 예를 들어, 일부 실시예에서, 인터페이스 마스터(608)는 클러스터의 기기 또는 노드로 구성된 다음 홉(hop)과 동일-비용 다중-경로(ECMP: equal-cost multi-path) 라우팅을 수행하는 라우터를 포함할 수 있다. 인터페이스 마스터(608)는 최단 경로 우선(OSPF: open-shortest path first)을 사용할 수 있다. 일부 실시예에서, 인터페이스 마스터(608)는 상술한 바와 같이, IP 주소에 기초한 해시 또는 다른 패킷 정보 튜플과 같은 트래픽 분배를 위한 스테이트리스(stateless) 해시-기반 메커니즘을 사용할 수 있다. 노드에 걸쳐 균등한 분배를 위해 해시 키 및/또는 솔트(salt)가 선택될 수 있다. 다른 실시예에서, 인터페이스 마스터(608)는 링크 집계(LAG) 프로토콜, 또는 임의의 다른 유형 및 형태의 흐름 분배, 부하 밸런싱 및 라우팅을 통한 흐름 분배를 수행할 수 있다.Interface master 608 may perform load balancing or traffic flow distribution in any of a variety of ways. For example, in some embodiments, the interface master 608 configures a router to perform equal-cost multi-path (ECMP) routing with the next hop configured of devices or nodes in the cluster. may include The interface master 608 may use open-shortest path first (OSPF). In some embodiments, the interface master 608 may use a stateless hash-based mechanism for traffic distribution, such as a hash or other packet information tuple based on an IP address, as described above. A hash key and/or salt may be selected for even distribution across nodes. In other embodiments, interface master 608 may perform flow distribution through a link aggregation (LAG) protocol, or any other type and form of flow distribution, load balancing, and routing.

일부 실시예에서, 기기 클러스터(600)는 서버 데이터 평면(604)을 통해 네트워크에 접속될 수 있다. 클라이언트 데이터 평면(602)과 유사하게, 서버 데이터 평면(604)은 서버와 기기 클러스터(600) 사이에 데이터를 운반하는 네트워크(104')와 같은 통신 네트워크를 포함할 수 있다. 일부 실시예에서, 서버 데이터 평면(604)은 외부 네트워크(104')와 기기 클러스터(600)의 복수의 기기(200a-200n)를 브릿징하는 스위치, 허브, 라우터 또는 다른 네트워크 디바이스를 포함할 수 있다. 예를 들어, 이러한 실시예에서, 라우터는 외부 네트워크(104')에 접속될 수 있고, 각각의 기기(200a-200n)의 네트워크 인터페이스에 접속될 수 있다. 많은 실시예에서, 각각의 기기(200a-200n)는 클라이언트 데이터 평면(602)에 접속된 제1 네트워크 인터페이스 및 서버 데이터 평면(604)에 접속된 제2 네트워크 인터페이스를 갖는 복수의 네트워크 인터페이스를 포함할 수 있다. 이는 추가적인 보안을 제공하고 기기 클러스터(600) 서버를 중간 디바이스로 갖춤으로써 클라이언트와 서버 네트워크의 직접적인 인터페이스를 방지할 수 있다. 다른 실시예에서, 클라이언트 데이터 평면(602) 및 서버 데이터 평면(604)은 병합되거나 결합될 수 있다. 예를 들어, 기기 클러스터(600)는 클라이언트(102) 및 서버(106)와의 네트워크 상의 비중간(non-intermediary) 노드로서 배치될 수 있다. 상술한 바와 같이, 많은 실시예에서, 인터페이스 마스터(608)는 서버 및 네트워크(104')로부터 기기 클러스터(600)의 각 기기(200)로의 통신의 라우팅 및 분배를 위해 서버 데이터 평면(604) 상에 배치될 수 있다. 많은 실시예에서, 클라이언트 데이터 평면(602)에 대한 인터페이스 마스터(608) 및 서버 데이터 평면(604)에 대한 인터페이스 마스터(608)는 상술한 바와 같이 ECMP 또는 LAG 프로토콜을 수행하여 유사하게 구성될 수 있다.In some embodiments, device cluster 600 may be connected to a network via server data plane 604 . Similar to client data plane 602 , server data plane 604 may include a communications network, such as network 104 ′, that carries data between servers and device cluster 600 . In some embodiments, the server data plane 604 may include a switch, hub, router, or other network device bridging the external network 104 ′ and the plurality of devices 200a - 200n of the device cluster 600 . have. For example, in this embodiment, the router may be connected to the external network 104', and may be connected to the network interface of each device 200a-200n. In many embodiments, each device 200a - 200n may include a plurality of network interfaces having a first network interface connected to a client data plane 602 and a second network interface connected to a server data plane 604 . can This may provide additional security and prevent direct interface of the client and server networks by having the appliance cluster 600 server as an intermediate device. In other embodiments, the client data plane 602 and the server data plane 604 may be merged or combined. For example, device cluster 600 may be deployed as a non-intermediary node on a network with client 102 and server 106 . As noted above, in many embodiments, the interface master 608 is on the server data plane 604 for routing and distribution of communications from the servers and networks 104 ′ to each device 200 in the device cluster 600 . can be placed in In many embodiments, the interface master 608 to the client data plane 602 and the interface master 608 to the server data plane 604 may be similarly configured by performing ECMP or LAG protocols as described above. .

일부 실시예에서, 기기 클러스터(600) 내의 각각의 기기(200a-200n)는 내부 통신 네트워크 또는 백 플레인(606)을 통해 접속될 수 있다. 백 플레인(606)은 노드 간 또는 기기 간 제어 및 구성 메시지를 위한, 그리고 트래픽의 노드 간 전달을 위한 통신 네트워크를 포함할 수 있다. 예를 들어, 제1 기기(200a)가 네트워크(104)를 통해 클라이언트와 통신하고, 제2 기기(200b)가 네트워크(104')를 통해 서버와 통신하는 일 실시예에서, 클라이언트와 서버 간의 통신은 클라이언트에서 제1 기기(200a)로, 제1 기기(200a)에서 백 플레인(606)을 통해 제2 기기(200b)로, 그리고 제2 기기(200b)에서 서버로 또는 그 반대로 흐를 수 있다. 다른 실시예에서, 백 플레인(606)은 인터페이스 일시 정지 또는 리셋 커맨드; 필터링 또는 압축 정책과 같은 정책 업데이트; 버퍼 상태, 스루풋 또는 오류 메시지와 같은 상태 메시지; 또는 임의의 다른 유형 및 형태의 노드 간 통신과 같은 구성 메시지를 운반할 수 있다. 일부 실시예에서, RSS 키 또는 해시 키는 클러스터(600) 내의 모든 노드에 의해 공유될 수 있고, 백 플레인(606)을 통해 통신될 수 있다. 예를 들어, 제1 노드 또는 마스터 노드는 스타트업(startup) 또는 부트(boot)와 같은 RSS 키를 선택할 수 있고 다른 노드에 의한 사용을 위해 이 키를 분배할 수 있다. 일부 실시예에서, 백 플레인(606)은 각 기기(200)의 네트워크 인터페이스 사이의 네트워크를 포함할 수 있고, 라우터, 스위치 또는 다른 네트워크 디바이스(미도시)를 포함할 수 있다. 따라서, 일부 실시예에서 그리고 상술한 바와 같이, 클라이언트 데이터 평면(602)에 대한 라우터는 기기 클러스터(600)와 네트워크(104) 사이에 배치될 수 있고, 서버 데이터 평면(604)에 대한 라우터는 기기 클러스터(600)와 네트워크(104') 사이에 배치될 수 있으며, 백 플레인(606)에 대한 라우터는 기기 클러스터(600)의 일부로서 배치될 수 있다. 각각의 라우터는 각각의 기기(200)의 상이한 네트워크 인터페이스에 접속될 수 있다. 다른 실시예에서, 하나 이상의 평면(602-606)이 결합될 수 있거나, 라우터 또는 스위치가 복수의 LAN 또는 VLAN으로 분할되어 기기(200a-200n)의 상이한 인터페이스에 접속하고 복수의 라우팅 기능을 동시에 제공하여, 복잡성을 줄이거나 시스템에서 추가 디바이스를 제거할 수 있다.In some embodiments, each device 200a - 200n in device cluster 600 may be connected via an internal communication network or backplane 606 . The backplane 606 may include a communications network for inter-node or inter-device control and configuration messages, and for inter-node delivery of traffic. For example, in one embodiment in which the first device 200a communicates with the client over the network 104 and the second device 200b communicates with the server over the network 104', communication between the client and the server can flow from the client to the first device 200a, from the first device 200a to the second device 200b via the backplane 606, and from the second device 200b to the server or vice versa. In another embodiment, the back plane 606 may include an interface pause or reset command; policy updates, such as filtering or compression policies; status messages such as buffer status, throughput, or error messages; or any other type and form of inter-node communication, such as configuration messages. In some embodiments, the RSS key or hash key may be shared by all nodes within the cluster 600 and communicated over the backplane 606 . For example, a first node or master node may select an RSS key such as startup or boot and distribute this key for use by other nodes. In some embodiments, the backplane 606 may include a network between the network interfaces of each device 200, and may include a router, switch, or other network device (not shown). Thus, in some embodiments and as described above, a router for the client data plane 602 may be placed between the device cluster 600 and the network 104 , and the router for the server data plane 604 is a device It may be deployed between cluster 600 and network 104 ′, and a router to backplane 606 may be deployed as part of device cluster 600 . Each router may be connected to a different network interface of each device 200 . In other embodiments, more than one plane 602-606 may be combined, or a router or switch may be divided into multiple LANs or VLANs to access different interfaces of devices 200a-200n and provide multiple routing functions simultaneously. This reduces complexity or eliminates additional devices from the system.

일부 실시예에서, 제어 평면(미도시)은 구성을 제어하고 관리자 또는 사용자로부터 기기 클러스터(600)로의 트래픽을 제어할 수 있다. 일부 실시예에서, 제어 평면은 제4 물리적 네트워크일 수 있는 반면, 다른 실시예에서 제어 평면은 평면(602-606) 중 하나를 통한 VPN, 터널 또는 통신을 포함할 수 있다. 따라서, 일부 실시예에서, 제어 평면은 가상 통신 평면으로 간주될 수 있다. 다른 실시예에서, 관리자는 RS-232와 같은 직렬 통신 인터페이스와 같은 별도의 인터페이스; USB 통신 인터페이스; 또는 임의의 다른 유형 및 형태의 통신을 통해 구성 및 제어를 제공할 수 있다. 일부 실시예에서, 기기(200)는 버튼을 갖는 전면 패널 및 디스플레이; 네트워크(104, 104') 또는 백 플레인(606)을 통한 구성을 위한 웹 서버; 또는 임의의 다른 유형 및 형태의 인터페이스와 같은 관리를 위한 인터페이스를 포함할 수 있다.In some embodiments, a control plane (not shown) may control configuration and control traffic from administrators or users to device cluster 600 . In some embodiments, the control plane may be the fourth physical network, while in other embodiments the control plane may include a VPN, tunnel or communication through one of the planes 602-606. Thus, in some embodiments, the control plane may be considered a virtual communication plane. In other embodiments, the administrator may include a separate interface such as a serial communication interface such as RS-232; USB communication interface; or provide configuration and control through any other type and form of communication. In some embodiments, device 200 includes a front panel with buttons and a display; a web server for configuration via network 104, 104' or backplane 606; or interfaces for management, such as interfaces of any other type and form.

일부 실시예에서, 상술한 바와 같이, 기기 클러스터(600)는 내부 흐름 분배를 포함할 수 있다. 예를 들어, 이는 노드가 외부 디바이스에 투명하게 연결/방출되도록 하기 위해 수행될 수 있다. 이러한 변화에 대해 외부 흐름 분배기가 반복적으로 재구성될 필요가 없도록 하기 위해, 노드 또는 기기는 네트워크 패킷을 클러스터(600) 내의 정확한 노드로 스티어링하기 위한 인터페이스 마스터(608) 또는 분배기로서 작용할 수 있다. 예를 들어, 일부 실시예에서, 노드가 클러스터를 떠나면(예를 들어, 고장, 리셋 또는 유사한 경우), 외부 ECMP 라우터가 노드의 변경을 식별하고 모든 흐름을 다시 해싱하여 트래픽을 재분배할 수 있다. 이는 모든 접속이 끊어지고 리셋되는 것으로 이어질 수 있다. 노드가 다시 연결될 때 동일한 끊김 및 리셋이 발생할 수 있다. 일부 실시예에서, 신뢰성을 위해, 기기 클러스터(600) 내의 2개의 기기 또는 노드는 접속 미러링을 통해 외부 라우터로부터 통신을 수신할 수 있다.In some embodiments, as described above, the device cluster 600 may include an internal flow distribution. For example, this can be done to allow nodes to connect/emit transparently to external devices. A node or device may act as an interface master 608 or distributor to steer network packets to the correct node within cluster 600 so that external flow distributors do not have to be reconfigured repeatedly for such changes. For example, in some embodiments, if a node leaves the cluster (eg, fails, resets, or the like), an external ECMP router can identify the node's change and re-hash all flows to redistribute traffic. This can lead to all connections being lost and reset. The same disconnects and resets can occur when a node is reconnected. In some embodiments, for reliability reasons, two devices or nodes in device cluster 600 may receive communications from external routers via connection mirroring.

많은 실시예에서, 기기 클러스터(600)의 노드들 사이의 흐름 분배는 기기의 코어들 사이의 흐름 분배를 위해 상술한 임의의 방법을 사용할 수 있다. 예를 들어, 일 실시예에서, 마스터 기기, 마스터 노드 또는 인터페이스 마스터(608)는 진입하는 트래픽에 대한 Toeplitz 해시와 같은 RSS 해시를 계산하고 해시에 대한 선호 리스트 또는 분배 테이블을 참조할 수 있다. 많은 실시예에서, 흐름 분배기는 트래픽을 전달할 때 해시를 수신자 기기에 제공할 수 있다. 이것은 노드로의 흐름 분배를 위해 노드가 해시를 재계산할 필요성을 제거할 수 있다. 많은 이러한 실시예에서, 기기들 사이에 분배를 위한 해시를 계산하는 데 사용되는 RSS 키는 코어들 사이에 분배를 위해 해시를 계산하는 데 사용되는 것과 동일한 키를 포함할 수 있으며, 이는 글로벌 RSS 키로 지칭될 수 있고, 계산된 해시의 재사용을 가능하게 한다. 일부 실시예에서, 해시는 포트 번호를 포함하는 전송 계층 헤더, IP 주소를 포함하는 인터넷 계층 헤더; 또는 임의의 다른 패킷 헤더 정보의 입력 튜플로 계산될 수 있다. 일부 실시예에서, 패킷 바디 정보가 해시에 이용될 수 있다. 예를 들어, 하나의 프로토콜의 트래픽이 무손실 TCP 헤더를 통해 캡슐화된 손실 UDP 트래픽과 같은 다른 프로토콜의 트래픽 내에 캡슐화되는 일 실시예에서, 흐름 분배기는 캡슐화(encapsulating) 프로토콜(예를 들어, TCP 헤더)이 아닌 캡슐화된(encapsulated) 프로토콜의 헤더(예를 들어, UDP)에 기초하여 해시를 계산할 수 있다. 유사하게, 패킷이 캡슐화되고 암호화되거나 압축되는 일부 실시예에서, 흐름 분배기는 복호화 또는 압축 해제 후에 페이로드 패킷의 헤더에 기초하여 해시를 계산할 수 있다. 또 다른 실시예에서, 노드는 구성 또는 관리 목적과 같은 내부 IP 주소를 가질 수 있다. 이러한 IP 주소로의 트래픽은 해시 및 분배될 필요는 없지만, 착신 주소를 소유한 노드로 전달될 수 있다. 예를 들어, 기기는 1.2.3.4의 IP 주소에서 구성 또는 관리 목적으로 실행되는 웹 서버 또는 다른 서버를 가질 수 있으며, 일부 실시예에서, 흐름 분배기로 이 주소를 내부 IP 주소로 등록할 수 있다. 다른 실시예에서, 흐름 분배기는 내부 IP 주소를 기기 클러스터(600) 내의 각 노드에 할당할 수 있다. 관리자에 의해 사용되고 기기의 내부 IP 주소(1.2.3.4)로 향하는, 워크스테이션과 같은 외부 클라이언트 또는 서버로부터 도착하는 트래픽은 해싱을 필요로 하지 않고 직접 전달될 수 있다.In many embodiments, the distribution of flows between the nodes of the device cluster 600 may use any of the methods described above for distribution of flows between the cores of a device. For example, in one embodiment, the master device, master node, or interface master 608 may compute an RSS hash, such as a Toeplitz hash, for incoming traffic and refer to a preference list or distribution table for the hash. In many embodiments, the flow distributor may provide the hash to the recipient device when forwarding the traffic. This can eliminate the need for nodes to recompute hashes to distribute flows to nodes. In many such embodiments, the RSS key used to compute the hash for distribution between devices may include the same key used to compute the hash for distribution among cores, which is a global RSS key. can be referred to, and enables reuse of computed hashes. In some embodiments, the hash may include a transport layer header including a port number, an Internet layer header including an IP address; or as an input tuple of any other packet header information. In some embodiments, packet body information may be used for hashing. For example, in one embodiment where traffic of one protocol is encapsulated within traffic of another protocol, such as lossy UDP traffic that is encapsulated via a lossless TCP header, the flow splitter is an encapsulating protocol (e.g., a TCP header) The hash may be calculated based on a header (eg, UDP) of an encapsulated protocol instead of . Similarly, in some embodiments where packets are encapsulated and encrypted or compressed, the flow distributor may compute a hash based on the header of the payload packet after decryption or decompression. In another embodiment, a node may have an internal IP address, such as for configuration or management purposes. Traffic to these IP addresses need not be hashed and distributed, but can be forwarded to the node that owns the destination address. For example, a device may have a web server or other server running for configuration or management purposes at an IP address of 1.2.3.4, and in some embodiments, it may register this address as an internal IP address with a flow distributor. In another embodiment, the flow distributor may assign an internal IP address to each node within the device cluster 600 . Traffic arriving from external clients or servers, such as workstations, used by the administrator and destined for the device's internal IP address (1.2.3.4) can be forwarded directly without the need for hashing.

G. 적응형 패킷 복제를 위한 시스템 및 방법G. Systems and Methods for Adaptive Packet Replication

본 개시는 2차의 신뢰성 있는 링크 상의 우선 순위 트래픽의 적응형 패킷 복제를 사용하는 하이브리드 WAN 링크 환경에서 손실 인터넷 광대역 링크를 사용하기 위한 해결책을 설명한다. 2차 링크는 MPLS(multiprotocol label switching) 링크일 수 있다. 본 해결책은 전체 네트워크에서의 유효 패킷 손실을 계산함으로써 단일 링크의 품질보다는 전체 네트워크 신뢰성에 기초하여 링크 품질 상태를 결정할 수 있다. 본 해결책은 또한 대역폭을 감소시키기 위해 필요할 때 패킷을 적응적으로 복제할 수 있다. 본 해결책은 또한 패킷을 2차 링크 상으로 적응적으로 복제함으로써 신뢰성을 증가시킬 수 있다. 본 해결책은 또한 우선 순위 트래픽을 식별하고 우선 순위 트래픽으로부터 2차 링크로 패킷을 복제할 수 있다.This disclosure describes a solution for using a lossy Internet broadband link in a hybrid WAN link environment using adaptive packet replication of priority traffic on a secondary reliable link. The secondary link may be a multiprotocol label switching (MPLS) link. This solution can determine the link quality status based on the overall network reliability rather than the quality of a single link by calculating the effective packet loss in the entire network. The present solution can also adaptively duplicate packets when needed to reduce bandwidth. The present solution can also increase reliability by adaptively replicating packets over the secondary link. The solution can also identify priority traffic and duplicate packets from the priority traffic to the secondary link.

본 해결책은 더 높은 레이트의 패킷 손실 및 지연이 있는 경우에도, 링크 상태의 빈번한 변경 없이 보완적인 방식으로 인터넷 광대역 링크를 사용함으로써 증가된 신뢰성을 제공할 수 있다. 패킷을 제2 링크 상으로 복제함으로써, 본 해결책은 수용된 패킷에 대한 패킷 재송신을 감소시킴으로써 스루풋을 증가시키고 대기 시간을 개선할 수 있다. 해결책의 적응형 패킷 복제 기술은 또한 모든 트래픽을 제2 링크로 복제하는 시스템과 비교할 때 더 적은 대역폭을 사용할 수 있다. 본 해결책은 또한 적응형 순방향 오류 정정(FEC: forward error correction) 스킴에 의해 추가된 오버헤드를 감소시키고 고정 FEC 및 단일 링크와 비교하여 네트워크의 용량을 향상시킬 수 있다. 본 해결책은 또한 POC(Packet Order Correction)를 단순화할 수 있다.This solution can provide increased reliability by using the Internet broadband link in a complementary manner without frequent changes in link conditions, even with higher rates of packet loss and delay. By replicating packets over the second link, the present solution can increase throughput and improve latency by reducing packet retransmissions for accepted packets. The adaptive packet replication technique of the solution may also use less bandwidth when compared to a system that replicates all traffic to the second link. The present solution can also reduce the overhead added by the adaptive forward error correction (FEC) scheme and improve the capacity of the network compared to the fixed FEC and single link. This solution can also simplify Packet Order Correction (POC).

도 7은 예시적인 중간 디바이스(700)의 블록도를 나타낸다. 중간 디바이스(700)는 패킷 엔진(548)을 포함할 수 있다. 패킷 엔진(548)으로부터의 패킷은 패킷 복제기(702)로 송신될 수 있다. 패킷 복제기(702)는 네트워크 상태에 기초하여 복제 정책 선택기(704)에 의해 적용되는 복제 정책에 따라 패킷을 복제할 수 있다. 중간 디바이스(700)는 또한 네트워크 상태의 표시를 복제 정책 선택기(704)에 제공할 수 있는 링크 품질 추정기(706)를 포함할 수 있다.7 shows a block diagram of an exemplary intermediate device 700 . The intermediate device 700 may include a packet engine 548 . Packets from packet engine 548 may be sent to packet replicator 702 . The packet replicator 702 may replicate the packet according to the replication policy applied by the replication policy selector 704 based on the network conditions. The intermediate device 700 may also include a link quality estimator 706 that may provide an indication of the network status to the replication policy selector 704 .

중간 디바이스(700)는 링크 품질 추정기(706)를 포함할 수 있다. 링크 품질 추정기(706)는 2개의 네트워크 디바이스 사이의 하나 이상의 네트워크 링크의 특성을 측정하고 및/또는 품질을 결정하기 위한 어플리케이션, 서비스, 루틴, 데몬 또는 다른 실행 가능한 로직을 포함할 수 있다. 예를 들어, 중간 디바이스(700)는 제1 및 제2 링크를 통해 제2 디바이스와 통신할 수 있다. 링크 품질 추정기(706)는 제1 및 제2 링크의 품질을 결정할 수 있다. 링크 품질은 또한 네트워크 메트릭이라고도 지칭될 수 있다. 일부 실시예에서, 링크 품질 추정기(706)는 각각의 링크의 링크 품질을 결정하기 위해 패킷 복제기(702)와 커플링된 상이한 링크를 통해 제어 패킷을 송신할 수 있다. 링크 품질은 링크 이용, 링크 대기 시간, 링크 지터(jitter), 링크 드롭 레이트 또는 이들의 임의의 조합에 제한되지 않지만 이와 같은 메트릭을 포함하거나 이에 기초할 수 있다. 링크 품질 추정기(706)는 또한 링크 품질의 주기적 측정을 수행하기 위해 이미 링크를 횡단한 패킷(예를 들어, 구체적으로 생성된 제어 패킷이 아님)을 사용할 수 있다. 일례에서, 링크 품질 추정기(706)는 복수의 TCP 패킷을 송신하고 원격 디바이스로부터 패킷의 확인 응답을 수신할 때까지 왕복 시간을 측정할 수 있다. 링크 품질 추정기(706)는 확인 응답되지 않은 패킷 또는 부정 응답된(nACK) 패킷을 식별함으로써 손실 레이트(또는 드롭 레이트)를 결정할 수 있다. 링크 품질 추정기(706)는 또한 접속의 대역폭, 최대 세그먼트 크기, 윈도우 크기, 혼잡 또는 네트워크 링크의 임의의 다른 특성을 측정할 수 있다. 링크 품질 추정기(706)는 패킷에 대한 왕복 시간에 기초하여 대기 시간을 측정할 수 있다. 왕복 시간은 패킷의 송신으로부터 패킷 확인 응답의 수신까지의 시간의 양일 수 있다. 링크 품질 추정기(706)는 링크 품질 스코어 및 대역폭의 측정, 이용률, 지터, 대기 시간(또는 지연), 패킷 드롭 레이트 및 복제 정책 선택기(704)에 대한 각각의 링크에 대한 다른 네트워크 특성의 측정치를 제공할 수 있다. 일부 실시예에서, 링크 품질 추정기(706)는 복제 정책 선택기(704)에 대한 각각의 링크에 대한 하나 이상의 대역폭, 이용률, 지터, 대기 시간(또는 지연), 패킷 드롭 레이트 및 다른 네트워크 특성의 측정치를 사용하여 링크 품질 스코어를 생성 또는 계산할 수 있다.The intermediate device 700 may include a link quality estimator 706 . Link quality estimator 706 may include an application, service, routine, daemon, or other executable logic for measuring and/or determining a quality of one or more network links between two network devices. For example, the intermediate device 700 may communicate with a second device via first and second links. A link quality estimator 706 may determine the quality of the first and second links. Link quality may also be referred to as a network metric. In some embodiments, link quality estimator 706 may transmit control packets over different links coupled with packet replicator 702 to determine the link quality of each link. Link quality may include or be based on metrics such as, but not limited to, link utilization, link latency, link jitter, link drop rate, or any combination thereof. Link quality estimator 706 may also use packets that have already traversed the link (eg, not specifically generated control packets) to make periodic measurements of link quality. In one example, the link quality estimator 706 may transmit a plurality of TCP packets and measure the round trip time until receiving an acknowledgment of the packets from the remote device. Link quality estimator 706 may determine the loss rate (or drop rate) by identifying packets that were not acknowledged or acknowledged negative (nACK) packets. Link quality estimator 706 may also measure the bandwidth of the connection, maximum segment size, window size, congestion, or any other characteristic of the network link. Link quality estimator 706 may measure latency based on round-trip time for the packet. The round trip time may be the amount of time from transmission of a packet to receipt of a packet acknowledgment. Link quality estimator 706 provides a link quality score and measures of bandwidth, utilization, jitter, latency (or delay), packet drop rate and other network characteristics for each link to replication policy selector 704 . can do. In some embodiments, link quality estimator 706 calculates one or more measurements of bandwidth, utilization, jitter, latency (or delay), packet drop rate, and other network characteristics for each link to replication policy selector 704 . can be used to generate or calculate link quality scores.

링크 품질 추정기(706)는 패킷 복제기(702)와 커플링된 복수의 링크의 네트워크 메트릭을 결정할 수 있다. 복수의 링크는 원격 디바이스에 접속될 수 있고 패킷 복제기(702)와 원격 디바이스 사이에 복수의 경로를 제공할 수 있다. 복수의 링크는 원격 WAN 또는 데이터센터에 대한 경로를 제공할 수 있다. 패킷 복제기(702)는 원격 디바이스와 중간 디바이스(700) 사이에 확립된 링크의 네트워크 상태를 결정할 수 있다. 네트워크 상태는 하나 이상의 네트워크 메트릭을 포함하거나 이에 기초할 수 있다. 일부 실시예에서, 제1 링크는 인터넷 광대역 링크일 수 있고, 제2 링크는 멀티프로토콜 라벨 스위칭 링크일 수 있다. 원격 디바이스는 가상 광역 네트워크 디바이스일 수 있다.Link quality estimator 706 may determine network metrics of a plurality of links coupled with packet replicator 702 . A plurality of links may be connected to a remote device and may provide a plurality of paths between the packet replicator 702 and the remote device. Multiple links may provide paths to remote WANs or data centers. The packet replicator 702 may determine the network state of the link established between the remote device and the intermediate device 700 . The network status may include or be based on one or more network metrics. In some embodiments, the first link may be an Internet broadband link and the second link may be a multiprotocol label switching link. The remote device may be a virtual wide area network device.

중간 디바이스(700)는 패킷 복제기(702)를 포함할 수 있다. 패킷 복제기(702)는 데이터 패킷을 하나 이상의 링크에 복제하거나 달리 복사하기 위한 어플리케이션, 서비스, 루틴, 데몬 또는 다른 실행 가능한 로직을 포함할 수 있다. 나타낸 바와 같이, 패킷 복제기(702)는 2개의 링크에 커플링되지만; 패킷 복제기(702)는 2개 초과의 링크에 커플링될 수 있다. 다른 링크는 원격 디바이스에 대한 다른 경로를 제공할 수 있다. 링크는 다른 네트워크, 네트워크 유형을 횡단할 수 있으며, 다른 캐리어에 의해 제공될 수 있다. 일례에서, 제1 링크는 MPLS 링크일 수 있고, 제2 링크는 케이블 또는 DSL 캐리어에 의해 제공된 인터넷 접속일 수 있다. 패킷 복제기(702)가 패킷을 복제하는 레이트는 복제 정책에 의해 제어된다. 복제 레이트는 단위 시간 당 복제된 패킷의 수 - 예를 들어, 초 당 복제된 패킷의 수를 나타낼 수 있다. 다른 구현예에서, 복제 레이트는 수신된 패킷 당 복제된 패킷의 수일 수 있으며, 예를 들어 100개의 수신된 패킷 당 20개의 패킷이 복제된다. 이하에서 더 상세히 설명되는 복제 정책 선택기(704)는 어떤 복제 정책을 구현할 것인지를 결정하고 패킷 복제기(702)에 복제 정책을 제공할 수 있다. 복제 정책은 예를 들어, 링크 품질 또는 다른 네트워크 메트릭과 같이, 패킷이 이에 기초하여 복제되는 복제를 설정할 수 있는 규칙의 세트를 포함할 수 있다. 복제 정책은 하나 이상의 임계값을 포함할 수 있다. 복제 레이트는 각 임계값과 연관될 수 있다. 임계값은 링크 품질과 같은 네트워크의 메트릭 또는 패킷 드롭 레이트 및 대역폭 이용률과 같은 링크 품질을 결정하는 데 사용되는 임의의 측정치에 기초할 수 있다. 예를 들어, 링크 품질 추정기(706)가 복제 정책의 제1 임계값이 교차되는 것으로 결정할 때, 패킷 복제기(702)는 제1 레이트로 패킷을 복제할 수 있고; 링크 품질 추정기(706)가 제2 임계값이 교차되는 것으로 결정할 때, 패킷 복제기(702)는 복제 정책에 의해 지시된 바와 같이 패킷을 제2 레이트로 복제할 수 있다.The intermediate device 700 may include a packet replicator 702 . Packet replicator 702 may include applications, services, routines, daemons, or other executable logic for replicating or otherwise replicating data packets to one or more links. As shown, the packet replicator 702 is coupled to two links; The packet replicator 702 may be coupled to more than two links. Different links may provide different paths to remote devices. Links may traverse different networks, network types, and may be provided by different carriers. In one example, the first link may be an MPLS link and the second link may be an Internet connection provided by a cable or DSL carrier. The rate at which the packet replicator 702 replicates packets is controlled by the replication policy. The replication rate may indicate the number of replicated packets per unit time—eg, the number of replicated packets per second. In another implementation, the replication rate may be the number of replicated packets per packet received, eg, 20 packets are replicated per 100 received packets. A replication policy selector 704 , described in greater detail below, may determine which replication policy to implement and provide the replication policy to the packet replicator 702 . A replication policy may include a set of rules that may establish replication based on which packets are replicated, such as, for example, link quality or other network metrics. A replication policy may include one or more thresholds. A replication rate may be associated with each threshold. The threshold may be based on a metric of the network, such as link quality, or any measure used to determine link quality, such as packet drop rate and bandwidth utilization. For example, when the link quality estimator 706 determines that a first threshold of the replication policy is crossed, the packet replicator 702 may replicate the packet at the first rate; When the link quality estimator 706 determines that the second threshold is crossed, the packet replicator 702 may replicate the packet at a second rate as dictated by the replication policy.

일부 실시예에서, 패킷 엔진(548)으로부터의 원본 패킷은 패킷 복제기(702)가 원본 패킷을 송신할 링크를 결정하기 위해 판독할 수 있는 헤더의 라우팅 정보를 포함한다. 패킷 복제기(702)는 복제 패킷을 원본 패킷이 송신되는 링크와 다른 제2의 다른 링크를 통해 송신할 수 있다. 예를 들어, 측정된 네트워크 메트릭(예를 들어, 링크 품질)이 제1 임계값 미만(또는 임계값을 충족하지 않음)인 경우, 패킷 복제기(702)는 제1 링크를 통해 원본 패킷만을 송신할 수 있다. 네트워크 메트릭이 임계값을 충족하는 경우(예를 들어, 대기 시간이 대기 시간 임계값 위로 증가), 패킷 복제기(702)는 제2 링크를 통해 복제 패킷을 송신할 수 있다. 패킷 복제기(702)는 임계값 교차와 연관된 복제 레이트로 패킷을 복제할 수 있다. 복제 레이트는 수신된 원본 패킷 당 패킷 복제기(702)가 얼마나 많은 패킷을 복제하는지 또는 주어진 시간 구간 동안 패킷 복제기(702)가 복제하는 패킷의 수를 나타낼 수 있다.In some embodiments, the original packet from packet engine 548 includes routing information in a header that packet replicator 702 can read to determine which link to send the original packet to. The packet replicator 702 may transmit the duplicate packet over a second, different link than the link through which the original packet is transmitted. For example, if the measured network metric (eg, link quality) is less than (or not meeting the threshold) a first threshold, the packet replicator 702 may only transmit the original packet over the first link. can If the network metric meets the threshold (eg, the latency increases above the latency threshold), the packet replicator 702 may transmit the duplicate packet over the second link. Packet replicator 702 may replicate packets at a replication rate associated with threshold crossing. The replication rate may indicate how many packets the packet replicator 702 replicates per received original packet or the number of packets the packet replicator 702 replicates during a given time interval.

일부 실시예에서, 제2 링크 상으로 패킷의 복제가 제2 링크의 미리 정해진 양의 대역폭을 소비할 때, 패킷 복제기(702)는 복제된 패킷의 일부를 제1 링크 상으로 송신하기 시작할 수 있다. 예를 들어, 링크 품질 추정기(706)는 제2 링크의 대역폭 이용값이 미리 정해진 임계값(예를 들어, 링크의 총 대역폭의 80%)을 충족하는 것으로 결정할 수 있다. 패킷 복제기(702)는 미리 정해진 임계값을 충족시키는 제2 링크의 복제 패킷량을 송신할 수 있고, 미리 정해진 임계값 위의 복제 패킷을 제1 링크 상으로 송신할 수 있다.In some embodiments, when replicating a packet over the second link consumes a predetermined amount of bandwidth of the second link, packet replicator 702 may start transmitting a portion of the duplicated packet over the first link. . For example, the link quality estimator 706 may determine that the bandwidth utilization value of the second link meets a predetermined threshold (eg, 80% of the total bandwidth of the link). The packet replicator 702 may transmit an amount of duplicate packets of the second link that meets a predetermined threshold, and may transmit duplicate packets above the predetermined threshold on the first link.

일부 실시예에서, 패킷 복제기(702)는 수신 네트워크 디바이스에서의 유효 패킷 손실 레이트, 유효 침묵 기간 또는 다른 네트워크 상태가 미리 정해진 임계값을 초과할 때, 단지 패킷을 (원본 패킷이 송신되는) 제1 링크 상으로 복제한다. 예를 들어, 수신 디바이스는 전송 디바이스로부터 수신 디바이스로의 패킷의 송신에서 많은 수의 패킷이 드롭되는 네트워크 상태를 경험할 수 있다. 패킷 복제기(702)는 유효 패킷 손실 레이트를 감소시키기 위해 제2 링크를 따라 복제 패킷을 수신 디바이스로 송신할 수 있다. 복제 패킷이 제2 링크의 최대 대역폭 이용값(또는 임계값)에 도달할 때 유효 패킷 드롭 레이트가 허용 가능한 범위로 개선되지 않았다면, 패킷 복제기(702)는 패킷을 제1 링크 상으로 복제하기 시작할 수 있다.In some embodiments, the packet replicator 702 only transfers the packet to the first (original packet) Copy over link. For example, a receiving device may experience a network condition in which a large number of packets are dropped in the transmission of packets from the sending device to the receiving device. The packet replicator 702 may transmit the duplicate packet to the receiving device along the second link to reduce the effective packet loss rate. If the effective packet drop rate has not improved to an acceptable range when the replica packets reach the maximum bandwidth utilization (or threshold) of the second link, the packet replicator 702 may start replicating packets onto the first link. have.

중간 디바이스(700)는 복제 정책 선택기(704)를 포함할 수 있다. 복제 정책 선택기(704)는 복제 정책을 결정 및 선택하기 위한 어플리케이션, 서비스, 루틴, 데몬 또는 다른 실행 가능한 로직을 포함할 수 있다. 복제 정책 선택기(704)는 링크 품질 추정기(706)로부터 네트워크 메트릭을 수신하고 패킷 복제기(702)에 접속된 하나 이상의 링크의 메트릭에 기초하여 복제 정책을 선택할 수 있다. 복제 정책 선택기(704)는 네트워크 메트릭에 기초하여 패킷 복제 레이트를 결정 또는 설정할 수 있다. 복제 정책 선택기(704)는 미리 정해진 네트워크 메트릭과 임계값 사이의 차이에 기초하여 패킷 복제 레이트를 결정할 수 있다. 예를 들어, 복제 정책 선택기(704)는 제1 링크의 대기 시간 및 패킷 손실 레이트를 모니터링할 수 있다. 대기 시간 및 패킷 손실 레이트가 너무 높고 임계값에 교차할 때, 복제 정책 선택기(704)는 패킷 복제기(702)에게 패킷을 제2 링크 상에 복제하도록 지시할 수 있다. 복제 정책 선택기(704)는 링크 품질 추정기(706)로부터 네트워크 메트릭 정보를 계속 수신하고 대기 시간 및 패킷 손실 레이트가 임계값 아래로 떨어지면 패킷 복제를 중지하도록 패킷 복제기(702)에 지시할 수 있다.The intermediate device 700 may include a replication policy selector 704 . Replication policy selector 704 may include an application, service, routine, daemon, or other executable logic for determining and selecting a replication policy. The replication policy selector 704 may receive network metrics from the link quality estimator 706 and select a replication policy based on the metrics of one or more links connected to the packet replicator 702 . The replication policy selector 704 may determine or set the packet replication rate based on the network metric. The replication policy selector 704 may determine the packet replication rate based on a difference between a predetermined network metric and a threshold. For example, the replication policy selector 704 may monitor the latency and packet loss rate of the first link. When the latency and packet loss rate are too high and cross a threshold, the replication policy selector 704 may instruct the packet replicator 702 to replicate the packet on the second link. The replication policy selector 704 may continue to receive network metric information from the link quality estimator 706 and instruct the packet replicator 702 to stop replicating packets when the latency and packet loss rate fall below threshold values.

복제 정책 선택기(704)는 또한 패킷 복제기(702)가 패킷을 복제하는 복제 레이트를 설정할 수 있다. 복제 정책 선택기(704)는 제1 링크의 네트워크 메트릭을 수신할 수 있고, 네트워크 상태가 임계값에 교차할 때, 복제 정책 선택기(704)는 패킷 복제기(702)에 제2 링크를 통해 패킷 복제를 시작하도록 지시할 수 있다. 복제 정책 선택기(704)가 패킷 복제기(702)에게 패킷을 복제하도록 지시하는 레이트는 네트워크 메트릭에 기초할 수 있다. 예를 들어, 복제 정책 선택기(704)가 네트워크 메트릭이 저하되고 있는 것으로 결정하면(예를 들어, 대기 시간이 증가하거나 패킷 손실 레이트가 증가하고 있음), 복제 정책 선택기(704)는 복제 레이트를 증가시킬 수 있다. 네트워크 메트릭이 저하됨에 따라, 복제 정책 선택기(704)는 제1 링크의 저하를 보상하기 위해 복제 레이트를 증가시킬 수 있다.The replication policy selector 704 may also set a replication rate at which the packet replicator 702 replicates packets. The replication policy selector 704 may receive the network metric of the first link, and when the network condition crosses the threshold, the replication policy selector 704 directs the packet replicator 702 to replicate the packet over the second link. can be instructed to start. The rate at which the replication policy selector 704 instructs the packet replicator 702 to replicate packets may be based on a network metric. For example, if the replication policy selector 704 determines that the network metric is deteriorating (eg, latency is increasing or the packet loss rate is increasing), the replication policy selector 704 increases the replication rate. can do it As the network metric degrades, the replication policy selector 704 may increase the replication rate to compensate for the degradation of the first link.

복제 정책 선택기(704)는 제1 링크 단독의 네트워크 메트릭 또는 하나 이상의 링크의 네트워크 메트릭에 기초하여 복제 레이트를 설정할 수 있다. 복수의 링크의 네트워크 메트릭에 기초하여 복제 레이트를 결정할 때, 동일하거나 상이한 유형의 네트워크 메트릭이 사용될 수 있다. 상이한 네트워크 메트릭이 사용되는 예에서, 패킷 복제 레이트는 제2 링크의 결정된 대역폭 및 제1 링크의 대기 시간 또는 패킷 손실과 같은 네트워크 메트릭에 기초할 수 있다.The replication policy selector 704 may set the replication rate based on a network metric of the first link alone or a network metric of one or more links. When determining the replication rate based on the network metrics of the plurality of links, the same or different types of network metrics may be used. In an example where different network metrics are used, the packet replication rate may be based on network metrics such as the determined bandwidth of the second link and latency or packet loss of the first link.

복제 정책 선택기(704)는 유효 패킷 손실 레이트에 기초하여 복제 레이트를 설정할 수 있다. 도 8a는 유효 패킷 손실 레이트에 기초한 패킷의 복제를 나타낸다. 유효 패킷 손실 레이트는 제1 링크를 통한 패킷 손실 레이트 및 제2 링크를 통해 송신된 복제 패킷의 수용 레이트를 고려하는 패킷 손실 레이트일 수 있다. 예를 들어, 또한 도 8a를 참조하면, 제1 가상 WAN 기기(800(a))는 제2 가상 WAN 기기(800(b))와 통신할 수 있다. 제1 가상 WAN 기기(800(a))는 제1 링크(802) 및 제2 링크(804)를 통해 제2 가상 WAN 기기(800(b))와 통신할 수 있다. 패킷(806)은 제1 링크(802) 및 제2 링크(804)를 통해 송신된다. 음영 처리된 패킷(806')은 제1 링크(802)를 따라 제1 가상 WAN 기기(800(a))에서 제2 가상 WAN 기기(800(b))로 송신하는 동안 드롭되는 패킷을 나타낸다. 제1 링크(802)는 케이블 또는 DSL 공급자에 의해 제공한 것과 같은 인터넷을 통한 링크일 수 있다. 제2 링크(804)는 MPLS 링크일 수 있다.The replication policy selector 704 may set the replication rate based on the effective packet loss rate. Fig. 8a shows duplication of packets based on effective packet loss rate. The effective packet loss rate may be a packet loss rate that takes into account a packet loss rate over the first link and an acceptance rate of duplicate packets transmitted over the second link. For example, referring also to FIG. 8A , the first virtual WAN device 800(a) may communicate with the second virtual WAN device 800(b). The first virtual WAN device 800(a) may communicate with the second virtual WAN device 800(b) through the first link 802 and the second link 804 . Packet 806 is transmitted over first link 802 and second link 804 . The shaded packets 806 ′ represent packets that are dropped during transmission from the first virtual WAN device 800(a) to the second virtual WAN device 800(b) along the first link 802 . The first link 802 may be a link over the Internet, such as provided by a cable or DSL provider. The second link 804 may be an MPLS link.

도 8a에 나타낸 바와 같이. 7개의 패킷(806')이 제1 링크(802) 상에서 드롭된다. 6개의 패킷(806)이 제2 링크(804) 상에 복제된다. 적응적 복제 없이, 제1 링크(802)를 따른 손실 레이트는 7개의 패킷이다. 유효 패킷 손실 레이트를 계산하는 것은 제2 링크(804) 상에서의 패킷 수용 레이트를 결정하는 것을 포함할 수 있다. 일부 실시예에서, 패킷 수용 레이트는 수신 디바이스에서 수신된 총 복제 패킷 수의 수용 레이트일 수 있다. 예를 들어, 도 8a에 나타낸 예에서, 나타낸 시간 프레임을 통한 수용 레이트는 6이다. 다른 실시예에서, 패킷 수용 레이트는 주어진 시간 프레임 동안 제1 링크(802) 상의 손실된 패킷에 대응하는 제2 링크(804) 상의 수신된 복제 패킷의 수에 기초할 수 있다. 예를 들어, 제2 링크(804)를 통해 송신된 패킷(806(11))은 제1 링크(802)를 통해 송신된 수용된 패킷(806(11))에 대응하고, 제2 링크(804)를 통해 송신된 패킷(806(10))은 제1 링크(802)를 통해 송신된 손실된 패킷(806(10))에 대응한다. 제1 링크(802) 상의 패킷(806)에 대응하는 제2 링크(804) 상의 패킷(806)은 패킷(806)이 서로의 복제물임을 나타낼 수 있다. 예를 들어, 제2 링크(804) 상의 패킷(806(8))은 제1 링크(802) 상의 패킷(806(8))의 복제물이다. 유효 패킷 손실 레이트는 제1 링크(802)를 통한 제1 패킷 손실 레이트와 제2 링크(804)를 통한 패킷 수용 레이트 간의 차이에 기초할 수 있다. 도 8a에 나타낸 예에서, 제1 링크(802)를 통한 제1 패킷 손실 레이트는 나타낸 시간 프레임 동안 7개의 패킷이고, 제2 링크(804)를 통한 (손실된 패킷에 대응하는 패킷에 대한) 나타낸 시간 프레임 동안 패킷 수용 레이트는 4이다. 이 예에서, 나타낸 시간 프레임 동안 유효 손실 레이트는 3이다. 일부 실시예에서, 복제 정책 선택기(704)는 유효 손실 레이트가 미리 정해진 임계값 미만일 때 복제 레이트를 계속 증가시킬 수 있다. 예를 들어, 상술한 예에서 나타내어진 시간 프레임 동안 임계값이 2의 유효 손실 레이트로 설정되었으면, 복제 정책 선택기(704)는 유효 손실 레이트가 3인 것으로 계산되기 때문에 복제 레이트를 증가시킬 것이다.As shown in Figure 8a. Seven packets 806 ′ are dropped on the first link 802 . Six packets 806 are replicated on the second link 804 . Without adaptive replication, the loss rate along the first link 802 is 7 packets. Calculating the effective packet loss rate may include determining a packet acceptance rate on the second link 804 . In some embodiments, the packet acceptance rate may be an acceptance rate of the total number of duplicate packets received at the receiving device. For example, in the example shown in FIG. 8A, the acceptance rate over the time frame shown is 6. In another embodiment, the packet acceptance rate may be based on a number of duplicate packets received on the second link 804 corresponding to packets lost on the first link 802 during a given time frame. For example, a packet 806(11) transmitted over the second link 804 corresponds to an accepted packet 806(11) transmitted over the first link 802, and the second link 804 Packet 806 ( 10 ) transmitted via ? corresponds to lost packet 806 ( 10 ) sent via first link 802 . Packet 806 on second link 804 corresponding to packet 806 on first link 802 may indicate that packet 806 is a duplicate of each other. For example, packet 806 ( 8 ) on second link 804 is a duplicate of packet 806 ( 8 ) on first link 802 . The effective packet loss rate may be based on the difference between the first packet loss rate over the first link 802 and the packet acceptance rate over the second link 804 . In the example shown in FIG. 8A , the first packet loss rate over the first link 802 is 7 packets during the time frame shown, and the shown (for packets corresponding to the lost packets) over the second link 804 . The packet acceptance rate during the time frame is 4. In this example, the effective loss rate for the indicated time frame is three. In some embodiments, the replication policy selector 704 may continue to increase the replication rate when the effective loss rate is below a predetermined threshold. For example, if the threshold was set to an effective loss rate of 2 during the time frame shown in the example above, the replication policy selector 704 will increase the replication rate because the effective loss rate is calculated to be 3.

제1 링크(802) 및 제2 링크(804)는 제1 가상 WAN 기기(800(a))와 제2 가상 WAN 기기(800(b)) 사이의 복수의 경로를 포함할 수 있다. 상이한 경로는 제1 가상 WAN 기기(800(a))와 제2 가상 WAN 기기(800(b)) 사이에 상이한 수의 홉을 가질 수 있다. 다른 경로는 링크를 따라 다른 물리적 접속을 횡단할 수 있다. 제1 디바이스는 그 경로를 따라 송신된 미리 정해진 수의 패킷이 드롭되거나 지연되면 링크를 따르는 경로 중 하나를 유효하지 않은 경로로 마킹할 수 있다. 일례에서, 제1 링크(802)의 경로를 따라 송신하는 동안 3개의 연속 패킷이 드롭될 때, 경로는 유효하지 않은 것으로 마킹될 수 있고 경로는 후속 패킷에 사용되지 않을 수 있다. 유효하지 않은 경로의 마킹은 제1 링크(802)의 드롭 레이트 또는 지연 레이트에 기초할 수 있고 제1 링크(802) 및 제2 링크(804)의 조합된 유효 드롭 또는 지연 레이트에 기초하지 않을 수 있다.The first link 802 and the second link 804 may include a plurality of paths between the first virtual WAN device 800(a) and the second virtual WAN device 800(b). Different paths may have different numbers of hops between the first virtual WAN device 800(a) and the second virtual WAN device 800(b). Other paths may traverse different physical connections along the link. The first device may mark one of the paths along the link as invalid if a predetermined number of packets transmitted along that path are dropped or delayed. In one example, when three consecutive packets are dropped while transmitting along the path of the first link 802 , the path may be marked invalid and the path may not be used for subsequent packets. The marking of the invalid path may be based on the drop rate or delay rate of the first link 802 and not on the combined valid drop or delay rate of the first link 802 and the second link 804. have.

다시 도 7을 참조하면, 일부 실시예에서, 복제 정책 선택기(704)는 제1 링크를 횡단하는 패킷의 지연 레이트에 기초하여 복제 레이트를 설정할 수 있다. 복제 정책 선택기(704)는 또한 패킷의 유효 지연 레이트에 기초하여 복제 레이트를 설정할 수 있다. 도 8b는 유효 지연 레이트에 기초한 패킷의 복제를 나타낸다. 도 8b는 도 8a에 나타낸 것과 유사한 예시적인 시스템을 나타낸다. 도 8b는 지연 레이트에 기초하여 패킷이 복제되는 시스템을 나타낸다. 도 8b에서, 패킷(806)은 제1 가상 WAN 기기(800(a))와 제2 가상 WAN 기기(800(b)) 사이에서 송신된다.Referring again to FIG. 7 , in some embodiments, the replication policy selector 704 may set the replication rate based on a delay rate of packets traversing the first link. The replication policy selector 704 may also set the replication rate based on the effective delay rate of the packet. Fig. 8b shows duplication of packets based on effective delay rate. 8B shows an exemplary system similar to that shown in FIG. 8A. 8B shows a system in which packets are replicated based on a delay rate. In FIG. 8B , packet 806 is transmitted between a first virtual WAN device 800(a) and a second virtual WAN device 800(b).

패킷(806(1)-806(6))을 포함하는 데이터 스트림은 제1 링크(802)를 따라 송신된다. 복제 패킷(806(2), 806(4) 및 806(6))은 제2 링크(804)를 따라 송신된다. 도 8b에 나타낸 시스템에서, 음영 처리된 패킷(806')은 지연된 패킷이다. 예를 들어, 제1 링크(802) 상의 패킷(806(2))은 패킷(806(1))으로부터 지연된다. 유효 지연 레이트는 제1 링크(802)의 제1 패킷 지연 레이트를 결정하고 제1 링크 상의 지연된 패킷에 대해 수용되는 복제 패킷의 수에 기초할 수 있는 제2 링크(804)의 패킷 수용 레이트를 결정함으로써 복제 정책 선택기(704)에 의해 계산될 수 있다. 유효 패킷 지연 레이트는 제1 패킷 지연 레이트와 패킷 수용 레이트의 차이에 기초할 수 있다. 유효 패킷 지연 레이트는 제2 가상 WAN 기기(800(b))에 의해 수신된 패킷들 사이의 유효 침묵을 나타낼 수 있다. 예를 들어, 가상 WAN 기기(800(a))는 시간 t=t 1 에서 패킷(806(1))을 수신하고, t=t n 에서 제1 링크(802) 상의 패킷(806(2))을 수신하고, t=t m 에서 제2 링크(804) 상의 패킷(806(2))을 수신하며, 여기서 mn보다 작다. 제1 링크(802) 상에서 패킷(806(1) 및 806(2))의 수신 사이의 침묵은 (t n -t 1 )이다. mn보다 작기 때문에, 가상 WAN 기기(800(b))에서의 패킷 수신의 유효 침묵 레이트는 (t m -t 1 )이다. 일부 실시예에서, 복제 정책 선택기(704)는 유효 침묵 레이트가 미리 정해진 임계값보다 작을 때까지 패킷 복제 레이트를 증가시킬 수 있다. 예를 들어, 패킷 복제 레이트는 추가 패킷이 제2 링크(804)를 통해 송신되도록 증가될 수 있다. 미리 정해진 양의 시간(예를 들어, 30 초) 동안 증가된 복제 레이트로 제2 링크(804)를 통해 복제 패킷을 송신한 후, 링크 품질 추정기(706)는 유효 침묵 레이트를 재확인할 수 있다. 패킷 복제기(702) 및 링크 품질 추정기(706)는 유효 침묵 주기가 미리 정해진 임계값보다 작을 때까지 복제 레이트를 반복적으로 증가시키고 유효 침묵 레이트를 확인할 수 있다.A data stream comprising packets 806 ( 1 ) - 806 ( 6 ) is transmitted along a first link 802 . Duplicate packets 806(2), 806(4) and 806(6) are transmitted along the second link 804. In the system shown in Fig. 8B, the shaded packet 806' is a delayed packet. For example, packet 806(2) on first link 802 is delayed from packet 806(1). The effective delay rate determines the first packet delay rate of the first link 802 and determines the packet acceptance rate of the second link 804 which may be based on the number of duplicate packets accepted for the delayed packets on the first link. can be calculated by the replication policy selector 704 by The effective packet delay rate may be based on a difference between the first packet delay rate and the packet acceptance rate. The effective packet delay rate may indicate effective silence between packets received by the second virtual WAN device 800(b). For example, virtual WAN device 800(a) receives packet 806(1) at time t=t 1 , and packet 806(2) on first link 802 at t=t n and receive packet 806(2) on second link 804 at t=t m , where m is less than n. The silence between the reception of packets 806(1) and 806(2) on the first link 802 is (t n -t 1 ) . Since m is less than n , the effective silence rate of packet reception at virtual WAN device 800(b) is (t m -t 1 ) . In some embodiments, the replication policy selector 704 may increase the packet replication rate until the effective silencing rate is less than a predetermined threshold. For example, the packet replication rate may be increased such that additional packets are transmitted over the second link 804 . After transmitting the replication packet over the second link 804 at the increased replication rate for a predetermined amount of time (eg, 30 seconds), the link quality estimator 706 may reconfirm the effective silencing rate. The packet replicator 702 and the link quality estimator 706 may iteratively increase the replication rate and check the effective silencing rate until the effective silencing period is less than a predetermined threshold.

도 9는 네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 예시적인 방법(900)의 블록도를 도시한다. 방법(900)은 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태 메트릭이 임계값 내에 있는 것으로 결정하는 단계를 포함할 수 있다(블록 902). 방법(900)은 네트워크 상태 메트릭이 임계값 내에 있는 것으로 결정하는 것에 기초하여, 제1 링크를 따라 제1 디바이스로부터 제2 디바이스로 송신될 원본 패킷의 복제 패킷을 생성하는 단계를 포함할 수 있다(블록 904). 방법(900)은 제1 디바이스에 의해, 원본 패킷을 제2 디바이스로 송신하는 단계를 포함할 수 있다(블록 906). 방법(900)은 제1 디바이스와 제2 디바이스 사이에 확립된 제2 링크 상에서 제1 디바이스에 의해 복제 패킷을 제2 디바이스로 송신하는 단계를 포함할 수 있다(블록 908).9 shows a block diagram of an example method 900 for transmitting a duplicate packet based on a network condition. The method 900 may include determining that a network state metric of a first link established between the first device and the second device is within a threshold (block 902 ). Method 900 may include generating, based on determining that the network state metric is within a threshold, a duplicate packet of the original packet to be transmitted from the first device to the second device along the first link ( block 904). The method 900 may include transmitting, by the first device, the original packet to the second device (block 906). Method 900 may include transmitting, by the first device, a copy packet to a second device on a second link established between the first device and the second device (block 908 ).

블록 902에서, 방법(900)은 제1 디바이스에 의해, 제1 디바이스와 제2 디바이스 사이의 제1 링크의 네트워크 상태 메트릭이 임계값 내에 있는지를 결정하는 단계를 포함할 수 있다. 제1 및 제2 디바이스는 가상 WAN 디바이스일 수 있다. 네트워크 상태 메트릭은 제1 링크를 통한 패킷 손실 레이트, 제1 링크를 통한 패킷 지연 시간, 제1 및 제2 링크를 통한 효과 패킷 손실 레이트, 또는 제1 및 제2 링크를 통한 유효 패킷 지연 시간일 수 있다. 임계값은 복제 정책에 의해 설정된 네트워크 상태 메트릭의 범위일 수 있다. 임계값은 사용자 또는 컴퓨터 시스템이 네트워크 중단을 경험하기 시작하는 네트워크 상태 메트릭 값 아래로 설정될 수 있다. 예를 들어, 패킷 손실 레이트가 x로 상승하면 컴퓨터 시스템은 네트워크 중단을 경험하기 시작할 수 있다. 임계값은 x/2로 설정될 수 있어 사용자 또는 시스템이 현저한 네트워크 중단을 경험하기 전에 시스템이 패킷을 복제하기 시작한다. 제1 링크는 인터넷 광대역 링크일 수 있고 제2 링크는 멀티프로토콜 라벨 스위칭 링크일 수 있다.At block 902 , the method 900 may include determining, by the first device, whether a network state metric of a first link between the first device and the second device is within a threshold value. The first and second devices may be virtual WAN devices. The network health metric can be a packet loss rate over the first link, a packet delay time over the first link, an effective packet loss rate over the first and second links, or an effective packet delay time over the first and second links. have. The threshold may be a range of network status metrics set by the replication policy. The threshold may be set below a network health metric value at which a user or computer system begins to experience network outages. For example, if the packet loss rate rises to x, the computer system may begin to experience network outages. The threshold can be set to x/2 so that the system starts replicating packets before the user or system experiences a significant network outage. The first link may be an Internet broadband link and the second link may be a multiprotocol label switching link.

블록 904에서, 방법(900)은 제1 디바이스와 제2 디바이스 사이에서 송신될 원본 패킷의 복제 패킷을 생성하는 단계를 포함할 수 있다. 네트워크 상태 메트릭이 임계값 내에 있는 것으로 결정하면, 패킷 복제기는 제1 링크를 통해 패킷 엔진으로부터 제2 디바이스로 송신된 패킷을 인터셉팅 및 복제하기 시작할 수 있다. 패킷을 복제하는 단계는 원본 패킷의 하나 이상의 사본을 생성하는 단계를 포함할 수 있다. 어떠한 패킷이 복제되는지는 복제 레이트에 기초할 수 있다. 예를 들어, 복제 레이트는 매 5번째 패킷이 복제되거나 미리 정해진 수의 패킷이 매초 복제되는 것일 수 있다. 패킷의 복제 레이트는 복제 정책에 기초하여 설정될 수 있다. 복제 레이트는 네트워크 상태 메트릭에 기초할 수 있다. 예를 들어, 네트워크 상태 메트릭이 악화되어 제1 임계값을 충족시킬 때, 복제 레이트는 제1 값으로 설정될 수 있고, 네트워크 상태 메트릭이 더욱 악화되어 제2 임계값을 충족시킬 때, 복제 레이트는 제1 값보다 더 큰 제2 값으로 설정될 수 있다. 네트워크 상태 메트릭이 악화될수록 복제 레이트를 더 높게 설정하면 네트워크 상태가 악화되는 효과에 대응할 수 있다. 예를 들어, 제1 링크를 따라 더 많은 패킷이 드롭됨에 따라, 패킷 복제기는 제1 링크에 대한 드롭된 패킷의 효과를 상쇄하기 위해 제2 링크를 따라 송신되는 더 많은 수의 복제 패킷을 생성한다.At block 904 , the method 900 may include generating a duplicate packet of the original packet to be transmitted between the first device and the second device. Upon determining that the network state metric is within the threshold, the packet replicator may begin intercepting and replicating packets transmitted from the packet engine to the second device over the first link. Duplicating the packet may include creating one or more copies of the original packet. Which packets are copied may be based on the replication rate. For example, the replication rate may be that every fifth packet is copied or a predetermined number of packets are copied every second. The packet duplication rate may be set based on a duplication policy. The replication rate may be based on a network health metric. For example, when the network status metric deteriorates to meet a first threshold, the replication rate may be set to a first value, and when the network status metric deteriorates further to meet a second threshold, the replication rate is It may be set to a second value greater than the first value. As the network condition metric deteriorates, setting the replication rate higher can counteract the effect of worsening network condition. For example, as more packets are dropped along the first link, the packet replicator creates a larger number of duplicate packets transmitted along the second link to counteract the effect of dropped packets on the first link. .

복제 레이트는 네트워크 상태의 메트릭과 임계값 사이의 차이에 기초할 수 있다. 예를 들어, 패킷 손실 레이트와 패킷 손실 레이트에 대한 임계값 사이의 차이가 증가함에 따라 복제 레이트는 증가할 수 있다. 일부 실시예에서, 복제 정책은 복수의 임계값을 포함할 수 있다. 네트워크 상태의 메트릭이 제1 임계값을 충족할 때, 복제 레이트는 제1 레이트로 설정될 수 있다. 네트워크 상태의 메트릭이 제2 임계값을 충족할 때, 복제 레이트는 제2 레이트로 설정될 수 있다. 일부 실시예에서, 복제 레이트는 제2 링크의 대역폭에 기초할 수 있다. 예를 들어, 제2 링크가 높은 대역폭 용량을 갖는 경우, 낮은 대역폭 용량을 갖는 제2 링크와 비교할 때 복제 레이트가 더 높게 설정될 수 있다.The replication rate may be based on the difference between a metric and a threshold of network conditions. For example, the replication rate may increase as the difference between the packet loss rate and the threshold for the packet loss rate increases. In some embodiments, a replication policy may include multiple thresholds. When the metric of the network condition meets the first threshold, the replication rate may be set to the first rate. When the metric of the network condition meets the second threshold, the replication rate may be set to the second rate. In some embodiments, the replication rate may be based on the bandwidth of the second link. For example, when the second link has a high bandwidth capacity, the replication rate may be set higher than that of the second link having a low bandwidth capacity.

블록 906에서, 방법(900)은 원본 패킷을 제1 링크를 통해 제2 디바이스로 송신하는 단계를 포함할 수 있다. 제1 링크는 인터넷 광대역 링크일 수 있다. 제1 링크는 제1 디바이스와 제2 디바이스 사이의 1차 링크일 수 있다. 제1 링크는 제1 디바이스와 제2 디바이스 사이의 복수의 경로를 포함할 수 있다.At block 906 , the method 900 may include transmitting the original packet to the second device over the first link. The first link may be an Internet broadband link. The first link may be a primary link between the first device and the second device. The first link may include a plurality of paths between the first device and the second device.

블록 908에서, 방법(900)은 복제 패킷을 제2 링크를 통해 제2 디바이스로 송신하는 단계를 포함할 수 있다. 제2 링크는 MPLS 링크일 수 있다. 제2 링크는 제1 디바이스와 제2 디바이스 사이의 복수의 경로를 포함할 수 있다. 일부 실시예에서, 복제 패킷이 제2 링크의 최대 대역폭 이용률을 채울 때, 패킷 복제기는 제1 링크 상에서 복제 패킷을 송신할 수 있다. 제2 링크를 통해 제2 디바이스로 송신된 복제 패킷의 레이트 또는 양은 유효 패킷 지연 레이트 및 유효 패킷 손실 레이트와 같은 네트워크 상태 메트릭에 기초할 수 있다.At block 908 , the method 900 may include transmitting the duplicate packet to the second device via the second link. The second link may be an MPLS link. The second link may include a plurality of paths between the first device and the second device. In some embodiments, when the duplicate packets fill the maximum bandwidth utilization of the second link, the packet replicator may transmit the duplicate packets on the first link. The rate or amount of duplicate packets transmitted over the second link to the second device may be based on network state metrics such as effective packet delay rate and effective packet loss rate.

일부 실시예에서, 방법(900)의 일부는 미리 정해진 시간 후에 되풀이되며 반복될 수 있다. 예를 들어, 시스템은 타겟 유효 패킷 손실 레이트 또는 타겟 유효 지연 레이트를 가질 수 있다. 시스템은 현재 유효 패킷 손실 레이트 또는 유효 지연 레이트를 결정할 수 있다. 그 후 시스템은 현재 레이트가 타겟 레이트보다 낮은 지를 결정할 수 있다. 현재 유효 패킷 손실 레이트 또는 현재 유효 지연 레이트가 그 타겟 레이트 미만이 되도록 타겟 레이트 사이에 차이가 있는 경우, 시스템은 복제 레이트를 증가시킬 수 있다. 복제 레이트의 증가 후 미리 정해진 시간 후에, 시스템은 업데이트된 레이트를 타겟 레이트와 비교할 수 있다. 시스템은 업데이트된 레이트가 타겟 레이트를 충족할 때까지 복제 레이트를 계속 증가시킬 수 있다.In some embodiments, portions of method 900 may be repeated and repeated after a predetermined amount of time. For example, the system may have a target effective packet loss rate or a target effective delay rate. The system may determine the current effective packet loss rate or effective delay rate. The system can then determine if the current rate is lower than the target rate. If there is a difference between the target rates such that the current effective packet loss rate or the current effective delay rate is less than the target rate, the system may increase the replication rate. After a predetermined time after the increase in the replication rate, the system may compare the updated rate to the target rate. The system may continue to increase the replication rate until the updated rate meets the target rate.

상술한 시스템은 이들 구성 요소 중 임의의 것 또는 각각의 복수를 제공할 수 있으며, 이들 구성 요소는 독립형 머신 또는 일부 실시예에서 분산형 시스템의 복수의 머신 중 어느 하나에 제공될 수 있음을 이해해야 한다. 상술한 시스템 및 방법은 소프트웨어, 펌웨어, 하드웨어 또는 이들의 임의의 조합을 생성하기 위한 프로그래밍 및/또는 엔지니어링 기술을 사용하는 방법, 장치 또는 제조 물품으로서 구현될 수 있다. 또한, 상술한 시스템 및 방법은 하나 이상의 제조 물품 상에 또는 하나 이상의 제조 물품에 구현되는 하나 이상의 컴퓨터 판독 가능 프로그램으로서 제공될 수 있다. 본원에서 사용되는 용어 "제조 물품"은 하나 이상의 컴퓨터 판독 가능 디바이스, 펌웨어, 프로그램 가능 로직, 메모리 디바이스(예를 들어, EEPROM, ROM, PROM, RAM, SRAM 등), 하드웨어(예를 들어, 집적 회로 칩, FPGA(Field Programmable Gate Array), ASIC(Application Specific Integrated Circuit) 등), 전자 디바이스, 컴퓨터 판독 가능 비휘발성 저장 유닛(예를 들어, CD-ROM, 플로피 디스크, 하드 디스크 드라이브 등)으로부터 액세스 가능하고 이에 내장되는 코드 또는 로직을 포함하도록 의도된다. 제조 물품은 네트워크 송신 라인, 무선 송신 매체, 공간을 통해 전파되는 신호, 무선 전파, 적외선 신호 등을 통해 컴퓨터 판독 가능 프로그램에 대한 액세스를 제공하는 파일 서버로부터 액세스될 수 있다. 제조 물품은 플래시 메모리 카드 또는 자기 테이프일 수 있다. 제조 물품은 하드웨어 로직뿐만 아니라 프로세서에 의해 실행되는 컴퓨터 판독 가능 매체에 내장된 소프트웨어 또는 프로그램 가능 코드를 포함한다. 일반적으로, 컴퓨터 판독 가능 프로그램은 LISP, PERL, C, C++, C#, PROLOG와 같은 임의의 프로그래밍 언어 또는 JAVA와 같은 임의의 바이트 코드 언어로 구현될 수 있다. 소프트웨어 프로그램은 객체 코드로서 하나 이상의 제조 물품 상에 또는 제조 물품에 저장될 수 있다.It should be understood that the system described above may provide any or a plurality of each of these components, and that these components may be provided either on a standalone machine or, in some embodiments, on either a plurality of machines in a distributed system. . The systems and methods described above may be implemented as methods, devices, or articles of manufacture using programming and/or engineering techniques to create software, firmware, hardware, or any combination thereof. In addition, the systems and methods described above may be provided as one or more computer readable programs embodied on or in one or more articles of manufacture. As used herein, the term “article of manufacture” refers to one or more computer readable devices, firmware, programmable logic, memory devices (eg, EEPROM, ROM, PROM, RAM, SRAM, etc.), hardware (eg, integrated circuits). Accessible from chips, field programmable gate arrays (FPGAs), application specific integrated circuits (ASICs), etc.), electronic devices, computer-readable non-volatile storage units (eg CD-ROMs, floppy disks, hard disk drives, etc.) and is intended to include code or logic embedded therein. The article of manufacture may be accessed from a file server that provides access to the computer readable program via network transmission lines, wireless transmission media, signals propagating through space, radio waves, infrared signals, and the like. The article of manufacture may be a flash memory card or magnetic tape. The article of manufacture includes hardware logic as well as software or programmable code embodied in a computer readable medium executed by a processor. In general, a computer readable program may be implemented in any programming language such as LISP, PERL, C, C++, C#, PROLOG, or any byte code language such as JAVA. A software program may be stored as object code on or in one or more articles of manufacture.

방법 및 시스템의 다양한 실시예가 설명되었지만, 이들 실시예는 예시적인 것이며 설명된 방법 또는 시스템의 범위를 제한하는 것은 아니다. 관련 기술 분야의 통상의 기술자는 설명된 방법 및 시스템의 가장 넓은 범위를 벗어나지 않고도 설명된 방법 및 시스템의 형태 및 세부 사항에 대해 변경을 가할 수 있다. 따라서, 본원에 설명된 방법 및 시스템의 범위는 예시적인 실시예 중 어느 것에 의해서도 제한되어서는 안되며, 첨부된 청구 범위 및 그 등가물에 따라 규정되어야 한다.While various embodiments of methods and systems have been described, these embodiments are illustrative and not limiting of the scope of the described methods or systems. Those skilled in the art can make changes in the form and details of the described methods and systems without departing from the broadest scope of the described methods and systems. Accordingly, the scope of the methods and systems described herein should not be limited by any of the exemplary embodiments, but should be defined in accordance with the appended claims and their equivalents.

Claims (20)

네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 방법으로서,
제1 디바이스에 의해, 상기 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는지를 결정하는 단계 - 상기 제1 링크의 네트워크 상태의 상기 메트릭은 상기 제1 링크의 패킷 지연 레이트 또는 상기 제1 링크의 패킷 손실 레이트임 - ;
상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 제2 링크를 통해, 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계 - 상기 복제 패킷들은 상기 제1 링크의 손실 레이트 또는 지연 레이트, 및 상기 제2 링크의 타겟 유효 패킷 수용 레이트에 기초하여 생성됨 -;
상기 제1 디바이스에 의해, 상기 제1 링크 상에서 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 상기 패킷들을 송신하는 단계; 및
상기 제1 디바이스에 의해, 상기 제2 링크 상에서 상기 복제 패킷들을 송신하는 단계를 포함하는, 방법.
A method for transmitting a duplicate packet based on a network condition, comprising:
determining, by a first device, whether a metric of a network status of a first link established between the first device and a second device is within a threshold, wherein the metric of a network status of the first link is determined by the first is the packet delay rate of the link or the packet loss rate of the first link;
in response to determining, by the first device, that the metric of the network state of the first link is within the threshold, via a second link established between the first device and the second device; generating duplicate packets of packets to be transmitted from the first device to the second device, the duplicate packets being based on a loss rate or delay rate of the first link and a target effective packet acceptance rate of the second link created -;
transmitting, by the first device, the packets to be transmitted from the first device to the second device on the first link; and
transmitting, by the first device, the duplicate packets on the second link.
삭제delete 제1항에 있어서, 상기 임계값은 제1 임계값이며,
상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태를 모니터링하는 단계;
상기 제1 디바이스에 의해, 상기 네트워크 상태의 상기 메트릭이 제2 임계값 내에 있는지 결정하는 단계; 및
상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 상기 제2 링크 상에서 송신되는 레이트에 대응하는 패킷 복제 레이트를 수정하는 단계를 더 포함하는, 방법.
The method of claim 1, wherein the threshold is a first threshold,
monitoring, by the first device, the network status of the first link;
determining, by the first device, whether the metric of the network status is within a second threshold; and
In response to determining, by the first device, that the metric of the network condition of the first link is within the second threshold, a packet corresponding to a rate at which duplicate packets are generated and transmitted on the second link. The method further comprising modifying the replication rate.
제1항에 있어서,
상기 제1 디바이스에 의해, 상기 제2 링크의 대역폭을 결정하는 단계; 및
상기 제1 디바이스에 의해, 상기 결정된 상기 제2 링크의 대역폭 및 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭에 기초하여 패킷 복제 레이트를 결정하는 단계를 더 포함하고,
상기 제1 링크를 통해 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계는 상기 패킷 복제 레이트에 기초하여 상기 복제 패킷들을 생성하는 단계를 포함하는, 방법.
According to claim 1,
determining, by the first device, a bandwidth of the second link; and
determining, by the first device, a packet replication rate based on the determined bandwidth of the second link and the metric of the network state of the first link,
and generating duplicate packets of packets to be transmitted from the first device to the second device over the first link comprises generating the duplicate packets based on the packet copy rate.
제1항에 있어서, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭을 결정하는 단계는 상기 제1 링크의 패킷 손실 레이트 또는 상기 제1 링크의 패킷 지연 레이트 중 하나를 결정하는 단계를 포함하는, 방법.2. The method of claim 1, wherein determining the metric of the network state of the first link established between the first device and the second device comprises: a packet loss rate of the first link or a packet loss rate of the first link. determining one of the delay rates. 제1항에 있어서, 상기 제1 링크는 인터넷 광대역 링크이고 상기 제2 링크는 멀티프로토콜 라벨 스위칭 링크이고 상기 제1 디바이스 및 상기 제2 디바이스는 가상 광역 네트워크 디바이스인, 방법.The method of claim 1 , wherein the first link is an Internet broadband link and the second link is a multiprotocol label switched link and the first device and the second device are virtual wide area network devices. 제1항에 있어서,
상기 제1 디바이스에 의해, 상기 제1 링크 상에서 손실된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 손실 레이트를 결정하는 단계;
상기 제1 디바이스에 의해, 상기 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하는 단계; 및
상기 제1 디바이스에 의해, 상기 제1 패킷 손실 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 손실 레이트를 결정하는 단계를 더 포함하고,
상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 손실 레이트인, 방법.
According to claim 1,
determining, by the first device, a first packet loss rate of the first link corresponding to a number of packets lost on the first link;
determining, by the first device, a packet acceptance rate of the second link based on a number of duplicate packets accepted for lost packets on the first link; and
determining, by the first device, an effective packet loss rate of the first link based on a difference between the first packet loss rate and the packet acceptance rate;
and the metric of the network state of the first link is the effective packet loss rate of the first link.
제1항에 있어서,
상기 제1 디바이스에 의해, 상기 제1 링크 상에서 지연된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 지연 레이트를 결정하는 단계;
상기 제1 디바이스에 의해, 상기 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하는 단계; 및
상기 제1 디바이스에 의해, 상기 제1 패킷 지연 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 지연 레이트를 결정하는 단계를 더 포함하고,
상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 지연 레이트인, 방법.
According to claim 1,
determining, by the first device, a first packet delay rate of the first link corresponding to a number of packets delayed on the first link;
determining, by the first device, a packet acceptance rate of the second link based on a number of duplicate packets accepted for delayed packets on the first link; and
determining, by the first device, an effective packet delay rate of the first link based on a difference between the first packet delay rate and the packet acceptance rate;
and the metric of the network state of the first link is the effective packet delay rate of the first link.
제1항에 있어서,
상기 제1 디바이스에 의해, 상기 네트워크 상태의 상기 메트릭을 업데이트하기 위해 상기 제1 링크의 상기 네트워크 상태를 모니터링하는 단계;
상기 제1 디바이스에 의해, 상기 제2 링크 상에서 상기 복제 패킷들을 송신하는 것에 응답하여, 상기 제1 링크의 상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는지 결정하는 단계; 및
상기 제1 디바이스에 의해, 상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시키는 단계를 더 포함하는, 방법.
According to claim 1,
monitoring, by the first device, the network status of the first link to update the metric of the network status;
determining, by the first device, whether the updated metric of the network status of the first link is within the threshold in response to transmitting the duplicate packets on the second link; and
increasing, by the first device, a packet replication rate in response to determining, by the first device, that the updated metric of the network condition is within the threshold.
제1항에 있어서,
상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 현재 메트릭이 상기 임계값 내에 있는지 결정하는 단계;
상기 제1 디바이스에 의해, 상기 제2 링크의 대역폭 이용 메트릭이 상기 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정하는 단계;
상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 상기 현재 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시키는 단계; 및
상기 제1 디바이스에 의해, 상기 제2 링크의 상기 대역폭 이용 메트릭이 상기 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 상기 제1 링크 상의 상기 복제 패킷들의 일부를 송신하는 단계를 더 포함하는, 방법.
According to claim 1,
determining, by the first device, whether a current metric of the network state of the first link is within the threshold;
determining, by the first device, whether a bandwidth usage metric of the second link is within a predetermined maximum bandwidth usage value assigned to the second link;
In response, by the first device, determining that the current metric of the network state of the first link is within the threshold, a packet replication rate to increase the number of replicated packets generated per unit time. increasing; and
in response to determining, by the first device, that the bandwidth usage metric of the second link is within the predetermined maximum bandwidth usage value, transmitting, by the first device, some of the duplicate packets on the first link. How to.
네트워크 상태에 기초하여 복제 데이터 패킷들을 송신하기 위한 시스템으로서,
제2 디바이스와의 제1 링크를 확립하고 상기 제2 디바이스와의 제2 링크를 확립하도록 구성된 제1 디바이스를 포함하고, 상기 제1 디바이스는,
상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 상기 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있음을 결정하고 - 상기 제1 링크의 네트워크 상태의 상기 메트릭은 상기 제1 링크의 패킷 지연 레이트 또는 상기 제1 링크의 패킷 손실 레이트임 - ;
상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 임계값 내에 있다는 결정에 응답하여, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 제2 링크를 통해, 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하고 - 상기 복제 패킷들은 상기 제1 링크의 패킷 손실 레이트 또는 지연 레이트, 및 상기 제2 링크의 타겟 유효 패킷 수용 레이트에 기초하여 생성됨 - ;
상기 제1 링크 상에서 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 상기 패킷들을 송신하고; 그리고
상기 제2 링크 상에서 상기 복제 패킷들을 송신하도록 구성되는, 시스템.
A system for transmitting duplicate data packets based on network conditions, comprising:
A first device configured to establish a first link with a second device and establish a second link with the second device, the first device comprising:
determine that a metric of a network state of the first link established between the first device and the second device is within a threshold, wherein the metric of a network state of the first link is a packet delay rate of the first link or a packet loss rate of the first link;
in response to determining that the metric of the network state of the first link is within the threshold, from the first device to the second device via a second link established between the first device and the second device generate duplicate packets of packets to be transmitted to , the duplicate packets being generated based on a packet loss rate or delay rate of the first link and a target effective packet acceptance rate of the second link;
transmit the packets to be transmitted from the first device to the second device on the first link; and
and transmit the duplicate packets on the second link.
삭제delete 제11항에 있어서, 상기 임계값은 제1 임계값이고, 상기 제1 디바이스는,
상기 제1 링크의 상기 네트워크 상태를 모니터링하고;
상기 네트워크 상태의 상기 메트릭이 제2 임계값 내에 있는지 결정하고;
상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 상기 제2 링크 상에서 송신되는 레이트에 대응하는 패킷 복제 레이트를 수정하도록 추가로 구성되는, 시스템.
The method of claim 11 , wherein the threshold is a first threshold, and the first device comprises:
monitor the network status of the first link;
determine whether the metric of the network condition is within a second threshold;
and in response to determining that the metric of the network condition of the first link is within the second threshold, modify a packet replication rate corresponding to a rate at which duplicate packets are generated and transmitted on the second link. constituted, system.
제11항에 있어서, 상기 제1 디바이스는,
상기 제2 링크의 대역폭을 결정하고;
상기 결정된 상기 제2 링크의 대역폭 및 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭에 기초하여 패킷 복제 레이트를 결정하도록 추가로 구성되고,
상기 제1 링크를 통해 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하기 위해, 상기 제1 디바이스는 상기 패킷 복제 레이트에 기초하여 상기 복제 패킷들을 생성하도록 구성되는, 시스템.
12. The method of claim 11, wherein the first device,
determine a bandwidth of the second link;
further configured to determine a packet replication rate based on the determined metric of the determined bandwidth of the second link and the network state of the first link,
and the first device is configured to generate the duplicate packets based on the packet copy rate to generate duplicate packets of packets to be transmitted from the first device to the second device over the first link.
제11항에 있어서, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭을 결정하기 위해, 상기 제1 디바이스는 상기 제1 링크의 패킷 손실 레이트 또는 상기 제1 링크의 패킷 지연 레이트 중 하나를 결정하도록 추가로 구성되는, 시스템.12. The method of claim 11, wherein to determine the metric of the network state of the first link established between the first device and the second device, the first device is configured to: and determine one of a packet delay rate of the first link. 제11항에 있어서, 상기 제1 링크는 인터넷 광대역 링크이고 상기 제2 링크는 멀티프로토콜 라벨 스위칭 링크이고 상기 제1 디바이스 및 상기 제2 디바이스는 가상 광역 네트워크 디바이스인, 시스템.The system of claim 11 , wherein the first link is an Internet broadband link and the second link is a multiprotocol label switched link and the first device and the second device are virtual wide area network devices. 제11항에 있어서, 상기 제1 디바이스는,
상기 제1 링크 상에서 손실된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 손실 레이트를 결정하고;
상기 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하고; 그리고
상기 제1 패킷 손실 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 손실 레이트를 결정하도록 추가로 구성되고,
상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 손실 레이트인, 시스템.
12. The method of claim 11, wherein the first device,
determine a first packet loss rate of the first link corresponding to a number of packets lost on the first link;
determine a packet acceptance rate of the second link based on a number of duplicate packets accepted for lost packets on the first link; and
and determine an effective packet loss rate of the first link based on a difference between the first packet loss rate and the packet acceptance rate;
and the metric of the network state of the first link is the effective packet loss rate of the first link.
제11항에 있어서, 상기 제1 디바이스는,
상기 제1 링크 상에서 지연된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 지연 레이트를 결정하고;
상기 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하고; 그리고
상기 제1 패킷 지연 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 지연 레이트를 결정하도록 추가로 구성되고,
상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 지연 레이트인, 시스템.
12. The method of claim 11, wherein the first device,
determine a first packet delay rate of the first link corresponding to a number of packets delayed on the first link;
determine a packet acceptance rate of the second link based on a number of duplicate packets accepted for delayed packets on the first link; and
and determine an effective packet delay rate of the first link based on a difference between the first packet delay rate and the packet acceptance rate;
and the metric of the network state of the first link is the effective packet delay rate of the first link.
제11항에 있어서, 상기 제1 디바이스는,
상기 네트워크 상태의 상기 메트릭을 업데이트하기 위해 상기 제1 링크의 상기 네트워크 상태를 모니터링하고;
상기 제2 링크 상에서 상기 복제 패킷들을 송신하는 것에 응답하여, 상기 제1 링크의 상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는지 결정하고; 그리고
상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시키도록 추가로 구성되는, 시스템.
12. The method of claim 11, wherein the first device,
monitor the network status of the first link to update the metric of the network status;
in response to transmitting the duplicate packets on the second link, determine whether the updated metric of the network status of the first link is within the threshold; and
and increase a packet replication rate in response to determining that the updated metric of the network condition is within the threshold.
제11항에 있어서, 상기 제1 디바이스는,
상기 제1 링크의 상기 네트워크 상태의 현재 메트릭이 상기 임계값 내에 있는지 결정하고;
상기 제2 링크의 대역폭 이용 메트릭이 상기 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정하고;
상기 제1 링크의 상기 네트워크 상태의 상기 현재 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시키고; 그리고
상기 제2 링크의 상기 대역폭 이용 메트릭이 상기 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 상기 제1 링크 상의 상기 복제 패킷들의 일부를 송신하도록 추가로 구성되는, 시스템.
12. The method of claim 11, wherein the first device,
determine whether a current metric of the network state of the first link is within the threshold;
determine whether a bandwidth usage metric of the second link is within a predetermined maximum bandwidth usage value assigned to the second link;
in response to determining that the current metric of the network condition of the first link is within the threshold, increase a packet replication rate to increase the number of replicated packets generated per unit time; and
and in response to determining that the bandwidth usage metric of the second link is within the predetermined maximum bandwidth usage value, transmit some of the duplicate packets on the first link.
KR1020197030214A 2017-03-20 2018-03-16 Automatic Tuning of Hybrid WAN Links by Adaptive Replication of Packets on Alternate Links KR102304416B1 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/463,635 2017-03-20
US15/463,635 US10367712B2 (en) 2017-03-20 2017-03-20 Auto tuning of hybrid wan links by adaptive duplication of packets on alternate links
PCT/US2018/023013 WO2018175263A1 (en) 2017-03-20 2018-03-16 Auto tuning of hybrid wan links by adaptive duplication of packets on alternate links

Publications (2)

Publication Number Publication Date
KR20190126143A KR20190126143A (en) 2019-11-08
KR102304416B1 true KR102304416B1 (en) 2021-09-23

Family

ID=61874044

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197030214A KR102304416B1 (en) 2017-03-20 2018-03-16 Automatic Tuning of Hybrid WAN Links by Adaptive Replication of Packets on Alternate Links

Country Status (6)

Country Link
US (2) US10367712B2 (en)
EP (1) EP3603023B1 (en)
JP (1) JP6953547B2 (en)
KR (1) KR102304416B1 (en)
CN (1) CN110679132B (en)
WO (1) WO2018175263A1 (en)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10454714B2 (en) 2013-07-10 2019-10-22 Nicira, Inc. Method and system of overlay flow control
US10135789B2 (en) 2015-04-13 2018-11-20 Nicira, Inc. Method and system of establishing a virtual private network in a cloud service for branch networking
US10405367B2 (en) * 2016-02-23 2019-09-03 Telefonaktiebolaget Lm Ericsson (Publ) Methods used in user equipment and associated UES
US11706127B2 (en) 2017-01-31 2023-07-18 Vmware, Inc. High performance software-defined core network
US10992568B2 (en) 2017-01-31 2021-04-27 Vmware, Inc. High performance software-defined core network
CA3061180A1 (en) * 2017-05-15 2018-11-22 MIXHalo Corp. Systems and methods for providing real-time audio and data
CN109245870B (en) * 2017-06-16 2021-12-28 华为技术有限公司 Method for processing radio link failure, terminal equipment and base station
US10999100B2 (en) 2017-10-02 2021-05-04 Vmware, Inc. Identifying multiple nodes in a virtual network defined over a set of public clouds to connect to an external SAAS provider
US11005684B2 (en) 2017-10-02 2021-05-11 Vmware, Inc. Creating virtual networks spanning multiple public clouds
US11115480B2 (en) 2017-10-02 2021-09-07 Vmware, Inc. Layer four optimization for a virtual network defined over public cloud
US11223514B2 (en) 2017-11-09 2022-01-11 Nicira, Inc. Method and system of a dynamic high-availability mode based on current wide area network connectivity
US10904135B2 (en) * 2018-07-13 2021-01-26 Nokia Technologies Oy Method and apparatus for increasing reliability of packet delivery by dynamic packet cloning and route selection
US10771405B2 (en) 2018-10-26 2020-09-08 Cisco Technology, Inc. Switching and load balancing techniques in a communication network
US10917323B2 (en) * 2018-10-31 2021-02-09 Nutanix, Inc. System and method for managing a remote office branch office location in a virtualized environment
US10749787B2 (en) 2019-01-03 2020-08-18 Citrix Systems, Inc. Method for optimal path selection for data traffic undergoing high processing or queuing delay
US11743174B2 (en) * 2019-01-29 2023-08-29 Cisco Technology, Inc. Supporting asynchronous packet operations in a deterministic network
CN109587052B (en) * 2019-01-30 2022-03-15 展讯通信(上海)有限公司 Multilink data transmission method and device
US11805446B2 (en) * 2019-03-25 2023-10-31 Lg Electronics Inc. Conditional supplementary link activation and transmission
US20220263749A1 (en) * 2019-06-25 2022-08-18 Nippon Telegraph And Telephone Corporation Communication apparatus and communication method
US11310170B2 (en) 2019-08-27 2022-04-19 Vmware, Inc. Configuring edge nodes outside of public clouds to use routes defined through the public clouds
US20210092062A1 (en) * 2019-09-20 2021-03-25 Citrix Systems, Inc. Quality of experience (qoe) enhancement device and related techniques
US11044190B2 (en) 2019-10-28 2021-06-22 Vmware, Inc. Managing forwarding elements at edge nodes connected to a virtual network
US11356851B2 (en) 2019-12-03 2022-06-07 Harris Global Communications, Inc. Communications system having multiple carriers with selectively transmitted real information and fake information and associated methods
US11489783B2 (en) 2019-12-12 2022-11-01 Vmware, Inc. Performing deep packet inspection in a software defined wide area network
US11606712B2 (en) 2020-01-24 2023-03-14 Vmware, Inc. Dynamically assigning service classes for a QOS aware network link
US11159978B2 (en) * 2020-01-28 2021-10-26 Dell Products, L.P. Adaptive multi-link control
CN111642022B (en) * 2020-06-01 2022-07-15 重庆邮电大学 Industrial wireless network deterministic scheduling method supporting data packet aggregation
US11709710B2 (en) 2020-07-30 2023-07-25 Vmware, Inc. Memory allocator for I/O operations
KR102648570B1 (en) 2020-11-03 2024-03-18 한국전자통신연구원 Method and apparatus for controlling transmission for lossless packet forwarding
CN112383472A (en) * 2020-11-13 2021-02-19 Oppo广东移动通信有限公司 Network transmission method, device, storage medium and electronic equipment
US11662934B2 (en) 2020-12-15 2023-05-30 International Business Machines Corporation Migration of a logical partition between mutually non-coherent host data processing systems
US11929903B2 (en) 2020-12-29 2024-03-12 VMware LLC Emulating packet flows to assess network links for SD-WAN
US11792127B2 (en) * 2021-01-18 2023-10-17 Vmware, Inc. Network-aware load balancing
US11979325B2 (en) 2021-01-28 2024-05-07 VMware LLC Dynamic SD-WAN hub cluster scaling with machine learning
US11509571B1 (en) 2021-05-03 2022-11-22 Vmware, Inc. Cost-based routing mesh for facilitating routing through an SD-WAN
US12009987B2 (en) 2021-05-03 2024-06-11 VMware LLC Methods to support dynamic transit paths through hub clustering across branches in SD-WAN
US11729065B2 (en) 2021-05-06 2023-08-15 Vmware, Inc. Methods for application defined virtual network service among multiple transport in SD-WAN
US12015536B2 (en) 2021-06-18 2024-06-18 VMware LLC Method and apparatus for deploying tenant deployable elements across public clouds based on harvested performance metrics of types of resource elements in the public clouds
US20230100301A1 (en) * 2021-09-30 2023-03-30 Adaptiv Networks Inc. Efficient fail over to backup link
US11943146B2 (en) 2021-10-01 2024-03-26 VMware LLC Traffic prioritization in SD-WAN
KR102522585B1 (en) * 2022-01-21 2023-04-17 주식회사 넥스트앤콤 System for synchronizing data and method thereof
US11909815B2 (en) 2022-06-06 2024-02-20 VMware LLC Routing based on geolocation costs

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040105463A1 (en) 2002-12-03 2004-06-03 Gene Cheung Method for enhancing transmission quality of streaming media
US20060068715A1 (en) 2004-09-30 2006-03-30 Hundal Sukhdeep S System and method for asymmetric enhanced mode operation in a digital communication system
US20080311855A1 (en) 2007-05-04 2008-12-18 Toshiba Research America, Inc. Intelligent connectivity framework for the simultaneous use of multiple interfaces
US20110142034A1 (en) * 2009-12-15 2011-06-16 Hong Kong Applied Science And Tehnology Research Institute Co. Ltd. Control of bit-rate and packet duplication in a real-time media stream
JP2013207431A (en) * 2012-03-27 2013-10-07 Jvc Kenwood Corp Transmission terminal device, data transmission and reception system, data transmission method, and program
JP2014530531A (en) 2011-09-19 2014-11-17 アルカテル−ルーセント System and method for selective protection switching
US20160127215A1 (en) 2014-11-04 2016-05-05 Imagination Technologies Limited Packet Loss and Bandwidth Coordination

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6615251B1 (en) * 1995-12-11 2003-09-02 John R. Klug Method for providing node targeted content in an addressable network
US7046636B1 (en) 2001-11-26 2006-05-16 Cisco Technology, Inc. System and method for adaptively improving voice quality throughout a communication session
CN101237314A (en) * 2008-01-16 2008-08-06 杭州华三通信技术有限公司 A method and access device for guaranteeing duplication service transmission
JP2011087091A (en) * 2009-10-14 2011-04-28 Sony Corp Transmission device and operation mode control method of the same
US9178806B2 (en) * 2012-07-31 2015-11-03 Alcatel Lucent High-speed content routing
US9444751B1 (en) * 2012-08-03 2016-09-13 University Of Southern California Backpressure with adaptive redundancy
US9320050B2 (en) * 2013-06-28 2016-04-19 Apple Inc. Systems and methods to enhance radio link performance in a multi-carrier environment
EP3650262A1 (en) * 2014-04-04 2020-05-13 Superpedestrian, Inc. Systems, methods, and devices for the operation of electrically motorized vehicles
US9717015B2 (en) * 2014-07-03 2017-07-25 Qualcomm Incorporated Rate control for wireless communication
US10728791B2 (en) * 2014-10-27 2020-07-28 General Electric Company Wireless interface virtualization

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040105463A1 (en) 2002-12-03 2004-06-03 Gene Cheung Method for enhancing transmission quality of streaming media
US20060068715A1 (en) 2004-09-30 2006-03-30 Hundal Sukhdeep S System and method for asymmetric enhanced mode operation in a digital communication system
US20080311855A1 (en) 2007-05-04 2008-12-18 Toshiba Research America, Inc. Intelligent connectivity framework for the simultaneous use of multiple interfaces
US20110142034A1 (en) * 2009-12-15 2011-06-16 Hong Kong Applied Science And Tehnology Research Institute Co. Ltd. Control of bit-rate and packet duplication in a real-time media stream
JP2014530531A (en) 2011-09-19 2014-11-17 アルカテル−ルーセント System and method for selective protection switching
US20140369182A1 (en) * 2011-09-19 2014-12-18 Giuseppe De Blasio System and method for selective protection switching
JP2013207431A (en) * 2012-03-27 2013-10-07 Jvc Kenwood Corp Transmission terminal device, data transmission and reception system, data transmission method, and program
US20160127215A1 (en) 2014-11-04 2016-05-05 Imagination Technologies Limited Packet Loss and Bandwidth Coordination

Also Published As

Publication number Publication date
WO2018175263A1 (en) 2018-09-27
JP2020515149A (en) 2020-05-21
US10367712B2 (en) 2019-07-30
KR20190126143A (en) 2019-11-08
EP3603023B1 (en) 2023-03-15
CN110679132A (en) 2020-01-10
JP6953547B2 (en) 2021-10-27
US20190342201A1 (en) 2019-11-07
US11075831B2 (en) 2021-07-27
US20180270139A1 (en) 2018-09-20
EP3603023A1 (en) 2020-02-05
CN110679132B (en) 2022-05-17

Similar Documents

Publication Publication Date Title
KR102304416B1 (en) Automatic Tuning of Hybrid WAN Links by Adaptive Replication of Packets on Alternate Links
US11394682B2 (en) Method for DNS response reordering based on path quality and connection priority for better QoS
US10686707B2 (en) Method to remap high priority connection with large congestion window to high latency link to achieve better performance
AU2017258734B2 (en) System and method for service chain load balancing
US9497281B2 (en) Systems and methods to cache packet steering decisions for a cluster of load balancers
US9619542B2 (en) Systems and methods for application-state distributed replication table hunting
US10333846B2 (en) Systems and methods for routing network packets between multi-core intermediaries
US8971323B2 (en) Systems and methods for dynamic routing in a cluster
US9497106B2 (en) Systems and methods for synchronizing MSS and PMTU in Ncore and cluster systems
US8972602B2 (en) Systems and methods for using ECMP routes for traffic distribution
US9866475B2 (en) Systems and methods for forwarding traffic in a cluster network
US8891364B2 (en) Systems and methods for distributing traffic across cluster nodes
US9652514B2 (en) Systems and methods for redirect handling
US20170126345A1 (en) Method for packet scheduling using multiple packet schedulers
US20130336337A1 (en) Systems and methods for sharing l2 information & mac based forwarding
US10021018B2 (en) Systems and methods for associating multiple transport layer hops between clients and servers
EP3183867B1 (en) Systems and methods for providing fine grained control over mss values of transport layer connections

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant