WO2010083248A2 - Deltacasting - Google Patents

Deltacasting Download PDF

Info

Publication number
WO2010083248A2
WO2010083248A2 PCT/US2010/020940 US2010020940W WO2010083248A2 WO 2010083248 A2 WO2010083248 A2 WO 2010083248A2 US 2010020940 W US2010020940 W US 2010020940W WO 2010083248 A2 WO2010083248 A2 WO 2010083248A2
Authority
WO
WIPO (PCT)
Prior art keywords
client
traffic
stream
content
server
Prior art date
Legal status (The legal status 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 status listed.)
Ceased
Application number
PCT/US2010/020940
Other languages
French (fr)
Other versions
WO2010083248A3 (en
Inventor
William B. Sebastian
Peter Lepeska
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Viasat Inc
Original Assignee
Viasat Inc
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 Viasat Inc filed Critical Viasat Inc
Publication of WO2010083248A2 publication Critical patent/WO2010083248A2/en
Publication of WO2010083248A3 publication Critical patent/WO2010083248A3/en
Anticipated expiration legal-status Critical
Ceased legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1859Arrangements for providing special services to substations for broadcast or conference, e.g. multicast adapted to provide push services, e.g. data channels
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04BTRANSMISSION
    • H04B7/00Radio transmission systems, i.e. using radiation field
    • H04B7/14Relay systems
    • H04B7/15Active relay systems
    • H04B7/185Space-based or airborne stations; Stations for satellite systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1863Arrangements for providing special services to substations for broadcast or conference, e.g. multicast comprising mechanisms for improved reliability, e.g. status reports
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1881Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with schedule organisation, e.g. priority, sequence management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1886Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with traffic restrictions for efficiency improvement, e.g. involving subnets or subdomains
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/70Admission control; Resource allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/61Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio
    • H04L65/611Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio for multicast or broadcast
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • 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/04Protocols for data compression, e.g. ROHC
    • 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/22Parsing or analysis of headers

Definitions

  • This disclosure relates in general to communications and, but not by way of limitation, to multicast optimization over links of a communications system.
  • groups of users share some or all of the forward link.
  • users share spot beams for communicating with a service provider (e.g., via a base station and/or gateway).
  • Communication services provided to the users over the shared forward link may be affected by a number of factors, including bandwidth and other link conditions. For example, because all users sharing the forward link also share the link's bandwidth, any unnecessary redundancies in communications may cause sub-optimal utilization of the forward link.
  • a communications system e.g., a satellite communications system
  • deltacasting techniques referred to herein as "deltacasting.”
  • Some embodiments operate in a client-server context, in which the server-side of the communication link intercepts requests and responses as an optimizer (e.g., a proxy or in-line optimizer between a client web browser and an Internet content provider).
  • the optimizer uses various techniques (e.g., dictionary coding) to create fingerprints of content traversing the links of the communications system. These content fingerprints are used to identify and exploit multicasting and/or other opportunities for increased utilization of the communication links.
  • FIG. IA shows a simplified block diagram of one embodiment of a communications system for use with various embodiments
  • FIG. IB shows a simplified block diagram of another embodiment of a communications system having multiple optimizer tunnels for use with various embodiments
  • FIG. 2 shows a block diagram of an embodiment of a satellite communications system having a server system in communication with multiple user systems via a satellite over multiple spot beams, according to various embodiments;
  • FIG. 3 shows a simplified block diagram illustrating an embodiment of a server system coupled between a network and an antenna, according to various embodiments
  • FIG. 4 shows a simplified block diagram of an embodiment of a user system, including an embodiment of a user terminal coupled between a user antenna and a CPE, according to various embodiments;
  • FIG. 5 shows a block diagram of an embodiment of a communications system, illustrating client-server interactivity through a client optimizer and a server optimizer, according to various embodiments;
  • FIG. 6 shows a flow diagram of an illustrative method for using deltacasting to handle traffic over a communications system, according to various embodiments
  • FIG. 7 is a flow diagram of an illustrative method for using deltacasting to handle live content traffic over a communications system, according to various embodiments
  • FIG. 8 shows a flow diagram of a stream sharing mode method, according to various embodiments.
  • FIG. 9 shows an illustrative flow diagram for handling multiple requests for the same live content, according to various embodiments.
  • FIG. 10 is a flow diagram of an illustrative method for using deltacasting to handle overlapping content requests over a communications system, according to various embodiments
  • FIG. 11 shows a flow diagram of a overlapping request mode method, according to various embodiments.
  • FIG. 12A shows a first portion of an illustrative flow diagram for handling multiple overlapping requests for the same content, according to various embodiments
  • FIG. 12B shows a second portion of an illustrative flow diagram for handling overlapping requests for the same content, according to various embodiments
  • FIG. 13 shows an illustrative flow diagram for handling overlapping requests for the same streaming movie, according to various embodiments
  • FIG. 14 is a flow diagram of an illustrative method for using deltacasting to handle traffic over a communications system, according to various embodiments
  • FIG. 15 shows a flow diagram of a method for developing an awareness of user-level correlations from byte-level data, according to various embodiments.
  • FIG. 16 shows a flow diagram of a method for byte-level user correlation, according to various embodiments.
  • similar components and/or features may have the same reference label. Further, various components of the same type may be distinguished by following the reference label by a dash and a second label that distinguishes among the similar components. If only the first reference label is used in the specification, the description is applicable to any one of the similar components having the same first reference label irrespective of the second reference label.
  • FIG. IA a simplified block diagram is shown of one embodiment of a communications system 100a for use with various embodiments.
  • the communications system 100a facilitates communications between a user system 110 and a content server 150 via a client optimizer 120, a server optimizer 130, and a network 140.
  • the client optimizer 120 and the server optimizer 130 are configured to effectively provide an optimizer tunnel 105 between the user system 110 and the content server 150, including providing certain communications functionality.
  • Embodiments of the optimizer can be implemented in a number of ways without departing from the scope of the invention.
  • the optimizer is implemented as a proxy, such that the server optimizer 130 is a proxy server, the client optimizer 120 is a proxy client, and the optimizer tunnel 105 is a proxy tunnel.
  • a transparent intercept proxy can be used to intercept traffic in a way that is substantially transparent to users at the client-side of the proxy tunnel.
  • the optimizer is implemented as an in-line optimizer.
  • the client optimizer 120 is implemented within a user terminal and the server optimizer 130 is implemented within a provider terminal (e.g., a satellite base station or gateway, a cable head-end, a digital subscriber line access multiplexer (DSLAM), etc.).
  • a provider terminal e.g., a satellite base station or gateway, a cable head-end, a digital subscriber line access multiplexer (DSLAM), etc.
  • DSLAM digital subscriber line access multiplexer
  • embodiments of the server optimizer 130 are implemented in the Internet cloud (e.g., on commercial network leased server space).
  • Embodiments of the client optimizer 120 are implemented within a user's personal computer, within a user's modem, in a physically separate component at the customer premises, etc.
  • references herein to "intercepting" data should be construed broadly to include any useful slowing, sampling, re-routing, and/or other techniques that allow processing of the data as required according to various embodiments.
  • traffic passes through the server optimizer 130, where it is "intercepted" by being buffered for analysis and processing.
  • the buffering may be used to slow and accumulate traffic for fingerprint generation and analysis, as described more fully below.
  • an optimizer component e.g., the server optimizer 130
  • to intercept the traffic may actually be implemented by having a different component intercept the traffic, from which the optimizer component may receive the intercepted traffic for processing.
  • Embodiments of the user system 110 may include any component or components for providing a user with network interactivity.
  • the user system 110 may include any type of computational device, network interface device, communications device, or other device for communicating data to and from the user.
  • the communications system 100a facilitates communications between multiple user systems 110 and a variety of content servers 150 over one or more networks 140 (only one of each is shown in FIG. IA for the sake of clarity).
  • the content servers 150 are in communication with the server optimizer 130 via one or more networks 140.
  • the network 140 may be any type of network 140 and can include, for example, the Internet, an Internet protocol (“IP”) network, an intranet, a wide-area network (“WAN”), a local-area network (“LAN”), a virtual private network (“VPN”), the Public Switched Telephone Network (“PSTN”), and/or any other type of network 140 supporting data communication between devices described herein, in different embodiments.
  • IP Internet protocol
  • WAN wide-area network
  • LAN local-area network
  • VPN virtual private network
  • PSTN Public Switched Telephone Network
  • the network 140 may also include both wired and wireless connections, including optical links.
  • content servers is intended broadly to include any source of content in which the users may be interested.
  • a content server 150 may provide website content, television content, file sharing, multimedia serving, voice-over-Internet-protocol (VoIP) handling, and/or any other useful content.
  • the content servers 150 are in direct communication with the server optimizer 130 (e.g., not through the network 140).
  • the server optimizer 130 may be located in a gateway that includes a content or application server.
  • discussions of embodiments herein with respect to communications with content servers 150 over the network 140 are intended only to be illustrative, and should not be construed as limiting.
  • the server optimizer 130 intercepts the communications for one or more purposes.
  • the server optimizer 130 may be part of a server system 220 that includes components for server-side communications (e.g., base stations, gateways, satellite modem termination systems (SMTSs), digital subscriber line access multiplexers (DSLAMs), etc., as described below with reference to FIG. 2).
  • the server optimizer 130 may act as a transparent and/or intercepting proxy.
  • the client optimizer 120 is in communication with the server optimizer 130 over a client-server communication link 125
  • the server optimizer 130 is in communication with the content server 150 over a content network link 135.
  • the server optimizer 130 may act as a transparent man-in-the-middle to intercept the data as it passes between the client-server communication link 125 and the content network link 135. Some purposes of the interception may include filtering, caching, parsing, and/or otherwise processing the requests and responses. For example, when the user system 110 requests a web object from a content server 150, the server optimizer 130 may intercept and parse the request to implement prefetching and/or other types of functionality.
  • embodiments of the server optimizer 130 use various techniques (e.g., dictionary coding) to identify redundancies between incoming data and data previously sent across the links of the communication system 100a (e.g., the client-server communication link 125 and the content network link 135).
  • various techniques e.g. delta coding, wide dictionary coding, etc.
  • delta coding may allow identification of redundancies in byte sequences traversing the links even when a large history is maintained.
  • These techniques may be used to identify and exploit opportunities for multicasting to increase utilization of the communications links. Use of these techniques to identify and exploit these and other types of multicast opportunities is referred to herein as "deltacasting.”
  • delta coding “dictionary coding,” “dictionary,” “deltacasting,” and other similar terms and phrases are intended to be broadly construed to include use of any type of dictionary-like structure for optimization.
  • Embodiments of the dictionary include chunks of content data (e.g., implemented as delta dictionaries, wide dictionaries, byte caches, and/or other types of dictionary structures). For example, when content data is stored in the dictionary, some or all of the blocks of data defining the content are stored in the dictionary in an unordered, but indexed way. As such, content may not be directly accessible from the dictionary; rather, the set of indexes may be needed to recreate the content from the set of unordered blocks.
  • data may be communicated over a communications system 100a using one or more protocols that define, among other things, the format for the datagrams (e.g., packets, frames, etc.). Each datagram may typically include a header portion and a content portion. As used herein, the term "header" is intended broadly to include any portions of the datagram other than those used to communicate the actual content (e.g., file data), and is not intended to be limited to any particular datagram format.
  • an Internet protocol (IP) packet may include a header at the beginning of each packet, while other types of datagrams may provide header-types of information in other ways (e.g., using preambles, post-ambles, mid- ambles, spread-ambles, sub-frames, separate signaling or control data, etc.).
  • These header portions may include information, such as source address, destination address, priority, packet length, coding information, modulation information, etc.
  • similar categories of header-portion and content-portion information may be found within datagrams of other protocol formats (e.g., HTTP, FTP, etc.).
  • the header portion may include metadata or other information about the content portion that can be used to help characterize the content portion of the data.
  • this technique may be used by certain types of content delivery systems, like a video-on-demand (VOD) system.
  • VOD video-on-demand
  • a VOD system may include an application running at a VOD content server and/or at the end viewer's customer premises equipment (CPE) (e.g., on a set-top box) for parsing and translating proprietary metadata from packet headers of user requests.
  • CPE customer premises equipment
  • use of the metadata may provide relatively straightforward knowledge of the content being requested, using proprietary tags in this way may require having access to (e.g., and running an application on) the content server.
  • a parsed URL may look as follows:
  • the illustrative URL includes a string of characters generated as part of a proprietary application function, and may be decoded by the VOD server application to identify information, including the particular download requested, an identifier for the session, user or account data, shopping cart data, client playback capabilities, etc. As such, another request for the same VOD movie, even from the same content server, may have different URLs (e.g., different request headers).
  • a transparent intercept proxy like that of embodiments of the server optimizer 130, may not be able to determine this from the metadata alone.
  • Embodiments of the server optimizer 130 generate fingerprints (e.g., fingerprints, digests, signatures, hash functions, etc.) from the content portion of the data traversing the communication links.
  • the server optimizer 130 intercepts and analyzes the byte-level data of the content portion in a way that is substantially transparent to the user.
  • Embodiments of the fingerprints are generated so as to be useful in identifying redundancies between the incoming intercepted data and previously processed data. For example, hashing functions are applied to traffic, after being intercepted by the server optimizer 130, for use as identifiers (e.g., "weak" identifiers) that are at least strong enough to identify candidate matches with blocks stored in a dictionary.
  • Some embodiments of the fingerprints are generated so as to be useful further as strong identifiers for representing substantially identical matching blocks stored in a dictionary.
  • header data e.g., particularly proprietary metadata
  • determinations e.g., precisely what object file is being requested
  • proprietary data or limited content environments may allow certain assumptions to be made. For example, when someone requests a VOD movie, the server may know exactly what bytes are being requested (e.g., whatever bytes are associated with that particular movie file on the VOD server), how large the file is, that the viewer is likely to watch the movie sequentially, where the movie is stored, etc.
  • embodiments of the server optimizer 130 are relatively agnostic to the content being analyzed, which may provide certain functionality even where the server optimizer 130 has little or no access to proprietary metadata and/or other header information.
  • the server optimizer 130 generates fingerprints of data being received over the content network link 135 in response to various requests from different users on a shared spot beam of a satellite communications system (e.g., where the requests are fulfilled by the server optimizer 130 over the client-server link 125 of the communications system 100a).
  • the server optimizer 130 determines from the fingerprints that multiple users are requesting the same content at substantially the same time.
  • the server optimizer 130 creates a multicast service flow (e.g., on the client-server link 125) over which it multicasts the requested data to all the requesting users, thereby saving bandwidth relative to unicasting multiple copies of the content to the multiple users.
  • embodiments of the client-server communication link 125 can be implemented as various types of links have different and/or changing link characteristics, including, for example, differences in bandwidth, latency, cost per bit, etc.
  • link characteristics including, for example, differences in bandwidth, latency, cost per bit, etc.
  • the client-server communication link 125 includes at least one satellite link, other topologies and link types are possible.
  • FIG. IA shows only one optimizer tunnel 105 between one server system 220 and one user system 110, embodiments typically operate in the context of, and take advantage of, multiple optimizer tunnels 105.
  • FIG. IB shows a simplified block diagram of another embodiment of a communications system 100b having multiple optimizer tunnels 105 for use with various embodiments.
  • the communications system 100b facilitates communications between a server system 220 and multiple user systems 110, via a respective server optimizer 130 and multiple client optimizers 120.
  • the client optimizers 120 and the server optimizer 130 are configured to effectively provide tunnels 105 between the user systems 110 and content servers 150.
  • a client-server communication link 125 between the server optimizer 130 and the client optimizers 120 supports one or more unicast service flows 525 and one or more multicast service flows 515 for supporting unicast and multicast traffic, respectively.
  • the client-server communication link 125 includes a satellite communications link. It will be appreciated that satellites may effectively broadcast all their downstream traffic to all receivers that are tuned to a particular carrier, beam, etc. As such, unicasting or multicasting to one or more user systems 110 may, in fact, involve broadcasting the data over the satellite link and also broadcasting control data to direct receivers to either accept or ignore relevant portions of the broadcast data.
  • the client-server communication link 125 includes a cable communications link.
  • a cable company may run a cable line to a neighborhood aggregator, from which individual coaxial lines communicate last mile traffic to individual households.
  • Each individual coaxial cable may carry all the traffic for the entire neighborhood, even where some of that traffic is destined only for particular households.
  • bandwidth resources can be shared by multicasting traffic, where appropriate.
  • satellite and cable networks are only two illustrative embodiments of client-server communication links 125.
  • Embodiments of the client- server communication link 125 can include any type of communications link that has limited bandwidth resources, where the bandwidth resources can be at least partially shared through multicasting.
  • FIG. 2 shows a block diagram of an embodiment of a satellite communications system 200 having a server system 220 in communication with multiple user systems 110 via a satellite 205 over multiple spot beams 235, according to various embodiments.
  • the server system 220 may include any server components, including base stations 215, gateways 217, etc.
  • a base station 215 is sometimes referred to as a hub or ground station. In certain embodiments, as described below, the base station 215 has functionality that is the same or different from a gateway 217.
  • a gateway 217 provides an interface between the network 140 and the satellite 205 via a number of base stations 215.
  • Various embodiments provide different types of interfaces between the gateways 217 and base stations 215.
  • the gateways 217 and base stations 215 may be in communication over leased high-bandwidth lines (e.g., raw Ethernet), a virtual private large-area network service (VPLS), an Internet protocol virtual private network (IP VPN), or any other public or private, wired or wireless network.
  • VPLS virtual private large-area network service
  • IP VPN Internet protocol virtual private network
  • Embodiments of the server system 220 are in communication with one or more content servers 150 via one or more networks 140.
  • the gateway 217 is configured to implement relatively simple routing functions. For example, the gateway 217 may receive traffic from the network 140, determine which of the base stations 215 should receive the traffic, and route the traffic accordingly. In other embodiments, the gateway 217 performs relatively complex functions, including, for example, network security, accounting, content acceleration, trend analysis, signal processing and/or encoding, etc. In still other embodiments, the gateway 217 and the base stations 215 share some or all of the desired network functionality. For example, it may be desirable to perform certain functions in one location, perform other functions in a distributed manner, and perform still other functions in a redundant manner.
  • the gateway 217 may be configured to implement multi-directional communications functionality. For example, the gateway 217 may send data to and receive data from the base stations 215. Similarly, the gateway 217 may be configured to receive data and information directed to one or more user systems 110, and format the data and information for delivery to the respective destination device via the satellite 205; or receive signals from the satellite 205 (e.g., from one or more user systems 110) directed to a destination in the network 140, and process the received signals for transmission through the network 140.
  • the satellite 205 e.g., from one or more user systems 110
  • the satellite communications system 200 includes a number of gateways 217 distributed over a large geographic region.
  • Each gateway 217 is in communication with the network 140 via a high-speed connection (e.g., a dedicated high-bandwidth fiber link).
  • Each gateway 217 is also in communication with, and handles communications for, up to twenty base stations 215 (e.g., twenty feeder links).
  • Each of the twenty base stations 215 is configured to service up to four user links by communicating content for those user links to the satellite 205 using an antenna 210.
  • one or more of the satellite links are capable of communicating using one or more communication schemes.
  • the communication schemes may be the same or different for different links.
  • the communication schemes may include different types of coding and modulation combinations.
  • various satellite links may communicate using physical layer transmission modulation and coding techniques using adaptive coding and modulation schemes, etc.
  • the communication schemes may also use one or more different types of multiplexing schemes, including Multi- Frequency Time-Division Multiple Access ("MF-TDMA”), Time-Division Multiple Access (“TDMA”), Frequency Division Multiple Access (“FDMA”), Orthogonal Frequency Division Multiple Access (“OFDMA”), Code Division Multiple Access (“CDMA”), or any number of other schemes.
  • MF-TDMA Multi- Frequency Time-Division Multiple Access
  • TDMA Time-Division Multiple Access
  • FDMA Frequency Division Multiple Access
  • OFDMA Orthogonal Frequency Division Multiple Access
  • CDMA Code Division Multiple Access
  • Embodiments of the satellite 205 may be implemented as a geostationary satellite 205, a low earth orbit (“LEO") satellite 205, or aerial payloads not in orbit and held aloft by planes, blimps, weather balloons, etc. Other embodiments could have a number of satellites 205 instead of just one.
  • the satellite 205 is configured as a "bent pipe" satellite, wherein the satellite 205 may frequency convert the received carrier signals before retransmitting these signals to their destination, but otherwise perform little or no other processing on the contents of the signals.
  • a variety of physical layer transmission modulation and coding techniques may be used by the satellite 205 in accordance with certain embodiments, including those defined with the DVB-S2 standard. For other embodiments, a number of configurations are possible (e.g., using LEO satellites, mesh networks, star networks, etc.).
  • the satellite 205 may operate in a multi-beam mode, transmitting a number of spot beams 235, each directed at a different region of the earth.
  • Each spot beam 235 may be associated with one of the user links, and used to communicate between the satellite 205 and a large group (e.g., thousands) of user systems 110 (e.g., user terminals 230 within the user systems 110).
  • the signals transmitted from the satellite 205 may be received by one or more user systems 110, via a respective user antenna 225.
  • some or all of the user systems 110 include one or more user terminals 230 and one or more CPE devices 260.
  • User terminals 230 may include modems, satellite modems, routers, or any other useful components for handling the user-side communications.
  • Reference to "users” should be construed generally to include any user (e.g., subscriber, consumer, customer, etc.) of services provided over the satellite communications system 200 (e.g., by or through the server system 220).
  • some or all of the users (e.g., user systems 110) serviced by the spot beam 235 may be capable of receiving all the content traversing the spot beam 235 by virtue of the fact that the satellite communications system 200 employs wireless communications via various antennae (e.g., 210 and 225). However, some of the content may not be intended for receipt by certain customers. As such, the satellite communications system 200 may use various techniques to "direct" content to a user or group of users.
  • the content may be tagged (e.g., using packet header information according to a transmission protocol) with a certain destination identifier (e.g., an IP address), use different modcode points that can be reliably received only by certain user terminals 230, send control information to user systems 1 10 to direct the user systems 1 10 to ignore or accept certain communications, etc.
  • Each user system 110 may then be adapted to handle the received data accordingly. For example, content destined for a particular user system 110 may be passed on to its respective CPE 260, while content not destined for the user system 110 may be ignored.
  • the user system 110 stores information not destined for the associated CPE 260 for use if the information is later found to be useful in avoiding traffic over the satellite link, as described in more detail below.
  • each user system 110 implements a client optimizer 120 that is in communication with a server optimizer 130 located in the server system 220 (e.g., in the gateway 217).
  • the client optimizers 120 and server optimizer 130 may act to create a virtual tunnel between the user systems 110 and the content servers 150, as described with reference to FIG. IA.
  • a topology like the satellite communications system 200 shown in FIG. 2, vast amounts of traffic may traverse various portions of the satellite communications system 200 at any given time. As discussed above, at least some of the traffic traversing the network may be intercepted by the server optimizer 130 for further processing and for additional functionality.
  • the functionality of the server optimizer 130 may also be assisted and/or exploited by other components of the server system 220 and the user systems 110. Some of this and other functionality of components of an illustrative server system 220 and an illustrative user system 110 are described with reference to various types of functional blocks in FIGS. 3 and 4, respectively.
  • FIG. 3 shows a simplified block diagram 300 illustrating an embodiment of a server system 220 coupled between a network 140 and an antenna 210, according to various embodiments.
  • the server system 220 has a number of components, including a network interface module 310, a modem termination module 330, and a server-side transceiver module 360.
  • Components of the server system 220 may be implemented, in whole or in part, in hardware. Thus, they may include one or more Application Specific Integrated Circuits (ASICs) adapted to perform a subset of the applicable functions in hardware. Alternatively, the functions may be performed by one or more other processing units (or cores), on one or more integrated circuits (ICs).
  • ASICs Application Specific Integrated Circuits
  • Integrated circuits may be used (e.g., Structured/Platform ASICs, Field Programmable Gate Arrays (FPGAs), and other Semi-Custom ICs), which may be programmed.
  • FPGAs Field Programmable Gate Arrays
  • Semi-Custom ICs may be programmed.
  • Each may also be implemented, in whole or in part, with instructions embodied in a computer-readable medium, formatted to be executed by one or more general or application specific controllers.
  • Embodiments of the server system 220 receive data from the network 140 (e.g., the network 140 of FIG. IA), including data originating from one or more content servers 150 (e.g., or other types of servers, as discussed above) and destined for one or more users in a spot beam (e.g., at a user system 110 in a spot beam 235, as shown in FIG. 2).
  • the data is received at the network interface module 310, which includes one or more components for interfacing with the network 140.
  • the network interface module 310 includes a network switch and a router.
  • the network interface module 310 interfaces with other modules, including a third-party edge server 312 and/or a traffic shaper module 314.
  • the third-party edge server 312 may be adapted to mirror content (e.g., implementing transparent mirroring, like would be performed in a point of presence ("POP") of a content delivery network (“CDN”)) to the server system 220.
  • POP point of presence
  • CDN content delivery network
  • the third-party edge server 312 may facilitate contractual relationships between content providers and service providers to move content closer to users in a communications network (e.g., the satellite communications network 200 of FIG. 2).
  • the traffic shaper module 314 controls traffic from the network 140 through the server system 220, for example, to help optimize performance of the communications system (e.g., by reducing latency, increasing effective bandwidth, etc.). In one embodiment, the traffic shaper module 314 delays packets in a traffic stream to conform to a predetermined traffic profile.
  • Traffic is passed from the network interface module 310 to one or more processing modules.
  • the processing modules include a server-side accelerator module 350, a scheduler module 335, and support modules 346.
  • all traffic from the network interface module 310 is passed to the server-side accelerator module 350 for handling, as described more fully below.
  • some or all of the traffic from the server-side accelerator module 350 is passed to the support modules 346.
  • real-time types of data e.g., User Datagram Protocol (“UDP") data traffic, like Internet-protocol television (“IPTV”) programming
  • UDP User Datagram Protocol
  • IPTV Internet-protocol television
  • non-real-time types of data e.g., Transmission Control Protocol (“TCP") data traffic, like web video
  • UDP User Datagram Protocol
  • TCP Transmission Control Protocol
  • Embodiments of the server-side accelerator module 350 provide various types of application, WAN/LAN, and/or other acceleration functionality.
  • the server-side accelerator module 350 implements functionality of AcceleNet applications from Intelligent Compression Technologies, Inc. (“ICT”), a division of ViaSat, Inc.
  • ICT Intelligent Compression Technologies, Inc.
  • This functionality may be used to exploit information from application layers of the protocol stack (e.g., layers 4 - 7 of the IP stack) through use of software or firmware operating in the user system 110 (e.g., in the user terminal 230 and/or the CPE 260).
  • application layers of the protocol stack e.g., layers 4 - 7 of the IP stack
  • firmware operating in the user system 110 e.g., in the user terminal 230 and/or the CPE 260.
  • the server-side accelerator module 350 is adapted to provide high payload compression. This allows faster transfer of the data and enhances the effective capacity of the network.
  • the server-side accelerator module 350 can also implement protocol- specific methods to reduce the number of round trips needed to complete a transaction, such as by prefetching objects embedded in HTTP pages.
  • functionality of the server-side accelerator module 350 is closely integrated with the satellite link through other modules, including the support modules 346, the scheduler module 335, the modem termination module 330, etc., to reduce upload bandwidth requirements and/or to more efficiently schedule to the satellite link.
  • the link layer may be used to determine whether packets are successfully delivered, and those packets can be tied more closely with the content they supported through application layer information.
  • these and/or other functions of the server-side accelerator module 350 are provided by a server optimizer 130 resident on (e.g., or in communication with) the server-side accelerator module 350.
  • the server optimizer 130 is implemented with multiple servers. Each of the multiple servers may be configured to handle a portion of the traffic passing through the server-side accelerator module 350. It is worth noting that functionality of various embodiments described herein use data which, at times, may be processed across multiple servers. As such, one or more server management modules may be provided for processing (e.g., tracking, routing, partitioning, etc.) data across the multiple servers. For example, when one server within the server optimizer 130 receives a request from a user (e.g., from a user system 110 on a spot beam 235, as shown in FIG. 2), the server management module may process that request in the context of other requests received at other servers in the server optimizer 130.
  • a user e.g., from a user system 110 on a spot beam 235, as shown in FIG. 2
  • the server management module may process that request in the context of other requests received at other servers in the server optimizer 130.
  • coordination between servers is implemented in support of singular storage of data. For example, it may be desirable to avoid caching the same byte sequence twice in two servers that are in communication with each other (e.g., where both servers are part of a storage area network 322 ("SAN") in the server system 220).
  • servers are configured to communicate to facilitate the identification of deltacasting opportunities (e.g., use of deltacasting to handle live content requests, overlapping content requests, correlative anticipatory pre-positioning, etc.), as described more fully below.
  • server optimizer 130 is illustrated as part of the server system 220, this should not be construed as limiting the location or implementation of the server optimizer 130.
  • the server optimizer 130 is implemented by a server in communication with the server system 220 over the network 140.
  • a third party may lease server space that is accessible over the Internet or a private connection (e.g., a highspeed fiber connection).
  • the leased server space may be used for serving the server optimizer 130.
  • Data processed by the server-side accelerator module 350 may pass through the support modules 346 to the scheduler module 335.
  • the support modules 346 include one or more types of modules for supporting the functionality of the modem termination module 330, for example, including a multicaster module 340, a fair access policy (“FAP") module 342, and an adaptive coding and modulation (“ACM”) module 344.
  • FAP fair access policy
  • ACM adaptive coding and modulation
  • some or all of the support modules 346 include off-the-shelf types of components.
  • Embodiments of the multicaster module 340 provide various functions relating to multicasting of data over the links of the communications system. Certain embodiments of the multicaster module 340 use data generated by other processing modules (e.g., the server-side accelerator module 350) to prepare traffic for multicasting. For example, the multicaster module 340 may prepare datagrams as a multicast stream. Other embodiments of the multicaster module 340 perform more complex multicasting-related functionality.
  • the multicaster module 340 may contribute to determinations of whether data is unicast or multicast to one or more users (e.g., using information generated by the server-side accelerator module 350), what modcodes to use, whether data should or should not be sent as a function of data stored at destination user terminals 230, how to handle certain types of encryption, etc.
  • Embodiments of the accounting module 342 implement various accounting-related functions.
  • the accounting module 342 collects data from multiple components to determine how much network usage to attribute to a particular user. For example, the accounting module 342 may determine how to count upload or download traffic against a user's fair access policy (FAP).
  • FAP fair access policy
  • the accounting module 342 dynamically adjusts FAPs according to various network link and/or usage conditions. For example, the accounting module 342 may adjust FAPs to encourage network usage during lower traffic times.
  • the accounting module 342 affects the operation of other components of the modem termination module 330 as a function of certain FAP and/or other accounting conditions. For example, the accounting module 342 may direct the multicaster module 340 to multicast certain types of data or to prevent certain users from joining certain multicast streams as a function of FAP or other considerations.
  • Embodiments of the ACM module 344 implement various ACM functions.
  • the ACM module 344 may track link conditions for certain spot beams, users, etc., for use in dynamically adjusting modulation and/or coding schemes.
  • the ACM module 344 may help determine which users should be included in which customer groupings or multicast streams as a function of optimizing resources through modcode settings.
  • the ACM module 344 implements ACM-aware encoding of data adapted for progressive encoding.
  • MPEG-4 video data may be adapted for progressive encoding in layers (e.g., a base layer and enhancement layers).
  • the ACM module 344 may be configured to set an appropriate modcode separately for each layer to optimize video delivery.
  • the scheduler module 335 When traffic has been processed by the server-side accelerator module 350 and/or the support modules 346, the traffic is passed to the scheduler module 335.
  • Embodiments of the scheduler module 335 are configured to provide various functions relating to scheduling the links of the communications system handled by the server system 220. For example, the scheduler module 335 may manage link bandwidth by scheduling license grants within a spot beam.
  • functionality of the server system 220 involves communication and interaction with the SAN 322.
  • Embodiments of the SAN 322 include a shared storage module 320, which may include any useful type of memory store for various types of functionality of the server system 220.
  • the shared storage module 320 may include volatile or non-volatile storage, servers, files, queues, etc.
  • the SAN 322 further includes a captive edge server 325, which may be in communication with the shared storage module 320.
  • the captive edge server 325 provides functionality similar to that of the third-party edge server 312, including content mirroring.
  • the captive edge server 325 may facilitate different contractual relationships from those of the third- party edge server 312 (e.g., between the server system 220 provider and various content providers).
  • the captive edge server 325 and/or the third-party edge server 312 are in communication with server-side storage (e.g., within the SAN 322).
  • components of the server system 220 may provide many different types of functionality. For example, some embodiments oversee a variety of decoding, interleaving, decryption, and unscrambling techniques. Other embodiments manage functions applicable to the communication of content downstream through a satellite (e.g., the satellite 205 of FIG. 2) to one or more users (e.g., user systems 110 of FIG. 2). As described more fully below with reference to various embodiments, the server system 220 may handle different types of traffic in different ways.
  • some uses of the communications system involve contractual relationships and/or obligations with third-party content providers to interface with their edge servers (e.g., through the third-party edge server 312), while other uses involve locally "re-hosting" certain content (e.g., through the captive edge server 325).
  • some use cases handle real-time types of data (e.g., UDP data) differently from non-real-time types of data (e.g., TCP data). Many other uses are possible.
  • server-side transceiver module 360 some or all of these downstream communications functions are handled by the server-side transceiver module 360.
  • Embodiments of the server-side transceiver module 360 encode and/or modulate data, using one or more error correction techniques, adaptive encoding techniques, baseband encapsulation, frame creation, etc. (e.g., using various modcodes, lookup tables, etc.).
  • Other functions may also be performed by the server-side transceiver module 360 or other components of the server system 220, including upconverting, amplifying, filtering, tuning, tracking, etc.
  • the server-side transceiver module 360 may communicate data to one or more antennae 210 for transmission via the satellite 205 to the user systems 110.
  • Embodiments of the server system 220 also include the modem termination module 330 for receiving modem traffic over the satellite link from users.
  • the modem termination module 330 is configured substantially as a satellite modem termination system ("SMTS").
  • SMTS satellite modem termination system
  • downstream functions and or other functions of the server system 220 are centralized and/or distributed according to various embodiments of the invention.
  • a server system 220 may include a number of base stations 215, gateways 217, and/or other components (e.g., hubs, cross-connects, cores, etc.).
  • each server system 220 node e.g., each base station 215, gateway 217, etc.
  • substantially each server system 220 node is capable of performing substantially all the server system 220 functionality.
  • much of the advanced processing server system 220 functionality is implemented in edge nodes (e.g., base stations 215) of the server system 220, while other nodes (e.g., gateways 217, cores, cross-connects, etc.) provide more basic routing and/or switching functions.
  • edge node functionality is fairly limited, while advanced processing functions are more centralized (e.g., in gateways 217, core nodes, etc.).
  • FIG. 4 shows a simplified block diagram of an embodiment of a user system 110a, including an embodiment of a user terminal 230 coupled between a user antenna 225 and a CPE 260, according to various embodiments.
  • Some embodiments of the user system 110 are configured, as shown in FIG. 2, to communicate over a satellite communications system 200 by interfacing with a server system 220 over a satellite link (e.g., the server system 220 of FIG. 3).
  • Interfacing and other functionality of the user system 110 may be provided by components of the user terminal 230, including a terminal transceiver module 410, data processing modules 415, and a client storage module 437.
  • Embodiments of the data processing modules 415 include a MAC module 450, a terminal accelerator module 430, and a routing module 420.
  • the components may be implemented, in whole or in part, in hardware. Thus, they may include one or more ASICs adapted to perform a subset of the applicable functions in hardware. Alternatively, the functions may be performed by one or more other processing modules (or cores), on one or more integrated circuits. In other embodiments, other types of integrated circuits may be used (e.g., Structured/Platform ASICs, FPGAs, and other Semi- Custom ICs), which may be programmed. Each may also be implemented, in whole or in part, with instructions embodied in a computer-readable medium, formatted to be executed by one or more general or application specific processors.
  • a signal from the user antenna 225 is received by the user terminal 230 at the terminal transceiver module 410.
  • Embodiments of the terminal transceiver module 410 may amplify the signal, acquire the carrier, and/or downconvert the signal. In some embodiments, this functionality is performed by other components (either inside or outside the user terminal 230).
  • data from the terminal transceiver module 410 is communicated to the data processing modules 415 for processing.
  • data is communicated to the MAC module 450.
  • Embodiments of the MAC module 450 prepare data for communication to other components of, or in communication with, the user terminal 230, including the terminal accelerator module 430, the routing module 420, and/or the CPE 260.
  • the MAC module 450 may modulate, encode, filter, decrypt, and/or otherwise process the data to be compatible with the CPE 260.
  • the MAC module 450 includes a pre-processing module 452.
  • the pre-processing module 452 implements certain functionality for optimizing the other components of the data processing modules 415.
  • the pre-processing module 452 processes the signal received from the terminal transceiver module 410 by interpreting (e.g., and decoding) modulation and/or coding schemes, interpreting multiplexed data streams, filtering the digitized signal, parsing the digitized signal into various types of information (e.g., by extracting the physical layer header), etc.
  • the preprocessing module 452 pre-filters traffic to determine which data to route directly to the routing module 420, and which data to route through the terminal accelerator module 430 for further processing.
  • Embodiments of the terminal accelerator module 430 provide substantially the same functionality as the server-side accelerator module 350, including various types of applications, WAN/LAN, and/or other acceleration functionality.
  • the terminal accelerator module 430 implements functionality of AcceleNetTM applications, like interpreting data communicated by the server system 220 using high payload compression, handling various prefetching functions, parsing scripts to interpret requests, etc.
  • these and/or other functions of the terminal accelerator module 430 are provided by a client optimizer 120 resident on (e.g., or in communication with) the terminal accelerator module 430.
  • the client optimizer 120 is implemented as client optimizer 120a on the user terminal 230 and/or client optimizer 120b on the CPE 260b.
  • Data from the MAC module 450 and/or the terminal accelerator module 430 may then be routed to one or more CPEs 260 by the routing module 420.
  • output from the data processing modules 415 and/or the terminal accelerator module 430 is stored in the client storage module 437a.
  • the data processing modules 415 and/or the terminal accelerator module 430 may be configured to determine what data should be stored in the client storage module 437a and which data should not (e.g., which data should be passed to the CPE 260).
  • the client storage module 437a may include any useful type of memory store for various types of functionality of the user system 110.
  • the client storage module 437a may include volatile or non- volatile storage, servers, files, queues, etc.
  • Embodiments of the client storage module 437a are configured to store some or all of a client dictionary 435, as described more fully below.
  • storage functionality and/or capacity is shared between an integrated (e.g., on-board) client storage module 437a and an extended (e.g., off-board) storage module 439a.
  • the extended storage module 439a may be implemented in various ways, including as an attached peripheral device (e.g., a thumb drive, USB hard drive, etc.), a wireless peripheral device (e.g., a wireless hard drive), a networked peripheral device (e.g., a networked server), etc.
  • the user terminal 230 interfaces with the extended storage module 439a through one or more ports 438a.
  • functionality of the client storage module 437 is implemented as storage integrated into or in communication with CPE 260 (e.g., as client storage module 437b in CPE 260b).
  • CPE 260 Some embodiments of the CPE 260 are standard CPE 260 devices or systems with no specifically tailored hardware or software (e.g., shown as CPE 260a). Other embodiments of the CPE 260, however, include hardware and/or software modules adapted to optimize or enhance integration of the CPE 260 with the user terminal 230 (e.g., shown as alternate CPE 260b).
  • the alternate CPE 260b is shown to include a CPE accelerator module 462, a CPE processor module 466, and a client storage module 437b. Embodiments of the client storage module 437b are configured to store some or all of the client dictionary 435b.
  • Embodiments of the CPE accelerator module 462 are configured to implement the same, similar, or complementary functionality as the terminal accelerator module 430.
  • the CPE accelerator module 462 may be a software client version of the terminal accelerator module 430.
  • some or all of the functionality of the data processing modules 415 is implemented by the CPE accelerator module 462 and/or the CPE processor module 466. In these embodiments, it may be possible to reduce the complexity of the user terminal 230 by shifting functionality to the alternate CPE 260b.
  • Embodiments of the client storage module 437b may include any type of dictionary, object or byte caching, data serving, and/or other storage-related components in or in communication with the alternate CPE 260b (e.g., a computer hard drive, a digital video recorder ("DVR"), etc.).
  • the client storage module 437b is in communication with an extended storage module 439b, for example, via one or more ports 438b.
  • the functionality of the CPE 260 may be implemented in a number of different types of devices or systems.
  • the CPE 260 is a fixed or mobile end device for displaying content to the user, like a television, personal computer, home theater system, cellular telephone, portable music or video player, personal digital assistant, etc.
  • the CPE 260 is an intermediate device, configured to communicate to another CPE 260 end device (or even to another CPE 260 intermediate device).
  • the CPE 260 may include a set-top box, a home networking component (e.g., a router, a hub, a femtocell, etc.), or any other type of intermediate device.
  • CPE 260c is in communication with the user terminal 230 indirectly through CPE 260b, where CPE 260b is acting as an intermediate device.
  • the CPE 260 is integrated, partially or completely, with the user terminal 230.
  • a home theater system may be built around a main interface component that includes a network interface having user terminal 230 functionality, certain CPE 260 functionality, and ports for wired or wireless communication with additional CPE 260 devices.
  • Embodiments of user terminals 230 and/or CPEs 260 may also be configured for compatibility with certain communication standards.
  • CPEs 260 may be configured to support plug-and-play functionality (e.g., through the Digital Living Network Alliance (DLNA) standard), wireless networking (e.g., through the 802.11 standard), etc.
  • DLNA Digital Living Network Alliance
  • the user terminal 230 is configured to transmit data back to the server system 220.
  • Embodiments of the data processing modules 415 and the terminal transceiver module 410 are configured to provide functionality for communicating information back through the communications system (e.g., through the satellite communications system 200 of FIG. 2 for directing provision of services). For example, information about what is stored in the client dictionary 435 may be sent back to the server system 220 for limiting repetitious file transfers, as described more fully below.
  • the communications system may be used to provide different types of communication services to users.
  • the satellite communications system 200 of FIG. 2 may provide content from content servers 150, through the network 140, to a user's CPE 260, including Internet content, broadcast television and radio content, on-demand content, voice-over-Internet-protocol (VoIP) content, and/or any other type of desired content.
  • this content may be communicated to users in different ways, including through unicast, multicast, broadcast, and/or other communications.
  • a number of additional and/or improved communications functions may be facilitated by exploiting content sharing and/or other types of opportunities through deltacasting.
  • a typical communication system like the satellite communications system 200 of FIG. 2, multiple customers may request the same or substantially similar content at the same or different times.
  • link conditions e.g., bandwidth utilization
  • enhanced services may be offered to customers, costs relating to service provision may be reduced, etc.
  • Content sharing may be implemented in many different ways, according to embodiments. For example, certain content may be multicast to a number of users in a spot beam, thereby allowing multiple user systems 110 to share channels (i.e., potentially increasing effective throughput). Rather than transmitting a copy of the content to each requesting user through a private unicast channel, fewer copies of the content may be shared by multiple users.
  • custom or off-the-shelf components are used to provide this functionality by evaluating multiple communication streams and collapsing them into a single stream within some tolerance (e.g., a small "jitter window," accounting for inter-packet delay variances).
  • dedicated components in the server system 220 implement this functionality.
  • deltacasting and related functionality may be implemented at least partially through client-server interactions.
  • a server optimizer 130 may determine what content is traversing the various links in the communication system using fingerprints.
  • the fingerprints may be used to identify fingerprint trends (e.g., patterns of byte-sequence communications) and/or to identify actual content features (e.g., information from layers 4 - 7 of the OSI IP protocol stack). These determinations may then be used to identify and exploit opportunities for improving the communication services over the communications system.
  • FIG. 5 shows a block diagram of an embodiment of a communications system 500, illustrating client-server interactivity through a client optimizer 120 and a server optimizer 130, according to various embodiments.
  • the communications system 500 is an embodiment of the communications system 100a of FIG. IA or the satellite communications system 200 of FIG. 2.
  • the communications system 500 facilitates communications between a user system 110 and one or more content servers 150 via at least one client-server communication link 125 and at least one content network link 135.
  • interactions between the client optimizer 120 and the server optimizer 130 effectively create a tunnel 505 between the user system 110 and the content servers 150.
  • the content network link 135 includes links through a network 140, like the Internet.
  • embodiments of the client-server communication link 125 support one or more unicast service flows 525 and one or more multicast service flows 515.
  • the user system 110 includes a client graphical user interface (GUI) 512, a web browser 514, and a redirector 516.
  • GUI graphical user interface
  • the client GUI 512 may allow a user to configure performance aspects of the user system 110 (e.g., or even aspects of the greater communications system 500 in some cases). For example, the user may adjust compression parameters and/or algorithms, alter content filters (e.g., for blocking illicit websites), or enable or disable various features used by the communications system 500.
  • some of the features may include network diagnostics, error reporting, as well as controlling, for example, components of the client optimizer 120 and/or the server optimizer 130.
  • the user selects a universal recourse locator (URL) address through the client GUI 512 which directs the web browser 514 (e.g., Internet Explorer®, Firefox®, Netscape Navigator®, etc.) to a website (e.g., cnn.com, google.com, yahoo.com, etc.).
  • the web browser 514 may then issue a request for the website and associated objects to the Internet. It is worth noting that the web browser 514 is shown for illustrative purposes only. While embodiments of the user system 110 may typically include at least one web browser 514, user systems 110 may interact with content providers 150 in a number of different ways without departing from the scope of the invention.
  • the content request from the user system 110 may be intercepted by the redirector 516.
  • the redirector 516 may be implemented in various ways. For example, embodiments of the redirector 516 are implemented within a user modem as part of the modem's internal routing functionality.
  • the redirector 516 may send the request to the client optimizer 120.
  • the client optimizer 120 is shown as separate from the user system 110 (e.g., in communication over a local bus, on a separate computer system connected to the user system 110 via a high speed/low latency link, like a branch office LAN subnet, etc.).
  • embodiments of the client optimizer 120 are implemented as part of the user system 110 in any useful client-side location, including as part of a user terminal, as part of a user modem, as part of a hub, as a separate hardware component, as a software application on the client machine, etc.
  • the client optimizer 120 includes an object processor 522a.
  • the object processor 522a may be configured to perform a number of different processing functions, including Java parsing and protocol processing.
  • Embodiments of the object processor 522a may process hypertext transfer protocol (HTTP), file transfer protocol (FTP), various media protocols, metadata, header information, and/or other relevant information from the request data (e.g., packets) to allow the client optimizer 120 to perform its optimizer functions.
  • HTTP hypertext transfer protocol
  • FTP file transfer protocol
  • media protocols e.g., metadata, header information, and/or other relevant information from the request data (e.g., packets) to allow the client optimizer 120 to perform its optimizer functions.
  • the request may be processed by the object processor 522a to determine which objects are being requested and whether data needed to generate the requested object is already stored in client storage (e.g., in the client dictionary 435 from a prefetch operation, a pre-positioning operation, a multicast caching operation, a previous deltacasting operation, etc.).
  • client storage e.g., in the client dictionary 435 from a prefetch operation, a pre-positioning operation, a multicast caching operation, a previous deltacasting operation, etc.
  • the object processor 522a sends the processed request data to a deltacast coder 524a.
  • the deltacast coder 524a may encode the request into a compressed version of the request using one or more data compression algorithms. For example, these algorithms may employ dictionary coding with the client dictionary 435 configured to store strings so that data from previous web objects can be used to compress data from new pages.
  • these algorithms may employ dictionary coding with the client dictionary 435 configured to store strings so that data from previous web objects can be used to compress data from new pages.
  • other types of coding are possible according to other embodiments of the deltacast coder 524a.
  • the processed and/or coded request data may then be further processed by a unicast processor 528a in some embodiments in preparation for communicating the data over the client- server communication link 125 (e.g., as private IP traffic).
  • the unicast processor 528a processes the data according to one or more protocols, for example a unicast protocol, depending at least on the type of communication links implemented as part of the client-server communication link 125.
  • the client-server communication link 125 may include a wireless link, a cellular link, a satellite link, a dial-up link, etc.
  • the unicast processor 528a is configured to implement Intelligent Compression Technology's ® (ICT) transport protocol (ITP).
  • ITP maintains a persistent connection between the client optimizer 120 and the server optimizer 130. The persistent connection may enable the communications system 500 to reduce or eliminate inefficiencies and overhead costs associated with creating a new connection for each request.
  • the communication is received at the other end of the client- server communication link 125 by a unicast processor 528b in the server optimizer 130.
  • the unicast processor 528b in the server optimizer 130 is implemented as substantially an identical component to the unicast processor 528a in the client optimizer 120.
  • implementations of the unicast processors 528 may be tailored to their location (e.g., in the client optimizer 120 or the server optimizer 130).
  • the unicast processor 528b may process the request according to the applied one or more protocols.
  • the unicast processor 528b may be configured to implement ITP, such that data sent from the unicast processor 528a according to the ITP protocol can be processed accordingly.
  • the data received at the server optimizer 130 from the client optimizer 120 may be coded (e.g., dictionary coded) and/or otherwise processed (e.g., according to one or more protocols, like HTTP).
  • Embodiments of the server optimizer 130 include an object processor 522b, a deltacast coder 524b, and a modeler module 532.
  • the object processor 522b and the deltacast coder 524b are configured to handle processing and/or coding of the request data implemented by the object processor 522a and the deltacast coder 524a of the client optimizer 120, respectively.
  • embodiments of the object processor 522b use features of the deltacast coder 524b and/or dictionary types of information, which may be stored, or modeled, in a modeler module 532 to decode the request data.
  • the request may thus be processed (e.g., translated, decoded, etc.) into a format that is accessible to a source of the requested content (e.g., a website).
  • Come embodiments also include a content stream manager 540 for performing additional functionality, for example, for facilitating live content deltacasting and/or overlapping request handling, as described more fully below.
  • the content stream manager 540 handles some or all the functionality of the deltacast coder 524b.
  • additional features of the request may be processed by these or other components.
  • Embodiments of the object processor 522b may then forward the decoded request to an appropriate destination (e.g., a content server 150) over the content network link 135 (e.g., via a network 140).
  • the content network link 135 may include, for example, a cable modem connection, a digital subscriber line (DSL) connection, a Tl connection, a fiber optic connection, etc.
  • DSL digital subscriber line
  • Tl Tl connection
  • fiber optic connection etc.
  • the content network link 135 manifests substantially lower latency than that of the client-server communication link 125.
  • Response data may be received by the object processor 522b, in response to the request, from the appropriate destination (e.g., the content server 150) over the content network link 135.
  • the response data may include various types of information, such as one or more attachments (e.g., media files, text files, etc.), references to "in-line" objects needed to render a web page, etc.
  • Embodiments of the object processor 522b may be configured to interpret the response data, which may, for example, be received as HTML, XML, CSS, Java Scripts, or other types of data.
  • a fingerprint of the response data may be generated by the deltacast coder 524b (e.g., using dictionary coding techniques, as described above) and used for various types of optimization functions. For example, the fingerprint may be calculated using byte-level information from the response data. The fingerprints and/or byte-level information may also be stored in a server dictionary, cache, etc. by the modeler module 532.
  • the content stream manager 540 looks at the fingerprints to identify and/or exploit deltacasting opportunities for collapsing live content streams and/or for handling overlapping requests.
  • the response data may be identified as part of a shared content stream.
  • the fingerprints and/or corresponding data blocks may then be stored by the modeler module 532 (e.g., in a global stream model 542 and/or client stream models 544 for clients participating in the multicast).
  • the fingerprint is used to determine how to further handle the response data, before, after, according to, and/or independent of other deltacasting determinations.
  • processed and/or coded (e.g., compressed) response data is sent over the client-server communication link 125 to the client optimizer 120.
  • the data may be sent as a unicast service flow 525 from the unicast processor 528b in the server optimizer 130 to the unicast processor 528a in the client optimizer 120; and/or the data may be sent as one or more multicast service flows 515 from the multicast processor 530b in the server optimizer 130 to the multicast processor 530a in the client optimizer 120.
  • standard protocols are adapted for use with the unicast service flows 525 and/or the multicast service flows 515.
  • PGM Pragmatic General Multicast
  • NACK Negative- Acknowledgment
  • RRC 3940 protocol from the Internet Engineering Task Force (IETF)
  • IETF Internet Engineering Task Force
  • the multicast service flows 515 may be configured in various ways.
  • the multicast service flows 515 are configured to each communicate at a different modcode point, on a different spot beam, and/or on a different carrier. This may allow for more efficient communication of traffic to groups of user systems 110 having particular characteristics. For example, if certain traffic is determined to be destined for a user system 110 capable of communicating at a particular modcode point, the traffic may be multicast on a multicast service flow 515 that operates at or near this modcode point for maximum efficiency (e.g., rather than at the lowest modcode point needed to transmit to all user systems 110 in the multicast group). While this may, in certain cases, cause some of the user systems 110 in the multicast group to be unable to reliably receive all the multicast data, there may still be an overall improvement in the operation of the communications system 500.
  • modcodes may be handled (e.g., selected, adapted, optimized, etc.) for various effects.
  • the modcode is selected according to link conditions between the server optimizer 130 and the client optimizer 120 associated with multiple clients (e.g., all clients participating in the shared content stream, so that at least those clients can reliably receive the communication).
  • the modcode is selected so that at least some threshold group (e.g., number) of clients can reliably receive the communication.
  • the modcode is adapted to changes in link conditions between the server optimizer 130 and one or more client optimizers 120. For example, adaptive coding and modulation techniques may be used.
  • the modcode may be adapted by estimating or monitoring link conditions from the server-side (e.g., estimating signal- to-noise ratios, bandwidth, etc.) or via feedback from the client-side.
  • the client optimizer 120 communicates information, like whether packets are reliably received, as feedback to the server optimizer for dynamically adjusting the modcode.
  • the data received at the client optimizer 120 from the server optimizer 130 may be coded (e.g., dictionary coded) and/or otherwise processed (e.g., according to one or more protocols, like HTTP).
  • Embodiments of the object processor 522a and the deltacast coder 524a in the client optimizer 120 are configured to handle processing and/or decoding of the response data, respectively.
  • embodiments of the object processor 522a use features of the deltacast coder 524a, including functionality of the client dictionary 435, to decode the response data.
  • Embodiments of the object processor 522a may then forward the decoded response to the user system 110 (or to other components of the user system 110, where the client optimizer 120 is part of the user system 110).
  • the response may then be used by components of the user system 110.
  • a media object received as part of the response data may be played back through a media player at the user system 110, used to render a web page through the client web browser 514, etc.
  • response data (e.g., and/or related identifiers, like fingerprints) is stored in the client dictionary 435.
  • Embodiments of the server optimizer 130 include a client dictionary model 548 (e.g., in the modeler module 532) that is configured to maintain a model of the client dictionary 435. Maintaining the client dictionary model 548 may be accomplished in a number of different ways, including through various synchronization processes, bidirectional communications of acknowledgements and/or other types of notifications, etc. For example, when data is stored in the client dictionary 435, an acknowledgement is communicated back to the server optimizer 130. After the server optimizer 130 receives the acknowledgement, the modeler module 532 may update the client dictionary model 548 accordingly.
  • embodiments of the communication system 500 are used to provide interactive Internet services (e.g., access to the world-wide web, email communications, file serving and sharing, etc.), television services (e.g., satellite broadcast television, Internet protocol television (IPTV), on-demand programming, etc.), voice communications (e.g., telephone services, voice- over-Internet-protocol (VoIP) telephony, etc.), networking services (e.g., mesh networking, VPN, VLAN, MPLS, VPLS, etc.), and other communication services.
  • interactive Internet services e.g., access to the world-wide web, email communications, file serving and sharing, etc.
  • television services e.g., satellite broadcast television, Internet protocol television (IPTV), on-demand programming, etc.
  • voice communications e.g., telephone services, voice- over-Internet-protocol (VoIP) telephony, etc.
  • networking services e.g., mesh networking, VPN, VLAN, MPLS, VPLS, etc.
  • the "response" data discussed above is intended only as an illustrative type of data that may be received by the server optimizer 130 from a content source (e.g., a content server 150).
  • a content source e.g., a content server 150
  • the "response” data may actually be pushed, multicast, or otherwise communicated to the user without an explicit request from the user.
  • traffic over the communications system 500 may be categorized into private-interest traffic and public-interest traffic.
  • Private-interest traffic may include any traffic for which multicasting the traffic to multiple user systems 110 is deemed inefficient. For example, where the traffic is of interest to only one user system 110, or a very small number of user systems 110, it may cost more to set up and process a multicast service flow than to simply unicast the traffic to each interested user system 110.
  • a user system 110 may act as an intermediate node (e.g., a hub, switch, router, etc.) that forwards information to multiple end users.
  • data may be received at the client-side for all computers in the LAN by a switch, which may then forward the data to appropriate users in the LAN; traffic that is of interest to only one user system 110 may, in fact, be of interest to many users within a LAN serviced by the one user system 110.
  • each user in the LAN may be considered a separate user system 110 running a separate client optimizer 120.
  • the relevant determination may be, from the perspective of the server optimizer 130, how many unicast service flows 525 on the client-server communication link 125 would be needed to unicast the data to all interested users.
  • public-interest traffic may include any traffic for which multicasting the traffic to multiple user systems 110 is deemed more efficient than unicasting the traffic to each interested user system 110.
  • control traffic may be used for various types of control of the communications system.
  • control traffic may be used to send control signals to the client optimizer 120 to direct the client optimizer 120 to accept a particular multicast service flow 515.
  • individual control traffic is sent as unicast service flows 525 to particular client optimizers 120.
  • certain control traffic is sent to groups of client optimizers 120 (e.g., to some or all of the user systems 110 serviced by a particular spot beam of a satellite communications system) as one or more multicast service flows 515.
  • Another type of traffic that may be either private-interest traffic or public-interest traffic is media object data.
  • a first user takes video with a digital camera as part of a videoconference with a second user.
  • the video file may be considered private-interest traffic, as it may be of interest only to the recipient and may never be requested, or even be made accessible, to other users on the communications system 500.
  • a reporter for CNN takes video with a digital camera as part of a live feed to CNN.com.
  • the video file may be considered public-interest traffic, as it may be accessed by thousands of users on the communications system 500.
  • the determination of whether to classify traffic as private-interest traffic or public-interest traffic can be made in a number of ways and may involve many factors.
  • the factors used to make the determination may be derived from the traffic itself or from other sources (e.g., from an evaluation of current link conditions or current system usage, from third- party information, etc.).
  • information may be derived from the header portion and/or the content portion of the datagrams.
  • the header portion may provide straightforward sources of information about the communication and/or the content of the communication (e.g., through protocol information, metadata, public or proprietary tags, etc.).
  • the information from the header portion may often be limited from the perspective of a man-in-the-middle type of server optimizer 130.
  • relevant header information may be encoded in a proprietary format, may be misleading as to the underlying byte sequence, etc.
  • the content portion of the traffic received at the server optimizer 130 includes the actual objects (e.g. content file data) being sent to users via respective user systems 110. It will be appreciated that it may be difficult or impossible to obtain certain types of information looking only at the content portion of the traffic datagrams. Of course, various types of data processing (e.g., statistical analysis) can be used to derive information from the byte sequences in the content portion, but it may be difficult to derive high-level information, such as the file type associated with the data. For example, a movie is streamed from a VOD server (e.g., as the content server 150) to a user terminal 110.
  • a VOD server e.g., as the content server 150
  • Proprietary tags in the header portion of the traffic may indicate the name of the movie and the file type for processing at the user's playback device, while the content portion may include only the sequence of bytes that define the actual movie content.
  • the server optimizer 130 may be unable to read the header portion of the traffic, and may, therefore, be unable to use that information for making multicast and/or other determinations.
  • Embodiments of the server optimizer 130 process the content portion of the traffic as byte-level data using various deltacasting techniques.
  • FIG. 6 is a flow diagram of an illustrative method 600 for using deltacasting to handle traffic over a communications system, according to various embodiments. For the sake of clarity, the method 600 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 600.
  • Embodiments of the method 600 begin at block 604 by receiving a block of content data.
  • the content data block (e.g., file data, streaming data, web object data, etc.) may be received as part of traffic intercepted by the server optimizer 130 from a content server 150 over the content network link 135.
  • an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 612. This determination may be made by the object processor 522b.
  • the multicast prefilter 612 may be defined according to any types of multicast or similar filtering criteria known in the art. In one embodiment, the multicast prefilter 612 is based on the file size of the content data block. For example, only files larger than a certain minimum size may be considered for multicasting. In another embodiment, information from the header portion of the traffic is used by the multicast prefilter 612. For example, the multicast prefilter 612 may be defined to make the initial multicast determination in block 608 according to source IP address, host URL, destination IP address, file type, protocol, HTTP metadata, etc. For example, all video files over a certain size coming from YouTube.com may be considered multicast candidates, while video files being sent as an email attachment to a single recipient may not be considered multicast candidates.
  • data relevant to the multicast prefilter 612 is enhanced through trusted source relationships.
  • trusted source relationships For example, contractual relationships may be formed with content and service providers to allow visibility by the service providers into the content traversing the network.
  • Embodiments of the trusted source relationships include access to encryption keys (e.g., including master keys), authorization to re-serve or re-host content (e.g., through a mirroring relationship as described more fully below), etc.
  • the server optimizer 130 may be able to use certain types of proprietary metadata to make initial multicasting determinations.
  • the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110.
  • the content data block may be processed by the object processor 522b and/or the deltacast coder 524b, and sent as a unicast service flow 525 over the client- server communication link 125 via the unicast processors 528.
  • the data may then be received by the client optimizer 120, processed and/or decoded, and forwarded, as appropriate, to components of the user system(s) 110.
  • the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515.
  • a fingerprint is generated (e.g., a fingerprint is calculated). In some embodiments, the fingerprint is generated at block 620 by the deltacast coder 524b of the server optimizer 130.
  • the fingerprint is generated using cryptographic hash functions (e.g., generated by a Message-Digest algorithm 5 (MD5) technique), non-secure hash functions (e.g., generated by a cyclic redundancy check (CRC) technique), or other similar techniques.
  • the fingerprint can be generated in any way, such that the resulting fingerprint can be used to indicate that one particular byte sequence (or a portion of the byte sequence) matches another particular byte sequence (e.g., or a portion of another byte sequence).
  • dictionary coding e.g., particularly delta coding
  • related techniques are described in more detail in U.S. Patent Application No.
  • the fingerprint is essentially a compressed version of the byte sequence.
  • the fingerprint is a checksum, hash, or other technique applied to some or all of the object data. For example, in one embodiment, a checksum of the first megabyte of data in the byte sequence is used as a fingerprint. This fingerprint may then be compared to other fingerprints to find a match. Notably, embodiments may ultimately seek multicast opportunities and/or other opportunities for optimization of the communications system 500. As such, it may be inefficient to generate fingerprints on very small blocks of data (e.g., at high densities), since it may not be efficient to exploit opportunities where only small blocks are identified as matches. Further, decreasing the size of blocks may increase the size of the dictionary.
  • the traffic may include more than just the content data block for which a fingerprint is being generated, or the traffic may include multiple different content data blocks for which fingerprints are generated.
  • a media file is received at the object processor 522b of the server optimizer.
  • the object processor 522b and/or the deltacast coder 524b may strip off data (e.g., header information) that is not needed for generating the fingerprint at block 620.
  • an email is received having the media file as an attachment.
  • the object processor 522b and/or the deltacast coder 524b may perform an extra step of stripping off the email data, in addition to the header and other data, to effectively isolate the byte sequence for fingerprint generation at block 620.
  • the fingerprint is matched against other fingerprints of other content data blocks in the communications system 500. Determining which other content data blocks are "in the communications system 500" may include different types of analyses for different use cases. For example, in one embodiment, it is desirable to know whether the fingerprint indicates a matching content data block already stored at a particular user system 110 (e.g., in the client dictionary 435, etc.). In another embodiment, it is desirable to know whether the fingerprint indicates a matching data block already stored at the server-side of the communications system 500 (e.g., in server-side storage (not shown) or other storage accessible to the server optimizer 130).
  • server-side of the communications system 500 e.g., in server-side storage (not shown) or other storage accessible to the server optimizer 130.
  • the modeler module 532 in the server optimizer 130 is configured to store models that may be useful for making various determinations (e.g., models of client dictionaries 435, models of server-side caches or dictionaries, models of past and current streams sent as either unicast service flows 525 or multicast service flows 515, etc.).
  • the fingerprint of the content data block generated in block 620 is compared with blocks from the client dictionary model 632 to determine whether there is a match.
  • embodiments of the client dictionary 435 in the client optimizer 120 represent what is stored at a particular client (e.g., at a user system 110), and embodiments of the modeler module 532 at the server optimizer 130 store a model of the each client dictionary 435. If the content data block is destined for a particular client, the server optimizer 130 may use the model of the respective client dictionary 435 stored in the modeler module 532 to look for matches.
  • the client e.g., in the client's client dictionary 435.
  • all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes).
  • the highly compressed version of the content data block may then be unicast to the client.
  • the content data block is compressed by the server-side deltacast coder 524b and communicated as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
  • multicast opportunities evaluated at block 628 may include opportunities for multicasting some or all of the data of the content data block (e.g., or other data) as a function of finding matches between the content data block and other blocks in the communications system 500, as described above.
  • data of the content data block e.g., or other data
  • multicast opportunities evaluated at block 628 may include opportunities for multicasting some or all of the data of the content data block (e.g., or other data) as a function of finding matches between the content data block and other blocks in the communications system 500, as described above.
  • a content data block being requested by a first user is already being communicated to one or more other users (determined as a function of the byte-level data)
  • the method 600 evaluates multicast opportunities at block 644 even where a match is found at block 628 (e.g., if a partial match is identified).
  • identification of a match identified at block 628 may typically indicate that very high compression of the data is possible (e.g., in some cases, 10,000-to-l compression is available using the client dictionary 435).
  • multicast opportunities may be evaluated and fingerprint generation can be tailored in various ways depending on the types of opportunities being evaluated (e.g., the fingerprint may, itself, be a sequence of bytes or part of a more complex system of determining the associated byte sequence).
  • the fingerprints may be used in the context of identifying multicast opportunities with current service flows (e.g., to see if content requested by one user is currently being unicast or multicast to other users).
  • one embodiment generates maps having keys being the various fingerprints identifying the content data block and payloads that provide data about transfers underway or other useful information.
  • the maps are kept to a reasonable size to avoid unnecessary processing of data. For example, techniques are used to restrict the cases where the fingerprint is added to the map.
  • protocols that are "uninteresting" are excluded.
  • fingerprints may be created only for protocols known (e.g., predetermined) to be interesting, such as HTTP, certain media download protocols, etc. (e.g., as prefiltered in block 608).
  • small objects are excluded, as described above with reference to block 608. For example, if the size of the requested object is known (or predictable) in advance, it may be used as a filter - if the object is smaller than some threshold size, the fingerprint is not added to the map.
  • embodiments may wait until at least a minimum amount of data has been received, then filter out the noise (e.g., very small objects). Of course, it may be important to avoid delaying the map entry too long, such that it would cause the optimizer to miss certain a match with a new download. In some embodiments, when the download is complete, the fingerprint is removed from the map. [0128] If a determination is made at block 648 that either no multicast opportunities exist, or that the multicast opportunities should not be exploited, the content data block data and/or any related control data is unicast at block 652, where appropriate.
  • unicasting the data at block 652 involves communicating the data as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
  • the content data block may be multicast to one or more clients at block 656 (e.g., including the requesting client, where appropriate).
  • multicasting the data at block 656 involves communicating the content block data over one or more multicast service flows 515 to the client optimizer 120 via the multicast processors 530.
  • the fingerprint generated in block 620, or another representation of the data is stored at the server-side for later use by the communications system 500. For example, storage of relevant information may be useful in generating or identifying future multicast opportunities, tracking and/or characterizing network usage, prefetching, etc.
  • multicasting or unicasting data is implemented in different ways.
  • some or all of the receivers (e.g., user systems 110) in a spot beam 235 may inherently be capable of receiving at least a portion of any traffic being sent over the spot beam 235 by virtue of being tuned to the appropriate carrier, able to receive data at the current modcode point, etc.; effectively, the satellite communications system 200 broadcasts everything over the air.
  • unicasting or multicasting to one or more user systems 110 may, in fact, involve broadcasting the data over the satellite link and also broadcasting control data to direct receivers to either accept or ignore relevant portions of the broadcast data.
  • the communications system 500 it is determined that content requested by one user has a high probability of being accessed by a group of non-requesting users sharing a satellite spot beam on the communications system 500.
  • the content is broadcast over the satellite link with a stream identifier that designates it as a multicast stream.
  • Control data is also sent directing user systems 110 associated with the interested users to "listen" to the multicast stream (e.g., to accept, rather than ignore, data with that stream identifier as it is received). In effect, this creates a multicast group of the interested users.
  • control data may be communicated to the multicast group either as respective unicast service flows 525 to each client via the unicast processors 528 or as part of a multicast control channel sent over a multicast service flow 515 via the multicast processors 530.
  • embodiments typically send the control data over the multicast control channel.
  • all the user systems 110 may be constantly listening to the multicast control channel to find out (e.g., among other things) which streams they should accept.
  • other implementations are possible according to various embodiments for unicasting or multicasting the data over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120.
  • the data may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435). In certain embodiments, storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 if a model of the client-side client dictionary 435 is updated (e.g., through synchronization of the modeler module 532).
  • the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125. In one embodiment, the data is zip coded prior to being sent over the client-server communication link 125.
  • the zipped data is received at the client optimizer 120, the data is added to the client dictionary 435.
  • embodiments allow usage of fingerprints, generated at the byte-level of the content portion of traffic traversing the network, to identify and/or exploit multicasting opportunities.
  • generation of the fingerprints may enable additional features as well.
  • the generation of the fingerprints may allow a level of content awareness, even where the server optimizer 130 is acting as a transparent intercept protocol and has little or no access to certain high-level information (e.g., header portion information, like URLs, file types, or other metadata).
  • certain high-level information e.g., header portion information, like URLs, file types, or other metadata.
  • fingerprinting e.g., and/or other dictionary coding techniques
  • server optimizer generates signatures based on byte level data and does not require knowledge of "header portion" information (e.g., file types, proprietary tags, protocol tags, etc.) to make its determinations.
  • fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content source or other "header portion" (e.g., metadata) information is different. For example, say viewers are watching the same television show at the same time from different sources (e.g., different television channels are broadcasting the same content, different websites are mirroring the same content, etc.). Fingerprinting techniques can find matching blocks, as the blocks will match even where the content sources are different. Similarly, deltacasting opportunities may be identified even where cache-busting, anonymizer, spoofing, mirroring, and/or other techniques are used (e.g., to alter URLs, to implement content data network (CDN) functionality, etc.).
  • CDN content data network
  • deltacasting techniques may be used transparently to preserve communications from the perspective of end users and content sources.
  • an end user and a content source may effectively experience the same byte-for-byte communications with or without deltacasting.
  • the content source may ultimately provide the same bytes to the end user as if there were a unicast link between the end user and the content source.
  • embodiments allow substantially transparent optimization of communications while preserving certain legal and business relationships, including, copyright, digital rights management, subscription, and/or other obligations.
  • content data is stored in dictionaries effectively as dissociated blocks of data, such that the content can only be recreated from those blocks using appropriate dictionary references (e.g., indexes).
  • appropriate dictionary references e.g., indexes.
  • those dictionary references are unavailable to clients without a new request from the content source.
  • a first user watches a movie through a popular video- on-demand website by logging into the website using credentials (e.g., a user name and password) and viewing the movie through an embedded player surrounded by banner advertisements.
  • credentials e.g., a user name and password
  • the content set for the website is multicast to the first (requesting) user and to a second (non-requesting) user, and is stored in the second user's client dictionary.
  • the second user's client dictionary may now include data blocks from a movie that includes copyrighted material, from a web session authenticated according to another user's credentials, from advertisements that may be cycled and/or tracked, from web objects that are designated in metadata as "un-cacheable" etc.
  • embodiments of the client dictionary store the data blocks in such a way that is may be effectively impossible for the first user to access the movie content directly from the client dictionary.
  • the second user's experience may be much the same as that of the first user (e.g., and much the same as it would have been had the data not been stored in the client dictionary).
  • the second user may still visit the website using a web browser and may still log in with credentials. If authorized, the second user may still request an authorized, licensed copy of the movie file from the website, which may then be viewed in the embedded player surrounded by banner advertisements.
  • deltacasting techniques are used to fingerprint the data and identify the data as already being stored in the second user's client dictionary. The data may then be communicated to the second user accordingly, for example, by highly compressing the data according to a model of the client dictionary stored at the server side of the communications system (e.g., a client dictionary model).
  • the use of deltacasting techniques may preserve legal and other obligations for content transactions.
  • the second user is unable to access copyright and/or unauthorized material from the client dictionary.
  • forcing the second user to access the content as intended by the content provider may allow the content provider to preserve advertising, hosting, and/or other relationships. For example, if the content provider happens to offer an advertisement that is already stored in the client dictionary, the advertisement may still be requested over the content network link (e.g., thereby providing any associated advertisement tracking, revenue, etc.) while also being highly compressed over the client-server communications link.
  • deltacasting embodiments will be further appreciated through the following descriptions of embodiments of live content deltacasting, deltacasting for overlapping requests, and correlative anticipatory deltacasting. Each of these types of embodiments is separated out for the sake of clarity. However, it will be appreciated that systems and methods from various embodiments presented in one section of this disclosure may be used to implement functionality of other embodiments in other sections of the disclosure. As such, the illustrative embodiments and section headings should not be construed as limiting the invention.
  • model are maintained for all active session streams on the communications system.
  • content e.g., live or on-demand content
  • the response data is fingerprinted and compared against the stream models (e.g., according to "deltacasting" techniques described herein). If a match is found, the user may join the matching active stream and download the remaining portion of the content being multicast on that now- shared stream. The user may also download other portions of the requested content using one or more other session streams.
  • a second user requests to watch (or otherwise download) an on-demand movie, half of which having already been communicated to a first user.
  • the communication to the first user is reflected in the stream models and a match is identified with the new request from the second user.
  • the second user may join the first user's session stream, sharing and storing data for the remaining half of the movie received on the shared stream as a multicast.
  • the second user may watch the first half of the movie over another session stream.
  • embodiments identify the second half of the movie as an opportunity for sharing link capacity by communicating substantially identical content to multiple users at substantially the same time.
  • a number of types of scenarios may exist in which substantially identical content is sent to multiple users at substantially the same time (e.g., accounting for jitter windows, asynchronicities, and or other artifacts of the communications system). While similarities between these scenarios exist, handling of content streams in these scenarios may differ, depending on the types of requests involved.
  • live content such as live broadcast television.
  • Live content may include content which has a start time that is independent of the timing of a particular user request for the content.
  • live content may include any content being broadcast live or with some production delay, linearly scheduled television and radio content, live seminar or course webcasts for individuals or enterprises, and/or any other content that a user consumes from its current playback position (e.g., rather than from the beginning of the content).
  • whether content is "live” is determined with respect to each user. For example, a first user requests on-demand content, and begins to watch the content from the beginning. During playback, a second user requests to tune-in to the same content by joining the first user's playback experience. The content may not be considered “live” with respect to the first user, but the content may be considered “live” with respect to the second user.
  • overlapping request content includes any type of on-demand content, such as on- demand movies, content files, etc., where the desired "start time” for the content is dependent on the timing of the independent requests for the content.
  • a second user requests a movie while the movie is being watched by a first user.
  • the second user would effectively tune into the first user's content stream, watching only the remainder of the movie along with the first user from the first user's current playback position.
  • the second user may start watching the movie from the beginning (or some other designated location) while the first user continues to watch the movie from its current playback position. Meanwhile, the second user may receive the remainder of the movie being communicated to the first user, and store the content for later use (e.g., to provide high compression when the second user ultimately requests the locally stored content).
  • a portion of the content communicated to the users is substantially identical.
  • embodiments use deltacasting techniques to collapse multiple, substantially identical live content session streams.
  • embodiments use deltacasting techniques to identify and pre-position portions of requested content from other active session streams, while other portions of the content are being received and/or consumed by the requesting user.
  • more efficient use of forward-link capacity may be achieved by identifying these types of opportunities for communicating content to multiple users at the same time, even where the content may ultimately be consumed at different times.
  • FIG. 7 is a flow diagram of an illustrative method 700 for using deltacasting to handle live content traffic over a communications system, according to various embodiments.
  • the method 700 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 700. It will be further appreciated that some embodiments of blocks of the method 700 are implemented substantially as described with respect to corresponding blocks of the method 600 of FIG. 6.
  • Embodiments of the method 700 begin at block 704 by receiving a block of content data.
  • the content data block e.g., file data, streaming data, web object data, etc.
  • the server optimizer 130 may be received as part of traffic intercepted by the server optimizer 130 from a content server 150 over the content network link 135.
  • an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 712.
  • the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110.
  • the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515.
  • a fingerprint is generated (e.g., a fingerprint is calculated).
  • Embodiments of the method 700 use the fingerprints generated in block 720 to identify and/or exploit deltacasting opportunities for shared content session streams. As described below, identifying the shared content deltacasting opportunities may involve checking whether the requested data is currently being communicated on another stream to another user. To facilitate this determination, embodiments include a global stream model 542 configured to maintain a model of all data blocks intercepted by the server optimizer 130 for any active stream (e.g., any currently-active unicast service flow 525 or multicast service flow 515). For example, the global stream model 542 may store the actual data blocks, fingerprints of the data blocks, and/or some other representation. At block 724, the global stream model 542 is updated to reflect the file data received in block 704.
  • a global stream model 542 configured to maintain a model of all data blocks intercepted by the server optimizer 130 for any active stream (e.g., any currently-active unicast service flow 525 or multicast service flow 515).
  • the global stream model 542 may store the actual data blocks, fingerprint
  • stream refers to data for a client session associated with a single content stream or item. For example, if a video is downloaded over a single TCP connection, the data associated with this connection is the session stream. Similarly, if a client session is viewing a live broadcast via UDP, the content stream might be identified as all traffic using the same source/destination IP/port combination. Notably, a “stream” may include any type of content being communicated, and is not restricted to so- called “streaming" data formats or protocols.
  • a session stream may involve multiple TCP connections, such as when a download uses certain peer-to-peer protocols.
  • a client session may have multiple concurrent session streams, such as when a user is downloading two different videos at the same time. Each session stream is handled independently, so that each could potentially participate in different shared content streams.
  • the global stream model 542 may not necessarily indicate what is stored in any client dictionary 435.
  • the global stream model 542 is updated substantially as data blocks are received for active streams (e.g., in block 724), rather than waiting for confirmation from a client optimizer 120 that the data block was successfully received at the client-side of the communications system 500.
  • various data management techniques may be used for storage of live content data.
  • the data may be stored to a temporary dictionary (e.g., a scratch pad) to save client dictionary space, because the client has no authority to store the data (e.g., a live television broadcast may carry certain digital rights management provisions), etc.
  • the global stream model 542 may be separate from other client dictionary models that may be implemented by certain embodiments of a server optimizer 130.
  • the entries in the global stream model 542 include fingerprint and other identification information about the block , as well as an identifier specifying the "owner" of this block. For example, if a multicast data block is part of a shared content stream (e.g., determined as described below), the owner may be specified via a Content Stream ID, which is a unique identifier for each shared content stream in process. If the data block is not part of a shared content stream, the owner may be specified as an identifier for the client session stream that generated the data block.
  • entries may remain in the global stream model 542 for as long as the owner remains active.
  • a shared content stream may remain active as long as any client sessions are participating in the shared content stream. This participation might be determined as having an active TCP connection that has previously used data blocks from the shared content stream.
  • all blocks associated with this shared content stream may be removed from the global stream model 542. If a data block is never made part of a shared content stream (e.g., it is added to the global stream model 542 in block 724, but is never made part of a shared content stream, as described below), it may be removed when the client session stream that added the entry is no longer active.
  • the methods used to determine the lifetime of entries in the global stream model 542 may be optimized in various ways as needed to handle session streams that use multiple TCP connections or non-TCP protocols, or to detect when entries are part of a live content stream where it is not necessary to maintain all entries for the lifetime of the shared content stream.
  • a match determined in block 728 may indicate that the requested content (e.g., or substantially similar content) is currently being communicated to other users at substantially the same time, thereby presenting a deltacasting opportunity.
  • the determination in block 728 may be limited to whether the fingerprint indicates matching data in an active stream for which a shared forward link can be exploited. In some embodiments, this is implemented by having separate global stream models 540 for groups of users having shared forward links. In certain embodiments, the global stream models 540 may be further categorized in other ways, for example, according to modcode point.
  • the determination in block 728 goes beyond finding a single match between the fingerprint and an entry in the global stream model 542.
  • matches are recorded, and a deltacasting opportunity (e.g., a shared content stream exploitation opportunity) is identified only when a certain number and/or type of match is reached.
  • a deltacasting opportunity e.g., a shared content stream exploitation opportunity
  • the determination at block 728 may wait for a condition, such as seeing two matches in a row.
  • the determination at block 728 is affected by the determination at block 708.
  • certain types of data may be considered possible multicast candidates according to the multicast pref ⁇ lter 712 and the associated determination in block 708, while being a file type that is highly unlikely to be part of a shared content stream.
  • These and/or other types of techniques may be used to increase the efficiency of the determination in block 728.
  • the method 700 may enter a stream sharing mode, as indicated by block 800 and as described more fully below with reference to FIG. 8. As discussed more fully with reference to FIG. 8 below, entry into the stream sharing mode of block 800 may result in multicasting the file data in block 740 or unicasting a highly compressed version of the file data in block 736. If the determination in block 728 indicates that there is no deltacasting opportunity (e.g., that it would be inefficient to set up and manage a shared content stream), the method 700 may proceed in a number of ways.
  • the file data is unicast to the requesting user in block 752.
  • other multicast opportunities may be evaluated at block 744, for example, according to the fingerprints generated in block 720.
  • the multicast opportunities evaluated in block 744 include other deltacasting opportunities described herein.
  • Some embodiments of additional deltacasting opportunities include comparing the fingerprint generated in block 720 with blocks from a client dictionary model to determine whether there is a match.
  • embodiments of the client dictionary 435 in the client optimizer 120 represent what is stored at a particular client (e.g., at a user system 110), and embodiments of the modeler module 532 at the server optimizer 130 store a model of each client dictionary 435. If the content data block is destined for a particular client, the server optimizer 130 may use the model of the respective client dictionary 435 stored in the modeler module 532 to look for matches. A match may indicate that the byte sequence is already stored local to the client in the client's client dictionary 435.
  • all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes) and unicast to the client.
  • the content data block is compressed by the server-side deltacast coder 524b and communicated as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
  • the method 700 evaluates additional multicast opportunities at block 744 even where a match is found at block 728.
  • a deltacasting opportunity is identified at block 728, and further opportunities for using the resulting multicast service flow are found at block 744 (e.g., by multicasting the data on an additional multicast stream, by adding additional (e.g., non-requesting) users to the multicast group for the shared content stream, etc.).
  • matches are found at block 728, but it is determined not to enter stream sharing mode; and, instead, to create a different type of multicast.
  • Various embodiments unicast or multicast the data over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120.
  • the data may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435).
  • storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 if a model of the client-side client dictionary 435 is updated (e.g., through synchronization of the modeler module 532).
  • the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125.
  • the data is zip coded prior to being sent over the client-server communication link 125.
  • one or more stream models may be updated in block 756.
  • all client stream models 544 associated with the shared content stream may be updated to reflect communication of the shared content traffic to the associated clients.
  • the global stream model 542 is updated at this point.
  • the models can be updated at any practical point in the method 700 without departing from the scope of the invention. For example, the updating of the global stream model 542 shown at block 724 may alternatively be performed at block 756.
  • FIG. 8 shows a flow diagram of a stream sharing mode method 800, according to various embodiments.
  • Embodiments of the method 800 begin at block 804 by updating the global stream model 542 to reflect a new shared content stream.
  • determining to enter the stream sharing mode may indicate that data requested as part of one session stream has been identified as matching data already being communicated to at least one other client on another session stream, and that it is desirable to collapse those streams into a shared content stream.
  • both session streams may be adjusted to reflect collapsing the streams into the new shared content stream, which may be identified by a Content Stream ID (e.g., a substantially unique identifier).
  • a Content Stream ID is generated whenever a new client session stream begins (or at some other similar time), and all content data in that client session stream is flagged with that Content Stream ID in the global stream model 542 (e.g., and in the associated client stream model 544).
  • the global stream model 542 e.g., and in the associated client stream model 544.
  • any associated data from either client session that is added to the models is similarly flagged with the Content Stream ID.
  • content on a client stream is flagged with a session identifier or some other identifier.
  • the Content Stream ID is generated and associated with all entries in the global stream model 542 for the client session stream that is being converted into a shared content stream, as well as for any later session stream for which a match is identified (e.g., a client session that is added to the shared content stream). Any subsequent blocks received on any participating session streams may similarly be associated (e.g., tagged) with the Content Stream ID.
  • clients may have to be made aware of the shared content stream.
  • the method 800 directs clients participating in the shared content stream to accept traffic associated with the shared content stream.
  • a unicast message is sent to both streams (i.e., the converted stream and the new, matching stream) directing them to store any multicast blocks associated with this Content Stream ID.
  • this may be substantially different from some embodiments of non-stream sharing modes of operation.
  • embodiments of the non-stream sharing mode of processing may prevent a client session from using data blocks from other sessions until the server optimizer 130 has received a message from the associated client optimizer 120 confirming that it has successfully stored the data block.
  • stream sharing mode there may not be time to wait for the confirmation message. Directing each client session participating in the shared content stream to accept all blocks associated with the shared content stream allows these client sessions to use the multicast blocks from other client sessions, even when all client sessions receive the data at substantially the same time.
  • blocks being received as part of any participating session streams may now be associated with the shared content stream and processed according to the remaining blocks of the method 800.
  • a block of file data associated with the shared content stream is received.
  • block 704 of FIG. 8 may be implemented substantially as block 704 of FIG. 7.
  • block 704 of FIG. 8 is shown as an illustrative case in which the block of file data received is one identified as part of the shared content stream (e.g., carrying the Content Stream ID).
  • a fingerprint of the data block may be generated at block 720. It is worth noting that embodiments of the method 800 may skip blocks shown in the method 700 of FIG. 7. For example, it may not be necessary to check whether a received data block is a multicast candidate when it is part of the shared content stream, since association with the shared content stream may make the data blocks inherently multicastable. In some embodiments, however, additional processing is performed. For example, even when the data blocks are identified as part of the shared content stream, the fingerprints may be compared against a requesting client's dictionary model.
  • a match may indicate that the data block was previously communicated to the client as part of a previous session (e.g., a pre-positioning operation, a previous download, etc.), and that the client dictionary entries may allow the data blocks to be unicast using high compression.
  • the method 800 may proceed at block 810 by determining whether the data received at block 704 matches blocks in the client stream model 544 for the requesting client session. The determination is made according to the fingerprints generated at block 720. The determination at block 810 may depend on whether this client session stream is the first session in the multicast group to receive the data block at the server optimizer 130. For example, jitter windows, latencies, traffic, and/or other factors may cause different client sessions in the multicast group to receive the data blocks in different orders, at different times, etc.
  • the client session stream is the first to receive the data block for the shared content stream, the data block may not be represented in the respective client stream model 544, and the determination in block 810 may indicate that there is no match. As such, it may be desirable to provide the data block to all active clients in the associated multicast group by multicasting the data in block 814. Further, all the active client stream models 544 are updated in block 818 to reflect that the data was multicast to those clients (e.g., and is presumably stored at the respective user systems 110, for example, at the respective client optimizer 120).
  • all the active client stream models 544 include representations of that data block.
  • the data block will be represented in the respective client stream model 544, and the determination in block 810 will indicate the match.
  • Embodiments use the client stream model 544 in block 822 to compress the file data.
  • the compressed (e.g., highly compressed) data is unicast to the associated client over the client's session stream.
  • a separate client stream model 544 may be maintained for each active client session, and a global stream model 542 may be maintained for all client sessions (e.g., those sharing forward link capacity), and each of these models may be different. These different models may be used to account for the fact that clients may not listen to all multicast traffic at all times (e.g., unless the client optimizer 120 determines that it should subscribe to the service flow, the server optimizer 130 directs the client to subscribe to the service flow, etc.).
  • each client session may join the shared content stream (e.g., tune into the programming) at different times, thereby having a different set of data blocks represented in their respective client stream models 544 (e.g., only those data blocks communicated on the shared content stream after that client joined the shared content stream).
  • client stream models 544 e.g., only those data blocks communicated on the shared content stream after that client joined the shared content stream.
  • Having separate client stream model 544 helps ensure that client session streams do not try to use data blocks for compression when those blocks have not previously been communicated to the respective client.
  • the client session stream is not part of a shared content stream yet, there may be no relevant client stream model 544 to check against.
  • the data blocks are added to the global stream model 542 to support identifying shared content stream deltacasting opportunities.
  • Embodiments operate atomically, to the extent possible, to insure that a data block is added only once, even when two client sessions receive the same block at substantially the same time.
  • client sessions can decide whether to commit the data blocks to their respective permanent client dictionaries. For example, the client may decide whether to record broadcast television. If so, messages may be sent to the server system 220 to add the blocks to the client dictionary models in the same way as may be done for blocks that are not part of a shared content stream. If not, blocks may be stored only temporarily and removed from local client storage once the client leaves the shared content stream (or at some other useful time). In certain embodiments, the client session can also remove blocks from its temporary storage (e.g., its shared content stream list) by uploading a message to the server system 220.
  • the client session can also remove blocks from its temporary storage (e.g., its shared content stream list) by uploading a message to the server system 220.
  • Embodiments may wait to remove the data block from the client dictionary until a message (e.g., ack) is received from the server system 220 indicating the block has been removed from the client dictionary model on the server system 220. For example, this may prevent the server 130 optimizer from compressing data using a dictionary page that is not available to the client optimizer 120.
  • a message e.g., ack
  • client sessions can withdraw from the shared content stream at any point.
  • a TCP connection to a content server 150 may be closed (or the last connection may be closed, if a shared content stream is using multiple connections).
  • its client stream model 544 is deleted.
  • a message is sent to the client notifying that data blocks in its temporary shared content stream storage (e.g., not committed to its client dictionary or other permanent storage) should be removed.
  • the client session may then resume normal processing according to the method 700 of FIG. 7.
  • the shared content stream ends when no session streams remain active in it. At that time, all entries in the global stream model 542 and/or client stream models 544 associated with the shared content stream can be removed.
  • entries remain in the client stream model 544 for as long as the respective owner remains active, and the entries may be removed upon termination of the client session stream.
  • entries are removed from the client stream model 544 upon termination of the session stream, but they remain in (e.g., or are added to) another storage location.
  • the modeler module 532 may maintain a set of blocks previously seen in now-inactive streams for some duration of time.
  • lifetimes of entries in models, dictionaries, or other storage locations may be optimized, as needed, to handle session streams that use multiple TCP connections or non-TCP protocols, to detect when entries are part of a live content stream where it is not necessary to maintain all entries for the lifetime of the shared content stream, etc.
  • FIG. 9 shows an illustrative flow diagram 900 for handling multiple requests for the same live content, according to various embodiments.
  • Three viewers capable of sharing forward link capacity e.g., on the same spot beam) request substantially the same content at different times, and the requests are satisfied through deltacasting techniques described above.
  • the viewers are each associated with a client optimizer 120, and each client optimizer 120 is in communication with a server optimizer 130 over an optimizer tunnel 105, as described above with reference to FIG. IB.
  • FIG. 9 The illustrative scenario of FIG. 9 is described with reference to the satellite communications system 200 of FIG. 2. For example, each viewer requests content from a content server 150, using a CPE 260 in communication with a base station 215 over a shared spot beam 235 of the satellite communications system 200. It will be appreciated that the description with reference to the satellite communications system 200 is intended only as an example, and should not be construed as limiting the scope of the invention.
  • a first viewer requests the live content from the content server 150 (e.g., via a network 140).
  • the first viewer tunes in to a movie being broadcast over a television channel by submitting the request to his television by way of a remote control device.
  • the television e.g., CPE 260a
  • the television communicates the request to its respective user terminal 230a in communication with a respective user antenna 225a.
  • the request may then be communicated to the appropriate base station 215 via the satellite 205 and antenna 210.
  • the client-side components may be considered as part of a user system 110
  • the server-side components may be considered as part of a server system 220
  • the user systems 110 and server system 220 may be configured to implement an optimizer tunnel 105 between the requesting CPE 260 and the content server 150 via a respective client optimizer 120 and server optimizer 130.
  • the data representing the live content request (i.e., the movie) is communicated to the first viewer over a unicast channel (e.g., by private IP).
  • a unicast channel e.g., by private IP.
  • blocks of data are received at the server optimizer 130 and fingerprints are generated. The fingerprints are used to determine that the data is not in the first viewer's client dictionary, the data is not part of a currently active shared content stream or other multicast stream, and the data should not be multicast for some other reason.
  • the data is multicast to the first viewer, even though the content is not part of a current shared content stream.
  • the requested content is received from a starting playback position.
  • the movie may be an on-demand movie from the perspective of the first viewer, which other users may "tune into.”
  • the requested content is live content and is received from a current playback position.
  • the first viewer tunes to a particular television station or web video broadcast, and begins watching from the current playback position.
  • a second viewer requests the same live content.
  • the server optimizer 130 intercepts the content and generates fingerprints of the content.
  • the server optimizer 130 determines, as a function of the fingerprints, that the content is already being communicated to the first viewer. For example, the fingerprints match blocks in the global stream model 542 of FIG. 5.
  • the respective entries in the global stream model 542 may not be part of any shared content stream and may carry a client stream ID for the first viewer, rather than a Content Stream ID (the blocks are described above as being unicast as part of a particular client session stream).
  • a different transaction e.g., a pre-positioning multicast session, etc.
  • the server optimizer 130 may switch into stream sharing mode for that content, as described with reference to FIG. 7.
  • the content data may be tagged with a unique Content Stream ID, a global stream model 542 and/or client stream models 544 may be updated, etc.
  • the second viewer begins receiving the content as part of the shared content stream. For example, the second viewer begins watching the movie from substantially the second time 910b (e.g., approximately four minutes into the broadcast, or approximately four minutes farther into the broadcast than where the first viewer began watching).
  • the first viewer may be switched to a new shared content stream (e.g., multicast service flow) and the previously active service flow may be terminated.
  • a new shared content stream e.g., multicast service flow
  • the live content data may be redundantly communicated on both service flows for a period of time during the transition. This may account for various latencies, processing times, buffering times, etc.
  • the user terminal 230a of the first viewer may be configured to maintain a 15 -second buffer to account for changes in link conditions, dropped packets, etc.
  • some embodiments exploit the buffer to reduce the amount of redundant communications needed (e.g., the buffered data may be used if there is a short break in the transmission during the switch between service flows); while other embodiments use the new stream to ensure that the buffer is full before dropping the old stream.
  • a third viewer requests the same live content. The process may proceed substantially as with the second viewer. As the content is received in response to the request from the third viewer, it is intercepted by the server optimizer 130.
  • the server optimizer 130 generates fingerprints and determines that the content is already being communicated on an active session stream (e.g., according to the global stream model 542). In this case, the server optimizer 130 may determine that the traffic is part of an active shared content stream, such that a new shared content stream does not need to be generated. Instead, control data may be sent to the third viewer's client optimizer 120 to direct the client optimizer 120 to accept traffic on the shared content stream (e.g., carrying the Content Stream ID). The third viewer may then commence viewing of the live content programming (i.e., the movie) substantially from the third time 910c (e.g., approximately six minutes into the broadcast, or approximately six minutes farther into the broadcast than where the first viewer began watching).
  • the live content programming i.e., the movie
  • the second viewer leaves the shared content stream.
  • the second viewer may change the channel on his television.
  • the second viewer's session may terminate, but the shared content stream may continue for the first and third viewers.
  • the session stream may terminate for the third viewer, leaving the first viewer as having the only still-active session participating in the shared content stream.
  • the shared content stream may continue until no associated sessions remain active.
  • the shared content stream may terminate and the communication may revert to a unicast or differently managed multicast communication to the remaining viewer(s).
  • the shared content stream may continue until a sixth time 91Of (e.g., 1 :52:06), at which point the shared content stream may terminate.
  • the shared content stream may terminate by the actions of the viewers or on its own.
  • the shared content stream may continue until all (or substantially all) the session streams withdraw from the shared content stream (e.g., by tuning away from the television channel).
  • the shared content stream may automatically terminate at the end of the video (e.g., when no content remains to be downloaded as part of the session).
  • fingerprinting e.g., and/or other dictionary coding techniques
  • server optimizer 130 generates signatures based on byte level data and does not require knowledge of "header portion" information (e.g., file types, proprietary tags, protocol tags, etc.) to make its determinations.
  • fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content source or other "header portion" (e.g., metadata) information is different. For example, suppose that viewers are watching the same television show at the same time from different sources (e.g., different television channels are broadcasting the same content, different websites are mirroring the same content, etc.). Fingerprinting techniques can find matching blocks, as the blocks will match even where the content sources are different. Similarly, deltacasting opportunities may be identified even where cache-busting techniques are used to alter URLs, where content data networks (CDNs) are used to mirror and/or re-locate content, etc.
  • CDNs content data networks
  • fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content timing among clients is mismatched or inconsistent. For example, as described above, clients may request live content asynchronously, responses may be received out of order from content sources, different jitter windows may be experienced, etc. In all these and other cases, it may be insufficient to merely look for the same content going to multiple clients at the same time. Fingerprinting techniques can find and exploit matching blocks, even where these mismatches or inconsistencies are present.
  • embodiments allow substantially transparent optimization of communications while preserving certain legal and business relationships, including, copyright, digital rights management, subscription, and/or other obligations.
  • content data is stored in dictionaries as dissociated blocks of data, such that the content can only be recreated from those blocks using appropriate dictionary references (e.g., indexes).
  • appropriate dictionary references e.g., indexes.
  • those dictionary references are unavailable to clients without a new request from the content source.
  • a block of file data is requested by a user as part of a live content broadcast of a movie.
  • the movie includes copyrighted material and is provided by a host requiring a valid user ID and password for authentication.
  • the deltacasting optimizations may be substantially transparent to the user, such that the user still logs into the host and requests the file data from the host.
  • accessing that local data may still involve compliance with copyright and authentication obligations.
  • FIG. 10 is a flow diagram of an illustrative method 1000 for using deltacasting to handle overlapping content requests over a communications system, according to various embodiments.
  • the method 1000 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 1000. It will be further appreciated that some embodiments of blocks of the method 1000 are implemented substantially as described with respect to corresponding blocks of the method 600 of FIG. 6.
  • Embodiments of the method 1000 begin at block 1004 by receiving a block of content data.
  • the content data block e.g., file data, streaming data, web object data, etc.
  • the server optimizer 130 may be received as part of traffic intercepted by the server optimizer 130 from a content server 150 over the content network link 135.
  • an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 1012. This determination may be made by the object processor 522b.
  • the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110.
  • the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515.
  • a fingerprint is generated (e.g., a fingerprint is calculated).
  • Embodiments of the method 1000 use the fingerprints generated in block 1020 to identify and/or exploit deltacasting opportunities for shared content session streams, for example, as described above with reference to the method 700 of FIG. 7.
  • identifying the shared content deltacasting opportunities may involve checking whether the requested data is part of an active content stream currently being communicated to another user, according to a global stream model 542 configured to maintain a model of all data blocks intercepted by the server optimizer 130 for any active stream (e.g., any currently-active unicast service flow 525 or multicast service flow 515).
  • the global stream model 542 may not necessarily indicate what is stored in any client dictionary 435.
  • the global stream model 542 is updated substantially as data blocks are received for active streams (e.g., in block 1024), rather than waiting for confirmation from a client optimizer 120 that the data block was successfully received at the client-side of the communications system 500.
  • various data management techniques may be used for storage of content stream data. For example, certain types of data may be stored in temporary storage, in particular bins of a client dictionary 435, in more permanent storage, etc.
  • Embodiments of the modeler module 532 of the server optimizer 130 may account for these different types of content stream storage by maintaining different types of models.
  • the modeler module 532 may maintain client stream models 544 representing data currently being communicated to a particular client on an active client session stream, client dictionary models 548 representing data currently stored in a particular client's client dictionary 435, etc.
  • a match determined in block 1028 may indicate that the requested content (e.g., or substantially similar content) is currently being communicated to other users at substantially the same time, thereby presenting a deltacasting opportunity.
  • the determination in block 1028 may be limited to whether the fingerprint indicates matching data in an active stream for which a shared forward link can be exploited. In some embodiments, this is implemented by having separate global stream models 540 for groups of users having shared forward links. In certain embodiments, the global stream models 540 may be further categorized in other ways, for example, according to modcode point.
  • the determination in block 1028 goes beyond finding a single match between the fingerprint and an entry in the global stream model 542.
  • matches are recorded, and a deltacasting opportunity (e.g., a shared content stream exploitation opportunity) is identified only when a certain number and/or type of match is reached.
  • a single matching block may generate false positives, indicating deltacasting opportunities in incorrect or inefficient circumstances.
  • the determination at block 1028 may wait for a condition, such as seeing two matches in a row.
  • the determination at block 1028 is affected by the determination at block 1008.
  • certain types of data may be considered possible multicast candidates according to the multicast prefilter 1012 and the associated determination in block 1008, while being a file type that is highly unlikely to be part of a shared content stream.
  • These and/or other types of techniques may be used to increase the efficiency of the determination in block 1028.
  • the method 1000 may enter an overlapping request mode, as indicated by block 1100 and as described more fully below with reference to FIG. 11. It is worth noting that, as described above, multiple scenarios may exist in which a match is found at block 1028. In one type of scenario, as described above in the "Live Content Deltacasting" section, multiple clients may request substantially the same live content at substantially the same time.
  • multiple clients may request substantially the same content at different, but overlapping times. For example, while a first client is streaming a movie, a second client requests the same movie, where the two clients expect to watch the movie from different playback positions. Some embodiments may treat this second type of scenario differently from the treatment of the first type of scenario. However, embodiments of the method 1000 may further detect which scenario is occurring, and may handle the requests accordingly.
  • a second client requests the same movie.
  • the second client begins watching the movie from the beginning, while the first client continues to watch the movie from some other location, say one hour into the movie. This may be treated as an overlapping request to be handled according to FIG. 11 below.
  • the second client then fast-forwards playback to substantially the playback location currently being watched by the first client.
  • the method 1000 may begin treating the scenario as a "live content" request (e.g., to be handled according to the methods of FIGS. 7 and 8 described above). Later, the second client again fast-forwards playback to a playback location beyond that currently being watched by the first client.
  • the method 1000 may begin treating the scenario again as an overlapping request, however with the first client now lagging the second client, according to FIG. 11.
  • entry into the overlapping request mode of block 1100 may result in multicasting the file data in block 1040 or unicasting a highly compressed version of the file data in block 1036.
  • the method 1000 may proceed in a number of ways. In one embodiment, when no deltacasting opportunities are identified, the file data is unicast to the requesting user in block 1052. In other embodiments, other multicast opportunities may be evaluated at block 1044, for example, according to the fingerprints generated in block 1020. In certain embodiments, the multicast opportunities evaluated in block 1044 include other deltacasting opportunities described herein.
  • Some embodiments of additional deltacasting opportunities include comparing the fingerprint generated in block 1020 with blocks from a client dictionary model 544 to determine whether there is a match. For example, even where the response data does not match blocks of a currently active stream (i.e., no match is found at block 1028), the server optimizer 130 may use the client dictionary model 548 to determine whether the byte sequence is already stored in the requesting client's client dictionary 435. In that case, at block 1052, all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes) and unicast to the client. For example, the content data block is compressed by the server-side deltacast coder 524b and communicated as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
  • the dictionary model e.g. dictionary indexes
  • the method 1000 evaluates additional multicast opportunities at block 1044 even where a match is found at block 1028.
  • a deltacasting opportunity is identified at block 1028, and further opportunities for using the resulting multicast service flow are found at block 1044 (e.g., by multicasting the data on an additional multicast stream, by adding additional (e.g., non-requesting) users to the multicast group for the shared content stream, etc.).
  • matches are found at block 1028, but it is determined not to enter overlapping request mode; and, instead, to create a different type of multicast.
  • multicast opportunities When multicast opportunities are evaluated in block 1044, a determination may be made at block 1048 as to whether multicast opportunities should be exploited. For example, even where a multicast opportunity exists, it may be inefficient to spend the resources to exploit the opportunity (e.g., to set up a multicast service flow 515). Notably, a similar type of determination is described above with reference to block 1008. Further, multicast opportunities may be evaluated and fingerprint generation can be tailored in various ways depending on the types of opportunities being evaluated (e.g., the fingerprint may, itself, be a sequence of bytes or part of a more complex system of determining the associated byte sequence).
  • the content data block data and/or any related control data is unicast at block 1052, where appropriate. For example, if the content data block is requested by one user and no multicast opportunities exist, the content data block data may be unicast to the requesting user. In some embodiments, unicasting the data at block 1052 involves communicating the data as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
  • the content data block may be multicast to one or more clients at block 1056 (e.g., including the requesting client, where appropriate).
  • multicasting the data at block 1056 involves communicating the content block data over one or more multicast service flows 515 to the client optimizer 120 via the multicast processors 530.
  • the fingerprint generated in block 1020, or another representation of the data is stored at the server-side for later use by the communications system 500. For example, storage of relevant information may be useful in generating or identifying future multicast opportunities, tracking and/or characterizing network usage, prefetching, etc.
  • the data is unicast and/or multicast over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120.
  • the data may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435).
  • storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 by updating a client dictionary model 548 (e.g., through synchronization by the modeler module 532).
  • the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125.
  • the data is zip coded prior to being sent over the client-server communication link 125.
  • one or more models may be updated in block 1056.
  • one or more client dictionary models 548 and/or client stream models 544 may be updated to reflect communication of the content traffic to associated clients.
  • the global stream model 542 may also be updated at this point.
  • the models can be updated at any practical point in the method 1000 without departing from the scope of the invention.
  • the updating of the global stream model 542 shown at block 1024 may alternatively be performed at block 1056.
  • FIG. 11 shows a flow diagram of a overlapping request mode method 1100, according to various embodiments.
  • Embodiments of the method 1100 begin at block 1104 by updating the global stream model 542 to reflect a new shared content stream.
  • determining to enter the overlapping request mode may indicate that data requested as part of one session stream has been identified as matching data already being communicated to at least one other client on another session stream, and that it is desirable to communicate subsequent data from both clients as a shared content stream to all associated clients.
  • related session streams may be adjusted to reflect collapsing the streams into the new shared content stream, which may be identified by a Content Stream ID (e.g., a substantially unique identifier).
  • a Content Stream ID is generated whenever a new client session stream begins (or at some other similar time), and all content data in that client session stream is flagged with that Content Stream ID in the global stream model 542 (e.g., and in the associated client stream model 544).
  • the global stream model 542 e.g., and in the associated client stream model 544.
  • any associated data from either client sessions that is added to the models is similarly flagged with the Content Stream ID.
  • content on a client stream is flagged with a session identifier or some other identifier.
  • the Content Stream ID is generated and associated with all entries in the global stream model 542 for the client session stream that is being converted into a shared content stream, as well as for any later session stream for which a match is identified (e.g., a client session that is added to the shared content stream). Any subsequent blocks received on any participating session streams may similarly be associated (e.g., tagged) with the Content Stream ID.
  • the method 1100 directs clients participating in the shared content stream to accept traffic associated with the shared content stream. For example, a unicast message is sent to both streams (i.e., the converted stream and the new, matching stream) directing them to store any multicast blocks associated with this Content Stream ID.
  • a unicast message is sent to both streams (i.e., the converted stream and the new, matching stream) directing them to store any multicast blocks associated with this Content Stream ID.
  • some embodiments may assume that the data is received and stored by a client by maintaining a client stream model, while other embodiments may maintain a client dictionary model 548 that is updated to reflect storage in the client dictionary 435 only upon confirmation (e.g., receipt of an acknowledgement message).
  • blocks being received as part of any participating session streams may now be associated with the shared content stream and processed according to the remaining blocks of the method 1100.
  • a block of file data associated with the shared content stream is received.
  • block 1004 of FIG. 11 may be implemented substantially as block 1004 of FIG. 10.
  • block 1004 of FIG. 11 is shown as an illustrative case in which the block of file data received is one identified as part of the shared content stream (e.g., carrying the Content Stream ID).
  • a fingerprint of the data block may be generated at block 1020. It is worth noting that embodiments of the method 1100 may skip blocks shown in the method 1000 of FIG. 10. For example, it may not be necessary to check whether a received data block is a multicast candidate when it is part of the shared content stream, since association with the shared content stream may make the data blocks inherently multicastable. In some embodiments, however, additional processing is performed. For example, even when the data blocks are identified as part of the shared content stream, the fingerprints may be compared against a requesting client's client dictionary model 548.
  • a match may indicate that the data block was previously communicated to the client as part of a previous session (e.g., a pre-positioning operation, a previous download, etc.), and that the client dictionary 435 entries may allow the data blocks to be unicast using high compression.
  • the method 1100 may proceed at block 1110 by determining whether the data received at block 1004 matches blocks in one or more client models, for example, the client stream models 544 and/or the client dictionary models 548 for one or more of the clients participating in the shared content stream. The determination is made according to the fingerprints generated at block 1020.
  • the data received at block 1004 may be part of any participating client session stream (e.g., in response to a request from any of the participating clients).
  • the determination at block 1110 may depend on whether this client session stream is the first session in the multicast group to receive the data block at the server optimizer 130. For example, jitter windows, latencies, traffic, and/or other factors may cause different client sessions in the multicast group to receive the data blocks in different orders, at different times, etc. Further, because of the overlapping request context, it may be assumed that certain clients will be receiving the data for use at different times and may handle (e.g., store) the data differently.
  • the client session stream is the first to receive the data block for the shared content stream, the data block may not be represented in the respective client stream model 544, and the determination in block 1 110 may indicate that there is no match. As such, it may be desirable to provide the data block to all active clients in the associated multicast group by multicasting the data in block 1114. Further, all the active client stream models 544 and/or the client dictionary models 548 are updated (e.g., after confirmation is received of storage in the client dictionary 435) in block 1118 to reflect that the data was multicast to those clients.
  • all the active client stream models 544 include representations of that data block.
  • the data block will be represented in the respective client stream model 544, and the determination in block 1110 will indicate the match.
  • Embodiments use the client stream model 544 in block 1122 to compress the file data.
  • the compressed (e.g., highly compressed) data is unicast to the associated client over the client's session stream.
  • portions of the requested content may be received substantially in parallel over multiple session streams.
  • a second client requests a movie while it is being streamed by a first client.
  • Both clients' session streams may be associated with the Content Stream ID, but this may not mean that all streams will be collapsed into a single multicast stream. Rather, the remainder of the movie being watched by the first client may effectively be multicast on one session stream to the second client for pre-positioning (e.g., anticipatory storage) in the second client's client dictionary 435.
  • the second client may also receive a unicast or multicast of the "missed" portion of the movie (e.g., the portion of the movie already watched by the first client prior to the second client's request) on a separate session stream.
  • some embodiments treat all clients substantially indiscriminately, regardless of the order of content requests, etc.
  • the first and second clients' session streams are both associated with the Content Stream ID.
  • the second client watches portions of the movie that were previously skipped by the first client (e.g., advertisements, previews, opening credits, etc.)
  • these portions of the content may be identified by the method 1100 as part of the shared content stream and not matching data in the first client's client dictionary 435 (e.g., according to the first client's client dictionary model).
  • the data may be multicast to both clients and/or stored in the first client's client dictionary 435, even though the first client may have long since passed that portion of the movie. This may facilitate a number of functions, such as pre-positioning those blocks for future viewing of the movie by the first client or for rewinding of the movie by the first client.
  • the session streams and associated data may be tagged differently to not treat all requesting clients indiscriminately.
  • the decision whether to store anticipatory data e.g., data being pre-positioned
  • the associated deltacast coder 524a may determine not to store the data in the client dictionary 435, the multicast processor 530a may determine not to accept the data, etc.
  • a separate client stream model 544 may be maintained for each active client session, and a global stream model 542 may be maintained for all client sessions (e.g., those sharing forward link capacity), and each of these models may be different. These different models may be used to account for the fact that clients may not listen to all multicast traffic at all times (e.g., unless the client optimizer 120 determines that it should subscribe to the service flow, the server optimizer 130 directs the client to subscribe to the service flow, etc.).
  • each client session may join the shared content stream (e.g., tune into the programming) at different times, thereby having a different set of data blocks represented in their respective client stream models 544 (e.g., only those data blocks communicated on the shared content stream after that client joined the shared content stream).
  • client stream models 544 e.g., only those data blocks communicated on the shared content stream after that client joined the shared content stream.
  • Having separate client stream model 544 helps ensure that client session streams do not try to use data blocks for compression when those blocks have not previously been communicated to the respective client.
  • the client session stream is not part of a shared content stream yet, there may be no relevant client stream model 544 to check against.
  • the data blocks are added to the global stream model 542 to support identifying shared content stream deltacasting opportunities.
  • Embodiments operate atomically, to the extent possible, to insure that a data block is added only once, even when two client sessions receive the same block at substantially the same time.
  • client dictionary models 544 do not have client stream models 544 at all.
  • client dictionary models 548 may yield certain advantage, such as allowing for confirmation that the data is stored in the client dictionary 435 before attempting to use those stored blocks for compression.
  • deltacasting opportunities may be missed without also maintaining a client stream model 544.
  • client sessions can decide whether to commit the data blocks to their respective permanent client dictionaries. For example, the client may decide whether to record broadcast television. If so, messages may be sent to the server system 220 to add the blocks to the client dictionary models 548 in the same way as may be done for blocks that are not part of a shared content stream. If not, blocks may be stored only temporarily and removed from local client storage once the client leaves the shared content stream (or at some other useful time).
  • the client session can also remove blocks from its client dictionary (e.g., from a temporary shared content stream list, or some other bin of the client dictionary 435) by uploading a message to the server system 220.
  • Embodiments may wait to remove the data block from the client dictionary 435 until a message (e.g., ack) is received from the server system 220 indicating the block has been removed from the client dictionary model 548 on the server system 220. For example, this may prevent the server 130 optimizer from compressing data using a dictionary page that is not available to the client optimizer 120.
  • a message e.g., ack
  • client sessions can withdraw from the shared content stream at any point.
  • a TCP connection to a content server 150 may be closed (or the last connection may be closed, if a shared content stream is using multiple connections).
  • maintaining client stream models 544 when a session leaves the shared content stream, its respective client stream model 544 is deleted.
  • a message is sent to the client notifying that data blocks in a temporary shared content stream storage (e.g., not committed to a more permanent location, for example in the client dictionary 435) should be removed.
  • the client session may then resume normal processing according to the method 1000 of FIG. 10.
  • the shared content stream ends when no session streams remain active in it. At that time, all entries in the global stream model 542 and/or client stream models 544 associated with the shared content stream can be removed and/or dissociated with the Content Stream ID.
  • entries remain in the client stream model 544 for as long as the respective owner remains active, and the entries may be removed upon termination of the client session stream.
  • entries are removed from the client stream model 544 upon termination of the session stream, but they remain in (e.g., or are added to) another storage location.
  • the modeler module 532 may maintain a set of blocks previously seen in now-inactive streams for some duration of time.
  • FIG. 12A shows a first portion of an illustrative flow diagram 1200 for handling multiple overlapping requests for the same content, according to various embodiments.
  • Two user systems 110 e.g., viewers
  • forward link capacity e.g., on the same spot beam
  • the user systems 110 viewers are each associated with a client optimizer 120, and each client optimizer 120 is in communication with a server optimizer 130 over an optimizer tunnel 105, as described above with reference to FIG. IB.
  • the method 1200 begins when a first user associated with a first user system 11 Oa requests content at block 1205.
  • the traffic associated with the first user's request (e.g., the response traffic) is intercepted by the server system 220 (e.g., the server optimizer 130) at block 1004a.
  • the server system 220 e.g., the server optimizer 130
  • a fingerprint is generated to characterize the intercepted content.
  • Blocks 1004a and 1020a of FIG. 12A may be implemented substantially as blocks 1004 and 1020 of FIG. 10, respectively.
  • the first user is the first to request the content, such that the content is not part of a shared content stream at this point.
  • a second user associated with the second user system 110b is not "listening" to the content stream.
  • the content is communicated to the first user on a first session stream either as a unicast or a multicast, as described above with reference to blocks 1040 and 1052 of FIGS. 10 and 11.
  • the first user system 110a receives the content via the first session stream and accepts the content (e.g., for playback).
  • the second user system 110b ignores the content being communicated via the first session stream.
  • the user systems 110 are assumed to share forward link capacity.
  • the second user system 11 Ob may receive the content at block 1215 (e.g., it may be tuned to the same spot beam or connected to the same shared physical link infrastructure as the first user system 110a), even though it may ultimately ignore or reject the content.
  • the second user system 110b requests content.
  • the traffic associated with the second user's request e.g., the response traffic
  • the server system 220 e.g., the server optimizer 130
  • a fingerprint is generated to characterize the intercepted content at block 1020b.
  • Blocks 1004b and 1020b of FIG. 12A may be implemented substantially as blocks 1004 and 1020 of FIG. 10, respectively.
  • the method 1200 determines whether the fingerprint generated at block 1020b indicates a match with data represented in the global stream model. If there is no match, this may indicate that the data requested by the second user system 110b is not part of a content stream currently being communicated to the first user system 110a (e.g., or to any other user configured to share forward link capacity). In this case, at block 1040b/652b, the content is communicated to the second user on a second session stream either as a unicast or a multicast, as described above with reference to blocks 1040 and 1052 of FIGS. 10 and 11.
  • the second user system 110b receives the content via the second session stream and accepts the content (e.g., for playback).
  • the first user system 110a also receives the second-requested content via the second session stream and may or may not ignore the content according to determinations discussed above.
  • the method 1200 may start an overlapping request mode at block 1255.
  • the overlapping request mode is implemented substantially as the overlapping request mode illustrated by the method 1100 of FIG. 11.
  • FIG. 12B shows a second portion of an illustrative flow diagram 1250 for handling overlapping requests for the same content, according to various embodiments.
  • Embodiments of the method 1250 are described as a second portion of the method 1200 of FIG. 12 A. It will be appreciated that methods other than those illustrated by the method 1200 of FIG. 12A can be used to determine whether to enter the overlapping request mode shown as the method 1250 of FIG. 12B. As such, the method 1200 of FIG. 12A should not be construed as limiting the method 1250 of FIG. 12B.
  • Blocks 1004b and 1020b of FIG. 12B may be implemented substantially as blocks 1004 and 1020 of FIG. 1 1, respectively.
  • a determination is made as to whether the content matches a client model.
  • the matching client model may be a client stream model, a client dictionary model, etc., as described above with reference to block 1110 of FIG. 11.
  • Detecting a match at block 1110 may indicate that the content has previously been communicated to the second user system 110b (e.g., this is the second time the content is being received as part of the shared content stream, or the content was stored previously by the second user system 110b as part of some other operation).
  • the content may be unicast as highly compressed content to the second user system 110b in block 1126.
  • Block 1126 may be implemented substantially as block 1126 of FIG. 11 described above.
  • the highly compressed content may be received by the second user system 110b.
  • the locally stored content can be used in block 1280 to decompress the received compressed content for use (e.g., playback) by the second user system 110b.
  • Failing to detect a match at block 1110 may indicate that, while the content is part of a shared content stream, it has not yet been communicated to the second user system 110b (e.g., this is the first time the content is being received as part of the shared content stream, and the second user system 110b has not previously stored the content as part of another operation).
  • the data may not actually be shared data.
  • a second-requesting client may receive some data (e.g., the remainder of the content being downloaded by the first-requesting client) anticipatorily over a shared content stream, while receiving other data (e.g., the missed portion of the content) on a separate content stream.
  • shared content is communicated to both user systems 110 over a shared content stream, while unshared content is communicated to the second user system 11 Ob over a second session stream.
  • the shared and unshared content are multicast according to block 1114 of FIG. 11.
  • both user systems 110 receive the shared content from the shared content stream. If it is assumed that the second user system 110b is receiving the content anticipatorily while the first user system 11 Oa receives the content for substantially immediate use (e.g., playback), the second user system 110b may stored the shared content (block 1265b) while the first user system uses the shared content (block 1265a). It will be appreciated that the user systems 110 may store and/or use the shared content in other ways without departing from the scope of the invention (e.g., the first user system 110a may also store the content). At substantially the same time, the second user system 110b may receive the unshared content via the second session stream at block 1270 (e.g., for substantially immediate use).
  • FIG. 13 shows an illustrative flow diagram 1300 for handling overlapping requests for the same streaming movie, according to various embodiments.
  • Two user systems 110 e.g., viewers
  • forward link capacity e.g., on the same spot beam
  • the requests are satisfied through deltacasting techniques described above.
  • each viewer requests content from a content server 150, using a CPE 260 in communication with a base station 215 over a shared spot beam 235 of the satellite communications system 200.
  • a CPE 260 in communication with a base station 215 over a shared spot beam 235 of the satellite communications system 200. It will be appreciated that the description with reference to the satellite communications system 200 is intended only as an example, and should not be construed as limiting the scope of the invention.
  • a first viewer requests content (e.g., the live content from the a content server 150 (e.g., via a network 140).
  • content e.g., the live content from the a content server 150 (e.g., via a network 140).
  • the first viewer tunes in to a movie to be streamed being broadcast over the Internet a television channel by submitting the request to his television computer by way of a remote control device.
  • the television e.g., CPE 260a
  • the request may then be communicated to the appropriate base station 215 via the satellite 205 and antenna 210.
  • the client-side components may be considered as part of a user system 110
  • the server-side components may be considered as part of a server system 220
  • the user systems 110 and server system 220 may be configured to implement an optimizer tunnel 105 between the requesting CPE 260 and the content server 150 via a respective client optimizer 120 and server optimizer 130.
  • the data representing the live content movie request (i.e., the movie) is communicated to the first viewer over a first content stream (e.g., a unicast channel (e.g., by private IP).
  • a first content stream e.g., a unicast channel (e.g., by private IP).
  • blocks of data are received at the server optimizer 130 and fingerprints are generated. The fingerprints are used to determine that the data is not in the first viewer' s client dictionary, the data is not part of a currently active shared content stream or other multicast stream, and the data should not be multicast for some other reason.
  • the data is multicast to the first viewer, even though the content is not part of a current shared content stream.
  • a second viewer requests the same content.
  • the server optimizer 130 intercepts the content and generates fingerprints of the content.
  • the server optimizer 130 determines, as a function of the fingerprints, that the content is already being communicated to the first viewer.
  • the fingerprints match blocks in the global stream model 542 of FIG. 5.
  • the respective entries in the global stream model 542 may not be part of any shared content stream and may carry a client stream ID for the first viewer, rather than a Content Stream ID (e.g., the blocks are described above as being unicast as part of a particular client session stream).
  • a different transaction e.g., a pre-positioning multicast session, etc.
  • the server optimizer 130 may switch into overlapping request mode for that content, as described with reference to FIGS. 10, 11, 12 A, and 12B.
  • the content data may be tagged with a unique Content Stream ID, a global stream model 542, and/or client stream models 544, and/or client dictionary models 548 may be updated, etc.
  • some of the content on the shared content stream will be shared content, and other content will be unshared content.
  • the second viewer begins receiving the shared content as part of the shared content stream and begins receiving the unshared content as part of a second stream.
  • the first viewer is twenty minutes into streaming a two-hour movie at the time the second viewer's request is processed.
  • the second viewer may begin streaming the first twenty minutes of the movie (i.e., that have already been streamed by the first viewer prior to the second viewer's request) via a second session stream.
  • the remaining portion of the movie may be multicast to the first and second viewers as shared content on the shared content stream.
  • the shared content As the shared content is received, it may be viewed as part of the streaming movie by the first viewer, and it may be stored anticipatorily by the second viewer in the second viewer's client dictionary.
  • a switch into overlapping request mode may involve switching content from one service flow to another.
  • content that was previously being communicated on a unicast service flow e.g., or even possibly on a multicast service flow
  • a new shared content stream e.g., multicast service flow
  • the live content data may be redundantly communicated on both service flows for a period of time during the transition.
  • the user systems 110 may be configured to maintain a 15-second buffer to account for changes in link conditions, dropped packets, etc.
  • some embodiments exploit the buffer to reduce the amount of redundant communications needed (e.g., the buffered data may be used if there is a short break in the transmission during the switch between service flows); while other embodiments use the new stream to ensure that the buffer is full before dropping the old stream.
  • the method 1300 may determine that the next blocks of data being downloaded by the second viewer as part of the streaming movie are already stored in the second viewer's client dictionary. For example, these blocks are the blocks that are being received and stored anticipatorily from the shared content stream.
  • the second viewer may begin receiving the blocks in a highly compressed form, and may be decompressed and viewed using the locally stored data from the client dictionary.
  • the second viewer may continue to anticipatorily store shared content in the client dictionary while using previously stored blocks from the dictionary for decompression as needed. For example, at the third time 131 Oc, the second viewer may be twenty minutes into the movie and the first viewer may be forty minutes into the movie. As the second viewer decompresses the second twenty minutes of the movie that have been stored since the shared stream began, the second viewer may also continue to anticipatorily download and store the remaining hour and twenty minutes of the movie being streamed by the first viewer as shared content.
  • the first viewer's streaming of the movie ends, and the first viewer leaves the shared content stream.
  • the second viewer may have anticipatorily stored the entire remainder of the movie, and may be able to use that locally stored data to receive and decompress a highly compressed version of the remainder of the movie.
  • the second viewer's streaming of the movie may end at a fifth time 1310e.
  • the stream management described in FIG. 13 may be completely transparent to the viewers.
  • the movie may be accessed, downloaded, watched, etc. with little or no awareness by the second viewer of the stream sharing, compression, and or other techniques involved in handling the overlapping requests.
  • Using these techniques, including the use of fingerprinting and/or other deltacasting techniques, to handle shared content streams may provide a number of features, including those discussed above with reference to "Live Content Deltacasting" embodiments.
  • FIG. 14 is a flow diagram of an illustrative method 1400 for using deltacasting to handle traffic over a communications system, according to various embodiments.
  • the method 1400 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 1400. It will be further appreciated that some embodiments of blocks of the method 1400 are implemented substantially as described with respect to corresponding blocks of the method 600 of FIG. 6.
  • Embodiments of the method 1400 begin at block 1404 by receiving a block of content data.
  • an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 1412.
  • the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110.
  • the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515.
  • a fingerprint is generated (e.g., a fingerprint is calculated). In some embodiments, the fingerprint is generated at block 1420 by the deltacast coder 524b of the server optimizer 130.
  • the fingerprint is matched against other fingerprints of other content data blocks in the communications system 500. It will be appreciated that a number of different types of determinations may be made, depending on which blocks are being evaluated to find a match, each opening up potential deltacasting opportunities, for example, including those discussed above. If a match is identified, this indicates that the byte sequence (or the portion of the byte sequence) is already stored local to the client (e.g., in the client's client dictionary 435). In that case, at block 1436, all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes). At block 1440, the highly compressed version of the content data block may then be unicast to the client.
  • the dictionary model e.g. dictionary indexes
  • Embodiments determine whether the block was "previously seen by the communications system 500" according to a previously seen data model 1464.
  • Embodiments of the previously seen data model 1464 may include any type of useful information and may be maintained in any useful way.
  • the previously seen data model 1464 is a global dictionary model, including representations of data blocks from all client dictionaries. The representations may include copies of the data blocks, strong and/or weak identifiers (e.g., fingerprints, digests, hashes, etc.), indexes or pointers, lists, etc.
  • a match found at block 1460 may indicate that the data block received at block 1404 has been previously communicated one or more times to the same or a different user.
  • Embodiments of the method 1400 may use this determination to further determine whether it would be efficient to anticipatorily multicast the data to non-requesting users. For example, data blocks seen multiple times may be assumed to be more popular than data blocks seen only once. It may be further assumed that popular data blocks will continue to be downloaded by the same and/or other users in the future.
  • the previously seen data model 1464 may be updated accordingly at block 1468.
  • the previously seen data model 1464 may also be updated to record communication of the data block for future determinations. Updating the previously seen data model 1464 at block 1468 may include incrementing a tally, associating a time stamp, associating a destination user, etc., according to various embodiments of previously seen data models 1464 and trigger events, for example, as described below.
  • the match and/or updated previously seen data model 1464 may be evaluated to determine whether a trigger event has occurred.
  • the trigger event may be configured to indicate that it is desirable to multicast this data (e.g., absent contrary indications, for example, according to block 1448, as described below).
  • the trigger event may be signaled in different ways, according to various embodiments. In one embodiment, a trigger event is signaled whenever a block is seen more than once, for example, whenever a match is detected at block 1460. In another embodiment, a tally is maintained of the number of times a particular data block has been seen, and a trigger even is signaled when the tally crosses a threshold number (e.g., when the data block has been seen three times).
  • Embodiments of the previously seen data model 1464 and/or the trigger event determination at block 1472 may be configured to further optimize the multicast determination.
  • the previously seen data model 1464 is restricted to (e.g., or different previously seen data models 1464 may be maintained for) users capable of sharing forward link capacity.
  • previously seen data models 1464 may be maintained according to users grouped by shared forward link, by modcode point, etc. In this way, a trigger event may only be signaled when the data block was previously seen by other users for which multicasting could save system resources.
  • the previously seen data model 1464 is maintained temporally, geographically, etc.
  • data blocks may be time stamped to maintain an awareness of when the data was previously seen.
  • a trigger event is signaled at block 1472 only when the data block was previously seen within some time period (e.g., within the past hour or twenty-four hours).
  • a trigger event is signaled at block 1472 when the timing of requests for the data block indicate a sudden increase (e.g., or an increasing trend) in popularity for the data block.
  • a trigger event is signaled at block 1472 for users in another geographic region.
  • a trigger event may be signaled at block 1472 to begin multicasting the data to users located in the Pacific Time Zone in anticipation of later requests by those users.
  • embodiments of previously seen data models 1464 and trigger events at block 1472 are only some of the numerous ways in which the popularity indication may be used to affect multicast determinations, according to various embodiments. Further, embodiments of the method 1400 may proceed in different ways according to the determination made at block 1460 and/or whether a trigger event is signaled at block 1472. For example, is no match is found at block 1460 and/or no trigger event is signaled at block 1472, one or more types of additional multicast opportunities may be evaluated at block 1444.
  • multicast opportunities evaluated at block 1428 may include opportunities for multicasting some or all of the data of the content data block (e.g., or other data) as a function of finding matches between the content data block and other blocks in the communications system 500, as described above.
  • a content data block being requested by a first user is already being communicated to one or more other users (determined as a function of the byte-level data)
  • Some other examples of other multicast determinations are described above (e.g., with reference to the "Live Content Deltacasting" and Deltacasting for Overlapping Requests" sections).
  • the method 1400 evaluates multicast opportunities at block 1444 even where a match is found at block 1428 (e.g., if a partial match is identified) and/or where a match is found at block 1460 (e.g., where a match is found, but no trigger event is signaled at block 1472).
  • identification of a match identified at block 1428 may typically indicate that very high compression of the data is possible. As such, it may be assumed in some embodiments that it is always more efficient to just unicast the highly compressed data at block 1440 than to use system resources to evaluate multicast opportunities at block 1444 (e.g., and potentially to set up a multicast service flow).
  • a trigger event is signaled at block 1472, it may or may not be efficient to look for additional multicast opportunities at block 1444.
  • the evaluation(s) made in block 1408 look at metadata, file sizes, and other header-types of information, while the evaluation(s) made in block 1444 may use byte-level data from the content portion of the traffic datagrams and/or their respective fingerprints to match certain criteria (e.g., other blocks, etc.).
  • multicast opportunities may be evaluated and fingerprint generation can be tailored in various ways depending on the types of opportunities being evaluated (e.g., the fingerprint may, itself, be a sequence of bytes or part of a more complex system of determining the associated byte sequence).
  • the fingerprints may be used in the context of identifying multicast opportunities with current service flows (e.g., to see if content requested by one user is currently being unicast or multicast to other users).
  • one embodiment generates maps having keys being the various fingerprints identifying the content data block and payloads that provide data about transfers underway or other useful information.
  • the maps are kept to a reasonable size to avoid unnecessary processing of data. For example, techniques are used to restrict the cases where the fingerprint is added to the map. In one embodiment, only a subset of the fingerprints for a given stream is added to the map, such that the number added is only as much as needed to identify shared data among multiple streams. For example, shared stream opportunities may be identified looking at only every tenth data block from a stream. In another embodiment, protocols that are "uninteresting" are excluded. For example, fingerprints may be created only for protocols known (e.g., predetermined) to be interesting, such as HTTP, certain media download protocols, etc. (e.g., as prefiltered in block 1408).
  • protocols known e.g., predetermined
  • small objects are excluded, as described above with reference to block 1408.
  • the size of the requested object may be known (or predictable) in advance, it may be used as a filter - if the object is smaller than some threshold size, the fingerprint is not added to the map.
  • the object size is unknown (or not practically predictable)
  • embodiments may wait until at least a minimum amount of data has been received, then filter out the noise (e.g., very small objects).
  • the noise e.g., very small objects.
  • the fingerprint is removed from the map.
  • the content data block data and/or any related control data is unicast at block 1452, where appropriate. If a determination is made at block 1448 that a multicast opportunity exists and should be exploited, the content data block may be multicast to one or more clients at block 1456 (e.g., including the requesting client, where appropriate). Various embodiments unicast or multicast the data over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120.
  • the data may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435). In certain embodiments, storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 if a model of the client-side client dictionary 435 is updated (e.g., through synchronization of the modeler module 532).
  • the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125. In one embodiment, the data is zip coded prior to being sent over the client-server communication link 125.
  • the method 1400 of FIG. 14 describes one of many different types of correlations that can be identified and/or exploited at the byte level (e.g., through anticipatory multicasting. Particularly, embodiments of the method 1400 correlate newly received data to previously seen data to develop a byte-level indicator of popularity. Other embodiments correlate byte-level data usage patterns of one or more users to those of one or more other users to develop an awareness of user-level correlation.
  • FIG. 15 shows a flow diagram of a method 1500 for developing an awareness of user- level correlations from byte-level data, according to various embodiments.
  • embodiments of the method 1500 begin by receiving a block of data at block 1404 and generating fingerprints of the data at block 1420.
  • the method 1500 is shown to include or exclude blocks of the method 1400 of FIG. 14 for the sake of clarity (e.g., inclusions to add context and exclusions to avoid clutter), and should not be taken as limiting the scope of embodiments of the method 1500 of FIG. 15.
  • the method 1500 assumes that the data received at block 1404 is associated with a particular "first" user/client.
  • the data is being communicated to the first client in response to a request for the data or for some other reason, and the client session being used to communicate the data may or may not also be communicating the data with other clients (e.g., as part of a multicast session).
  • one or more models associated with the first user are updated to reflect the received data.
  • the first user's client dictionary model 1432a is updated.
  • Embodiments of the client dictionary models 1432 are configured to be maintained (e.g., by the modeler module 532 of FIG. 5) to be substantially synchronized with the client dictionary 435.
  • updating of the client models at block 1510 may occur in certain embodiments only after the data block has been sent to the first user and stored in the first user's client dictionary 435, and acknowledgement of the storage has been received and processed at the server-side of the communications system 500.
  • other types of modeling are performed. For example, it may not be relevant whether the data was successfully received at the first user's user system 110; rather, it may only be relevant that the data was requested by or otherwise destined for the first user.
  • a client session stream model, a non- verified client dictionary model, or some other type of model may be maintained, rather than the type of verified, synchronized client dictionary model 532 described above.
  • the timing of method 1500 blocks may be affected by the type of model used. For example, an unverified model may be updated prior to communicating and/or verifying communication of the data to the client. For the sake of illustration, the remainder of the method 1500 is described with reference to using client dictionary models 1432. It will be appreciated, at least from the above, that other types of models may be used without departing from the scope of the method 1500.
  • the first user's client dictionary model 1432a is analyzed against one or more other users' client dictionary models 1432b to generate a user correlation metric.
  • the user correlation metric may indicate whether to correlate one or more users to one or more other users at block 1530, as discussed more below. If, at block 1530, it is determined not to correlate users, the method 1500 may terminate, return to block 1404 to receive more data, etc. If, at block 1530, it is determined to correlate users, the method 1500 may update a user correlation model 1550 accordingly. The user correlation model may then be used to make multicasting determinations, for example, as described with reference to FIG. 16, below.
  • the correlation metric generation at block 1520 with one or more other users' client dictionary models 1432b may be implemented in a number of different ways according to various embodiments.
  • the fingerprint generated at block 1420 is compared to blocks of other users' client dictionary models 1432b to determine whether the data block destined for the first client has been previously seen by other clients.
  • each client dictionary model 1432 is periodically compared to other client dictionary models 1432 to maintain the user correlation model 1550. For example, this comparison may be performed synchronously or asynchronously with the receipt of data at block 1404.
  • the one or more other users' client dictionary models 1432b may be implemented in various ways.
  • separate dictionary models are maintained for each client, and the one or more other users' client dictionary models 1432b is the set (e.g., or a subset) of those separate models.
  • a global client dictionary model is maintained, representing data stored in all the client dictionaries (or client dictionary models). The data blocks (or representations thereof) may be stored in association with respective clients.
  • the one or more other users' client dictionary models 1432b includes data sets stored associatively with multicast groups of correlated users. As users are determined to be correlated to other users, the various types of one or more other users' client dictionary models 1432b may or may not have to be updated to reflect that correlation, depending on the type of modeling used.
  • the user correlation model 1550 may be implemented in various ways.
  • the user correlation model 1550 is a set of pointers or indexes to various client dictionary models 1432.
  • the user correlation model 1550 includes a list of various groupings of users (e.g., a lookup table having a list of correlated users associated with eack user in the list).
  • the user correlation model 1550 include more complex types of information.
  • the user correlation model 1550 may maintain modcode points and/or other information that may be used to further optimize multicast groupings.
  • the user correlation model 1550 includes higher-level information relating to the types of correlations identified.
  • the user correlation model 1550 may include information on the type of data that was correlated (e.g., using metadata, where available), on correlation times (e.g., these two users only tend to have high correlation from 15:00pm to 10:00pm on weeknights), on the degree of correlation (e.g., a magnitude of the correlation metric generated in block 1520), etc.
  • FIG. 16 shows a flow diagram of a method 1600 for byte-level user correlation, according to various embodiments.
  • Embodiments of the method begin by receiving and processing a data block to generate a signature and/or to make any preliminary filtering or other determinations.
  • the data block may be received according to block 1404, and processed according to any or all of blocks 1408 - 1440, as described with reference to the method 1400 of FIG. 14.
  • the user correlation model 1550 generated in FIG. 15 may be used in a number of ways for further processing and/or optimization.
  • a fingerprint may have been generated and a determination has been made that the data is multicastable.
  • the data may have been pre-filtered to determine that it is a multicast candidate, and the data may have been further evaluated according to its fingerprint to determine that it is not already stored at the client dictionary.
  • Embodiments of the method 1600 may proceed with a determination at block 1460 as to whether the data block received at block 1404 was previously seen by the communications system 500, according to the previously seen data model 1464 (e.g., as described above with reference to FIG. 14).
  • Embodiments of the previously seen data model 1464 associate previously seen data blocks with those users that have seen those blocks. For example, representations of the data blocks may be stored associatively with a list of user identifiers (e.g., destination IP addresses, etc.). In this way, a match found at block 1460 may indicate both that the data block received at block 1404 has been previously communicated to at least one user, and to which user(s) the block was communicated.
  • a determination may be made at block 1472 as to whether a trigger event has occurred.
  • Embodiments of trigger events may indicate that it is desirable to multicast this data (e.g., absent contrary indications, for example, according to block 1448).
  • one or more types of additional multicast opportunities may be evaluated at block 1444.
  • a trigger event is signaled at block 1472, it may be desirable to determine which users should be part of a multicast group for receiving the multicast data. For example, according to one embodiment of the method 1400 of FIG. 14, data determined to be previously seen (e.g., determined to be sufficiently "popular") may be multicast to all users or all users sharing a forward-link. In another embodiment, however, the user correlation model 1550 may be used in block 1620 to determine which users should be included in the multicast group.
  • the user correlation model 1550 indicates that twenty users on a satellite communications system share a spot beam with the destination user and are highly correlated with the destination user (e.g., data blocks downloaded by any one of the users are highly likely to be downloaded by the correlated users).
  • the data may be multicast to those users that are correlated with the destination user according to the user correlation model 1550.
  • the previously seen data model 1464 may be used to determine which other users have previously seen the data. This information can be used to further refine user correlation metrics, or to further refine the multicast group at block 1620 (e.g., by expanding the multicast group to include users correlated with other users who have previously seen this data block).
  • the multicast session may be used to anticipatorily preposition the data block in the non-requesting users' local storage (e.g., client dictionaries 435). In that way, if any of the non-requesting users later requests the data block, the locally stored block may be used, for example, to provide high compression.
  • the non-requesting users' local storage e.g., client dictionaries 435
  • some embodiments determine whether the destination user is highly correlated with any other users, according to the user correlation model 1550. at block 1610. Where there is a high enough correlation with at least one other user, it may be efficient to multicast the data to both users, even where the data is not otherwise multicastable. For example, if seventy percent of the data downloaded by a first user is also downloaded by a second user, it may be efficient to multicast everything downloaded by one of those users to the other of those users. Similarly, if a user is highly correlated to the network (e.g., the user tends almost exclusively to download very popular content), that user may be added to any appropriate multicast group.
  • a multicast group may be generated or expanded according to the user correlation model 1550 in block 1620.
  • the user correlation model 1550 indicates that twenty users on a satellite communications system share a spot beam with the destination user and are highly correlated with the destination user.
  • a match may be found at block 1610, and a multicast group may be created at block 1620 to include the correlated group of users in a multicast session.
  • the group may be expanded at block 1620, where appropriate, to accommodate the correlated users according to the user correlation model 1550.
  • a multicast group is generated at block 1620 as a result of a match being found at block 1460, a high user correlation being found at block 1610, or some other multicast opportunity being identified at block 1444, a further determination may be made at block 1448 as to whether those opportunities should be exploited. If so, the content data block may be multicast to one or more clients at block 1456 (e.g., including the requesting client and/or any non-requesting correlated clients, where appropriate).
  • determining whether users are correlated earlier in the process may allow the data to be considered inherently multicastable, which may allow certain other process steps to be optimized, skipped, reordered, etc.
  • a user correlation is identified (e.g., block 1610 is implemented) substantially when the data is received, prior to other types of pre- filtering (e.g., according to blocks 1408 - 1416) or other evaluation. If a user correlation is identified and determined to make the data block inherently multicastable, some or all of the pre- filtering and/or other evaluation steps may be skipped or adjusted accordingly.
  • fingerprinting e.g., and/or other dictionary coding techniques
  • server optimizer generates signatures based on byte level data and does not require knowledge of "header portion" information (e.g., file types, proprietary tags, protocol tags, etc.) to make its determinations.
  • fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content source or other "header portion" (e.g., metadata) information is different. For example, say multiple users tend to download much of the same data blocks, but from different data sources (e.g., from different content delivery networks (CDNs), mirror sites, etc.). Fingerprinting techniques can find matching blocks and facilitate data and user correlations even where the content sources are different, as identical blocks will still have matching fingerprints. Similarly, deltacasting opportunities may be identified even where cache-busting, anonymizer, spoofing, and/or other techniques are used to affect source or block determinations.
  • header portion e.g., metadata
  • deltacasting techniques may be used transparently to preserve communications from the perspective of end users and content sources.
  • an end user and a content source may effectively experience the same byte-for-byte communications with or without deltacasting.
  • the content source may ultimately provide the same bytes to the end user as if there were a unicast link between the end user and the content source.
  • embodiments allow substantially transparent optimization of communications while preserving certain legal and business relationships, including, copyright, digital rights management, subscription, and/or other obligations.
  • content data is stored in dictionaries effectively as dissociated blocks of data, such that the content can only be recreated from those blocks using appropriate dictionary references (e.g., indexes).
  • appropriate dictionary references e.g., indexes
  • those dictionary references are unavailable to clients without a new request from the content source.
  • a first user watches a movie through a popular video- on-demand website by logging into the website using credentials (e.g., a user name and password) and viewing the movie through an embedded player surrounded by banner advertisements.
  • credentials e.g., a user name and password
  • the content set for the website is multicast to the first (requesting) user and to a second (non-requesting) user, and is stored in the second user's client dictionary 435.
  • the second user's client dictionary 435 may now include data blocks from a movie that includes copyrighted material, from a web session authenticated according to another user's credentials, from advertisements that may be cycled and/or tracked, from web objects that are designated in metadata as "un-cacheable," etc.
  • embodiments of the client dictionary 435 store the data blocks in such a way that is may be effectively impossible (e.g., or at least sufficiently impractical) for the first user to access the movie content directly from the client dictionary 435.
  • the second user's experience may be much the same as that of the first user (e.g., and much the same as it would have been had the data not been stored in the client dictionary 435).
  • the second user may still visit the website using a web browser and may still log in with credentials. If authorized, the second user may still request an authorized, licensed copy of the movie file from the website, which may then be viewed in the embedded player surrounded by banner advertisements.
  • deltacasting techniques are used to fingerprint the data and identify the data as already being stored in the second user's client dictionary 435. The data may then be communicated to the second user accordingly, for example, by highly compressing the data according to a model of the client dictionary 435 stored at the server side of the communications system 500 (e.g., the client dictionary model 1432).
  • the use of deltacasting techniques may preserve legal and other obligations for content transactions.
  • the second user is practically unable to access copyright and/or unauthorized material from the client dictionary 435.
  • forcing the second user to access the content as intended by the content provider may allow the content provider to preserve advertising, hosting, and/or other relationships. For example, if the content provider happens to offer an advertisement that is already stored in the client dictionary, the advertisement may still be requested over the content network link 135 (e.g., thereby providing any associated advertisement tracking, revenue, etc.) while also being highly compressed over the client-server communications link 125.
  • deltacasting techniques may be used to provide additional features through different types of correlations.
  • fingerprints are used at the byte level to identify and/or exploit situations in which a data block communicated to one or more users multiple times (e.g., some pre-defined threshold number of times, in an increasing trend, etc.).
  • fingerprints are used at the byte level to identify and/or exploit situations in which multiple users tend to download sufficiently similar content.
  • a user requests popular content, and the response includes blocks of data relating to the content.
  • Optimizer components e.g., the server optimizer 130
  • the correlative handling may provide a number of different types of functionality.
  • One type of functionality relates to identifying and exploiting content popularity and related metrics. Even without an object-level awareness of the content traversing the communications system 500, popularity and/or other metrics can be evaluated from the correlation metrics and related information.
  • the metrics may be used for many types of applications, including for web tracking (e.g., for reporting web traffic statistics), usage correlation between users, anticipatory pre-positioning, load balancing, etc.
  • the correlative awareness is used to affect a relationship between users.
  • Various types of user groupings, social networking, and/or other functionality may be affected by identification of user correlations. For example, correlations with other users, data popularity, and other types of information which may be extrapolated from correlation metrics may be used to suggest content to user; to price content; to affect advertising, content delivery, content hosting, and/or other relationships; etc.
  • correlative awareness can be implemented in many ways to provide many types of functionality, according to various embodiments.
  • some embodiments can use correlative anticipatory deltacasting techniques to facilitate pre- positioning of content local to clients of a communications system. For example, various factors, including some relating to one or more correlations, may be used to determine (e.g., according to a cost-benefit analysis) whether it is efficient to anticipatorily multicast content to users.
  • the pre-positioning can be used to preempt various types of communications system 500 issues.
  • repeated downloading of the same content by multiple users is used to predict congestion of the communications links from an impending Internet storm (e.g., a large number of users appears to be downloading the same content at substantially the same time).
  • the content may be pre-positioned to all the users on the shared communications link and/or on other links, to facilitate using high levels of compression for future requests of the content.
  • repeated downloading of a data block at one time of day is used to designate the data block as popular.
  • Popular data blocks may then be pre-positioned to non-requesting users at a low-usage time (e.g., in the middle of the night).
  • a novel transport protocol is provided to track which user systems 110 are actually requesting particular content (i.e., rather than being sent content anticipatorily), and to retransmit only to those user systems 110.
  • missing packets are retransmitted to other (e.g., non-requesting) user systems 110 only when those user systems 110 actually request the content.
  • missing packets may be retransmitted to other (e.g., non-requesting) user systems 110 when opportunities arise for multicasting the missing packets efficiently (e.g., when a request is received by another user, packets are retransmitted to those users that dropped the packets during the previous transmission).
  • the user that originally requests the content issues requests for retransmission of any packets that were not successfully retrieved.
  • Each packet is uniquely identified using a fileID and packetID.
  • the same fileID and packetID are used for all retransmissions, so that once a user has a valid copy of the packet, it can ignore subsequent retransmitted copies.
  • Users that are anticipatorily storing the content may store copies of some or all packets that are successfully received.
  • the stored packets may include original transmissions and/or any retransmissions. If a user subsequently requests the content (e.g., which could be several hours or days later), it may upload a request for any packets that are missing (e.g., from its client dictionary).
  • some or all of the retransmits are multicast, so that any other users listening to the multicast can download the retransmitted packets, if needed.
  • Some embodiments of the transport protocol include deterministic packetization techniques for handling use of packet numbers, rather than file offsets and lengths. For example, a deterministic packetization algorithm may be provided to ensure that a request for "packet 171" always refers to the same byte range.
  • the processing units may be implemented within one or more application specific integrated circuits (ASICs), digital signal processors (DSPs), digital signal processing devices (DSPDs), programmable logic devices (PLDs), field-programmable gate arrays (FPGAs), soft core processors, hard core processors, controllers, micro-controllers, microprocessors, other electronic units designed to perform the functions described above, and/or a combination thereof.
  • ASICs application specific integrated circuits
  • DSPs digital signal processors
  • DSPDs digital signal processing devices
  • PLDs programmable logic devices
  • FPGAs field-programmable gate arrays
  • Soft core processors hard core processors
  • controllers micro-controllers
  • microprocessors other electronic units designed to perform the functions described above, and/or a combination thereof.
  • Software can be used instead of or in addition to hardware to perform the techniques, blocks, steps, and means.
  • the embodiments may be described as a process which is depicted as a flowchart, a flow diagram, a data flow diagram, a structure diagram, or a block diagram. Although a flowchart may describe the operations as a sequential process, many of the operations can be performed in parallel or concurrently. In addition, the order of the operations may be re-arranged. A process is terminated when its operations are completed, but could have additional steps not included in the figure. A process may correspond to a method, a function, a procedure, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination corresponds to a return of the function to the calling function or the main function.
  • embodiments may be implemented by hardware, software, scripting languages, firmware, middleware, microcode, hardware description languages, and/or any combination thereof.
  • the program code or code segments to perform the necessary tasks may be stored in a machine readable medium such as a storage medium.
  • a code segment or machine- executable instruction may represent a procedure, a function, a subprogram, a program, a routine, a subroutine, a module, a software package, a script, a class, or any combination of instructions, data structures, and/or program statements.
  • a code segment may be coupled to another code segment or a hardware circuit by passing and/or receiving information, data, arguments, parameters, and/or memory contents.
  • Information, arguments, parameters, data, etc. may be passed, forwarded, or transmitted via any suitable means including memory sharing, message passing, token passing, network transmission, etc.
  • the methodologies may be implemented with modules (e.g., procedures, functions, and so on) that perform the functions described herein. Any machine-readable medium tangibly embodying instructions may be used in implementing the methodologies described herein.
  • software codes may be stored in a memory.
  • Memory may be implemented within the processor or external to the processor.
  • the term "memory" refers to any type of long term, short term, volatile, nonvolatile, or other storage medium and is not to be limited to any particular type of memory or number of memories, or type of media upon which memory is stored.
  • the term “storage medium” may represent one or more memories for storing data, including read only memory (ROM), random access memory (RAM), magnetic RAM, core memory, magnetic disk storage mediums, optical storage mediums, flash memory devices and/or other machine readable mediums for storing information.
  • ROM read only memory
  • RAM random access memory
  • magnetic RAM magnetic RAM
  • core memory magnetic disk storage mediums
  • optical storage mediums flash memory devices and/or other machine readable mediums for storing information.
  • cache are intended to broadly include any type of storage, including temporary or persistent storage, queues (e.g., FIFO, LIFO, etc.), buffers (e.g., circular, etc.), etc.
  • machine-readable medium includes, but is not limited to, portable or fixed storage devices, optical storage devices, wireless channels, and/or various other storage mediums capable of storing that contain or carry instruction(s) and/or data.
  • a method may include generating a fingerprint from a first request and generating a determination "as a function of the fingerprint.
  • the determination may be made in any way, so long as the outcome of the determination generation step is at least partially dependant on the outcome of the fingerprint generation step.

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • Astronomy & Astrophysics (AREA)
  • Aviation & Aerospace Engineering (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Radio Relay Systems (AREA)
  • Information Transfer Between Computers (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

Methods, apparatuses, and systems for improving utilization of a communications system (e.g., a satellite communications system) are provided, using techniques referred to herein as "deltacasting." Embodiments operate in a client-server context, in which the server-side of the communication link intercepts requests and responses using a client-server optimizer (e.g., a transparent proxy or in-line optimizer between a client web browser and an Internet content provider). The optimizer uses techniques, such as dictionary coding techniques, to create fingerprints of content traversing the links of the communications system. These fingerprints are used to identify and exploit multicasting and/or other opportunities for increased utilization of the communications links. For example, deltacasting techniques are used to handle live content, overlapping content requests, anticipatory pre-positioning, etc.

Description

DELTACASTING
CROSS-REFERENCES
[0001] This application claims the benefit of co-pending US Provisional Application Serial No. 61/144,363, filed on January 13, 2009, titled "SATELLITE MULTICASTING"; and co- pending US Provisional Application Serial No. 61/170,359, filed on April 17, 2009, titled "DISTRIBUTED BASE STATION SATELLITE TOPOLOGY," both of which are hereby expressly incorporated by reference in their entirety for all purposes.
[0002] This application is also related to U.S. Patent Application No. 12/651,909, titled "DELTACASTING," filed on January 4, 2010; U.S. Patent Application No. 12/684,648, titled "DELTACASTING FOR LIVE CONTENT," filed on January 8, 2010; U.S. Patent Application No. 12/684,726, titled "DELTACASTING FOR OVERLAPPING REQUESTS," filed on January 8, 2010; and U.S. Patent Application No. 12/686,744, titled "CORRELATIVE ANTICIPATORY DELTACASTING," filed on January 13, 2010; all of which are hereby expressly incorporated by reference in their entirety for all purposes.
BACKGROUND
[0003] This disclosure relates in general to communications and, but not by way of limitation, to multicast optimization over links of a communications system.
[0004] In some topologies of communications systems, groups of users share some or all of the forward link. For example, in some satellite communications systems, users share spot beams for communicating with a service provider (e.g., via a base station and/or gateway). Communication services provided to the users over the shared forward link may be affected by a number of factors, including bandwidth and other link conditions. For example, because all users sharing the forward link also share the link's bandwidth, any unnecessary redundancies in communications may cause sub-optimal utilization of the forward link.
[0005] As such, it may be desirable to optimize utilization of the shared forward link by minimizing redundancies. SUMMARY
[0006] Among other things, methods, systems, devices, and software are provided for improving utilization of a communications system (e.g., a satellite communications system) through techniques referred to herein as "deltacasting." Some embodiments operate in a client-server context, in which the server-side of the communication link intercepts requests and responses as an optimizer (e.g., a proxy or in-line optimizer between a client web browser and an Internet content provider). The optimizer uses various techniques (e.g., dictionary coding) to create fingerprints of content traversing the links of the communications system. These content fingerprints are used to identify and exploit multicasting and/or other opportunities for increased utilization of the communication links.
[0007] Further areas of applicability of the present disclosure will become apparent from the detailed description provided hereinafter. It should be understood that the detailed description and specific examples, while indicating various embodiments, are intended for purposes of illustration only and are not intended to necessarily limit the scope of the disclosure.
BRIEF DESCRIPTION OF THE DRAWINGS [0008] The present disclosure is described in conjunction with the appended figures:
[0009] FIG. IA shows a simplified block diagram of one embodiment of a communications system for use with various embodiments;
[0010] FIG. IB shows a simplified block diagram of another embodiment of a communications system having multiple optimizer tunnels for use with various embodiments;
[0011] FIG. 2 shows a block diagram of an embodiment of a satellite communications system having a server system in communication with multiple user systems via a satellite over multiple spot beams, according to various embodiments;
[0012] FIG. 3 shows a simplified block diagram illustrating an embodiment of a server system coupled between a network and an antenna, according to various embodiments;
[0013] FIG. 4 shows a simplified block diagram of an embodiment of a user system, including an embodiment of a user terminal coupled between a user antenna and a CPE, according to various embodiments; [0014] FIG. 5 shows a block diagram of an embodiment of a communications system, illustrating client-server interactivity through a client optimizer and a server optimizer, according to various embodiments;
[0015] FIG. 6 shows a flow diagram of an illustrative method for using deltacasting to handle traffic over a communications system, according to various embodiments;
[0016] FIG. 7 is a flow diagram of an illustrative method for using deltacasting to handle live content traffic over a communications system, according to various embodiments;
[0017] FIG. 8 shows a flow diagram of a stream sharing mode method, according to various embodiments;
[0018] FIG. 9 shows an illustrative flow diagram for handling multiple requests for the same live content, according to various embodiments;
[0019] FIG. 10 is a flow diagram of an illustrative method for using deltacasting to handle overlapping content requests over a communications system, according to various embodiments;
[0020] FIG. 11 shows a flow diagram of a overlapping request mode method, according to various embodiments;
[0021] FIG. 12A shows a first portion of an illustrative flow diagram for handling multiple overlapping requests for the same content, according to various embodiments;
[0022] FIG. 12B shows a second portion of an illustrative flow diagram for handling overlapping requests for the same content, according to various embodiments;
[0023] FIG. 13 shows an illustrative flow diagram for handling overlapping requests for the same streaming movie, according to various embodiments;
[0024] FIG. 14 is a flow diagram of an illustrative method for using deltacasting to handle traffic over a communications system, according to various embodiments;
[0025] FIG. 15 shows a flow diagram of a method for developing an awareness of user-level correlations from byte-level data, according to various embodiments; and
[0026] FIG. 16 shows a flow diagram of a method for byte-level user correlation, according to various embodiments. [0027] In the appended figures, similar components and/or features may have the same reference label. Further, various components of the same type may be distinguished by following the reference label by a dash and a second label that distinguishes among the similar components. If only the first reference label is used in the specification, the description is applicable to any one of the similar components having the same first reference label irrespective of the second reference label.
DETAILED DESCRIPTION
[0028] The ensuing description provides preferred exemplary embodiment(s) only, and is not intended to limit the scope, applicability, or configuration of the disclosure. Rather, the ensuing description of the preferred exemplary embodiment(s) will provide those skilled in the art with an enabling description for implementing a preferred exemplary embodiment. It is understood that various changes may be made in the function and arrangement of elements without departing from the spirit and scope as set forth in the appended claims.
[0029] Referring first to FIG. IA, a simplified block diagram is shown of one embodiment of a communications system 100a for use with various embodiments. The communications system 100a facilitates communications between a user system 110 and a content server 150 via a client optimizer 120, a server optimizer 130, and a network 140. The client optimizer 120 and the server optimizer 130 are configured to effectively provide an optimizer tunnel 105 between the user system 110 and the content server 150, including providing certain communications functionality.
[0030] Embodiments of the optimizer (e.g., the server optimizer 130, the client optimizer 120, and the resulting optimizer tunnel 105) can be implemented in a number of ways without departing from the scope of the invention. In some embodiments, the optimizer is implemented as a proxy, such that the server optimizer 130 is a proxy server, the client optimizer 120 is a proxy client, and the optimizer tunnel 105 is a proxy tunnel. For example, a transparent intercept proxy can be used to intercept traffic in a way that is substantially transparent to users at the client-side of the proxy tunnel. In other embodiments, the optimizer is implemented as an in-line optimizer. For example, the client optimizer 120 is implemented within a user terminal and the server optimizer 130 is implemented within a provider terminal (e.g., a satellite base station or gateway, a cable head-end, a digital subscriber line access multiplexer (DSLAM), etc.). Other configurations are possible in other embodiments. For example, embodiments of the server optimizer 130 are implemented in the Internet cloud (e.g., on commercial network leased server space). Embodiments of the client optimizer 120 are implemented within a user's personal computer, within a user's modem, in a physically separate component at the customer premises, etc.
[0031] It is worth noting that references herein to "intercepting" data should be construed broadly to include any useful slowing, sampling, re-routing, and/or other techniques that allow processing of the data as required according to various embodiments. In some embodiments, traffic passes through the server optimizer 130, where it is "intercepted" by being buffered for analysis and processing. For example, the buffering may be used to slow and accumulate traffic for fingerprint generation and analysis, as described more fully below. Notably, certain embodiments described as using an optimizer component (e.g., the server optimizer 130) to intercept the traffic may actually be implemented by having a different component intercept the traffic, from which the optimizer component may receive the intercepted traffic for processing.
[0032] Embodiments of the user system 110 may include any component or components for providing a user with network interactivity. For example, the user system 110 may include any type of computational device, network interface device, communications device, or other device for communicating data to and from the user. Typically, the communications system 100a facilitates communications between multiple user systems 110 and a variety of content servers 150 over one or more networks 140 (only one of each is shown in FIG. IA for the sake of clarity). The content servers 150 are in communication with the server optimizer 130 via one or more networks 140. The network 140 may be any type of network 140 and can include, for example, the Internet, an Internet protocol ("IP") network, an intranet, a wide-area network ("WAN"), a local-area network ("LAN"), a virtual private network ("VPN"), the Public Switched Telephone Network ("PSTN"), and/or any other type of network 140 supporting data communication between devices described herein, in different embodiments. The network 140 may also include both wired and wireless connections, including optical links.
[0033] As used herein, "content servers" is intended broadly to include any source of content in which the users may be interested. For example, a content server 150 may provide website content, television content, file sharing, multimedia serving, voice-over-Internet-protocol (VoIP) handling, and/or any other useful content. It is worth noting that, in some embodiments, the content servers 150 are in direct communication with the server optimizer 130 (e.g., not through the network 140). For example, the server optimizer 130 may be located in a gateway that includes a content or application server. As such, discussions of embodiments herein with respect to communications with content servers 150 over the network 140 are intended only to be illustrative, and should not be construed as limiting.
[0034] In some embodiments, when the user system 110 communicates with the content server 150, the server optimizer 130 intercepts the communications for one or more purposes. As described below, the server optimizer 130 may be part of a server system 220 that includes components for server-side communications (e.g., base stations, gateways, satellite modem termination systems (SMTSs), digital subscriber line access multiplexers (DSLAMs), etc., as described below with reference to FIG. 2). The server optimizer 130 may act as a transparent and/or intercepting proxy. For example, the client optimizer 120 is in communication with the server optimizer 130 over a client-server communication link 125, and the server optimizer 130 is in communication with the content server 150 over a content network link 135. The server optimizer 130 may act as a transparent man-in-the-middle to intercept the data as it passes between the client-server communication link 125 and the content network link 135. Some purposes of the interception may include filtering, caching, parsing, and/or otherwise processing the requests and responses. For example, when the user system 110 requests a web object from a content server 150, the server optimizer 130 may intercept and parse the request to implement prefetching and/or other types of functionality.
[0035] As described more fully below, embodiments of the server optimizer 130 use various techniques (e.g., dictionary coding) to identify redundancies between incoming data and data previously sent across the links of the communication system 100a (e.g., the client-server communication link 125 and the content network link 135). In particular, various techniques (e.g. delta coding, wide dictionary coding, etc.) may allow identification of redundancies in byte sequences traversing the links even when a large history is maintained. These techniques may be used to identify and exploit opportunities for multicasting to increase utilization of the communications links. Use of these techniques to identify and exploit these and other types of multicast opportunities is referred to herein as "deltacasting."
[0036] It will be appreciated that "delta coding," "dictionary coding," "dictionary," "deltacasting," and other similar terms and phrases are intended to be broadly construed to include use of any type of dictionary-like structure for optimization. Embodiments of the dictionary include chunks of content data (e.g., implemented as delta dictionaries, wide dictionaries, byte caches, and/or other types of dictionary structures). For example, when content data is stored in the dictionary, some or all of the blocks of data defining the content are stored in the dictionary in an unordered, but indexed way. As such, content may not be directly accessible from the dictionary; rather, the set of indexes may be needed to recreate the content from the set of unordered blocks.
[0037] It is worth noting that data may be communicated over a communications system 100a using one or more protocols that define, among other things, the format for the datagrams (e.g., packets, frames, etc.). Each datagram may typically include a header portion and a content portion. As used herein, the term "header" is intended broadly to include any portions of the datagram other than those used to communicate the actual content (e.g., file data), and is not intended to be limited to any particular datagram format. For example, an Internet protocol (IP) packet may include a header at the beginning of each packet, while other types of datagrams may provide header-types of information in other ways (e.g., using preambles, post-ambles, mid- ambles, spread-ambles, sub-frames, separate signaling or control data, etc.). These header portions may include information, such as source address, destination address, priority, packet length, coding information, modulation information, etc. Of course, those of skill in the art will appreciate that similar categories of header-portion and content-portion information may be found within datagrams of other protocol formats (e.g., HTTP, FTP, etc.).
[0038] Much can be gleaned from the header portions of data. For example, the header portion may include metadata or other information about the content portion that can be used to help characterize the content portion of the data. In fact, this technique may be used by certain types of content delivery systems, like a video-on-demand (VOD) system. A VOD system may include an application running at a VOD content server and/or at the end viewer's customer premises equipment (CPE) (e.g., on a set-top box) for parsing and translating proprietary metadata from packet headers of user requests. Notably, while use of the metadata may provide relatively straightforward knowledge of the content being requested, using proprietary tags in this way may require having access to (e.g., and running an application on) the content server.
[0039] For example, a parsed URL may look as follows:
"http://www.VOD.com/movieplayer770AX05nkd4868PRlD5g." The illustrative URL includes a string of characters generated as part of a proprietary application function, and may be decoded by the VOD server application to identify information, including the particular download requested, an identifier for the session, user or account data, shopping cart data, client playback capabilities, etc. As such, another request for the same VOD movie, even from the same content server, may have different URLs (e.g., different request headers). While the VOD application server may be able to understand the requests as being for the same movie (e.g., the VOD applications server will understand which bytes specify the content), a transparent intercept proxy, like that of embodiments of the server optimizer 130, may not be able to determine this from the metadata alone.
[0040] Embodiments of the server optimizer 130 generate fingerprints (e.g., fingerprints, digests, signatures, hash functions, etc.) from the content portion of the data traversing the communication links. The server optimizer 130 intercepts and analyzes the byte-level data of the content portion in a way that is substantially transparent to the user. Embodiments of the fingerprints are generated so as to be useful in identifying redundancies between the incoming intercepted data and previously processed data. For example, hashing functions are applied to traffic, after being intercepted by the server optimizer 130, for use as identifiers (e.g., "weak" identifiers) that are at least strong enough to identify candidate matches with blocks stored in a dictionary. Some embodiments of the fingerprints are generated so as to be useful further as strong identifiers for representing substantially identical matching blocks stored in a dictionary.
[0041] A number of difficulties arise from implementing this type of optimizer to use fingerprints (e.g., rather than metadata or other header information). In one example, as described above, header data (e.g., particularly proprietary metadata) may be used to make a number of determinations (e.g., precisely what object file is being requested) that may be difficult or impossible to make from the content data alone. In another example, proprietary data or limited content environments may allow certain assumptions to be made. For example, when someone requests a VOD movie, the server may know exactly what bytes are being requested (e.g., whatever bytes are associated with that particular movie file on the VOD server), how large the file is, that the viewer is likely to watch the movie sequentially, where the movie is stored, etc. However, by using the content portion of the data to generate fingerprints, embodiments of the server optimizer 130 are relatively agnostic to the content being analyzed, which may provide certain functionality even where the server optimizer 130 has little or no access to proprietary metadata and/or other header information.
[0042] In some embodiments, for example, the server optimizer 130 generates fingerprints of data being received over the content network link 135 in response to various requests from different users on a shared spot beam of a satellite communications system (e.g., where the requests are fulfilled by the server optimizer 130 over the client-server link 125 of the communications system 100a). The server optimizer 130 determines from the fingerprints that multiple users are requesting the same content at substantially the same time. In response, the server optimizer 130 creates a multicast service flow (e.g., on the client-server link 125) over which it multicasts the requested data to all the requesting users, thereby saving bandwidth relative to unicasting multiple copies of the content to the multiple users.
[0043] It is worth noting that embodiments of the client-server communication link 125 (e.g., between the client optimizer 120 and the server optimizer 130) and the content network link 135 (e.g., between the server optimizer 130 and the content servers 150 via the networks 140) can be implemented as various types of links have different and/or changing link characteristics, including, for example, differences in bandwidth, latency, cost per bit, etc. For example, while certain embodiments are described in the context of a satellite communications system, where the client-server communication link 125 includes at least one satellite link, other topologies and link types are possible.
[0044] While the communications system 100a illustrated in FIG. IA shows only one optimizer tunnel 105 between one server system 220 and one user system 110, embodiments typically operate in the context of, and take advantage of, multiple optimizer tunnels 105. FIG. IB shows a simplified block diagram of another embodiment of a communications system 100b having multiple optimizer tunnels 105 for use with various embodiments. The communications system 100b facilitates communications between a server system 220 and multiple user systems 110, via a respective server optimizer 130 and multiple client optimizers 120. The client optimizers 120 and the server optimizer 130 are configured to effectively provide tunnels 105 between the user systems 110 and content servers 150.
[0045] A client-server communication link 125 between the server optimizer 130 and the client optimizers 120 supports one or more unicast service flows 525 and one or more multicast service flows 515 for supporting unicast and multicast traffic, respectively. In one embodiment, the client-server communication link 125 includes a satellite communications link. It will be appreciated that satellites may effectively broadcast all their downstream traffic to all receivers that are tuned to a particular carrier, beam, etc. As such, unicasting or multicasting to one or more user systems 110 may, in fact, involve broadcasting the data over the satellite link and also broadcasting control data to direct receivers to either accept or ignore relevant portions of the broadcast data. Notably, while some system resources may be expended in setting up a multicast service flow 515 and in related logistics, it "costs" the satellite communications system substantially the same bandwidth resources to send a packet to one user system 110 or to all user systems 110 (e.g., on a particular spot beam).
[0046] Similarly, in another embodiment, the client-server communication link 125 includes a cable communications link. For example, a cable company may run a cable line to a neighborhood aggregator, from which individual coaxial lines communicate last mile traffic to individual households. Each individual coaxial cable may carry all the traffic for the entire neighborhood, even where some of that traffic is destined only for particular households. As in the satellite embodiment described above, since all the cable subscriber households in the same neighborhood effectively receive all the traffic, bandwidth resources can be shared by multicasting traffic, where appropriate. Of course, satellite and cable networks are only two illustrative embodiments of client-server communication links 125. Embodiments of the client- server communication link 125 can include any type of communications link that has limited bandwidth resources, where the bandwidth resources can be at least partially shared through multicasting.
[0047] It will now be appreciated that embodiments of the client-server communication link 125, and the resulting optimizer tunnels 105, effectively provide transparent acceleration functionality to the user systems 110. This functionality will be described in more detail with respect to illustrative systems in FIGS. 2 - 5. FIG. 2 shows a block diagram of an embodiment of a satellite communications system 200 having a server system 220 in communication with multiple user systems 110 via a satellite 205 over multiple spot beams 235, according to various embodiments. The server system 220 may include any server components, including base stations 215, gateways 217, etc. A base station 215 is sometimes referred to as a hub or ground station. In certain embodiments, as described below, the base station 215 has functionality that is the same or different from a gateway 217. For example, as illustrated, a gateway 217 provides an interface between the network 140 and the satellite 205 via a number of base stations 215. Various embodiments provide different types of interfaces between the gateways 217 and base stations 215. For example, the gateways 217 and base stations 215 may be in communication over leased high-bandwidth lines (e.g., raw Ethernet), a virtual private large-area network service (VPLS), an Internet protocol virtual private network (IP VPN), or any other public or private, wired or wireless network. Embodiments of the server system 220 are in communication with one or more content servers 150 via one or more networks 140.
[0048] In some embodiments, the gateway 217 is configured to implement relatively simple routing functions. For example, the gateway 217 may receive traffic from the network 140, determine which of the base stations 215 should receive the traffic, and route the traffic accordingly. In other embodiments, the gateway 217 performs relatively complex functions, including, for example, network security, accounting, content acceleration, trend analysis, signal processing and/or encoding, etc. In still other embodiments, the gateway 217 and the base stations 215 share some or all of the desired network functionality. For example, it may be desirable to perform certain functions in one location, perform other functions in a distributed manner, and perform still other functions in a redundant manner.
[0049] As traffic traverses the satellite communications system 200 in multiple directions, the gateway 217 may be configured to implement multi-directional communications functionality. For example, the gateway 217 may send data to and receive data from the base stations 215. Similarly, the gateway 217 may be configured to receive data and information directed to one or more user systems 110, and format the data and information for delivery to the respective destination device via the satellite 205; or receive signals from the satellite 205 (e.g., from one or more user systems 110) directed to a destination in the network 140, and process the received signals for transmission through the network 140.
[0050] In one embodiment, the satellite communications system 200 includes a number of gateways 217 distributed over a large geographic region. Each gateway 217 is in communication with the network 140 via a high-speed connection (e.g., a dedicated high-bandwidth fiber link). Each gateway 217 is also in communication with, and handles communications for, up to twenty base stations 215 (e.g., twenty feeder links). Each of the twenty base stations 215 is configured to service up to four user links by communicating content for those user links to the satellite 205 using an antenna 210.
[0051] In various embodiments, one or more of the satellite links are capable of communicating using one or more communication schemes. In various embodiments, the communication schemes may be the same or different for different links. The communication schemes may include different types of coding and modulation combinations. For example, various satellite links may communicate using physical layer transmission modulation and coding techniques using adaptive coding and modulation schemes, etc. The communication schemes may also use one or more different types of multiplexing schemes, including Multi- Frequency Time-Division Multiple Access ("MF-TDMA"), Time-Division Multiple Access ("TDMA"), Frequency Division Multiple Access ("FDMA"), Orthogonal Frequency Division Multiple Access ("OFDMA"), Code Division Multiple Access ("CDMA"), or any number of other schemes.
[0052] Embodiments of the satellite 205 may be implemented as a geostationary satellite 205, a low earth orbit ("LEO") satellite 205, or aerial payloads not in orbit and held aloft by planes, blimps, weather balloons, etc. Other embodiments could have a number of satellites 205 instead of just one. In one embodiment, the satellite 205 is configured as a "bent pipe" satellite, wherein the satellite 205 may frequency convert the received carrier signals before retransmitting these signals to their destination, but otherwise perform little or no other processing on the contents of the signals. There could be a single carrier signal for each service spot beam 235 or multiple carriers in different embodiments. Similarly, single or multiple carrier signals could be used for feeder spot beams. A variety of physical layer transmission modulation and coding techniques may be used by the satellite 205 in accordance with certain embodiments, including those defined with the DVB-S2 standard. For other embodiments, a number of configurations are possible (e.g., using LEO satellites, mesh networks, star networks, etc.).
[0053] The satellite 205 may operate in a multi-beam mode, transmitting a number of spot beams 235, each directed at a different region of the earth. Each spot beam 235 may be associated with one of the user links, and used to communicate between the satellite 205 and a large group (e.g., thousands) of user systems 110 (e.g., user terminals 230 within the user systems 110). The signals transmitted from the satellite 205 may be received by one or more user systems 110, via a respective user antenna 225. In some embodiments, some or all of the user systems 110 include one or more user terminals 230 and one or more CPE devices 260. User terminals 230 may include modems, satellite modems, routers, or any other useful components for handling the user-side communications. Reference to "users" should be construed generally to include any user (e.g., subscriber, consumer, customer, etc.) of services provided over the satellite communications system 200 (e.g., by or through the server system 220).
[0054] In a given spot beam 235, some or all of the users (e.g., user systems 110) serviced by the spot beam 235 may be capable of receiving all the content traversing the spot beam 235 by virtue of the fact that the satellite communications system 200 employs wireless communications via various antennae (e.g., 210 and 225). However, some of the content may not be intended for receipt by certain customers. As such, the satellite communications system 200 may use various techniques to "direct" content to a user or group of users. For example, the content may be tagged (e.g., using packet header information according to a transmission protocol) with a certain destination identifier (e.g., an IP address), use different modcode points that can be reliably received only by certain user terminals 230, send control information to user systems 1 10 to direct the user systems 1 10 to ignore or accept certain communications, etc. Each user system 110 may then be adapted to handle the received data accordingly. For example, content destined for a particular user system 110 may be passed on to its respective CPE 260, while content not destined for the user system 110 may be ignored. In some cases, the user system 110 stores information not destined for the associated CPE 260 for use if the information is later found to be useful in avoiding traffic over the satellite link, as described in more detail below. [0055] In some embodiments, each user system 110 implements a client optimizer 120 that is in communication with a server optimizer 130 located in the server system 220 (e.g., in the gateway 217). The client optimizers 120 and server optimizer 130 may act to create a virtual tunnel between the user systems 110 and the content servers 150, as described with reference to FIG. IA. In a topology, like the satellite communications system 200 shown in FIG. 2, vast amounts of traffic may traverse various portions of the satellite communications system 200 at any given time. As discussed above, at least some of the traffic traversing the network may be intercepted by the server optimizer 130 for further processing and for additional functionality. The functionality of the server optimizer 130 may also be assisted and/or exploited by other components of the server system 220 and the user systems 110. Some of this and other functionality of components of an illustrative server system 220 and an illustrative user system 110 are described with reference to various types of functional blocks in FIGS. 3 and 4, respectively.
[0056] FIG. 3 shows a simplified block diagram 300 illustrating an embodiment of a server system 220 coupled between a network 140 and an antenna 210, according to various embodiments. The server system 220 has a number of components, including a network interface module 310, a modem termination module 330, and a server-side transceiver module 360. Components of the server system 220 may be implemented, in whole or in part, in hardware. Thus, they may include one or more Application Specific Integrated Circuits (ASICs) adapted to perform a subset of the applicable functions in hardware. Alternatively, the functions may be performed by one or more other processing units (or cores), on one or more integrated circuits (ICs). In other embodiments, other types of integrated circuits may be used (e.g., Structured/Platform ASICs, Field Programmable Gate Arrays (FPGAs), and other Semi-Custom ICs), which may be programmed. Each may also be implemented, in whole or in part, with instructions embodied in a computer-readable medium, formatted to be executed by one or more general or application specific controllers.
[0057] Embodiments of the server system 220 receive data from the network 140 (e.g., the network 140 of FIG. IA), including data originating from one or more content servers 150 (e.g., or other types of servers, as discussed above) and destined for one or more users in a spot beam (e.g., at a user system 110 in a spot beam 235, as shown in FIG. 2). The data is received at the network interface module 310, which includes one or more components for interfacing with the network 140. For example, the network interface module 310 includes a network switch and a router.
[0058] In some embodiments, the network interface module 310 interfaces with other modules, including a third-party edge server 312 and/or a traffic shaper module 314. The third-party edge server 312 may be adapted to mirror content (e.g., implementing transparent mirroring, like would be performed in a point of presence ("POP") of a content delivery network ("CDN")) to the server system 220. For example, the third-party edge server 312 may facilitate contractual relationships between content providers and service providers to move content closer to users in a communications network (e.g., the satellite communications network 200 of FIG. 2). The traffic shaper module 314 controls traffic from the network 140 through the server system 220, for example, to help optimize performance of the communications system (e.g., by reducing latency, increasing effective bandwidth, etc.). In one embodiment, the traffic shaper module 314 delays packets in a traffic stream to conform to a predetermined traffic profile.
[0059] Traffic is passed from the network interface module 310 to one or more processing modules. In some embodiments, the processing modules include a server-side accelerator module 350, a scheduler module 335, and support modules 346. In some embodiments, all traffic from the network interface module 310 is passed to the server-side accelerator module 350 for handling, as described more fully below. In other embodiments, some or all of the traffic from the server-side accelerator module 350 is passed to the support modules 346. For example, in one embodiment, real-time types of data (e.g., User Datagram Protocol ("UDP") data traffic, like Internet-protocol television ("IPTV") programming) bypass the server-side accelerator module 350, while non-real-time types of data (e.g., Transmission Control Protocol ("TCP") data traffic, like web video) are routed through the server-side accelerator module 350 for processing. Embodiments of the server-side accelerator module 350 provide various types of application, WAN/LAN, and/or other acceleration functionality. In one embodiment, the server-side accelerator module 350 implements functionality of AcceleNet applications from Intelligent Compression Technologies, Inc. ("ICT"), a division of ViaSat, Inc. This functionality may be used to exploit information from application layers of the protocol stack (e.g., layers 4 - 7 of the IP stack) through use of software or firmware operating in the user system 110 (e.g., in the user terminal 230 and/or the CPE 260).
[0060] In some embodiments, the server-side accelerator module 350 is adapted to provide high payload compression. This allows faster transfer of the data and enhances the effective capacity of the network. The server-side accelerator module 350 can also implement protocol- specific methods to reduce the number of round trips needed to complete a transaction, such as by prefetching objects embedded in HTTP pages. In other embodiments, functionality of the server-side accelerator module 350 is closely integrated with the satellite link through other modules, including the support modules 346, the scheduler module 335, the modem termination module 330, etc., to reduce upload bandwidth requirements and/or to more efficiently schedule to the satellite link. For example, the link layer may be used to determine whether packets are successfully delivered, and those packets can be tied more closely with the content they supported through application layer information. In certain embodiments, these and/or other functions of the server-side accelerator module 350 are provided by a server optimizer 130 resident on (e.g., or in communication with) the server-side accelerator module 350.
[0061] In some embodiments, the server optimizer 130 is implemented with multiple servers. Each of the multiple servers may be configured to handle a portion of the traffic passing through the server-side accelerator module 350. It is worth noting that functionality of various embodiments described herein use data which, at times, may be processed across multiple servers. As such, one or more server management modules may be provided for processing (e.g., tracking, routing, partitioning, etc.) data across the multiple servers. For example, when one server within the server optimizer 130 receives a request from a user (e.g., from a user system 110 on a spot beam 235, as shown in FIG. 2), the server management module may process that request in the context of other requests received at other servers in the server optimizer 130. In one embodiment, coordination between servers is implemented in support of singular storage of data. For example, it may be desirable to avoid caching the same byte sequence twice in two servers that are in communication with each other (e.g., where both servers are part of a storage area network 322 ("SAN") in the server system 220). In another embodiment, servers are configured to communicate to facilitate the identification of deltacasting opportunities (e.g., use of deltacasting to handle live content requests, overlapping content requests, correlative anticipatory pre-positioning, etc.), as described more fully below.
[0062] It will be appreciated that, while the server optimizer 130 is illustrated as part of the server system 220, this should not be construed as limiting the location or implementation of the server optimizer 130. In one embodiment, the server optimizer 130 is implemented by a server in communication with the server system 220 over the network 140. For example, a third party may lease server space that is accessible over the Internet or a private connection (e.g., a highspeed fiber connection). The leased server space may be used for serving the server optimizer 130.
[0063] Data processed by the server-side accelerator module 350 may pass through the support modules 346 to the scheduler module 335. Embodiments of the support modules 346 include one or more types of modules for supporting the functionality of the modem termination module 330, for example, including a multicaster module 340, a fair access policy ("FAP") module 342, and an adaptive coding and modulation ("ACM") module 344. In certain embodiments, some or all of the support modules 346 include off-the-shelf types of components.
[0064] Embodiments of the multicaster module 340 provide various functions relating to multicasting of data over the links of the communications system. Certain embodiments of the multicaster module 340 use data generated by other processing modules (e.g., the server-side accelerator module 350) to prepare traffic for multicasting. For example, the multicaster module 340 may prepare datagrams as a multicast stream. Other embodiments of the multicaster module 340 perform more complex multicasting-related functionality. For example, the multicaster module 340 may contribute to determinations of whether data is unicast or multicast to one or more users (e.g., using information generated by the server-side accelerator module 350), what modcodes to use, whether data should or should not be sent as a function of data stored at destination user terminals 230, how to handle certain types of encryption, etc.
[0065] Embodiments of the accounting module 342 implement various accounting-related functions. In one embodiment, the accounting module 342 collects data from multiple components to determine how much network usage to attribute to a particular user. For example, the accounting module 342 may determine how to count upload or download traffic against a user's fair access policy (FAP). In another embodiment, the accounting module 342 dynamically adjusts FAPs according to various network link and/or usage conditions. For example, the accounting module 342 may adjust FAPs to encourage network usage during lower traffic times. In yet another embodiment, the accounting module 342 affects the operation of other components of the modem termination module 330 as a function of certain FAP and/or other accounting conditions. For example, the accounting module 342 may direct the multicaster module 340 to multicast certain types of data or to prevent certain users from joining certain multicast streams as a function of FAP or other considerations.
[0066] Embodiments of the ACM module 344 implement various ACM functions. For example, the ACM module 344 may track link conditions for certain spot beams, users, etc., for use in dynamically adjusting modulation and/or coding schemes. In some embodiments, the ACM module 344 may help determine which users should be included in which customer groupings or multicast streams as a function of optimizing resources through modcode settings. In certain embodiments, the ACM module 344 implements ACM-aware encoding of data adapted for progressive encoding. For example, MPEG-4 video data may be adapted for progressive encoding in layers (e.g., a base layer and enhancement layers). The ACM module 344 may be configured to set an appropriate modcode separately for each layer to optimize video delivery.
[0067] When traffic has been processed by the server-side accelerator module 350 and/or the support modules 346, the traffic is passed to the scheduler module 335. Embodiments of the scheduler module 335 are configured to provide various functions relating to scheduling the links of the communications system handled by the server system 220. For example, the scheduler module 335 may manage link bandwidth by scheduling license grants within a spot beam.
[0068] In some embodiments, functionality of the server system 220 involves communication and interaction with the SAN 322. Embodiments of the SAN 322 include a shared storage module 320, which may include any useful type of memory store for various types of functionality of the server system 220. For example, the shared storage module 320 may include volatile or non-volatile storage, servers, files, queues, etc. In certain embodiments, the SAN 322 further includes a captive edge server 325, which may be in communication with the shared storage module 320. In some embodiments, the captive edge server 325 provides functionality similar to that of the third-party edge server 312, including content mirroring. For example, the captive edge server 325 may facilitate different contractual relationships from those of the third- party edge server 312 (e.g., between the server system 220 provider and various content providers). In certain embodiments, the captive edge server 325 and/or the third-party edge server 312 are in communication with server-side storage (e.g., within the SAN 322).
[0069] It will be appreciated that components of the server system 220 may provide many different types of functionality. For example, some embodiments oversee a variety of decoding, interleaving, decryption, and unscrambling techniques. Other embodiments manage functions applicable to the communication of content downstream through a satellite (e.g., the satellite 205 of FIG. 2) to one or more users (e.g., user systems 110 of FIG. 2). As described more fully below with reference to various embodiments, the server system 220 may handle different types of traffic in different ways. For example, some uses of the communications system involve contractual relationships and/or obligations with third-party content providers to interface with their edge servers (e.g., through the third-party edge server 312), while other uses involve locally "re-hosting" certain content (e.g., through the captive edge server 325). Further, some use cases handle real-time types of data (e.g., UDP data) differently from non-real-time types of data (e.g., TCP data). Many other uses are possible.
[0070] In certain embodiments, some or all of these downstream communications functions are handled by the server-side transceiver module 360. Embodiments of the server-side transceiver module 360 encode and/or modulate data, using one or more error correction techniques, adaptive encoding techniques, baseband encapsulation, frame creation, etc. (e.g., using various modcodes, lookup tables, etc.). Other functions may also be performed by the server-side transceiver module 360 or other components of the server system 220, including upconverting, amplifying, filtering, tuning, tracking, etc. For example, in the context of the satellite communications system 200 of FIG. 2, the server-side transceiver module 360 may communicate data to one or more antennae 210 for transmission via the satellite 205 to the user systems 110. Embodiments of the server system 220 also include the modem termination module 330 for receiving modem traffic over the satellite link from users. In some embodiments, the modem termination module 330 is configured substantially as a satellite modem termination system ("SMTS"). [0071] In other embodiments, downstream functions and or other functions of the server system 220 are centralized and/or distributed according to various embodiments of the invention. For example, as shown in FIG. 2, a server system 220 may include a number of base stations 215, gateways 217, and/or other components (e.g., hubs, cross-connects, cores, etc.). Similarly, in other types of communications systems, multiple server system 220 components may perform various functions on the server-side of the communications system. In some embodiments, substantially each server system 220 node (e.g., each base station 215, gateway 217, etc.) is capable of performing substantially all the server system 220 functionality. In other embodiments, much of the advanced processing server system 220 functionality is implemented in edge nodes (e.g., base stations 215) of the server system 220, while other nodes (e.g., gateways 217, cores, cross-connects, etc.) provide more basic routing and/or switching functions. In still other embodiments, edge node functionality is fairly limited, while advanced processing functions are more centralized (e.g., in gateways 217, core nodes, etc.).
[0072] As described above (e.g., with reference to FIGS. 1 and 2), the server system 220 communicates with one or more user systems 110 configured to perform various user-side (e.g., client-side) communications functions. FIG. 4 shows a simplified block diagram of an embodiment of a user system 110a, including an embodiment of a user terminal 230 coupled between a user antenna 225 and a CPE 260, according to various embodiments. Some embodiments of the user system 110 are configured, as shown in FIG. 2, to communicate over a satellite communications system 200 by interfacing with a server system 220 over a satellite link (e.g., the server system 220 of FIG. 3). Interfacing and other functionality of the user system 110 may be provided by components of the user terminal 230, including a terminal transceiver module 410, data processing modules 415, and a client storage module 437. Embodiments of the data processing modules 415 include a MAC module 450, a terminal accelerator module 430, and a routing module 420.
[0073] The components may be implemented, in whole or in part, in hardware. Thus, they may include one or more ASICs adapted to perform a subset of the applicable functions in hardware. Alternatively, the functions may be performed by one or more other processing modules (or cores), on one or more integrated circuits. In other embodiments, other types of integrated circuits may be used (e.g., Structured/Platform ASICs, FPGAs, and other Semi- Custom ICs), which may be programmed. Each may also be implemented, in whole or in part, with instructions embodied in a computer-readable medium, formatted to be executed by one or more general or application specific processors.
[0074] A signal from the user antenna 225 is received by the user terminal 230 at the terminal transceiver module 410. Embodiments of the terminal transceiver module 410 may amplify the signal, acquire the carrier, and/or downconvert the signal. In some embodiments, this functionality is performed by other components (either inside or outside the user terminal 230).
[0075] In some embodiments, data from the terminal transceiver module 410 (e.g., the downconverted signal) is communicated to the data processing modules 415 for processing. For example, data is communicated to the MAC module 450. Embodiments of the MAC module 450 prepare data for communication to other components of, or in communication with, the user terminal 230, including the terminal accelerator module 430, the routing module 420, and/or the CPE 260. For example, the MAC module 450 may modulate, encode, filter, decrypt, and/or otherwise process the data to be compatible with the CPE 260.
[0076] In some embodiments, the MAC module 450 includes a pre-processing module 452. The pre-processing module 452 implements certain functionality for optimizing the other components of the data processing modules 415. In some embodiments, the pre-processing module 452 processes the signal received from the terminal transceiver module 410 by interpreting (e.g., and decoding) modulation and/or coding schemes, interpreting multiplexed data streams, filtering the digitized signal, parsing the digitized signal into various types of information (e.g., by extracting the physical layer header), etc. In other embodiments, the preprocessing module 452 pre-filters traffic to determine which data to route directly to the routing module 420, and which data to route through the terminal accelerator module 430 for further processing.
[0077] Embodiments of the terminal accelerator module 430 provide substantially the same functionality as the server-side accelerator module 350, including various types of applications, WAN/LAN, and/or other acceleration functionality. In one embodiment, the terminal accelerator module 430 implements functionality of AcceleNet™ applications, like interpreting data communicated by the server system 220 using high payload compression, handling various prefetching functions, parsing scripts to interpret requests, etc. In certain embodiments, these and/or other functions of the terminal accelerator module 430 are provided by a client optimizer 120 resident on (e.g., or in communication with) the terminal accelerator module 430. Notably, in some embodiments, the client optimizer 120 is implemented as client optimizer 120a on the user terminal 230 and/or client optimizer 120b on the CPE 260b. Data from the MAC module 450 and/or the terminal accelerator module 430 may then be routed to one or more CPEs 260 by the routing module 420.
[0078] In some embodiments, output from the data processing modules 415 and/or the terminal accelerator module 430 is stored in the client storage module 437a. Further, the data processing modules 415 and/or the terminal accelerator module 430 may be configured to determine what data should be stored in the client storage module 437a and which data should not (e.g., which data should be passed to the CPE 260). It will be appreciated that the client storage module 437a may include any useful type of memory store for various types of functionality of the user system 110. For example, the client storage module 437a may include volatile or non- volatile storage, servers, files, queues, etc. Embodiments of the client storage module 437a are configured to store some or all of a client dictionary 435, as described more fully below.
[0079] In certain embodiments, storage functionality and/or capacity is shared between an integrated (e.g., on-board) client storage module 437a and an extended (e.g., off-board) storage module 439a. For example, the extended storage module 439a may be implemented in various ways, including as an attached peripheral device (e.g., a thumb drive, USB hard drive, etc.), a wireless peripheral device (e.g., a wireless hard drive), a networked peripheral device (e.g., a networked server), etc. In some embodiments, the user terminal 230 interfaces with the extended storage module 439a through one or more ports 438a. In one embodiment, functionality of the client storage module 437 is implemented as storage integrated into or in communication with CPE 260 (e.g., as client storage module 437b in CPE 260b).
[0080] Some embodiments of the CPE 260 are standard CPE 260 devices or systems with no specifically tailored hardware or software (e.g., shown as CPE 260a). Other embodiments of the CPE 260, however, include hardware and/or software modules adapted to optimize or enhance integration of the CPE 260 with the user terminal 230 (e.g., shown as alternate CPE 260b). For example, the alternate CPE 260b is shown to include a CPE accelerator module 462, a CPE processor module 466, and a client storage module 437b. Embodiments of the client storage module 437b are configured to store some or all of the client dictionary 435b. Embodiments of the CPE accelerator module 462 are configured to implement the same, similar, or complementary functionality as the terminal accelerator module 430. For example, the CPE accelerator module 462 may be a software client version of the terminal accelerator module 430. In some embodiments, some or all of the functionality of the data processing modules 415 is implemented by the CPE accelerator module 462 and/or the CPE processor module 466. In these embodiments, it may be possible to reduce the complexity of the user terminal 230 by shifting functionality to the alternate CPE 260b.
[0081] Embodiments of the client storage module 437b may include any type of dictionary, object or byte caching, data serving, and/or other storage-related components in or in communication with the alternate CPE 260b (e.g., a computer hard drive, a digital video recorder ("DVR"), etc.). In some embodiments, the client storage module 437b is in communication with an extended storage module 439b, for example, via one or more ports 438b. Of course, many types of CPE 260 are possible, and the functionality of the CPE 260 may be implemented in a number of different types of devices or systems. In some embodiments, the CPE 260 is a fixed or mobile end device for displaying content to the user, like a television, personal computer, home theater system, cellular telephone, portable music or video player, personal digital assistant, etc. In other embodiments, the CPE 260 is an intermediate device, configured to communicate to another CPE 260 end device (or even to another CPE 260 intermediate device). For example, the CPE 260 may include a set-top box, a home networking component (e.g., a router, a hub, a femtocell, etc.), or any other type of intermediate device. As shown, CPE 260c is in communication with the user terminal 230 indirectly through CPE 260b, where CPE 260b is acting as an intermediate device.
[0082] Further, in some embodiments, the CPE 260 is integrated, partially or completely, with the user terminal 230. For example, a home theater system may be built around a main interface component that includes a network interface having user terminal 230 functionality, certain CPE 260 functionality, and ports for wired or wireless communication with additional CPE 260 devices. Embodiments of user terminals 230 and/or CPEs 260 may also be configured for compatibility with certain communication standards. For example, CPEs 260 may be configured to support plug-and-play functionality (e.g., through the Digital Living Network Alliance (DLNA) standard), wireless networking (e.g., through the 802.11 standard), etc.
[0083] In certain embodiments, the user terminal 230 is configured to transmit data back to the server system 220. Embodiments of the data processing modules 415 and the terminal transceiver module 410 are configured to provide functionality for communicating information back through the communications system (e.g., through the satellite communications system 200 of FIG. 2 for directing provision of services). For example, information about what is stored in the client dictionary 435 may be sent back to the server system 220 for limiting repetitious file transfers, as described more fully below.
[0084] It will be appreciated that the communications system may be used to provide different types of communication services to users. For example, the satellite communications system 200 of FIG. 2 may provide content from content servers 150, through the network 140, to a user's CPE 260, including Internet content, broadcast television and radio content, on-demand content, voice-over-Internet-protocol (VoIP) content, and/or any other type of desired content. It will be further appreciated that this content may be communicated to users in different ways, including through unicast, multicast, broadcast, and/or other communications.
[0085] As described more fully below, a number of additional and/or improved communications functions may be facilitated by exploiting content sharing and/or other types of opportunities through deltacasting. For example, in a typical communication system, like the satellite communications system 200 of FIG. 2, multiple customers may request the same or substantially similar content at the same or different times. By exploiting this feature of the communication system, it may be possible to optimize (at least partially) the provision of various communication services. For example, link conditions (e.g., bandwidth utilization) may be improved, enhanced services may be offered to customers, costs relating to service provision may be reduced, etc.
[0086] Content sharing may be implemented in many different ways, according to embodiments. For example, certain content may be multicast to a number of users in a spot beam, thereby allowing multiple user systems 110 to share channels (i.e., potentially increasing effective throughput). Rather than transmitting a copy of the content to each requesting user through a private unicast channel, fewer copies of the content may be shared by multiple users. In certain embodiments, custom or off-the-shelf components are used to provide this functionality by evaluating multiple communication streams and collapsing them into a single stream within some tolerance (e.g., a small "jitter window," accounting for inter-packet delay variances). In other embodiments, dedicated components in the server system 220 implement this functionality.
[0087] According to various embodiments, deltacasting and related functionality may be implemented at least partially through client-server interactions. As discussed above, a server optimizer 130 may determine what content is traversing the various links in the communication system using fingerprints. For example, the fingerprints may be used to identify fingerprint trends (e.g., patterns of byte-sequence communications) and/or to identify actual content features (e.g., information from layers 4 - 7 of the OSI IP protocol stack). These determinations may then be used to identify and exploit opportunities for improving the communication services over the communications system.
[0088] FIG. 5 shows a block diagram of an embodiment of a communications system 500, illustrating client-server interactivity through a client optimizer 120 and a server optimizer 130, according to various embodiments. In some embodiments, the communications system 500 is an embodiment of the communications system 100a of FIG. IA or the satellite communications system 200 of FIG. 2. As shown, the communications system 500 facilitates communications between a user system 110 and one or more content servers 150 via at least one client-server communication link 125 and at least one content network link 135. For example, interactions between the client optimizer 120 and the server optimizer 130 effectively create a tunnel 505 between the user system 110 and the content servers 150. In some embodiments, the content network link 135 includes links through a network 140, like the Internet. Also, as illustrated, embodiments of the client-server communication link 125 support one or more unicast service flows 525 and one or more multicast service flows 515.
[0089] In some embodiments, the user system 110 includes a client graphical user interface (GUI) 512, a web browser 514, and a redirector 516. The client GUI 512 may allow a user to configure performance aspects of the user system 110 (e.g., or even aspects of the greater communications system 500 in some cases). For example, the user may adjust compression parameters and/or algorithms, alter content filters (e.g., for blocking illicit websites), or enable or disable various features used by the communications system 500. In one embodiment, some of the features may include network diagnostics, error reporting, as well as controlling, for example, components of the client optimizer 120 and/or the server optimizer 130.
[0090] In one embodiment, the user selects a universal recourse locator (URL) address through the client GUI 512 which directs the web browser 514 (e.g., Internet Explorer®, Firefox®, Netscape Navigator®, etc.) to a website (e.g., cnn.com, google.com, yahoo.com, etc.). The web browser 514 may then issue a request for the website and associated objects to the Internet. It is worth noting that the web browser 514 is shown for illustrative purposes only. While embodiments of the user system 110 may typically include at least one web browser 514, user systems 110 may interact with content providers 150 in a number of different ways without departing from the scope of the invention.
[0091] The content request from the user system 110 (e.g., from the web browser 514) may be intercepted by the redirector 516. It is worth noting that embodiments of the redirector 516 are implemented in various ways. For example, embodiments of the redirector 516 are implemented within a user modem as part of the modem's internal routing functionality. The redirector 516 may send the request to the client optimizer 120. It is worth noting that the client optimizer 120 is shown as separate from the user system 110 (e.g., in communication over a local bus, on a separate computer system connected to the user system 110 via a high speed/low latency link, like a branch office LAN subnet, etc.). However, embodiments of the client optimizer 120 are implemented as part of the user system 110 in any useful client-side location, including as part of a user terminal, as part of a user modem, as part of a hub, as a separate hardware component, as a software application on the client machine, etc.
[0092] In one embodiment, the client optimizer 120 includes an object processor 522a. The object processor 522a may be configured to perform a number of different processing functions, including Java parsing and protocol processing. Embodiments of the object processor 522a may process hypertext transfer protocol (HTTP), file transfer protocol (FTP), various media protocols, metadata, header information, and/or other relevant information from the request data (e.g., packets) to allow the client optimizer 120 to perform its optimizer functions. For example, the request may be processed by the object processor 522a to determine which objects are being requested and whether data needed to generate the requested object is already stored in client storage (e.g., in the client dictionary 435 from a prefetch operation, a pre-positioning operation, a multicast caching operation, a previous deltacasting operation, etc.).
[0093] In some embodiments, the object processor 522a sends the processed request data to a deltacast coder 524a. The deltacast coder 524a may encode the request into a compressed version of the request using one or more data compression algorithms. For example, these algorithms may employ dictionary coding with the client dictionary 435 configured to store strings so that data from previous web objects can be used to compress data from new pages. Of course, other types of coding are possible according to other embodiments of the deltacast coder 524a.
[0094] The processed and/or coded request data may then be further processed by a unicast processor 528a in some embodiments in preparation for communicating the data over the client- server communication link 125 (e.g., as private IP traffic). In various embodiments, the unicast processor 528a processes the data according to one or more protocols, for example a unicast protocol, depending at least on the type of communication links implemented as part of the client-server communication link 125. For example, the client-server communication link 125 may include a wireless link, a cellular link, a satellite link, a dial-up link, etc. In certain embodiments, the unicast processor 528a is configured to implement Intelligent Compression Technology's® (ICT) transport protocol (ITP). In one embodiment, ITP maintains a persistent connection between the client optimizer 120 and the server optimizer 130. The persistent connection may enable the communications system 500 to reduce or eliminate inefficiencies and overhead costs associated with creating a new connection for each request.
[0095] In some embodiments, the communication is received at the other end of the client- server communication link 125 by a unicast processor 528b in the server optimizer 130. In some embodiments, the unicast processor 528b in the server optimizer 130 is implemented as substantially an identical component to the unicast processor 528a in the client optimizer 120. In other embodiments, implementations of the unicast processors 528 may be tailored to their location (e.g., in the client optimizer 120 or the server optimizer 130). When the request data is received by the unicast processor 528b, the unicast processor 528b may process the request according to the applied one or more protocols. For example, the unicast processor 528b may be configured to implement ITP, such that data sent from the unicast processor 528a according to the ITP protocol can be processed accordingly.
[0096] As discussed above, the data received at the server optimizer 130 from the client optimizer 120 may be coded (e.g., dictionary coded) and/or otherwise processed (e.g., according to one or more protocols, like HTTP). Embodiments of the server optimizer 130 include an object processor 522b, a deltacast coder 524b, and a modeler module 532. In some embodiments, the object processor 522b and the deltacast coder 524b are configured to handle processing and/or coding of the request data implemented by the object processor 522a and the deltacast coder 524a of the client optimizer 120, respectively. For example, embodiments of the object processor 522b use features of the deltacast coder 524b and/or dictionary types of information, which may be stored, or modeled, in a modeler module 532 to decode the request data. The request may thus be processed (e.g., translated, decoded, etc.) into a format that is accessible to a source of the requested content (e.g., a website). Come embodiments also include a content stream manager 540 for performing additional functionality, for example, for facilitating live content deltacasting and/or overlapping request handling, as described more fully below. In some embodiments, the content stream manager 540 handles some or all the functionality of the deltacast coder 524b. Of course, in certain embodiments, additional features of the request may be processed by these or other components.
[0097] Embodiments of the object processor 522b may then forward the decoded request to an appropriate destination (e.g., a content server 150) over the content network link 135 (e.g., via a network 140). The content network link 135 may include, for example, a cable modem connection, a digital subscriber line (DSL) connection, a Tl connection, a fiber optic connection, etc. As discussed above, in some embodiments of the communications system 500, the content network link 135 manifests substantially lower latency than that of the client-server communication link 125.
[0098] Response data may be received by the object processor 522b, in response to the request, from the appropriate destination (e.g., the content server 150) over the content network link 135. It will be appreciated that the response data may include various types of information, such as one or more attachments (e.g., media files, text files, etc.), references to "in-line" objects needed to render a web page, etc. Embodiments of the object processor 522b may be configured to interpret the response data, which may, for example, be received as HTML, XML, CSS, Java Scripts, or other types of data. A fingerprint of the response data may be generated by the deltacast coder 524b (e.g., using dictionary coding techniques, as described above) and used for various types of optimization functions. For example, the fingerprint may be calculated using byte-level information from the response data. The fingerprints and/or byte-level information may also be stored in a server dictionary, cache, etc. by the modeler module 532.
[0099] In some embodiments, as described more fully below, the content stream manager 540 looks at the fingerprints to identify and/or exploit deltacasting opportunities for collapsing live content streams and/or for handling overlapping requests. For example, as described below, the response data may be identified as part of a shared content stream. The fingerprints and/or corresponding data blocks may then be stored by the modeler module 532 (e.g., in a global stream model 542 and/or client stream models 544 for clients participating in the multicast). In certain embodiments, the fingerprint is used to determine how to further handle the response data, before, after, according to, and/or independent of other deltacasting determinations.
[0100] In some embodiments, processed and/or coded (e.g., compressed) response data is sent over the client-server communication link 125 to the client optimizer 120. The data may be sent as a unicast service flow 525 from the unicast processor 528b in the server optimizer 130 to the unicast processor 528a in the client optimizer 120; and/or the data may be sent as one or more multicast service flows 515 from the multicast processor 530b in the server optimizer 130 to the multicast processor 530a in the client optimizer 120. In certain embodiments, standard protocols are adapted for use with the unicast service flows 525 and/or the multicast service flows 515. For example, the Pragmatic General Multicast ("PGM") protocol, the Negative- Acknowledgment ("NACK") Oriented Reliable Multicast ("NORM"), or "RFC 3940," protocol from the Internet Engineering Task Force ("IETF"), or other protocols may be used to implement multicasting.
[0101] Further, when the client-server communication link 125 includes multiple multicast service flows 515, the multicast service flows 515 may be configured in various ways. In various embodiments, for example, the multicast service flows 515 are configured to each communicate at a different modcode point, on a different spot beam, and/or on a different carrier. This may allow for more efficient communication of traffic to groups of user systems 110 having particular characteristics. For example, if certain traffic is determined to be destined for a user system 110 capable of communicating at a particular modcode point, the traffic may be multicast on a multicast service flow 515 that operates at or near this modcode point for maximum efficiency (e.g., rather than at the lowest modcode point needed to transmit to all user systems 110 in the multicast group). While this may, in certain cases, cause some of the user systems 110 in the multicast group to be unable to reliably receive all the multicast data, there may still be an overall improvement in the operation of the communications system 500.
[0102] In other embodiments, modcodes may be handled (e.g., selected, adapted, optimized, etc.) for various effects. In one embodiment, as described above, the modcode is selected according to link conditions between the server optimizer 130 and the client optimizer 120 associated with multiple clients (e.g., all clients participating in the shared content stream, so that at least those clients can reliably receive the communication). In another embodiment, the modcode is selected so that at least some threshold group (e.g., number) of clients can reliably receive the communication. In still other embodiments, the modcode is adapted to changes in link conditions between the server optimizer 130 and one or more client optimizers 120. For example, adaptive coding and modulation techniques may be used. The modcode may be adapted by estimating or monitoring link conditions from the server-side (e.g., estimating signal- to-noise ratios, bandwidth, etc.) or via feedback from the client-side. In one embodiment, the client optimizer 120 communicates information, like whether packets are reliably received, as feedback to the server optimizer for dynamically adjusting the modcode.
[0103] The data received at the client optimizer 120 from the server optimizer 130 may be coded (e.g., dictionary coded) and/or otherwise processed (e.g., according to one or more protocols, like HTTP). Embodiments of the object processor 522a and the deltacast coder 524a in the client optimizer 120 are configured to handle processing and/or decoding of the response data, respectively. For example, embodiments of the object processor 522a use features of the deltacast coder 524a, including functionality of the client dictionary 435, to decode the response data. Embodiments of the object processor 522a may then forward the decoded response to the user system 110 (or to other components of the user system 110, where the client optimizer 120 is part of the user system 110). The response may then be used by components of the user system 110. For example, a media object received as part of the response data may be played back through a media player at the user system 110, used to render a web page through the client web browser 514, etc.
[0104] In some embodiments, response data (e.g., and/or related identifiers, like fingerprints) is stored in the client dictionary 435. Embodiments of the server optimizer 130 include a client dictionary model 548 (e.g., in the modeler module 532) that is configured to maintain a model of the client dictionary 435. Maintaining the client dictionary model 548 may be accomplished in a number of different ways, including through various synchronization processes, bidirectional communications of acknowledgements and/or other types of notifications, etc. For example, when data is stored in the client dictionary 435, an acknowledgement is communicated back to the server optimizer 130. After the server optimizer 130 receives the acknowledgement, the modeler module 532 may update the client dictionary model 548 accordingly.
[0105] It will be appreciated that, while the above description focuses on browser requests and responses to those requests, embodiments of the invention function within many other contexts. For example, embodiments of the communication system 500 are used to provide interactive Internet services (e.g., access to the world-wide web, email communications, file serving and sharing, etc.), television services (e.g., satellite broadcast television, Internet protocol television (IPTV), on-demand programming, etc.), voice communications (e.g., telephone services, voice- over-Internet-protocol (VoIP) telephony, etc.), networking services (e.g., mesh networking, VPN, VLAN, MPLS, VPLS, etc.), and other communication services. As such, the "response" data discussed above is intended only as an illustrative type of data that may be received by the server optimizer 130 from a content source (e.g., a content server 150). For example, the "response" data may actually be pushed, multicast, or otherwise communicated to the user without an explicit request from the user.
[0106] For illustrative purposes, traffic over the communications system 500 may be categorized into private-interest traffic and public-interest traffic. Private-interest traffic may include any traffic for which multicasting the traffic to multiple user systems 110 is deemed inefficient. For example, where the traffic is of interest to only one user system 110, or a very small number of user systems 110, it may cost more to set up and process a multicast service flow than to simply unicast the traffic to each interested user system 110. Notably, a user system 110 may act as an intermediate node (e.g., a hub, switch, router, etc.) that forwards information to multiple end users. For example, in a LAN, data may be received at the client-side for all computers in the LAN by a switch, which may then forward the data to appropriate users in the LAN; traffic that is of interest to only one user system 110 may, in fact, be of interest to many users within a LAN serviced by the one user system 110. Alternatively, each user in the LAN may be considered a separate user system 110 running a separate client optimizer 120. As such, the relevant determination may be, from the perspective of the server optimizer 130, how many unicast service flows 525 on the client-server communication link 125 would be needed to unicast the data to all interested users. In contrast to private-interest traffic, public-interest traffic may include any traffic for which multicasting the traffic to multiple user systems 110 is deemed more efficient than unicasting the traffic to each interested user system 110.
[0107] Notably, a number of types of traffic may be either private-interest traffic or public- interest traffic, depending on the context. One example is control traffic, which may be used for various types of control of the communications system. For example, control traffic may be used to send control signals to the client optimizer 120 to direct the client optimizer 120 to accept a particular multicast service flow 515. In one embodiment, individual control traffic is sent as unicast service flows 525 to particular client optimizers 120. In another embodiment, certain control traffic is sent to groups of client optimizers 120 (e.g., to some or all of the user systems 110 serviced by a particular spot beam of a satellite communications system) as one or more multicast service flows 515.
[0108] Another type of traffic that may be either private-interest traffic or public-interest traffic is media object data. In one embodiment, a first user takes video with a digital camera as part of a videoconference with a second user. The video file may be considered private-interest traffic, as it may be of interest only to the recipient and may never be requested, or even be made accessible, to other users on the communications system 500. In another embodiment, a reporter for CNN takes video with a digital camera as part of a live feed to CNN.com. The video file may be considered public-interest traffic, as it may be accessed by thousands of users on the communications system 500.
[0109] Of course, the determination of whether to classify traffic as private-interest traffic or public-interest traffic can be made in a number of ways and may involve many factors. The factors used to make the determination may be derived from the traffic itself or from other sources (e.g., from an evaluation of current link conditions or current system usage, from third- party information, etc.). When analyzing the traffic itself, information may be derived from the header portion and/or the content portion of the datagrams. As noted above, the header portion may provide straightforward sources of information about the communication and/or the content of the communication (e.g., through protocol information, metadata, public or proprietary tags, etc.). However, the information from the header portion may often be limited from the perspective of a man-in-the-middle type of server optimizer 130. For example, relevant header information may be encoded in a proprietary format, may be misleading as to the underlying byte sequence, etc.
[0110] The content portion of the traffic received at the server optimizer 130 includes the actual objects (e.g. content file data) being sent to users via respective user systems 110. It will be appreciated that it may be difficult or impossible to obtain certain types of information looking only at the content portion of the traffic datagrams. Of course, various types of data processing (e.g., statistical analysis) can be used to derive information from the byte sequences in the content portion, but it may be difficult to derive high-level information, such as the file type associated with the data. For example, a movie is streamed from a VOD server (e.g., as the content server 150) to a user terminal 110. Proprietary tags in the header portion of the traffic may indicate the name of the movie and the file type for processing at the user's playback device, while the content portion may include only the sequence of bytes that define the actual movie content. When the streaming traffic is intercepted by the server optimizer 130, the server optimizer 130 may be unable to read the header portion of the traffic, and may, therefore, be unable to use that information for making multicast and/or other determinations.
[0111] Embodiments of the server optimizer 130 process the content portion of the traffic as byte-level data using various deltacasting techniques. FIG. 6 is a flow diagram of an illustrative method 600 for using deltacasting to handle traffic over a communications system, according to various embodiments. For the sake of clarity, the method 600 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 600. [0112] Embodiments of the method 600 begin at block 604 by receiving a block of content data. For example, the content data block (e.g., file data, streaming data, web object data, etc.) may be received as part of traffic intercepted by the server optimizer 130 from a content server 150 over the content network link 135. In some embodiments, at block 608, an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 612. This determination may be made by the object processor 522b.
[0113] The multicast prefilter 612 may be defined according to any types of multicast or similar filtering criteria known in the art. In one embodiment, the multicast prefilter 612 is based on the file size of the content data block. For example, only files larger than a certain minimum size may be considered for multicasting. In another embodiment, information from the header portion of the traffic is used by the multicast prefilter 612. For example, the multicast prefilter 612 may be defined to make the initial multicast determination in block 608 according to source IP address, host URL, destination IP address, file type, protocol, HTTP metadata, etc. For example, all video files over a certain size coming from YouTube.com may be considered multicast candidates, while video files being sent as an email attachment to a single recipient may not be considered multicast candidates.
[0114] In some embodiments, data relevant to the multicast prefilter 612 is enhanced through trusted source relationships. For example, contractual relationships may be formed with content and service providers to allow visibility by the service providers into the content traversing the network. Embodiments of the trusted source relationships include access to encryption keys (e.g., including master keys), authorization to re-serve or re-host content (e.g., through a mirroring relationship as described more fully below), etc. In the context of these relationships, the server optimizer 130 may be able to use certain types of proprietary metadata to make initial multicasting determinations.
[0115] When it is determined at block 608 that the content data block is not a multicast candidate, the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110. For example, as described above, the content data block may be processed by the object processor 522b and/or the deltacast coder 524b, and sent as a unicast service flow 525 over the client- server communication link 125 via the unicast processors 528. The data may then be received by the client optimizer 120, processed and/or decoded, and forwarded, as appropriate, to components of the user system(s) 110.
[0116] When it is determined at block 608 that the content data block is a multicast candidate (e.g., according to the multicast prefilter 612 criteria), the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515. At block 620, a fingerprint is generated (e.g., a fingerprint is calculated). In some embodiments, the fingerprint is generated at block 620 by the deltacast coder 524b of the server optimizer 130.
[0117] In certain embodiments, the fingerprint is generated using cryptographic hash functions (e.g., generated by a Message-Digest algorithm 5 (MD5) technique), non-secure hash functions (e.g., generated by a cyclic redundancy check (CRC) technique), or other similar techniques. In other embodiments, the fingerprint can be generated in any way, such that the resulting fingerprint can be used to indicate that one particular byte sequence (or a portion of the byte sequence) matches another particular byte sequence (e.g., or a portion of another byte sequence). Embodiments of dictionary coding (e.g., particularly delta coding) and related techniques are described in more detail in U.S. Patent Application No. 12/477,814, entitled "METHODS AND SYSTEMS FOR UTILIZING DELTA CODING IN ACCELERATION PROXY SERVERS" (026841-00211 OUS), filed on June 3, 2009, which is incorporated herein by reference for any and all purposes.
[0118] In some embodiments, the fingerprint is essentially a compressed version of the byte sequence. In other embodiments, the fingerprint is a checksum, hash, or other technique applied to some or all of the object data. For example, in one embodiment, a checksum of the first megabyte of data in the byte sequence is used as a fingerprint. This fingerprint may then be compared to other fingerprints to find a match. Notably, embodiments may ultimately seek multicast opportunities and/or other opportunities for optimization of the communications system 500. As such, it may be inefficient to generate fingerprints on very small blocks of data (e.g., at high densities), since it may not be efficient to exploit opportunities where only small blocks are identified as matches. Further, decreasing the size of blocks may increase the size of the dictionary. [0119] It is worth noting that the traffic may include more than just the content data block for which a fingerprint is being generated, or the traffic may include multiple different content data blocks for which fingerprints are generated. In one example, a media file is received at the object processor 522b of the server optimizer. The object processor 522b and/or the deltacast coder 524b may strip off data (e.g., header information) that is not needed for generating the fingerprint at block 620. In another example, an email is received having the media file as an attachment. The object processor 522b and/or the deltacast coder 524b may perform an extra step of stripping off the email data, in addition to the header and other data, to effectively isolate the byte sequence for fingerprint generation at block 620.
[0120] In block 624, the fingerprint is matched against other fingerprints of other content data blocks in the communications system 500. Determining which other content data blocks are "in the communications system 500" may include different types of analyses for different use cases. For example, in one embodiment, it is desirable to know whether the fingerprint indicates a matching content data block already stored at a particular user system 110 (e.g., in the client dictionary 435, etc.). In another embodiment, it is desirable to know whether the fingerprint indicates a matching data block already stored at the server-side of the communications system 500 (e.g., in server-side storage (not shown) or other storage accessible to the server optimizer 130). In still another embodiment, it is desirable to know whether the fingerprint indicates a matching data block currently being communicated over a unicast service flow 525 or one or more multicast service flows 515. In various embodiments, the modeler module 532 in the server optimizer 130 is configured to store models that may be useful for making various determinations (e.g., models of client dictionaries 435, models of server-side caches or dictionaries, models of past and current streams sent as either unicast service flows 525 or multicast service flows 515, etc.).
[0121] It will be appreciated that a number of different types of determinations may be made, depending on which blocks are being evaluated to find a match, each opening up potential deltacasting opportunities. One such determination is made in some embodiments in block 628, where the fingerprint of the content data block generated in block 620 is compared with blocks from the client dictionary model 632 to determine whether there is a match. For example, embodiments of the client dictionary 435 in the client optimizer 120 represent what is stored at a particular client (e.g., at a user system 110), and embodiments of the modeler module 532 at the server optimizer 130 store a model of the each client dictionary 435. If the content data block is destined for a particular client, the server optimizer 130 may use the model of the respective client dictionary 435 stored in the modeler module 532 to look for matches.
[0122] If a match is identified, this indicates that the byte sequence (or the portion of the byte sequence) is already stored local to the client (e.g., in the client's client dictionary 435). In that case, at block 636, all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes). At block 640, the highly compressed version of the content data block may then be unicast to the client. In some embodiments, the content data block is compressed by the server-side deltacast coder 524b and communicated as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
[0123] If no match is found at block 628, one or more types of multicast opportunities are evaluated at block 644. According to various embodiments, multicast opportunities evaluated at block 628 may include opportunities for multicasting some or all of the data of the content data block (e.g., or other data) as a function of finding matches between the content data block and other blocks in the communications system 500, as described above. In one example, where a content data block being requested by a first user is already being communicated to one or more other users (determined as a function of the byte-level data), it may be desirable to create a multicast service flow 515 or to add the requesting user to an existing multicast service flow 515.
[0124] In some embodiments, the method 600 evaluates multicast opportunities at block 644 even where a match is found at block 628 (e.g., if a partial match is identified). However, it is worth noting that identification of a match identified at block 628 may typically indicate that very high compression of the data is possible (e.g., in some cases, 10,000-to-l compression is available using the client dictionary 435). As such, it may be assumed in some embodiments that it is always more efficient to just unicast the highly compressed data at block 640 than to use system resources to evaluate multicast opportunities at block 644 (e.g., and potentially to set up a multicast service flow 515).
[0125] When multicast opportunities are evaluated in block 644, a determination may be made at block 648 as to whether multicast opportunities exist and if they should be exploited. For example, even where a multicast opportunity exists, it may be inefficient to spend the resources to exploit the opportunity (e.g., to set up a multicast service flow 515). Notably, a similar type of determination is described above with reference to block 608. However, the evaluation(s) made in block 608 looked at metadata, file sizes, and other header-types of information. The evaluation(s) made in block 644, on the contrary, use byte-level data from the content portion of the traffic datagrams and/or their respective fingerprints to match certain criteria (e.g., other blocks, etc.). As discussed above, making evaluations at the byte-level (e.g., using fingerprints) may be difficult for a number of reasons.
[0126] Further, multicast opportunities may be evaluated and fingerprint generation can be tailored in various ways depending on the types of opportunities being evaluated (e.g., the fingerprint may, itself, be a sequence of bytes or part of a more complex system of determining the associated byte sequence). By way of example, the fingerprints may be used in the context of identifying multicast opportunities with current service flows (e.g., to see if content requested by one user is currently being unicast or multicast to other users). To facilitate this type of identification, one embodiment generates maps having keys being the various fingerprints identifying the content data block and payloads that provide data about transfers underway or other useful information.
[0127] In certain embodiments, the maps are kept to a reasonable size to avoid unnecessary processing of data. For example, techniques are used to restrict the cases where the fingerprint is added to the map. In one embodiment, protocols that are "uninteresting" are excluded. For example, fingerprints may be created only for protocols known (e.g., predetermined) to be interesting, such as HTTP, certain media download protocols, etc. (e.g., as prefiltered in block 608). In another embodiment, small objects are excluded, as described above with reference to block 608. For example, if the size of the requested object is known (or predictable) in advance, it may be used as a filter - if the object is smaller than some threshold size, the fingerprint is not added to the map. When the object size is unknown (or not practically predictable), embodiments may wait until at least a minimum amount of data has been received, then filter out the noise (e.g., very small objects). Of course, it may be important to avoid delaying the map entry too long, such that it would cause the optimizer to miss certain a match with a new download. In some embodiments, when the download is complete, the fingerprint is removed from the map. [0128] If a determination is made at block 648 that either no multicast opportunities exist, or that the multicast opportunities should not be exploited, the content data block data and/or any related control data is unicast at block 652, where appropriate. For example, if the content data block is requested by one user and no multicast opportunities exist, the content data block data may be unicast to the requesting user. In some embodiments, unicasting the data at block 652 involves communicating the data as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
[0129] If a determination is made at block 648 that a multicast opportunity exists and should be exploited, the content data block may be multicast to one or more clients at block 656 (e.g., including the requesting client, where appropriate). In some embodiments, multicasting the data at block 656 involves communicating the content block data over one or more multicast service flows 515 to the client optimizer 120 via the multicast processors 530. In certain embodiments, the fingerprint generated in block 620, or another representation of the data (e.g., the byte sequence itself, a compressed version or a portion of the byte sequence, or a different types of fingerprint) is stored at the server-side for later use by the communications system 500. For example, storage of relevant information may be useful in generating or identifying future multicast opportunities, tracking and/or characterizing network usage, prefetching, etc.
[0130] It will be appreciated that, in some embodiments, multicasting or unicasting data is implemented in different ways. For example, in the satellite communications system 200 of FIG. 2, some or all of the receivers (e.g., user systems 110) in a spot beam 235 may inherently be capable of receiving at least a portion of any traffic being sent over the spot beam 235 by virtue of being tuned to the appropriate carrier, able to receive data at the current modcode point, etc.; effectively, the satellite communications system 200 broadcasts everything over the air. As such, as discussed above with reference to FIG. IB, unicasting or multicasting to one or more user systems 110 may, in fact, involve broadcasting the data over the satellite link and also broadcasting control data to direct receivers to either accept or ignore relevant portions of the broadcast data.
[0131] In one illustrative embodiment, it is determined that content requested by one user has a high probability of being accessed by a group of non-requesting users sharing a satellite spot beam on the communications system 500. The content is broadcast over the satellite link with a stream identifier that designates it as a multicast stream. Control data is also sent directing user systems 110 associated with the interested users to "listen" to the multicast stream (e.g., to accept, rather than ignore, data with that stream identifier as it is received). In effect, this creates a multicast group of the interested users. In different embodiments, the control data may be communicated to the multicast group either as respective unicast service flows 525 to each client via the unicast processors 528 or as part of a multicast control channel sent over a multicast service flow 515 via the multicast processors 530. It will be appreciated that, for the sake of bandwidth efficiency, embodiments typically send the control data over the multicast control channel. For example, all the user systems 110 may be constantly listening to the multicast control channel to find out (e.g., among other things) which streams they should accept. Of course, other implementations are possible according to various embodiments for unicasting or multicasting the data over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120.
[0132] Once the data is received at the client optimizer 120, it may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435). In certain embodiments, storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 if a model of the client-side client dictionary 435 is updated (e.g., through synchronization of the modeler module 532). When it is determined in block 648 that the data will be multicast in block 656 (e.g., and/or when the data is determined to be unicast in block 652), the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125. In one embodiment, the data is zip coded prior to being sent over the client-server communication link 125. When the zipped data is received at the client optimizer 120, the data is added to the client dictionary 435.
[0133] It will now be appreciated that embodiments allow usage of fingerprints, generated at the byte-level of the content portion of traffic traversing the network, to identify and/or exploit multicasting opportunities. Of course, generation of the fingerprints, as discussed in the context of the method 600 of FIG. 6, may enable additional features as well. In particular, the generation of the fingerprints may allow a level of content awareness, even where the server optimizer 130 is acting as a transparent intercept protocol and has little or no access to certain high-level information (e.g., header portion information, like URLs, file types, or other metadata). [0134] For example, while the method 600 was discussed in terms of processing a single data block as it is received at block 602, embodiments of the communications system 500 may, in fact, perform these steps numerous times. For example, over a period of network operation, millions of requests may be processed from thousands of clients, resulting in massive amounts of traffic traversing the communications system 500. Meanwhile, large numbers of data fingerprints may be generated and/or stored, which may yield opportunities for statistical processing to determine trends and/or other usage information. This type of information can then be used to indirectly develop a content awareness (e.g., make certain assumptions about byte sequences, like content popularity, user correlations, etc.), even where usage of metadata is limited.
[0135] It is worth noting that the use of fingerprinting (e.g., and/or other dictionary coding techniques) to make multicasting and related determination may provide a number of features. One feature is that deltacasting opportunities may be identified and/or exploited even where there is little or no access to certain metadata. For example, as discussed above, the server optimizer generates signatures based on byte level data and does not require knowledge of "header portion" information (e.g., file types, proprietary tags, protocol tags, etc.) to make its determinations.
[0136] Another feature is that fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content source or other "header portion" (e.g., metadata) information is different. For example, say viewers are watching the same television show at the same time from different sources (e.g., different television channels are broadcasting the same content, different websites are mirroring the same content, etc.). Fingerprinting techniques can find matching blocks, as the blocks will match even where the content sources are different. Similarly, deltacasting opportunities may be identified even where cache-busting, anonymizer, spoofing, mirroring, and/or other techniques are used (e.g., to alter URLs, to implement content data network (CDN) functionality, etc.).
[0137] Still another feature is that deltacasting techniques may be used transparently to preserve communications from the perspective of end users and content sources. In particular, an end user and a content source may effectively experience the same byte-for-byte communications with or without deltacasting. For example, even though requests and/or responses are intercepted according to deltacasting embodiments, when a user requests data from a content source, the content source may ultimately provide the same bytes to the end user as if there were a unicast link between the end user and the content source.
[0138] It is also worth noting that that embodiments allow substantially transparent optimization of communications while preserving certain legal and business relationships, including, copyright, digital rights management, subscription, and/or other obligations. For example, as discussed above, content data is stored in dictionaries effectively as dissociated blocks of data, such that the content can only be recreated from those blocks using appropriate dictionary references (e.g., indexes). According to various embodiments, those dictionary references are unavailable to clients without a new request from the content source.
[0139] In one illustrative embodiment, a first user watches a movie through a popular video- on-demand website by logging into the website using credentials (e.g., a user name and password) and viewing the movie through an embedded player surrounded by banner advertisements. Based on one or more determinations discussed above, the content set for the website is multicast to the first (requesting) user and to a second (non-requesting) user, and is stored in the second user's client dictionary. The second user's client dictionary may now include data blocks from a movie that includes copyrighted material, from a web session authenticated according to another user's credentials, from advertisements that may be cycled and/or tracked, from web objects that are designated in metadata as "un-cacheable" etc. As discussed above, embodiments of the client dictionary store the data blocks in such a way that is may be effectively impossible for the first user to access the movie content directly from the client dictionary.
[0140] Instead, if the second user later requests the movie, the second user's experience may be much the same as that of the first user (e.g., and much the same as it would have been had the data not been stored in the client dictionary). For example, the second user may still visit the website using a web browser and may still log in with credentials. If authorized, the second user may still request an authorized, licensed copy of the movie file from the website, which may then be viewed in the embedded player surrounded by banner advertisements. However, as the data is received in response to the request, deltacasting techniques are used to fingerprint the data and identify the data as already being stored in the second user's client dictionary. The data may then be communicated to the second user accordingly, for example, by highly compressing the data according to a model of the client dictionary stored at the server side of the communications system (e.g., a client dictionary model).
[0141] As such, the use of deltacasting techniques may preserve legal and other obligations for content transactions. In the above example, the second user is unable to access copyright and/or unauthorized material from the client dictionary. Further, forcing the second user to access the content as intended by the content provider (e.g., through the provider's website) may allow the content provider to preserve advertising, hosting, and/or other relationships. For example, if the content provider happens to offer an advertisement that is already stored in the client dictionary, the advertisement may still be requested over the content network link (e.g., thereby providing any associated advertisement tracking, revenue, etc.) while also being highly compressed over the client-server communications link.
[0142] These and other features of deltacasting embodiments will be further appreciated through the following descriptions of embodiments of live content deltacasting, deltacasting for overlapping requests, and correlative anticipatory deltacasting. Each of these types of embodiments is separated out for the sake of clarity. However, it will be appreciated that systems and methods from various embodiments presented in one section of this disclosure may be used to implement functionality of other embodiments in other sections of the disclosure. As such, the illustrative embodiments and section headings should not be construed as limiting the invention.
[0143] The following two sections of the disclosure describe embodiments for handling live content requests and overlapping content requests. These embodiments use multicasting techniques to identify and exploit opportunities for sharing forward-link capacity when two users download substantially the same content at substantially the same time or at different but overlapping times. In some embodiments, models are maintained for all active session streams on the communications system. When a user requests content (e.g., live or on-demand content), the response data is fingerprinted and compared against the stream models (e.g., according to "deltacasting" techniques described herein). If a match is found, the user may join the matching active stream and download the remaining portion of the content being multicast on that now- shared stream. The user may also download other portions of the requested content using one or more other session streams.
[0144] For example, a second user requests to watch (or otherwise download) an on-demand movie, half of which having already been communicated to a first user. The communication to the first user is reflected in the stream models and a match is identified with the new request from the second user. The second user may join the first user's session stream, sharing and storing data for the remaining half of the movie received on the shared stream as a multicast. At substantially the same time, the second user may watch the first half of the movie over another session stream.
[0145] In effect, embodiments identify the second half of the movie as an opportunity for sharing link capacity by communicating substantially identical content to multiple users at substantially the same time. In fact, a number of types of scenarios may exist in which substantially identical content is sent to multiple users at substantially the same time (e.g., accounting for jitter windows, asynchronicities, and or other artifacts of the communications system). While similarities between these scenarios exist, handling of content streams in these scenarios may differ, depending on the types of requests involved.
[0146] In one type of scenario, users request "live" content, such as live broadcast television. "Live" content, as used herein, may include content which has a start time that is independent of the timing of a particular user request for the content. For example, live content may include any content being broadcast live or with some production delay, linearly scheduled television and radio content, live seminar or course webcasts for individuals or enterprises, and/or any other content that a user consumes from its current playback position (e.g., rather than from the beginning of the content). In some embodiments, whether content is "live" is determined with respect to each user. For example, a first user requests on-demand content, and begins to watch the content from the beginning. During playback, a second user requests to tune-in to the same content by joining the first user's playback experience. The content may not be considered "live" with respect to the first user, but the content may be considered "live" with respect to the second user.
[0147] In another type of scenario, multiple users request content at different, but overlapping times, and each desires to consume the content from a particular playback position (e.g., the beginning) irrespective of the current playback position with respect to other users. As used herein, "overlapping request" content includes any type of on-demand content, such as on- demand movies, content files, etc., where the desired "start time" for the content is dependent on the timing of the independent requests for the content.
[0148] In one illustrative example, a second user requests a movie while the movie is being watched by a first user. In the live content context, the second user would effectively tune into the first user's content stream, watching only the remainder of the movie along with the first user from the first user's current playback position. In the overlapping request content context, the second user may start watching the movie from the beginning (or some other designated location) while the first user continues to watch the movie from its current playback position. Meanwhile, the second user may receive the remainder of the movie being communicated to the first user, and store the content for later use (e.g., to provide high compression when the second user ultimately requests the locally stored content).
[0149] It will be appreciated that, in both types of scenario, a portion of the content communicated to the users is substantially identical. For example, in the live content context, embodiments use deltacasting techniques to collapse multiple, substantially identical live content session streams. In the overlapping request content context, embodiments use deltacasting techniques to identify and pre-position portions of requested content from other active session streams, while other portions of the content are being received and/or consumed by the requesting user. In either context, more efficient use of forward-link capacity may be achieved by identifying these types of opportunities for communicating content to multiple users at the same time, even where the content may ultimately be consumed at different times.
[0150] Live Content Deltacasting Embodiments
[0151] FIG. 7 is a flow diagram of an illustrative method 700 for using deltacasting to handle live content traffic over a communications system, according to various embodiments. For the sake of clarity, the method 700 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 700. It will be further appreciated that some embodiments of blocks of the method 700 are implemented substantially as described with respect to corresponding blocks of the method 600 of FIG. 6.
[0152] Embodiments of the method 700 begin at block 704 by receiving a block of content data. For example, the content data block (e.g., file data, streaming data, web object data, etc.) may be received as part of traffic intercepted by the server optimizer 130 from a content server 150 over the content network link 135. In some embodiments, at block 708, an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 712.
[0153] When it is determined at block 708 that the content data block is not a multicast candidate, the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110. When it is determined at block 708 that the content data block is a multicast candidate (e.g., according to the multicast prefilter 712 criteria), the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515. At block 720, a fingerprint is generated (e.g., a fingerprint is calculated).
[0154] Embodiments of the method 700 use the fingerprints generated in block 720 to identify and/or exploit deltacasting opportunities for shared content session streams. As described below, identifying the shared content deltacasting opportunities may involve checking whether the requested data is currently being communicated on another stream to another user. To facilitate this determination, embodiments include a global stream model 542 configured to maintain a model of all data blocks intercepted by the server optimizer 130 for any active stream (e.g., any currently-active unicast service flow 525 or multicast service flow 515). For example, the global stream model 542 may store the actual data blocks, fingerprints of the data blocks, and/or some other representation. At block 724, the global stream model 542 is updated to reflect the file data received in block 704.
[0155] As used herein, "stream," "session stream," and similar terminology refers to data for a client session associated with a single content stream or item. For example, if a video is downloaded over a single TCP connection, the data associated with this connection is the session stream. Similarly, if a client session is viewing a live broadcast via UDP, the content stream might be identified as all traffic using the same source/destination IP/port combination. Notably, a "stream" may include any type of content being communicated, and is not restricted to so- called "streaming" data formats or protocols. In some cases, a session stream may involve multiple TCP connections, such as when a download uses certain peer-to-peer protocols. A client session may have multiple concurrent session streams, such as when a user is downloading two different videos at the same time. Each session stream is handled independently, so that each could potentially participate in different shared content streams.
[0156] It is worth noting that the global stream model 542 may not necessarily indicate what is stored in any client dictionary 435. For example, in some embodiments, the global stream model 542 is updated substantially as data blocks are received for active streams (e.g., in block 724), rather than waiting for confirmation from a client optimizer 120 that the data block was successfully received at the client-side of the communications system 500. Further, various data management techniques may be used for storage of live content data. For example, the data may be stored to a temporary dictionary (e.g., a scratch pad) to save client dictionary space, because the client has no authority to store the data (e.g., a live television broadcast may carry certain digital rights management provisions), etc. As such, the global stream model 542 may be separate from other client dictionary models that may be implemented by certain embodiments of a server optimizer 130.
[0157] In some embodiments, the entries in the global stream model 542 include fingerprint and other identification information about the block , as well as an identifier specifying the "owner" of this block. For example, if a multicast data block is part of a shared content stream (e.g., determined as described below), the owner may be specified via a Content Stream ID, which is a unique identifier for each shared content stream in process. If the data block is not part of a shared content stream, the owner may be specified as an identifier for the client session stream that generated the data block.
[0158] Further, entries may remain in the global stream model 542 for as long as the owner remains active. For example, a shared content stream may remain active as long as any client sessions are participating in the shared content stream. This participation might be determined as having an active TCP connection that has previously used data blocks from the shared content stream. In some embodiments, when a shared content stream terminates, all blocks associated with this shared content stream may be removed from the global stream model 542. If a data block is never made part of a shared content stream (e.g., it is added to the global stream model 542 in block 724, but is never made part of a shared content stream, as described below), it may be removed when the client session stream that added the entry is no longer active. For example, this may occur when the TCP connection that downloaded the stream has been closed. The methods used to determine the lifetime of entries in the global stream model 542 may be optimized in various ways as needed to handle session streams that use multiple TCP connections or non-TCP protocols, or to detect when entries are part of a live content stream where it is not necessary to maintain all entries for the lifetime of the shared content stream.
[0159] At block 728, a determination is made as to whether the fingerprints indicate a match with a currently active stream (e.g., according to the global stream model 542). A match determined in block 728 may indicate that the requested content (e.g., or substantially similar content) is currently being communicated to other users at substantially the same time, thereby presenting a deltacasting opportunity. Notably, as described above, it may be desirable to exploit deltacasting (e.g., and/or other multicasting) opportunities where at least a portion of the forward link is shared by the users in the multicast group. As such, the determination in block 728 may be limited to whether the fingerprint indicates matching data in an active stream for which a shared forward link can be exploited. In some embodiments, this is implemented by having separate global stream models 540 for groups of users having shared forward links. In certain embodiments, the global stream models 540 may be further categorized in other ways, for example, according to modcode point.
[0160] In some embodiments, the determination in block 728 goes beyond finding a single match between the fingerprint and an entry in the global stream model 542. In one embodiment, matches are recorded, and a deltacasting opportunity (e.g., a shared content stream exploitation opportunity) is identified only when a certain number and/or type of match is reached. For example, a single matching block may generate false positives, indicating deltacasting opportunities in incorrect or inefficient circumstances. Instead, the determination at block 728 may wait for a condition, such as seeing two matches in a row. In another embodiment, the determination at block 728 is affected by the determination at block 708. For example, certain types of data (e.g., certain file types) may be considered possible multicast candidates according to the multicast prefϊlter 712 and the associated determination in block 708, while being a file type that is highly unlikely to be part of a shared content stream. These and/or other types of techniques may be used to increase the efficiency of the determination in block 728.
[0161] If the determination in block 728 indicates a deltacasting opportunity, the method 700 may enter a stream sharing mode, as indicated by block 800 and as described more fully below with reference to FIG. 8. As discussed more fully with reference to FIG. 8 below, entry into the stream sharing mode of block 800 may result in multicasting the file data in block 740 or unicasting a highly compressed version of the file data in block 736. If the determination in block 728 indicates that there is no deltacasting opportunity (e.g., that it would be inefficient to set up and manage a shared content stream), the method 700 may proceed in a number of ways.
[0162] In one embodiment, when no deltacasting opportunities are identified, the file data is unicast to the requesting user in block 752. In other embodiments, other multicast opportunities may be evaluated at block 744, for example, according to the fingerprints generated in block 720. In certain embodiments, the multicast opportunities evaluated in block 744 include other deltacasting opportunities described herein.
[0163] Some embodiments of additional deltacasting opportunities include comparing the fingerprint generated in block 720 with blocks from a client dictionary model to determine whether there is a match. For example, embodiments of the client dictionary 435 in the client optimizer 120 represent what is stored at a particular client (e.g., at a user system 110), and embodiments of the modeler module 532 at the server optimizer 130 store a model of each client dictionary 435. If the content data block is destined for a particular client, the server optimizer 130 may use the model of the respective client dictionary 435 stored in the modeler module 532 to look for matches. A match may indicate that the byte sequence is already stored local to the client in the client's client dictionary 435. In that case, at block 752, all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes) and unicast to the client. For example, the content data block is compressed by the server-side deltacast coder 524b and communicated as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
[0164] In some embodiments, the method 700 evaluates additional multicast opportunities at block 744 even where a match is found at block 728. In one example, a deltacasting opportunity is identified at block 728, and further opportunities for using the resulting multicast service flow are found at block 744 (e.g., by multicasting the data on an additional multicast stream, by adding additional (e.g., non-requesting) users to the multicast group for the shared content stream, etc.). In another example, matches are found at block 728, but it is determined not to enter stream sharing mode; and, instead, to create a different type of multicast.
[0165] When multicast opportunities are evaluated in block 744, a determination may be made at block 748 as to whether multicast opportunities should be exploited. If a determination is made at block 748 that either no multicast opportunities exist, or that the multicast opportunities should not be exploited, the content data block data and/or any related control data is unicast at block 752, where appropriate. If a determination is made at block 748 that a multicast opportunity exists and should be exploited, the content data block may be multicast to one or more clients at block 756 (e.g., including the requesting client, where appropriate).
[0166] Various embodiments unicast or multicast the data over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120. Once the data is received at the client optimizer 120, it may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435). In certain embodiments, storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 if a model of the client-side client dictionary 435 is updated (e.g., through synchronization of the modeler module 532). When it is determined in block 748 that the data will be multicast in block 756 (e.g., and/or when the data is determined to be unicast in block 752), the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125. In one embodiment, the data is zip coded prior to being sent over the client-server communication link 125. When the zipped data is received at the client optimizer 120, the data is added to the client dictionary 435.
[0167] In some embodiments, when the data is unicast or multicast to the client, one or more stream models may be updated in block 756. As described below, when the communication is part of a shared content stream, all client stream models 544 associated with the shared content stream may be updated to reflect communication of the shared content traffic to the associated clients. In other embodiments, the global stream model 542 is updated at this point. The models can be updated at any practical point in the method 700 without departing from the scope of the invention. For example, the updating of the global stream model 542 shown at block 724 may alternatively be performed at block 756.
[0168] It will now be appreciated that embodiments allow usage of fingerprints, generated at the byte-level of the content portion of traffic traversing the network, to identify and/or exploit deltacasting and/or other multicasting opportunities. As discussed above, when a determination is made at block 728 that a deltacasting opportunity is available using shared live content streams, the method 700 may enter a stream sharing mode per block 800. FIG. 8 shows a flow diagram of a stream sharing mode method 800, according to various embodiments.
[0169] Embodiments of the method 800 begin at block 804 by updating the global stream model 542 to reflect a new shared content stream. As discussed above, determining to enter the stream sharing mode may indicate that data requested as part of one session stream has been identified as matching data already being communicated to at least one other client on another session stream, and that it is desirable to collapse those streams into a shared content stream. As such, both session streams may be adjusted to reflect collapsing the streams into the new shared content stream, which may be identified by a Content Stream ID (e.g., a substantially unique identifier).
[0170] In some embodiments, a Content Stream ID is generated whenever a new client session stream begins (or at some other similar time), and all content data in that client session stream is flagged with that Content Stream ID in the global stream model 542 (e.g., and in the associated client stream model 544). When a later stream is identified as requesting matching data and joins the shared content stream, any associated data from either client session that is added to the models is similarly flagged with the Content Stream ID. In other embodiments, prior to generating the shared content stream, content on a client stream is flagged with a session identifier or some other identifier. When the stream sharing mode is entered, the Content Stream ID is generated and associated with all entries in the global stream model 542 for the client session stream that is being converted into a shared content stream, as well as for any later session stream for which a match is identified (e.g., a client session that is added to the shared content stream). Any subsequent blocks received on any participating session streams may similarly be associated (e.g., tagged) with the Content Stream ID. [0171] In addition to initiating a new shared content stream, clients may have to be made aware of the shared content stream. In some embodiments, at block 808, the method 800 directs clients participating in the shared content stream to accept traffic associated with the shared content stream. For example, a unicast message is sent to both streams (i.e., the converted stream and the new, matching stream) directing them to store any multicast blocks associated with this Content Stream ID. It is worth noting that this may be substantially different from some embodiments of non-stream sharing modes of operation. For example, embodiments of the non-stream sharing mode of processing may prevent a client session from using data blocks from other sessions until the server optimizer 130 has received a message from the associated client optimizer 120 confirming that it has successfully stored the data block. In stream sharing mode, however, there may not be time to wait for the confirmation message. Directing each client session participating in the shared content stream to accept all blocks associated with the shared content stream allows these client sessions to use the multicast blocks from other client sessions, even when all client sessions receive the data at substantially the same time.
[0172] It will be appreciated that blocks being received as part of any participating session streams may now be associated with the shared content stream and processed according to the remaining blocks of the method 800. At block 704, a block of file data associated with the shared content stream is received. Of course, block 704 of FIG. 8 may be implemented substantially as block 704 of FIG. 7. For the sake of clarity, block 704 of FIG. 8 is shown as an illustrative case in which the block of file data received is one identified as part of the shared content stream (e.g., carrying the Content Stream ID).
[0173] As in the method 700 of FIG. 7, after the data is received at block 704, a fingerprint of the data block may be generated at block 720. It is worth noting that embodiments of the method 800 may skip blocks shown in the method 700 of FIG. 7. For example, it may not be necessary to check whether a received data block is a multicast candidate when it is part of the shared content stream, since association with the shared content stream may make the data blocks inherently multicastable. In some embodiments, however, additional processing is performed. For example, even when the data blocks are identified as part of the shared content stream, the fingerprints may be compared against a requesting client's dictionary model. A match may indicate that the data block was previously communicated to the client as part of a previous session (e.g., a pre-positioning operation, a previous download, etc.), and that the client dictionary entries may allow the data blocks to be unicast using high compression.
[0174] The method 800 may proceed at block 810 by determining whether the data received at block 704 matches blocks in the client stream model 544 for the requesting client session. The determination is made according to the fingerprints generated at block 720. The determination at block 810 may depend on whether this client session stream is the first session in the multicast group to receive the data block at the server optimizer 130. For example, jitter windows, latencies, traffic, and/or other factors may cause different client sessions in the multicast group to receive the data blocks in different orders, at different times, etc.
[0175] If the client session stream is the first to receive the data block for the shared content stream, the data block may not be represented in the respective client stream model 544, and the determination in block 810 may indicate that there is no match. As such, it may be desirable to provide the data block to all active clients in the associated multicast group by multicasting the data in block 814. Further, all the active client stream models 544 are updated in block 818 to reflect that the data was multicast to those clients (e.g., and is presumably stored at the respective user systems 110, for example, at the respective client optimizer 120).
[0176] At this point, all the active client stream models 544 include representations of that data block. As such, when the next client session receives the same data block and reaches block 810 of the method, the data block will be represented in the respective client stream model 544, and the determination in block 810 will indicate the match. Embodiments use the client stream model 544 in block 822 to compress the file data. In block 826, the compressed (e.g., highly compressed) data is unicast to the associated client over the client's session stream.
[0177] It is worth noting that a separate client stream model 544 may be maintained for each active client session, and a global stream model 542 may be maintained for all client sessions (e.g., those sharing forward link capacity), and each of these models may be different. These different models may be used to account for the fact that clients may not listen to all multicast traffic at all times (e.g., unless the client optimizer 120 determines that it should subscribe to the service flow, the server optimizer 130 directs the client to subscribe to the service flow, etc.). For example, each client session may join the shared content stream (e.g., tune into the programming) at different times, thereby having a different set of data blocks represented in their respective client stream models 544 (e.g., only those data blocks communicated on the shared content stream after that client joined the shared content stream). Having separate client stream model 544 helps ensure that client session streams do not try to use data blocks for compression when those blocks have not previously been communicated to the respective client. Similarly, if the client session stream is not part of a shared content stream yet, there may be no relevant client stream model 544 to check against. As such, as mentioned with reference to FIG. 7, the data blocks are added to the global stream model 542 to support identifying shared content stream deltacasting opportunities. For example, if the received data block is not in the global stream model 542, all active client stream models 544 and the global stream model 542 are updated to reflect the data block and its association with the shared content stream. Embodiments operate atomically, to the extent possible, to insure that a data block is added only once, even when two client sessions receive the same block at substantially the same time.
[0178] In some embodiments, client sessions can decide whether to commit the data blocks to their respective permanent client dictionaries. For example, the client may decide whether to record broadcast television. If so, messages may be sent to the server system 220 to add the blocks to the client dictionary models in the same way as may be done for blocks that are not part of a shared content stream. If not, blocks may be stored only temporarily and removed from local client storage once the client leaves the shared content stream (or at some other useful time). In certain embodiments, the client session can also remove blocks from its temporary storage (e.g., its shared content stream list) by uploading a message to the server system 220. Embodiments may wait to remove the data block from the client dictionary until a message (e.g., ack) is received from the server system 220 indicating the block has been removed from the client dictionary model on the server system 220. For example, this may prevent the server 130 optimizer from compressing data using a dictionary page that is not available to the client optimizer 120.
[0179] Notably, client sessions can withdraw from the shared content stream at any point. For example, a TCP connection to a content server 150 may be closed (or the last connection may be closed, if a shared content stream is using multiple connections). In some embodiments, when a session leaves the shared content stream, its client stream model 544 is deleted. Further, in certain embodiments, a message is sent to the client notifying that data blocks in its temporary shared content stream storage (e.g., not committed to its client dictionary or other permanent storage) should be removed. The client session may then resume normal processing according to the method 700 of FIG. 7. In some embodiments, the shared content stream ends when no session streams remain active in it. At that time, all entries in the global stream model 542 and/or client stream models 544 associated with the shared content stream can be removed.
[0180] Various types of storage management may be used according to other embodiments. In one embodiment, entries remain in the client stream model 544 for as long as the respective owner remains active, and the entries may be removed upon termination of the client session stream. In another embodiment, entries are removed from the client stream model 544 upon termination of the session stream, but they remain in (e.g., or are added to) another storage location. For example, the modeler module 532 may maintain a set of blocks previously seen in now-inactive streams for some duration of time. In still other embodiments, as discussed above, lifetimes of entries in models, dictionaries, or other storage locations may be optimized, as needed, to handle session streams that use multiple TCP connections or non-TCP protocols, to detect when entries are part of a live content stream where it is not necessary to maintain all entries for the lifetime of the shared content stream, etc.
[0181] It will be appreciated that many scenarios are possible by which a user may request live content. FIG. 9 shows an illustrative flow diagram 900 for handling multiple requests for the same live content, according to various embodiments. Three viewers capable of sharing forward link capacity (e.g., on the same spot beam) request substantially the same content at different times, and the requests are satisfied through deltacasting techniques described above. In some embodiments, the viewers are each associated with a client optimizer 120, and each client optimizer 120 is in communication with a server optimizer 130 over an optimizer tunnel 105, as described above with reference to FIG. IB.
[0182] The illustrative scenario of FIG. 9 is described with reference to the satellite communications system 200 of FIG. 2. For example, each viewer requests content from a content server 150, using a CPE 260 in communication with a base station 215 over a shared spot beam 235 of the satellite communications system 200. It will be appreciated that the description with reference to the satellite communications system 200 is intended only as an example, and should not be construed as limiting the scope of the invention. [0183] At a first time 910a shown on a timeline 905 (e.g., 0:00:00), a first viewer requests the live content from the content server 150 (e.g., via a network 140). For the sake of illustration, the first viewer tunes in to a movie being broadcast over a television channel by submitting the request to his television by way of a remote control device. The television (e.g., CPE 260a) communicates the request to its respective user terminal 230a in communication with a respective user antenna 225a. The request may then be communicated to the appropriate base station 215 via the satellite 205 and antenna 210. As described above, the client-side components may be considered as part of a user system 110, the server-side components may be considered as part of a server system 220, and the user systems 110 and server system 220 may be configured to implement an optimizer tunnel 105 between the requesting CPE 260 and the content server 150 via a respective client optimizer 120 and server optimizer 130.
[0184] In some embodiments, the data representing the live content request (i.e., the movie) is communicated to the first viewer over a unicast channel (e.g., by private IP). For example, as described above, blocks of data are received at the server optimizer 130 and fingerprints are generated. The fingerprints are used to determine that the data is not in the first viewer's client dictionary, the data is not part of a currently active shared content stream or other multicast stream, and the data should not be multicast for some other reason. In other embodiments, the data is multicast to the first viewer, even though the content is not part of a current shared content stream.
[0185] In some embodiments, the requested content is received from a starting playback position. For example, the movie may be an on-demand movie from the perspective of the first viewer, which other users may "tune into." Typically, the requested content is live content and is received from a current playback position. For example, the first viewer tunes to a particular television station or web video broadcast, and begins watching from the current playback position.
[0186] At a second time 910b (e.g., 0:04: 12), a second viewer requests the same live content. As content is received in response to the request, the server optimizer 130 intercepts the content and generates fingerprints of the content. The server optimizer 130 determines, as a function of the fingerprints, that the content is already being communicated to the first viewer. For example, the fingerprints match blocks in the global stream model 542 of FIG. 5. Notably, at this point, the respective entries in the global stream model 542 may not be part of any shared content stream and may carry a client stream ID for the first viewer, rather than a Content Stream ID (the blocks are described above as being unicast as part of a particular client session stream). For the sake of clarity, it is assumed that the content has not been previously stored in the second viewer's client dictionary as a result of a different transaction (e.g., a pre-positioning multicast session, etc.).
[0187] When it is determined that the live content being requested by the second viewer is substantially the same content already being communicated to the first viewer, the server optimizer 130 may switch into stream sharing mode for that content, as described with reference to FIG. 7. For example, as described above, the content data may be tagged with a unique Content Stream ID, a global stream model 542 and/or client stream models 544 may be updated, etc. The second viewer begins receiving the content as part of the shared content stream. For example, the second viewer begins watching the movie from substantially the second time 910b (e.g., approximately four minutes into the broadcast, or approximately four minutes farther into the broadcast than where the first viewer began watching).
[0188] Where the content was previously being communicated on a unicast service flow (e.g., or even possibly on a multicast service flow), the first viewer may be switched to a new shared content stream (e.g., multicast service flow) and the previously active service flow may be terminated. It will be appreciated that where a viewer is switched from one service flow to another (e.g., from a unicast service flow to a multicast service flow), various techniques may be used. In certain embodiments, the live content data may be redundantly communicated on both service flows for a period of time during the transition. This may account for various latencies, processing times, buffering times, etc. For example, the user terminal 230a of the first viewer may be configured to maintain a 15 -second buffer to account for changes in link conditions, dropped packets, etc. During the transition to a multicast stream, some embodiments exploit the buffer to reduce the amount of redundant communications needed (e.g., the buffered data may be used if there is a short break in the transmission during the switch between service flows); while other embodiments use the new stream to ensure that the buffer is full before dropping the old stream. [0189] At a third time 910c (e.g., 0:06:38), a third viewer requests the same live content. The process may proceed substantially as with the second viewer. As the content is received in response to the request from the third viewer, it is intercepted by the server optimizer 130. The server optimizer 130 generates fingerprints and determines that the content is already being communicated on an active session stream (e.g., according to the global stream model 542). In this case, the server optimizer 130 may determine that the traffic is part of an active shared content stream, such that a new shared content stream does not need to be generated. Instead, control data may be sent to the third viewer's client optimizer 120 to direct the client optimizer 120 to accept traffic on the shared content stream (e.g., carrying the Content Stream ID). The third viewer may then commence viewing of the live content programming (i.e., the movie) substantially from the third time 910c (e.g., approximately six minutes into the broadcast, or approximately six minutes farther into the broadcast than where the first viewer began watching).
[0190] At a fourth time 91Od (e.g., 1 :00:43), the second viewer leaves the shared content stream. For example, the second viewer may change the channel on his television. Notably, the second viewer's session may terminate, but the shared content stream may continue for the first and third viewers. At a fifth time 91Oe (e.g., 1 :45:31), the session stream may terminate for the third viewer, leaving the first viewer as having the only still-active session participating in the shared content stream.
[0191] In some embodiments, the shared content stream may continue until no associated sessions remain active. In other embodiments, when only one session remains active in the shared content stream (e.g., or when it is otherwise determined to be no longer efficient to maintain the shared content stream), the shared content stream may terminate and the communication may revert to a unicast or differently managed multicast communication to the remaining viewer(s). For example, as illustrated in FIG. 9, the shared content stream may continue until a sixth time 91Of (e.g., 1 :52:06), at which point the shared content stream may terminate. Notably, the shared content stream may terminate by the actions of the viewers or on its own. For example, where the live content is a broadcast television channel, the shared content stream may continue until all (or substantially all) the session streams withdraw from the shared content stream (e.g., by tuning away from the television channel). However, where the live content is a streaming video, the shared content stream may automatically terminate at the end of the video (e.g., when no content remains to be downloaded as part of the session).
[0192] It is worth noting that the use of fingerprinting (e.g., and/or other dictionary coding techniques) to handle shared content streams may provide a number of features. One feature is that shared content stream deltacasting opportunities may be identified and/or exploited even where there is little or no access to certain metadata. For example, as discussed above, the server optimizer 130 generates signatures based on byte level data and does not require knowledge of "header portion" information (e.g., file types, proprietary tags, protocol tags, etc.) to make its determinations.
[0193] Another feature is that fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content source or other "header portion" (e.g., metadata) information is different. For example, suppose that viewers are watching the same television show at the same time from different sources (e.g., different television channels are broadcasting the same content, different websites are mirroring the same content, etc.). Fingerprinting techniques can find matching blocks, as the blocks will match even where the content sources are different. Similarly, deltacasting opportunities may be identified even where cache-busting techniques are used to alter URLs, where content data networks (CDNs) are used to mirror and/or re-locate content, etc.
[0194] Still another feature is that fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content timing among clients is mismatched or inconsistent. For example, as described above, clients may request live content asynchronously, responses may be received out of order from content sources, different jitter windows may be experienced, etc. In all these and other cases, it may be insufficient to merely look for the same content going to multiple clients at the same time. Fingerprinting techniques can find and exploit matching blocks, even where these mismatches or inconsistencies are present.
[0195] It is also worth noting that embodiments allow substantially transparent optimization of communications while preserving certain legal and business relationships, including, copyright, digital rights management, subscription, and/or other obligations. For example, as discussed above, content data is stored in dictionaries as dissociated blocks of data, such that the content can only be recreated from those blocks using appropriate dictionary references (e.g., indexes). According to various embodiments, those dictionary references are unavailable to clients without a new request from the content source.
[0196] In one illustrative embodiment, a block of file data is requested by a user as part of a live content broadcast of a movie. The movie includes copyrighted material and is provided by a host requiring a valid user ID and password for authentication. When the user requests the file data, the deltacasting optimizations may be substantially transparent to the user, such that the user still logs into the host and requests the file data from the host. As such, even if the requested block of file data is determined (e.g., using deltacasting techniques) to be locally stored in the user's client dictionary, accessing that local data may still involve compliance with copyright and authentication obligations.
[0197] Deltacasting for Overlapping Requests Embodiments
[0198] FIG. 10 is a flow diagram of an illustrative method 1000 for using deltacasting to handle overlapping content requests over a communications system, according to various embodiments. For the sake of clarity, the method 1000 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 1000. It will be further appreciated that some embodiments of blocks of the method 1000 are implemented substantially as described with respect to corresponding blocks of the method 600 of FIG. 6.
[0199] Embodiments of the method 1000 begin at block 1004 by receiving a block of content data. For example, the content data block (e.g., file data, streaming data, web object data, etc.) may be received as part of traffic intercepted by the server optimizer 130 from a content server 150 over the content network link 135. In some embodiments, at block 1008, an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 1012. This determination may be made by the object processor 522b.
[0200] When it is determined at block 1008 that the content data block is not a multicast candidate, the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110. When it is determined at block 1008 that the content data block is a multicast candidate (e.g., according to the multicast prefilter 1012 criteria), the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515. At block 1020, a fingerprint is generated (e.g., a fingerprint is calculated).
[0201] Embodiments of the method 1000 use the fingerprints generated in block 1020 to identify and/or exploit deltacasting opportunities for shared content session streams, for example, as described above with reference to the method 700 of FIG. 7. For example, identifying the shared content deltacasting opportunities may involve checking whether the requested data is part of an active content stream currently being communicated to another user, according to a global stream model 542 configured to maintain a model of all data blocks intercepted by the server optimizer 130 for any active stream (e.g., any currently-active unicast service flow 525 or multicast service flow 515).
[0202] It is worth noting that the global stream model 542 may not necessarily indicate what is stored in any client dictionary 435. For example, in some embodiments, the global stream model 542 is updated substantially as data blocks are received for active streams (e.g., in block 1024), rather than waiting for confirmation from a client optimizer 120 that the data block was successfully received at the client-side of the communications system 500. Further, various data management techniques may be used for storage of content stream data. For example, certain types of data may be stored in temporary storage, in particular bins of a client dictionary 435, in more permanent storage, etc. Embodiments of the modeler module 532 of the server optimizer 130 may account for these different types of content stream storage by maintaining different types of models. For example, in addition to the global stream model 542, the modeler module 532 may maintain client stream models 544 representing data currently being communicated to a particular client on an active client session stream, client dictionary models 548 representing data currently stored in a particular client's client dictionary 435, etc.
[0203] At block 1028, a determination is made as to whether the fingerprints indicate a match with a currently active stream (e.g., according to the global stream model 542). A match determined in block 1028 may indicate that the requested content (e.g., or substantially similar content) is currently being communicated to other users at substantially the same time, thereby presenting a deltacasting opportunity. Notably, as described above, it may be desirable to exploit deltacasting (e.g., and/or other multicasting) opportunities where at least a portion of the forward link is shared by the users in the multicast group. As such, the determination in block 1028 may be limited to whether the fingerprint indicates matching data in an active stream for which a shared forward link can be exploited. In some embodiments, this is implemented by having separate global stream models 540 for groups of users having shared forward links. In certain embodiments, the global stream models 540 may be further categorized in other ways, for example, according to modcode point.
[0204] In some embodiments, the determination in block 1028 goes beyond finding a single match between the fingerprint and an entry in the global stream model 542. In one embodiment, matches are recorded, and a deltacasting opportunity (e.g., a shared content stream exploitation opportunity) is identified only when a certain number and/or type of match is reached. For example, a single matching block may generate false positives, indicating deltacasting opportunities in incorrect or inefficient circumstances. Instead, the determination at block 1028 may wait for a condition, such as seeing two matches in a row. In another embodiment, the determination at block 1028 is affected by the determination at block 1008. For example, certain types of data (e.g., certain file types) may be considered possible multicast candidates according to the multicast prefilter 1012 and the associated determination in block 1008, while being a file type that is highly unlikely to be part of a shared content stream. These and/or other types of techniques may be used to increase the efficiency of the determination in block 1028.
[0205] If the determination in block 1028 indicates a deltacasting opportunity, the method 1000 may enter an overlapping request mode, as indicated by block 1100 and as described more fully below with reference to FIG. 11. It is worth noting that, as described above, multiple scenarios may exist in which a match is found at block 1028. In one type of scenario, as described above in the "Live Content Deltacasting" section, multiple clients may request substantially the same live content at substantially the same time.
[0206] In another type of scenario, the "overlapping request" context, multiple clients may request substantially the same content at different, but overlapping times. For example, while a first client is streaming a movie, a second client requests the same movie, where the two clients expect to watch the movie from different playback positions. Some embodiments may treat this second type of scenario differently from the treatment of the first type of scenario. However, embodiments of the method 1000 may further detect which scenario is occurring, and may handle the requests accordingly.
[0207] In the example above, while a first client is streaming a movie, a second client requests the same movie. The second client begins watching the movie from the beginning, while the first client continues to watch the movie from some other location, say one hour into the movie. This may be treated as an overlapping request to be handled according to FIG. 11 below. Shortly thereafter, the second client then fast-forwards playback to substantially the playback location currently being watched by the first client. The method 1000 may begin treating the scenario as a "live content" request (e.g., to be handled according to the methods of FIGS. 7 and 8 described above). Later, the second client again fast-forwards playback to a playback location beyond that currently being watched by the first client. The method 1000 may begin treating the scenario again as an overlapping request, however with the first client now lagging the second client, according to FIG. 11.
[0208] As discussed more fully with reference to FIG. 11 below, entry into the overlapping request mode of block 1100 may result in multicasting the file data in block 1040 or unicasting a highly compressed version of the file data in block 1036. If the determination in block 1028 indicates that there is no deltacasting opportunity (e.g., that it would be inefficient to set up and manage a shared content stream), the method 1000 may proceed in a number of ways. In one embodiment, when no deltacasting opportunities are identified, the file data is unicast to the requesting user in block 1052. In other embodiments, other multicast opportunities may be evaluated at block 1044, for example, according to the fingerprints generated in block 1020. In certain embodiments, the multicast opportunities evaluated in block 1044 include other deltacasting opportunities described herein.
[0209] Some embodiments of additional deltacasting opportunities include comparing the fingerprint generated in block 1020 with blocks from a client dictionary model 544 to determine whether there is a match. For example, even where the response data does not match blocks of a currently active stream (i.e., no match is found at block 1028), the server optimizer 130 may use the client dictionary model 548 to determine whether the byte sequence is already stored in the requesting client's client dictionary 435. In that case, at block 1052, all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes) and unicast to the client. For example, the content data block is compressed by the server-side deltacast coder 524b and communicated as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
[0210] In some embodiments, the method 1000 evaluates additional multicast opportunities at block 1044 even where a match is found at block 1028. In one example, a deltacasting opportunity is identified at block 1028, and further opportunities for using the resulting multicast service flow are found at block 1044 (e.g., by multicasting the data on an additional multicast stream, by adding additional (e.g., non-requesting) users to the multicast group for the shared content stream, etc.). In another example, matches are found at block 1028, but it is determined not to enter overlapping request mode; and, instead, to create a different type of multicast.
[0211] When multicast opportunities are evaluated in block 1044, a determination may be made at block 1048 as to whether multicast opportunities should be exploited. For example, even where a multicast opportunity exists, it may be inefficient to spend the resources to exploit the opportunity (e.g., to set up a multicast service flow 515). Notably, a similar type of determination is described above with reference to block 1008. Further, multicast opportunities may be evaluated and fingerprint generation can be tailored in various ways depending on the types of opportunities being evaluated (e.g., the fingerprint may, itself, be a sequence of bytes or part of a more complex system of determining the associated byte sequence).
[0212] If a determination is made at block 1048 that either no multicast opportunities exist, or that the multicast opportunities should not be exploited, the content data block data and/or any related control data is unicast at block 1052, where appropriate. For example, if the content data block is requested by one user and no multicast opportunities exist, the content data block data may be unicast to the requesting user. In some embodiments, unicasting the data at block 1052 involves communicating the data as a unicast service flow 525 to the client optimizer 120 via the unicast processors 528.
[0213] If a determination is made at block 1048 that a multicast opportunity exists and should be exploited, the content data block may be multicast to one or more clients at block 1056 (e.g., including the requesting client, where appropriate). In some embodiments, multicasting the data at block 1056 involves communicating the content block data over one or more multicast service flows 515 to the client optimizer 120 via the multicast processors 530. In certain embodiments, the fingerprint generated in block 1020, or another representation of the data (e.g., the byte sequence itself, a compressed version or a portion of the byte sequence, or a different types of fingerprint) is stored at the server-side for later use by the communications system 500. For example, storage of relevant information may be useful in generating or identifying future multicast opportunities, tracking and/or characterizing network usage, prefetching, etc.
[0214] According to various embodiments, the data is unicast and/or multicast over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120. Once the data is received at the client optimizer 120, it may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435). In certain embodiments, storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 by updating a client dictionary model 548 (e.g., through synchronization by the modeler module 532). When it is determined in block 1048 that the data will be multicast in block 1056 (e.g., and/or when the data is determined to be unicast in block 1052), the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125. In one embodiment, the data is zip coded prior to being sent over the client-server communication link 125. When the zipped data is received at the client optimizer 120, the data is added to the client dictionary 435.
[0215] In some embodiments, when the data is unicast or multicast to the client, one or more models may be updated in block 1056. For example, one or more client dictionary models 548 and/or client stream models 544 may be updated to reflect communication of the content traffic to associated clients. The global stream model 542 may also be updated at this point. The models can be updated at any practical point in the method 1000 without departing from the scope of the invention. For example, the updating of the global stream model 542 shown at block 1024 may alternatively be performed at block 1056.
[0216] It will now be appreciated that embodiments allow usage of fingerprints, generated at the byte-level of the content portion of traffic traversing the network, to identify and/or exploit deltacasting and/or other multicasting opportunities. As discussed above, when a determination is made at block 1028 that a deltacasting opportunity is available due to detecting overlapping requests (e.g., at block 1028), the method 1000 may enter a overlapping request mode per block 1100. FIG. 11 shows a flow diagram of a overlapping request mode method 1100, according to various embodiments.
[0217] Embodiments of the method 1100 begin at block 1104 by updating the global stream model 542 to reflect a new shared content stream. As discussed above, determining to enter the overlapping request mode may indicate that data requested as part of one session stream has been identified as matching data already being communicated to at least one other client on another session stream, and that it is desirable to communicate subsequent data from both clients as a shared content stream to all associated clients. As such, related session streams may be adjusted to reflect collapsing the streams into the new shared content stream, which may be identified by a Content Stream ID (e.g., a substantially unique identifier).
[0218] In some embodiments, a Content Stream ID is generated whenever a new client session stream begins (or at some other similar time), and all content data in that client session stream is flagged with that Content Stream ID in the global stream model 542 (e.g., and in the associated client stream model 544). When a later stream is identified as requesting matching data and joins the shared content stream, any associated data from either client sessions that is added to the models is similarly flagged with the Content Stream ID. In other embodiments, prior to generating the shared content stream, content on a client stream is flagged with a session identifier or some other identifier. When the overlapping request mode is entered, the Content Stream ID is generated and associated with all entries in the global stream model 542 for the client session stream that is being converted into a shared content stream, as well as for any later session stream for which a match is identified (e.g., a client session that is added to the shared content stream). Any subsequent blocks received on any participating session streams may similarly be associated (e.g., tagged) with the Content Stream ID.
[0219] In addition to initiating a new shared content stream, clients may have to be made aware of the shared content stream. In some embodiments, at block 1108, the method 1100 directs clients participating in the shared content stream to accept traffic associated with the shared content stream. For example, a unicast message is sent to both streams (i.e., the converted stream and the new, matching stream) directing them to store any multicast blocks associated with this Content Stream ID. As discussed above, some embodiments may assume that the data is received and stored by a client by maintaining a client stream model, while other embodiments may maintain a client dictionary model 548 that is updated to reflect storage in the client dictionary 435 only upon confirmation (e.g., receipt of an acknowledgement message).
[0220] It will be appreciated that blocks being received as part of any participating session streams may now be associated with the shared content stream and processed according to the remaining blocks of the method 1100. At block 1004, a block of file data associated with the shared content stream is received. Of course, block 1004 of FIG. 11 may be implemented substantially as block 1004 of FIG. 10. For the sake of clarity, block 1004 of FIG. 11 is shown as an illustrative case in which the block of file data received is one identified as part of the shared content stream (e.g., carrying the Content Stream ID).
[0221] As in the method 1000 of FIG. 10, after the data is received at block 1004, a fingerprint of the data block may be generated at block 1020. It is worth noting that embodiments of the method 1100 may skip blocks shown in the method 1000 of FIG. 10. For example, it may not be necessary to check whether a received data block is a multicast candidate when it is part of the shared content stream, since association with the shared content stream may make the data blocks inherently multicastable. In some embodiments, however, additional processing is performed. For example, even when the data blocks are identified as part of the shared content stream, the fingerprints may be compared against a requesting client's client dictionary model 548. A match may indicate that the data block was previously communicated to the client as part of a previous session (e.g., a pre-positioning operation, a previous download, etc.), and that the client dictionary 435 entries may allow the data blocks to be unicast using high compression.
[0222] The method 1100 may proceed at block 1110 by determining whether the data received at block 1004 matches blocks in one or more client models, for example, the client stream models 544 and/or the client dictionary models 548 for one or more of the clients participating in the shared content stream. The determination is made according to the fingerprints generated at block 1020.
[0223] It is worth noting that the data received at block 1004 may be part of any participating client session stream (e.g., in response to a request from any of the participating clients). For example, the determination at block 1110 may depend on whether this client session stream is the first session in the multicast group to receive the data block at the server optimizer 130. For example, jitter windows, latencies, traffic, and/or other factors may cause different client sessions in the multicast group to receive the data blocks in different orders, at different times, etc. Further, because of the overlapping request context, it may be assumed that certain clients will be receiving the data for use at different times and may handle (e.g., store) the data differently.
[0224] If the client session stream is the first to receive the data block for the shared content stream, the data block may not be represented in the respective client stream model 544, and the determination in block 1 110 may indicate that there is no match. As such, it may be desirable to provide the data block to all active clients in the associated multicast group by multicasting the data in block 1114. Further, all the active client stream models 544 and/or the client dictionary models 548 are updated (e.g., after confirmation is received of storage in the client dictionary 435) in block 1118 to reflect that the data was multicast to those clients.
[0225] At this point, all the active client stream models 544 include representations of that data block. As such, when the next client session receives the same data block and reaches block 1110 of the method, the data block will be represented in the respective client stream model 544, and the determination in block 1110 will indicate the match. Embodiments use the client stream model 544 in block 1122 to compress the file data. In block 1126, the compressed (e.g., highly compressed) data is unicast to the associated client over the client's session stream.
[0226] From the perspective of each client participating in the shared content stream(s), portions of the requested content may be received substantially in parallel over multiple session streams. For example, a second client requests a movie while it is being streamed by a first client. Both clients' session streams may be associated with the Content Stream ID, but this may not mean that all streams will be collapsed into a single multicast stream. Rather, the remainder of the movie being watched by the first client may effectively be multicast on one session stream to the second client for pre-positioning (e.g., anticipatory storage) in the second client's client dictionary 435. Meanwhile, the second client may also receive a unicast or multicast of the "missed" portion of the movie (e.g., the portion of the movie already watched by the first client prior to the second client's request) on a separate session stream.
[0227] Notably, some embodiments treat all clients substantially indiscriminately, regardless of the order of content requests, etc. For example, in the example above, the first and second clients' session streams are both associated with the Content Stream ID. If the second client watches portions of the movie that were previously skipped by the first client (e.g., advertisements, previews, opening credits, etc.), these portions of the content may be identified by the method 1100 as part of the shared content stream and not matching data in the first client's client dictionary 435 (e.g., according to the first client's client dictionary model). As such, the data may be multicast to both clients and/or stored in the first client's client dictionary 435, even though the first client may have long since passed that portion of the movie. This may facilitate a number of functions, such as pre-positioning those blocks for future viewing of the movie by the first client or for rewinding of the movie by the first client.
[0228] Of course, in some embodiments, the session streams and associated data, may be tagged differently to not treat all requesting clients indiscriminately. In certain embodiments, it may be assumed that a client will never again watch an earlier portion of the content. For example, this assumption may be based on technological limitations of the system, legal and/or contractual relationships (e.g., a digital rights management agreement may prohibit storage and/or future access of the content substantially after that portion of the content has been passed in playback), etc. In other embodiments, the decision whether to store anticipatory data (e.g., data being pre-positioned) may be partially or completely made by the client (e.g., components of the client optimizer 120). For example, when the first client receives multicast data for a portion of the movie that has been skipped, the associated deltacast coder 524a may determine not to store the data in the client dictionary 435, the multicast processor 530a may determine not to accept the data, etc.
[0229] It is worth noting that a separate client stream model 544 may be maintained for each active client session, and a global stream model 542 may be maintained for all client sessions (e.g., those sharing forward link capacity), and each of these models may be different. These different models may be used to account for the fact that clients may not listen to all multicast traffic at all times (e.g., unless the client optimizer 120 determines that it should subscribe to the service flow, the server optimizer 130 directs the client to subscribe to the service flow, etc.). For example, each client session may join the shared content stream (e.g., tune into the programming) at different times, thereby having a different set of data blocks represented in their respective client stream models 544 (e.g., only those data blocks communicated on the shared content stream after that client joined the shared content stream). Having separate client stream model 544 helps ensure that client session streams do not try to use data blocks for compression when those blocks have not previously been communicated to the respective client. Similarly, if the client session stream is not part of a shared content stream yet, there may be no relevant client stream model 544 to check against. As such, as mentioned with reference to FIG. 10, the data blocks are added to the global stream model 542 to support identifying shared content stream deltacasting opportunities. For example, if the received data block is not in the global stream model 542, all active client stream models 544 and the global stream model 542 are updated to reflect the data block and its association with the shared content stream. Embodiments operate atomically, to the extent possible, to insure that a data block is added only once, even when two client sessions receive the same block at substantially the same time.
[0230] Of course, as discussed above, some embodiments do not have client stream models 544 at all. For example, in the overlapping requests context, it may be assumed that enough time will pass between anticipatory receipt of data from a shared stream and interaction with that data (e.g., watching that portion of the content) that relevant client dictionary models 548 will be updated (e.g., that confirmation of storage in the client dictionary 435 will be received and processed). Use of the client dictionary model 548 instead of the client stream model 544 may yield certain advantage, such as allowing for confirmation that the data is stored in the client dictionary 435 before attempting to use those stored blocks for compression. However, when the timing between the anticipatory receipt of data and interaction with that data decreases beyond some threshold level (e.g., substantially the time it takes for confirmation of storage in the client dictionary 435 to be received, and for the client dictionary model 548 to be updated accordingly), deltacasting opportunities may be missed without also maintaining a client stream model 544.
[0231] In some embodiments, client sessions can decide whether to commit the data blocks to their respective permanent client dictionaries. For example, the client may decide whether to record broadcast television. If so, messages may be sent to the server system 220 to add the blocks to the client dictionary models 548 in the same way as may be done for blocks that are not part of a shared content stream. If not, blocks may be stored only temporarily and removed from local client storage once the client leaves the shared content stream (or at some other useful time). In certain embodiments, the client session can also remove blocks from its client dictionary (e.g., from a temporary shared content stream list, or some other bin of the client dictionary 435) by uploading a message to the server system 220. Embodiments may wait to remove the data block from the client dictionary 435 until a message (e.g., ack) is received from the server system 220 indicating the block has been removed from the client dictionary model 548 on the server system 220. For example, this may prevent the server 130 optimizer from compressing data using a dictionary page that is not available to the client optimizer 120.
[0232] Notably, client sessions can withdraw from the shared content stream at any point. For example, a TCP connection to a content server 150 may be closed (or the last connection may be closed, if a shared content stream is using multiple connections). In some embodiments maintaining client stream models 544, when a session leaves the shared content stream, its respective client stream model 544 is deleted. Further, in certain embodiments, a message is sent to the client notifying that data blocks in a temporary shared content stream storage (e.g., not committed to a more permanent location, for example in the client dictionary 435) should be removed. The client session may then resume normal processing according to the method 1000 of FIG. 10. In some embodiments, the shared content stream ends when no session streams remain active in it. At that time, all entries in the global stream model 542 and/or client stream models 544 associated with the shared content stream can be removed and/or dissociated with the Content Stream ID.
[0233] Various types of storage management may be used according to other embodiments. In one embodiment, entries remain in the client stream model 544 for as long as the respective owner remains active, and the entries may be removed upon termination of the client session stream. In another embodiment, entries are removed from the client stream model 544 upon termination of the session stream, but they remain in (e.g., or are added to) another storage location. For example, the modeler module 532 may maintain a set of blocks previously seen in now-inactive streams for some duration of time. In still other embodiments, as discussed above, lifetimes of entries in models, dictionaries, or other storage locations may be optimized, as needed, to handle session streams that use multiple TCP connections or non-TCP protocols, to detect when entries are part of a live content stream where it is not necessary to maintain all entries for the lifetime of the shared content stream, etc. [0234] It will be appreciated that many scenarios are possible by which overlapping requests may occur. FIG. 12A shows a first portion of an illustrative flow diagram 1200 for handling multiple overlapping requests for the same content, according to various embodiments. Two user systems 110 (e.g., viewers) capable of sharing forward link capacity (e.g., on the same spot beam) request substantially the same content at different, but overlapping, times from a server system 220. The requests are satisfied through deltacasting techniques described above. In some embodiments, the user systems 110 viewers are each associated with a client optimizer 120, and each client optimizer 120 is in communication with a server optimizer 130 over an optimizer tunnel 105, as described above with reference to FIG. IB.
[0235] The method 1200 begins when a first user associated with a first user system 11 Oa requests content at block 1205. The traffic associated with the first user's request (e.g., the response traffic) is intercepted by the server system 220 (e.g., the server optimizer 130) at block 1004a. At block 1020a, a fingerprint is generated to characterize the intercepted content. Blocks 1004a and 1020a of FIG. 12A may be implemented substantially as blocks 1004 and 1020 of FIG. 10, respectively.
[0236] In the illustrative method 1200 of FIG. 12 A, it is assumed that the first user is the first to request the content, such that the content is not part of a shared content stream at this point. In particular, it is assumed that a second user associated with the second user system 110b is not "listening" to the content stream. At block 1040a/652a, the content is communicated to the first user on a first session stream either as a unicast or a multicast, as described above with reference to blocks 1040 and 1052 of FIGS. 10 and 11. At block 1210, the first user system 110a receives the content via the first session stream and accepts the content (e.g., for playback). At block 1215 (substantially at the same time), the second user system 110b ignores the content being communicated via the first session stream. Note that the user systems 110 are assumed to share forward link capacity. As such, the second user system 11 Ob may receive the content at block 1215 (e.g., it may be tuned to the same spot beam or connected to the same shared physical link infrastructure as the first user system 110a), even though it may ultimately ignore or reject the content.
[0237] At some later time, in block 1220, the second user system 110b requests content. The traffic associated with the second user's request (e.g., the response traffic) is intercepted by the server system 220 (e.g., the server optimizer 130) at block 1004b, and a fingerprint is generated to characterize the intercepted content at block 1020b. Blocks 1004b and 1020b of FIG. 12A may be implemented substantially as blocks 1004 and 1020 of FIG. 10, respectively.
[0238] In block 1028 (e.g., as discussed with reference to block 1028 of FIG. 10, above), the method 1200 determines whether the fingerprint generated at block 1020b indicates a match with data represented in the global stream model. If there is no match, this may indicate that the data requested by the second user system 110b is not part of a content stream currently being communicated to the first user system 110a (e.g., or to any other user configured to share forward link capacity). In this case, at block 1040b/652b, the content is communicated to the second user on a second session stream either as a unicast or a multicast, as described above with reference to blocks 1040 and 1052 of FIGS. 10 and 11.
[0239] At block 1225, the second user system 110b receives the content via the second session stream and accepts the content (e.g., for playback). In some embodiments, the first user system 110a also receives the second-requested content via the second session stream and may or may not ignore the content according to determinations discussed above. In the event that a match is detected at block 1028, the method 1200 may start an overlapping request mode at block 1255. In some embodiments, the overlapping request mode is implemented substantially as the overlapping request mode illustrated by the method 1100 of FIG. 11.
[0240] FIG. 12B shows a second portion of an illustrative flow diagram 1250 for handling overlapping requests for the same content, according to various embodiments. Embodiments of the method 1250 are described as a second portion of the method 1200 of FIG. 12 A. It will be appreciated that methods other than those illustrated by the method 1200 of FIG. 12A can be used to determine whether to enter the overlapping request mode shown as the method 1250 of FIG. 12B. As such, the method 1200 of FIG. 12A should not be construed as limiting the method 1250 of FIG. 12B.
[0241] After the overlapping request mode is determined to begin at block 1255, content identified as part of the shared content stream (e.g., carrying the Content Stream ID) is received at block 1004c and fingerprints are generated at block 1020c. Blocks 1004b and 1020b of FIG. 12B may be implemented substantially as blocks 1004 and 1020 of FIG. 1 1, respectively. At block 1110, a determination is made as to whether the content matches a client model. For example, the matching client model may be a client stream model, a client dictionary model, etc., as described above with reference to block 1110 of FIG. 11.
[0242] Detecting a match at block 1110 may indicate that the content has previously been communicated to the second user system 110b (e.g., this is the second time the content is being received as part of the shared content stream, or the content was stored previously by the second user system 110b as part of some other operation). In these cases, the content may be unicast as highly compressed content to the second user system 110b in block 1126. Block 1126 may be implemented substantially as block 1126 of FIG. 11 described above. At block 1275, the highly compressed content may be received by the second user system 110b. Because the content was already determined to be stored locally at the second user system 110b (e.g., in the respective client dictionary), the locally stored content can be used in block 1280 to decompress the received compressed content for use (e.g., playback) by the second user system 110b.
[0243] Failing to detect a match at block 1110 may indicate that, while the content is part of a shared content stream, it has not yet been communicated to the second user system 110b (e.g., this is the first time the content is being received as part of the shared content stream, and the second user system 110b has not previously stored the content as part of another operation). As discussed above, even when data is associated with the shared content stream, the data may not actually be shared data. For example, a second-requesting client may receive some data (e.g., the remainder of the content being downloaded by the first-requesting client) anticipatorily over a shared content stream, while receiving other data (e.g., the missed portion of the content) on a separate content stream. As shown in block 1260, shared content is communicated to both user systems 110 over a shared content stream, while unshared content is communicated to the second user system 11 Ob over a second session stream. In some embodiments, the shared and unshared content are multicast according to block 1114 of FIG. 11.
[0244] At block 1265, both user systems 110 receive the shared content from the shared content stream. If it is assumed that the second user system 110b is receiving the content anticipatorily while the first user system 11 Oa receives the content for substantially immediate use (e.g., playback), the second user system 110b may stored the shared content (block 1265b) while the first user system uses the shared content (block 1265a). It will be appreciated that the user systems 110 may store and/or use the shared content in other ways without departing from the scope of the invention (e.g., the first user system 110a may also store the content). At substantially the same time, the second user system 110b may receive the unshared content via the second session stream at block 1270 (e.g., for substantially immediate use).
[0245] When playback of the content by the second user system 110b reaches a position where data to satisfy the playback is already stored locally, the decision block 1110 will now find a match. As such, rather than re-downloading the data completely, the remaining data may be communicated in a highly compressed form in block 1126, and received and decompressed in blocks 1275 and 1280, as described above. An illustrative example of this type of use is shown in FIG. 13.
[0246] FIG. 13 shows an illustrative flow diagram 1300 for handling overlapping requests for the same streaming movie, according to various embodiments. Two user systems 110 (e.g., viewers) capable of sharing forward link capacity (e.g., on the same spot beam) request substantially the same content at different, but overlapping, times. The requests are satisfied through deltacasting techniques described above.
[0247] The illustrative scenario of FIG. 12 is described with reference to the satellite communications system 200 of FIG. 2. For example, each viewer requests content from a content server 150, using a CPE 260 in communication with a base station 215 over a shared spot beam 235 of the satellite communications system 200. It will be appreciated that the description with reference to the satellite communications system 200 is intended only as an example, and should not be construed as limiting the scope of the invention.
[0248] At a first time 1310a shown on a timeline 1305 (e.g., 0:00:00), a first viewer requests content (e.g., the live content from the a content server 150 (e.g., via a network 140). For the sake of illustration, the first viewer tunes in to a movie to be streamed being broadcast over the Internet a television channel by submitting the request to his television computer by way of a remote control device. The television (e.g., CPE 260a) communicates the request to its respective user terminal 230a in communication with a respective user antenna 225a. The request may then be communicated to the appropriate base station 215 via the satellite 205 and antenna 210. As described above, the client-side components may be considered as part of a user system 110, the server-side components may be considered as part of a server system 220, and the user systems 110 and server system 220 may be configured to implement an optimizer tunnel 105 between the requesting CPE 260 and the content server 150 via a respective client optimizer 120 and server optimizer 130.
[0249] In some embodiments, the data representing the live content movie request (i.e., the movie) is communicated to the first viewer over a first content stream (e.g., a unicast channel (e.g., by private IP). For example, as described above, blocks of data are received at the server optimizer 130 and fingerprints are generated. The fingerprints are used to determine that the data is not in the first viewer' s client dictionary, the data is not part of a currently active shared content stream or other multicast stream, and the data should not be multicast for some other reason. In other embodiments, the data is multicast to the first viewer, even though the content is not part of a current shared content stream.
[0250] At a second time 1310b (e.g., twenty minutes into the first viewer's download of the streaming movie), a second viewer requests the same content. As content is received in response to the request, the server optimizer 130 intercepts the content and generates fingerprints of the content. The server optimizer 130 determines, as a function of the fingerprints, that the content is already being communicated to the first viewer. For example, the fingerprints match blocks in the global stream model 542 of FIG. 5. Notably, at this point, the respective entries in the global stream model 542 may not be part of any shared content stream and may carry a client stream ID for the first viewer, rather than a Content Stream ID (e.g., the blocks are described above as being unicast as part of a particular client session stream). For the sake of clarity, it is assumed that the content has not been previously stored in the second viewer's client dictionary as a result of a different transaction (e.g., a pre-positioning multicast session, etc.).
[0251] When it is determined that the content being requested by the second viewer is substantially the same content already being communicated to the first viewer, the server optimizer 130 may switch into overlapping request mode for that content, as described with reference to FIGS. 10, 11, 12 A, and 12B. For example, as described above, the content data may be tagged with a unique Content Stream ID, a global stream model 542, and/or client stream models 544, and/or client dictionary models 548 may be updated, etc. As described with reference to block 1260 of FIG. 12B, above, some of the content on the shared content stream will be shared content, and other content will be unshared content. [0252] Substantially after the request is received and processed (e.g., shortly after the second time 1310b), the second viewer begins receiving the shared content as part of the shared content stream and begins receiving the unshared content as part of a second stream. For example, say the first viewer is twenty minutes into streaming a two-hour movie at the time the second viewer's request is processed. The second viewer may begin streaming the first twenty minutes of the movie (i.e., that have already been streamed by the first viewer prior to the second viewer's request) via a second session stream. Substantially in parallel, the remaining portion of the movie may be multicast to the first and second viewers as shared content on the shared content stream. As the shared content is received, it may be viewed as part of the streaming movie by the first viewer, and it may be stored anticipatorily by the second viewer in the second viewer's client dictionary.
[0253] It is worth noting that, in some cases, a switch into overlapping request mode may involve switching content from one service flow to another. For example, content that was previously being communicated on a unicast service flow (e.g., or even possibly on a multicast service flow) may be switched to a new shared content stream (e.g., multicast service flow) and the previously active service flow may be terminated. It will be appreciated that where a viewer is switched from one service flow to another (e.g., from a unicast service flow to a multicast service flow), various techniques may be used. In certain embodiments, the live content data may be redundantly communicated on both service flows for a period of time during the transition. This may account for various latencies, processing times, buffering times, etc. For example, the user systems 110 may be configured to maintain a 15-second buffer to account for changes in link conditions, dropped packets, etc. During the transition to a multicast stream, some embodiments exploit the buffer to reduce the amount of redundant communications needed (e.g., the buffered data may be used if there is a short break in the transmission during the switch between service flows); while other embodiments use the new stream to ensure that the buffer is full before dropping the old stream.
[0254] At a third time 1310c (e.g., twenty minutes into the second viewer's download of the streaming movie, which may be approximately forty minutes into the first viewer's download of the streaming movie), the method 1300 may determine that the next blocks of data being downloaded by the second viewer as part of the streaming movie are already stored in the second viewer's client dictionary. For example, these blocks are the blocks that are being received and stored anticipatorily from the shared content stream. At this point, the second viewer may begin receiving the blocks in a highly compressed form, and may be decompressed and viewed using the locally stored data from the client dictionary.
[0255] If the shared session stream is still active (e.g., if the first viewer is still in the process of streaming the remainder of the movie), the second viewer may continue to anticipatorily store shared content in the client dictionary while using previously stored blocks from the dictionary for decompression as needed. For example, at the third time 131 Oc, the second viewer may be twenty minutes into the movie and the first viewer may be forty minutes into the movie. As the second viewer decompresses the second twenty minutes of the movie that have been stored since the shared stream began, the second viewer may also continue to anticipatorily download and store the remaining hour and twenty minutes of the movie being streamed by the first viewer as shared content.
[0256] At a fourth time 131Od, the first viewer's streaming of the movie ends, and the first viewer leaves the shared content stream. At this point, the second viewer may have anticipatorily stored the entire remainder of the movie, and may be able to use that locally stored data to receive and decompress a highly compressed version of the remainder of the movie. The second viewer's streaming of the movie may end at a fifth time 1310e.
[0257] It is worth noting that the stream management described in FIG. 13 may be completely transparent to the viewers. For example, from the perspective of the second viewer, the movie may be accessed, downloaded, watched, etc. with little or no awareness by the second viewer of the stream sharing, compression, and or other techniques involved in handling the overlapping requests. Using these techniques, including the use of fingerprinting and/or other deltacasting techniques, to handle shared content streams may provide a number of features, including those discussed above with reference to "Live Content Deltacasting" embodiments.
[0258] Correlative Anticipatory Deltacasting Embodiments
[0259] FIG. 14 is a flow diagram of an illustrative method 1400 for using deltacasting to handle traffic over a communications system, according to various embodiments. For the sake of clarity, the method 1400 is described in the context of the communications system 500 of FIG. 5. It will be appreciated, however, that various modifications may be made to the communications system 500 without limiting the scope of the method 1400. It will be further appreciated that some embodiments of blocks of the method 1400 are implemented substantially as described with respect to corresponding blocks of the method 600 of FIG. 6.
[0260] Embodiments of the method 1400 begin at block 1404 by receiving a block of content data. In some embodiments, at block 1408, an initial determination is made as to whether the content data block is a multicast candidate as a function of one or more criteria used to define a multicast prefilter 1412. When it is determined at block 1408 that the content data block is not a multicast candidate, the content data block (e.g., or at least a portion of the content data block) may be unicast, along with any relevant control data, to the appropriate user system(s) 110. When it is determined at block 1408 that the content data block is a multicast candidate (e.g., according to the multicast prefilter 1412 criteria), the content data block is further processed by the server optimizer 130 to determine if any or all of the content data block will, in fact, be sent over one or more multicast service flows 515. At block 1420, a fingerprint is generated (e.g., a fingerprint is calculated). In some embodiments, the fingerprint is generated at block 1420 by the deltacast coder 524b of the server optimizer 130.
[0261] In block 1424, the fingerprint is matched against other fingerprints of other content data blocks in the communications system 500. It will be appreciated that a number of different types of determinations may be made, depending on which blocks are being evaluated to find a match, each opening up potential deltacasting opportunities, for example, including those discussed above. If a match is identified, this indicates that the byte sequence (or the portion of the byte sequence) is already stored local to the client (e.g., in the client's client dictionary 435). In that case, at block 1436, all or relevant portions of the content data block may be compressed using the dictionary model (e.g. dictionary indexes). At block 1440, the highly compressed version of the content data block may then be unicast to the client.
[0262] If no match is found at block 1428 (e.g., or, in some cases, even if a match is found), a determination is made at block 1460 as to whether the data block received at block 1404 was previously seen by the communications system 500. Embodiments determine whether the block was "previously seen by the communications system 500" according to a previously seen data model 1464. Embodiments of the previously seen data model 1464 may include any type of useful information and may be maintained in any useful way. In some embodiments, the previously seen data model 1464 is a global dictionary model, including representations of data blocks from all client dictionaries. The representations may include copies of the data blocks, strong and/or weak identifiers (e.g., fingerprints, digests, hashes, etc.), indexes or pointers, lists, etc.
[0263] A match found at block 1460 may indicate that the data block received at block 1404 has been previously communicated one or more times to the same or a different user. Embodiments of the method 1400 may use this determination to further determine whether it would be efficient to anticipatorily multicast the data to non-requesting users. For example, data blocks seen multiple times may be assumed to be more popular than data blocks seen only once. It may be further assumed that popular data blocks will continue to be downloaded by the same and/or other users in the future.
[0264] As such, when a match is found at block 1460, the previously seen data model 1464 may be updated accordingly at block 1468. Of course, if no match is found, the previously seen data model 1464 may also be updated to record communication of the data block for future determinations. Updating the previously seen data model 1464 at block 1468 may include incrementing a tally, associating a time stamp, associating a destination user, etc., according to various embodiments of previously seen data models 1464 and trigger events, for example, as described below.
[0265] At block 1472, the match and/or updated previously seen data model 1464 may be evaluated to determine whether a trigger event has occurred. The trigger event may be configured to indicate that it is desirable to multicast this data (e.g., absent contrary indications, for example, according to block 1448, as described below). The trigger event may be signaled in different ways, according to various embodiments. In one embodiment, a trigger event is signaled whenever a block is seen more than once, for example, whenever a match is detected at block 1460. In another embodiment, a tally is maintained of the number of times a particular data block has been seen, and a trigger even is signaled when the tally crosses a threshold number (e.g., when the data block has been seen three times). [0266] Embodiments of the previously seen data model 1464 and/or the trigger event determination at block 1472 may be configured to further optimize the multicast determination. In some embodiments, the previously seen data model 1464 is restricted to (e.g., or different previously seen data models 1464 may be maintained for) users capable of sharing forward link capacity. For example, previously seen data models 1464 may be maintained according to users grouped by shared forward link, by modcode point, etc. In this way, a trigger event may only be signaled when the data block was previously seen by other users for which multicasting could save system resources.
[0267] In other embodiments, the previously seen data model 1464 is maintained temporally, geographically, etc. For example, data blocks may be time stamped to maintain an awareness of when the data was previously seen. In one embodiment, a trigger event is signaled at block 1472 only when the data block was previously seen within some time period (e.g., within the past hour or twenty-four hours). In another embodiment, a trigger event is signaled at block 1472 when the timing of requests for the data block indicate a sudden increase (e.g., or an increasing trend) in popularity for the data block. In still another embodiment, when a data block is determined to be popular in one geographic region at one time, a trigger event is signaled at block 1472 for users in another geographic region. For example, if a data block is downloaded by multiple users located in the Eastern Time Zone of the United States at around 14:00am, a trigger event may be signaled at block 1472 to begin multicasting the data to users located in the Pacific Time Zone in anticipation of later requests by those users.
[0268] It will be appreciated that the above embodiments of previously seen data models 1464 and trigger events at block 1472 are only some of the numerous ways in which the popularity indication may be used to affect multicast determinations, according to various embodiments. Further, embodiments of the method 1400 may proceed in different ways according to the determination made at block 1460 and/or whether a trigger event is signaled at block 1472. For example, is no match is found at block 1460 and/or no trigger event is signaled at block 1472, one or more types of additional multicast opportunities may be evaluated at block 1444.
[0269] According to various embodiments, multicast opportunities evaluated at block 1428 may include opportunities for multicasting some or all of the data of the content data block (e.g., or other data) as a function of finding matches between the content data block and other blocks in the communications system 500, as described above. In one example, where a content data block being requested by a first user is already being communicated to one or more other users (determined as a function of the byte-level data), it may be desirable to create a multicast service flow 515 or to add the requesting user to an existing multicast service flow 515. Some other examples of other multicast determinations are described above (e.g., with reference to the "Live Content Deltacasting" and Deltacasting for Overlapping Requests" sections).
[0270] In some embodiments, the method 1400 evaluates multicast opportunities at block 1444 even where a match is found at block 1428 (e.g., if a partial match is identified) and/or where a match is found at block 1460 (e.g., where a match is found, but no trigger event is signaled at block 1472). However, other embodiments may proceed differently. For example, identification of a match identified at block 1428 may typically indicate that very high compression of the data is possible. As such, it may be assumed in some embodiments that it is always more efficient to just unicast the highly compressed data at block 1440 than to use system resources to evaluate multicast opportunities at block 1444 (e.g., and potentially to set up a multicast service flow). Further, if a trigger event is signaled at block 1472, it may or may not be efficient to look for additional multicast opportunities at block 1444.
[0271] When multicast opportunities are identified (e.g., when a trigger event is signaled at block 1472, when a multicast opportunity is identified at block 1444, etc.), a determination may be made at block 1448 as to whether the identified multicast opportunities should be exploited. For example, even where a multicast opportunity exists, it may be inefficient to spend the resources to exploit the opportunity (e.g., to set up a multicast service flow 515). Notably, a similar type of determination is described above with reference to block 1408. However, in some embodiments, the evaluation(s) made in block 1408 look at metadata, file sizes, and other header-types of information, while the evaluation(s) made in block 1444 may use byte-level data from the content portion of the traffic datagrams and/or their respective fingerprints to match certain criteria (e.g., other blocks, etc.).
[0272] Further, multicast opportunities may be evaluated and fingerprint generation can be tailored in various ways depending on the types of opportunities being evaluated (e.g., the fingerprint may, itself, be a sequence of bytes or part of a more complex system of determining the associated byte sequence). By way of example, the fingerprints may be used in the context of identifying multicast opportunities with current service flows (e.g., to see if content requested by one user is currently being unicast or multicast to other users). To facilitate this type of identification, one embodiment generates maps having keys being the various fingerprints identifying the content data block and payloads that provide data about transfers underway or other useful information.
[0273] In certain embodiments, the maps are kept to a reasonable size to avoid unnecessary processing of data. For example, techniques are used to restrict the cases where the fingerprint is added to the map. In one embodiment, only a subset of the fingerprints for a given stream is added to the map, such that the number added is only as much as needed to identify shared data among multiple streams. For example, shared stream opportunities may be identified looking at only every tenth data block from a stream. In another embodiment, protocols that are "uninteresting" are excluded. For example, fingerprints may be created only for protocols known (e.g., predetermined) to be interesting, such as HTTP, certain media download protocols, etc. (e.g., as prefiltered in block 1408).
[0274] In still another embodiment, small objects are excluded, as described above with reference to block 1408. For example, if the size of the requested object is known (or predictable) in advance, it may be used as a filter - if the object is smaller than some threshold size, the fingerprint is not added to the map. When the object size is unknown (or not practically predictable), embodiments may wait until at least a minimum amount of data has been received, then filter out the noise (e.g., very small objects). Of course, it may be important to avoid delaying the map entry too long, such that it would cause the optimizer to miss certain a match with a new download. In some embodiments, when the download is complete, the fingerprint is removed from the map.
[0275] If a determination is made at block 1448 that either no multicast opportunities exist, or that the multicast opportunities should not be exploited, the content data block data and/or any related control data is unicast at block 1452, where appropriate. If a determination is made at block 1448 that a multicast opportunity exists and should be exploited, the content data block may be multicast to one or more clients at block 1456 (e.g., including the requesting client, where appropriate). Various embodiments unicast or multicast the data over various unicast service flows 525 and/or multicast service flows 515 to the client optimizer(s) 120. [0276] Once the data is received at the client optimizer 120, it may be stored at the client-side (e.g., blocks of the data may be stored and indexed by the client dictionary 435). In certain embodiments, storage in the client dictionary 435 ultimately causes a record of the data to be reflected at the server optimizer 130 if a model of the client-side client dictionary 435 is updated (e.g., through synchronization of the modeler module 532). When it is determined in block 1448 that the data will be multicast in block 1456 (e.g., and/or when the data is determined to be unicast in block 1452), the data may be compressed and/or otherwise coded before it is sent over the client-server communication link 125. In one embodiment, the data is zip coded prior to being sent over the client-server communication link 125. When the zipped data is received at the client optimizer 120, the data is added to the client dictionary 435.
[0277] It will now be appreciated that the method 1400 of FIG. 14 describes one of many different types of correlations that can be identified and/or exploited at the byte level (e.g., through anticipatory multicasting. Particularly, embodiments of the method 1400 correlate newly received data to previously seen data to develop a byte-level indicator of popularity. Other embodiments correlate byte-level data usage patterns of one or more users to those of one or more other users to develop an awareness of user-level correlation.
[0278] FIG. 15 shows a flow diagram of a method 1500 for developing an awareness of user- level correlations from byte-level data, according to various embodiments. As in the method 1400 of FIG. 14, embodiments of the method 1500 begin by receiving a block of data at block 1404 and generating fingerprints of the data at block 1420. It is worth noting that the method 1500 is shown to include or exclude blocks of the method 1400 of FIG. 14 for the sake of clarity (e.g., inclusions to add context and exclusions to avoid clutter), and should not be taken as limiting the scope of embodiments of the method 1500 of FIG. 15. Further, the method 1500 assumes that the data received at block 1404 is associated with a particular "first" user/client. For example, the data is being communicated to the first client in response to a request for the data or for some other reason, and the client session being used to communicate the data may or may not also be communicating the data with other clients (e.g., as part of a multicast session).
[0279] At block 1510, one or more models associated with the first user are updated to reflect the received data. In some embodiments, the first user's client dictionary model 1432a is updated. Embodiments of the client dictionary models 1432 are configured to be maintained (e.g., by the modeler module 532 of FIG. 5) to be substantially synchronized with the client dictionary 435. As such, updating of the client models at block 1510 may occur in certain embodiments only after the data block has been sent to the first user and stored in the first user's client dictionary 435, and acknowledgement of the storage has been received and processed at the server-side of the communications system 500.
[0280] In other embodiments, other types of modeling are performed. For example, it may not be relevant whether the data was successfully received at the first user's user system 110; rather, it may only be relevant that the data was requested by or otherwise destined for the first user. As such, a client session stream model, a non- verified client dictionary model, or some other type of model may be maintained, rather than the type of verified, synchronized client dictionary model 532 described above. Further, the timing of method 1500 blocks may be affected by the type of model used. For example, an unverified model may be updated prior to communicating and/or verifying communication of the data to the client. For the sake of illustration, the remainder of the method 1500 is described with reference to using client dictionary models 1432. It will be appreciated, at least from the above, that other types of models may be used without departing from the scope of the method 1500.
[0281] In some embodiments, at block 1520, the first user's client dictionary model 1432a is analyzed against one or more other users' client dictionary models 1432b to generate a user correlation metric. The user correlation metric may indicate whether to correlate one or more users to one or more other users at block 1530, as discussed more below. If, at block 1530, it is determined not to correlate users, the method 1500 may terminate, return to block 1404 to receive more data, etc. If, at block 1530, it is determined to correlate users, the method 1500 may update a user correlation model 1550 accordingly. The user correlation model may then be used to make multicasting determinations, for example, as described with reference to FIG. 16, below.
[0282] It will be appreciated that the correlation metric generation at block 1520 with one or more other users' client dictionary models 1432b may be implemented in a number of different ways according to various embodiments. In one embodiment, the fingerprint generated at block 1420 is compared to blocks of other users' client dictionary models 1432b to determine whether the data block destined for the first client has been previously seen by other clients. In another embodiment, each client dictionary model 1432 is periodically compared to other client dictionary models 1432 to maintain the user correlation model 1550. For example, this comparison may be performed synchronously or asynchronously with the receipt of data at block 1404.
[0283] Further, the one or more other users' client dictionary models 1432b may be implemented in various ways. In one embodiment, separate dictionary models are maintained for each client, and the one or more other users' client dictionary models 1432b is the set (e.g., or a subset) of those separate models. In another embodiment, a global client dictionary model is maintained, representing data stored in all the client dictionaries (or client dictionary models). The data blocks (or representations thereof) may be stored in association with respective clients. In still another embodiment, the one or more other users' client dictionary models 1432b includes data sets stored associatively with multicast groups of correlated users. As users are determined to be correlated to other users, the various types of one or more other users' client dictionary models 1432b may or may not have to be updated to reflect that correlation, depending on the type of modeling used.
[0284] Even further, the user correlation model 1550 may be implemented in various ways. In one embodiment, the user correlation model 1550 is a set of pointers or indexes to various client dictionary models 1432. In another embodiment, the user correlation model 1550 includes a list of various groupings of users (e.g., a lookup table having a list of correlated users associated with eack user in the list).
[0285] In other embodiments, the user correlation model 1550 include more complex types of information. In one set of embodiments, the user correlation model 1550 may maintain modcode points and/or other information that may be used to further optimize multicast groupings. In another set of embodiments, the user correlation model 1550 includes higher-level information relating to the types of correlations identified. For example, the user correlation model 1550 may include information on the type of data that was correlated (e.g., using metadata, where available), on correlation times (e.g., these two users only tend to have high correlation from 15:00pm to 10:00pm on weeknights), on the degree of correlation (e.g., a magnitude of the correlation metric generated in block 1520), etc. It will be appreciated that many types of data processing are possible to identify and exploit these types of correlations. [0286] FIG. 16 shows a flow diagram of a method 1600 for byte-level user correlation, according to various embodiments. Embodiments of the method begin by receiving and processing a data block to generate a signature and/or to make any preliminary filtering or other determinations. For example, the data block may be received according to block 1404, and processed according to any or all of blocks 1408 - 1440, as described with reference to the method 1400 of FIG. 14.
[0287] In some embodiments, after pre-processing the received data (e.g., according to blocks 1408 - 1440), the user correlation model 1550 generated in FIG. 15 may be used in a number of ways for further processing and/or optimization. In one embodiment, at this point in the method, a fingerprint may have been generated and a determination has been made that the data is multicastable. For example, the data may have been pre-filtered to determine that it is a multicast candidate, and the data may have been further evaluated according to its fingerprint to determine that it is not already stored at the client dictionary.
[0288] Embodiments of the method 1600 may proceed with a determination at block 1460 as to whether the data block received at block 1404 was previously seen by the communications system 500, according to the previously seen data model 1464 (e.g., as described above with reference to FIG. 14). Embodiments of the previously seen data model 1464 associate previously seen data blocks with those users that have seen those blocks. For example, representations of the data blocks may be stored associatively with a list of user identifiers (e.g., destination IP addresses, etc.). In this way, a match found at block 1460 may indicate both that the data block received at block 1404 has been previously communicated to at least one user, and to which user(s) the block was communicated.
[0289] When a match is found at block 1460, a determination may be made at block 1472 as to whether a trigger event has occurred. Embodiments of trigger events, as described above with reference to FIG. 14, may indicate that it is desirable to multicast this data (e.g., absent contrary indications, for example, according to block 1448). As described above with reference to FIG. 14, if no match is found at block 1460 and/or no trigger event is signaled at block 1472, one or more types of additional multicast opportunities may be evaluated at block 1444.
[0290] When a trigger event is signaled at block 1472, it may be desirable to determine which users should be part of a multicast group for receiving the multicast data. For example, according to one embodiment of the method 1400 of FIG. 14, data determined to be previously seen (e.g., determined to be sufficiently "popular") may be multicast to all users or all users sharing a forward-link. In another embodiment, however, the user correlation model 1550 may be used in block 1620 to determine which users should be included in the multicast group.
[0291] For example, in one embodiment, the user correlation model 1550 indicates that twenty users on a satellite communications system share a spot beam with the destination user and are highly correlated with the destination user (e.g., data blocks downloaded by any one of the users are highly likely to be downloaded by the correlated users). When data is found to match data represented in the previously seen data model 1464, the data may be multicast to those users that are correlated with the destination user according to the user correlation model 1550. In another embodiment, when data is found to match data represented in the previously seen data model 1464, the previously seen data model 1464 may be used to determine which other users have previously seen the data. This information can be used to further refine user correlation metrics, or to further refine the multicast group at block 1620 (e.g., by expanding the multicast group to include users correlated with other users who have previously seen this data block).
[0292] Notably, none (or only some) of the other users in the multicast group may have requested the data at this point. As such, the multicast session may be used to anticipatorily preposition the data block in the non-requesting users' local storage (e.g., client dictionaries 435). In that way, if any of the non-requesting users later requests the data block, the locally stored block may be used, for example, to provide high compression.
[0293] When no match is found at block 1460, some embodiments determine whether the destination user is highly correlated with any other users, according to the user correlation model 1550. at block 1610. Where there is a high enough correlation with at least one other user, it may be efficient to multicast the data to both users, even where the data is not otherwise multicastable. For example, if seventy percent of the data downloaded by a first user is also downloaded by a second user, it may be efficient to multicast everything downloaded by one of those users to the other of those users. Similarly, if a user is highly correlated to the network (e.g., the user tends almost exclusively to download very popular content), that user may be added to any appropriate multicast group. [0294] As described above, if a match is found at block 1610, a multicast group may be generated or expanded according to the user correlation model 1550 in block 1620. For example, in one embodiment, the user correlation model 1550 indicates that twenty users on a satellite communications system share a spot beam with the destination user and are highly correlated with the destination user. When data is received for the destination user and/or any of the twenty users, a match may be found at block 1610, and a multicast group may be created at block 1620 to include the correlated group of users in a multicast session. Similarly, if the data was already being communicated to a multicast group, the group may be expanded at block 1620, where appropriate, to accommodate the correlated users according to the user correlation model 1550.
[0295] Where no match is found at block 1610, this may indicate that there is no indication to multicast the data according to the user correlation model 1550 (e.g., and/or according to the previously seen data model 1464 as determined in block 1460). Still, however, there may be other reasons to multicast the data. As such, embodiments may proceed, as described above with reference to the method 1400 of FIG. 14, with identifying other potential opportunities for multicasting the data at block 1444 and determining whether to exploit multicast opportunities at block 1448. For example, if a determination is made at block 1448 that either no multicast opportunities exist, or that the multicast opportunities should not be exploited, the content data block data and/or any related control data may be unicast at block 1452, where appropriate. If, on the other hand, a multicast group is generated at block 1620 as a result of a match being found at block 1460, a high user correlation being found at block 1610, or some other multicast opportunity being identified at block 1444, a further determination may be made at block 1448 as to whether those opportunities should be exploited. If so, the content data block may be multicast to one or more clients at block 1456 (e.g., including the requesting client and/or any non-requesting correlated clients, where appropriate).
[0296] While the method 1600 of FIG. 16 is described according to the illustrative flow of the method 1400 of FIG. 14, elements of the various methods may affect one another. For example, determining whether users are correlated earlier in the process may allow the data to be considered inherently multicastable, which may allow certain other process steps to be optimized, skipped, reordered, etc. In one embodiment, a user correlation is identified (e.g., block 1610 is implemented) substantially when the data is received, prior to other types of pre- filtering (e.g., according to blocks 1408 - 1416) or other evaluation. If a user correlation is identified and determined to make the data block inherently multicastable, some or all of the pre- filtering and/or other evaluation steps may be skipped or adjusted accordingly.
[0297] It is worth noting that the use of fingerprinting (e.g., and/or other dictionary coding techniques) to make multicasting and related determination may provide a number of features. One feature is that deltacasting opportunities may be identified and/or exploited even where there is little or no access to certain metadata. For example, as discussed above, the server optimizer generates signatures based on byte level data and does not require knowledge of "header portion" information (e.g., file types, proprietary tags, protocol tags, etc.) to make its determinations.
[0298] Another feature is that fingerprinting techniques may allow deltacasting opportunities to be identified, even where the content source or other "header portion" (e.g., metadata) information is different. For example, say multiple users tend to download much of the same data blocks, but from different data sources (e.g., from different content delivery networks (CDNs), mirror sites, etc.). Fingerprinting techniques can find matching blocks and facilitate data and user correlations even where the content sources are different, as identical blocks will still have matching fingerprints. Similarly, deltacasting opportunities may be identified even where cache-busting, anonymizer, spoofing, and/or other techniques are used to affect source or block determinations.
[0299] Still another feature is that deltacasting techniques may be used transparently to preserve communications from the perspective of end users and content sources. In particular, an end user and a content source may effectively experience the same byte-for-byte communications with or without deltacasting. For example, even though requests and/or responses are intercepted according to deltacasting embodiments, when a user requests data from a content source, the content source may ultimately provide the same bytes to the end user as if there were a unicast link between the end user and the content source.
[0300] It is also worth noting that that embodiments allow substantially transparent optimization of communications while preserving certain legal and business relationships, including, copyright, digital rights management, subscription, and/or other obligations. For example, as discussed above, content data is stored in dictionaries effectively as dissociated blocks of data, such that the content can only be recreated from those blocks using appropriate dictionary references (e.g., indexes). According to various embodiments, those dictionary references are unavailable to clients without a new request from the content source.
[0301] In one illustrative embodiment, a first user watches a movie through a popular video- on-demand website by logging into the website using credentials (e.g., a user name and password) and viewing the movie through an embedded player surrounded by banner advertisements. Based on one or more determinations discussed above, the content set for the website is multicast to the first (requesting) user and to a second (non-requesting) user, and is stored in the second user's client dictionary 435. The second user's client dictionary 435 may now include data blocks from a movie that includes copyrighted material, from a web session authenticated according to another user's credentials, from advertisements that may be cycled and/or tracked, from web objects that are designated in metadata as "un-cacheable," etc. As discussed above, embodiments of the client dictionary 435 store the data blocks in such a way that is may be effectively impossible (e.g., or at least sufficiently impractical) for the first user to access the movie content directly from the client dictionary 435.
[0302] Instead, if the second user later requests the movie, the second user's experience may be much the same as that of the first user (e.g., and much the same as it would have been had the data not been stored in the client dictionary 435). For example, the second user may still visit the website using a web browser and may still log in with credentials. If authorized, the second user may still request an authorized, licensed copy of the movie file from the website, which may then be viewed in the embedded player surrounded by banner advertisements. However, as the data is received in response to the request, deltacasting techniques are used to fingerprint the data and identify the data as already being stored in the second user's client dictionary 435. The data may then be communicated to the second user accordingly, for example, by highly compressing the data according to a model of the client dictionary 435 stored at the server side of the communications system 500 (e.g., the client dictionary model 1432).
[0303] As such, the use of deltacasting techniques may preserve legal and other obligations for content transactions. In the above example, the second user is practically unable to access copyright and/or unauthorized material from the client dictionary 435. Further, forcing the second user to access the content as intended by the content provider (e.g., through the provider's website) may allow the content provider to preserve advertising, hosting, and/or other relationships. For example, if the content provider happens to offer an advertisement that is already stored in the client dictionary, the advertisement may still be requested over the content network link 135 (e.g., thereby providing any associated advertisement tracking, revenue, etc.) while also being highly compressed over the client-server communications link 125.
[0304] It will now be appreciated that use of deltacasting techniques to identify and/or exploit multicasting opportunities provides certain features. Further, as described above, deltacasting techniques (e.g., byte-level fingerprinting) may be used to provide additional features through different types of correlations. According to some embodiments, fingerprints are used at the byte level to identify and/or exploit situations in which a data block communicated to one or more users multiple times (e.g., some pre-defined threshold number of times, in an increasing trend, etc.). According to other embodiments, fingerprints are used at the byte level to identify and/or exploit situations in which multiple users tend to download sufficiently similar content.
[0305] In one illustrative embodiment, a user requests popular content, and the response includes blocks of data relating to the content. Optimizer components (e.g., the server optimizer 130) treats each data block effectively as a meaningless sequence of bytes, such that fingerprints are generated and some or all multicasting determinations are made with little or no consideration of what the byte sequence represents (e.g., its metadata, file type, etc.). Even absent higher level information about the content represented by the data blocks, the fingerprints can be used to find one or more correlations, and the data blocks may be handled accordingly.
[0306] The correlative handling may provide a number of different types of functionality. One type of functionality relates to identifying and exploiting content popularity and related metrics. Even without an object-level awareness of the content traversing the communications system 500, popularity and/or other metrics can be evaluated from the correlation metrics and related information. The metrics may be used for many types of applications, including for web tracking (e.g., for reporting web traffic statistics), usage correlation between users, anticipatory pre-positioning, load balancing, etc.
[0307] In another embodiment, the correlative awareness is used to affect a relationship between users. Various types of user groupings, social networking, and/or other functionality may be affected by identification of user correlations. For example, correlations with other users, data popularity, and other types of information which may be extrapolated from correlation metrics may be used to suggest content to user; to price content; to affect advertising, content delivery, content hosting, and/or other relationships; etc.
[0308] It will be appreciated from the above systems, methods, features, etc. that different types of correlations are possible and that correlative awareness can be implemented in many ways to provide many types of functionality, according to various embodiments. In particular, some embodiments can use correlative anticipatory deltacasting techniques to facilitate pre- positioning of content local to clients of a communications system. For example, various factors, including some relating to one or more correlations, may be used to determine (e.g., according to a cost-benefit analysis) whether it is efficient to anticipatorily multicast content to users.
[0309] In certain embodiments, the pre-positioning can be used to preempt various types of communications system 500 issues. In one embodiment, repeated downloading of the same content by multiple users is used to predict congestion of the communications links from an impending Internet storm (e.g., a large number of users appears to be downloading the same content at substantially the same time). The content may be pre-positioned to all the users on the shared communications link and/or on other links, to facilitate using high levels of compression for future requests of the content. In another embodiment, repeated downloading of a data block at one time of day is used to designate the data block as popular. Popular data blocks may then be pre-positioned to non-requesting users at a low-usage time (e.g., in the middle of the night).
[0310] It is worth noting that additional techniques may be used to further optimize pre- positioning functionality. For example, user systems 110 are likely to fail to receive at least some packets multicast to them as part of an anticipatory pre-positioning of content. Typically, various protocols may be used to retransmit missing (e.g., dropped) packets. However, when the packets are sent purely anticipatorily (i.e., without any explicit request from the user), it may be inefficient to use additional system resources to retransmit missing packets to those non- requesting users.
[0311] In some embodiments, a novel transport protocol is provided to track which user systems 110 are actually requesting particular content (i.e., rather than being sent content anticipatorily), and to retransmit only to those user systems 110. In certain embodiments, missing packets are retransmitted to other (e.g., non-requesting) user systems 110 only when those user systems 110 actually request the content. In other embodiments, missing packets may be retransmitted to other (e.g., non-requesting) user systems 110 when opportunities arise for multicasting the missing packets efficiently (e.g., when a request is received by another user, packets are retransmitted to those users that dropped the packets during the previous transmission).
[0312] In one embodiment, the user that originally requests the content issues requests for retransmission of any packets that were not successfully retrieved. Each packet is uniquely identified using a fileID and packetID. The same fileID and packetID are used for all retransmissions, so that once a user has a valid copy of the packet, it can ignore subsequent retransmitted copies. Users that are anticipatorily storing the content (for possible, but not certain, future use) may store copies of some or all packets that are successfully received. The stored packets may include original transmissions and/or any retransmissions. If a user subsequently requests the content (e.g., which could be several hours or days later), it may upload a request for any packets that are missing (e.g., from its client dictionary). In certain embodiments, some or all of the retransmits are multicast, so that any other users listening to the multicast can download the retransmitted packets, if needed. Some embodiments of the transport protocol include deterministic packetization techniques for handling use of packet numbers, rather than file offsets and lengths. For example, a deterministic packetization algorithm may be provided to ensure that a request for "packet 171" always refers to the same byte range.
[0313] The above description is intended to provide various embodiments of the invention, but does not represent an exhaustive list of all embodiments. For example, those of skill in the art will appreciate that various modifications are available within the scope of the invention. Further, while the disclosure includes various sections and headings, the sections and headings are not intended to limit the scope of any embodiment of the invention. Rather, disclosure presented under one heading may inform disclosure presented under a different heading. For example, descriptions of embodiments of method steps for handling overlapping content requests may be used to inform embodiments of methods for handling anticipatory requests. [0314] Specific details are given in the above description to provide a thorough understanding of the embodiments. However, it is understood that the embodiments may be practiced without these specific details. For example, well-known processes, algorithms, structures, and techniques may be shown without unnecessary detail in order to avoid obscuring the embodiments. Implementation of the techniques, blocks, steps, and means described above may be done in various ways. For example, these techniques, blocks, steps, and means may be implemented in hardware, software, or a combination thereof. For a hardware implementation, the processing units may be implemented within one or more application specific integrated circuits (ASICs), digital signal processors (DSPs), digital signal processing devices (DSPDs), programmable logic devices (PLDs), field-programmable gate arrays (FPGAs), soft core processors, hard core processors, controllers, micro-controllers, microprocessors, other electronic units designed to perform the functions described above, and/or a combination thereof. Software can be used instead of or in addition to hardware to perform the techniques, blocks, steps, and means.
[0315] Also, it is noted that the embodiments may be described as a process which is depicted as a flowchart, a flow diagram, a data flow diagram, a structure diagram, or a block diagram. Although a flowchart may describe the operations as a sequential process, many of the operations can be performed in parallel or concurrently. In addition, the order of the operations may be re-arranged. A process is terminated when its operations are completed, but could have additional steps not included in the figure. A process may correspond to a method, a function, a procedure, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination corresponds to a return of the function to the calling function or the main function.
[0316] Furthermore, embodiments may be implemented by hardware, software, scripting languages, firmware, middleware, microcode, hardware description languages, and/or any combination thereof. When implemented in software, firmware, middleware, scripting language, and/or microcode, the program code or code segments to perform the necessary tasks may be stored in a machine readable medium such as a storage medium. A code segment or machine- executable instruction may represent a procedure, a function, a subprogram, a program, a routine, a subroutine, a module, a software package, a script, a class, or any combination of instructions, data structures, and/or program statements. A code segment may be coupled to another code segment or a hardware circuit by passing and/or receiving information, data, arguments, parameters, and/or memory contents. Information, arguments, parameters, data, etc. may be passed, forwarded, or transmitted via any suitable means including memory sharing, message passing, token passing, network transmission, etc.
[0317] For a firmware and/or software implementation, the methodologies may be implemented with modules (e.g., procedures, functions, and so on) that perform the functions described herein. Any machine-readable medium tangibly embodying instructions may be used in implementing the methodologies described herein. For example, software codes may be stored in a memory. Memory may be implemented within the processor or external to the processor. As used herein the term "memory" refers to any type of long term, short term, volatile, nonvolatile, or other storage medium and is not to be limited to any particular type of memory or number of memories, or type of media upon which memory is stored.
[0318] Moreover, as disclosed herein, the term "storage medium" may represent one or more memories for storing data, including read only memory (ROM), random access memory (RAM), magnetic RAM, core memory, magnetic disk storage mediums, optical storage mediums, flash memory devices and/or other machine readable mediums for storing information. Similarly, terms like "cache" are intended to broadly include any type of storage, including temporary or persistent storage, queues (e.g., FIFO, LIFO, etc.), buffers (e.g., circular, etc.), etc. The term "machine-readable medium" includes, but is not limited to, portable or fixed storage devices, optical storage devices, wireless channels, and/or various other storage mediums capable of storing that contain or carry instruction(s) and/or data.
[0319] Further, certain portions of embodiments (e.g., method steps) are described as being implemented "as a function of other portions of embodiments. This and similar phraseologies, as used herein, intend broadly to include any technique for determining one element partially or completely according to another element. For example, a method may include generating a fingerprint from a first request and generating a determination "as a function of the fingerprint. In various embodiments, the determination may be made in any way, so long as the outcome of the determination generation step is at least partially dependant on the outcome of the fingerprint generation step. [0320] While the principles of the disclosure have been described above in connection with specific apparatuses and methods, it is to be clearly understood that this description is made only by way of example and not as limitation on the scope of the disclosure.

Claims

CLAIMS WHAT IS CLAIMED IS:
1. A method for multicasting over a communications system having a communications path between a server side of the communications system and a client side of the communications system, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the method comprising: intercepting traffic using a server optimizer located at the server side of the communications system between a content source and a plurality of client optimizers, the traffic comprising a header portion and a content portion and being communicated from the content source to a content destination associated with a first client optimizer, the first client optimizer being communicatively coupled with a first client dictionary; generating a fingerprint as a function of byte-level information comprised by the content portion of the traffic; determining whether to multicast the traffic by using the fingerprint to determine whether the traffic is currently stored in the first client dictionary; and when it is determined to multicast the traffic, multicasting the traffic over the communications path from the server side of the communications system to at least the content destination associated with the first client optimizer.
2. The method of claim 1, wherein the communications path is configured to implement an optimizer tunnel between the server optimizer and the plurality of client optimizers.
3. The method of claim 1, wherein generating the fingerprint comprises: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
4. The method of claim 1, wherein using the fingerprint to determine whether the traffic is currently stored in the first client dictionary comprises: comparing the fingerprint to a model of the first client dictionary communicatively coupled with the server optimizer.
5. The method of claim 1, wherein determining whether to multicast the traffic by using the fingerprint to determine whether the traffic is currently stored in the first client dictionary comprises: determining not to multicast the traffic when the traffic is currently stored in the first client dictionary.
6. The method of claim 5, further comprising: when the traffic is currently stored in the first client dictionary, unicasting a highly compressed representation of the traffic over the communications path to at least the content destination associated with the first client optimizer.
7. The method of claim 6, wherein unicasting the highly compressed representation of the traffic over the communications path to at least the content destination associated with the first client optimizer comprises: communicating a set of indexes over the communications path from the server optimizer to at least the first client optimizer, the set of indexes referring to data blocks currently stored in the first client dictionary.
8. The method of claim 1, wherein determining whether to multicast the traffic by using the fingerprint to determine whether the traffic is currently stored in the first client dictionary comprises: estimating a multicast cost to the communications system associated with multicasting the traffic from the server optimizer over the communications path to content destinations associated with a set of client optimizers, the set of client optimizers comprising the first client optimizer; estimating, as a function of the fingerprint, a multicast benefit to the communications system associated with multicasting the traffic from the server optimizer to the content destinations; and when the multicast benefit exceeds the multicast cost, multicasting the traffic over the communications path from the server optimizer to the content destinations.
9. The method of claim 8, wherein estimating the multicast cost to the communications system comprises: determining an amount of bandwidth used by multicasting the traffic from the server optimizer over the communications path.
10. The method of claim 8, wherein estimating the multicast benefit to the communications system comprises: determining a likelihood that, if the traffic were multicast to the content destinations, a second client optimizer of the set of client optimizers will request substantially the same traffic subsequent to the multicasting of the traffic.
11. The method of claim 8, wherein the set of client optimizers is a subset of the plurality of client optimizers.
12. The method of claim 8, further comprising: when the multicast benefit does not exceed the multicast cost, unicasting the traffic over the communications path from the server optimizer to the content destination associated with the first client optimizer.
13. The method of claim 1 , further comprising : determining at the server optimizer whether the traffic is a multicast candidate according to a pre-filter criteria, wherein the generating the fingerprint step is performed only when the traffic is a multicast candidate according to the pre-filter criteria.
14. The method of claim 13, wherein the pre-filter criteria relates to a size of the traffic.
15. The method of claim 13, wherein determining at the server optimizer whether the traffic is a multicast candidate according to the pre-filter criteria comprises evaluating metadata comprised by the header portion of the traffic.
16. The method of claim 1, wherein multicasting the traffic over the communications path from the server optimizer to at least the content destination associated with the first client optimizer comprises: identifying a set of client optimizers to participate in the multicast; detecting a link condition affecting communications between the server optimizer and content destinations associated with the set of client optimizers; selecting a modcode as a function of the link condition; and multicasting the traffic over the communications path from the server optimizer to the content destinations according to the modcode.
17. The method of claim 16, wherein the modcode is selected so that at least the content destination associated with the first client optimizer can reliably decode the traffic received from the multicasting step.
18. The method of claim 1 , wherein the communications path comprises a satellite link.
19. A server system for multicasting to a plurality of user systems via a communications link, each user system comprising a client optimizer, the server system comprising: a server optimizer, in communication with a content source, in communication with the client optimizers via a communications path, and configured to: intercept traffic coming from the content source and destined for a user associated with a first client optimizer, the traffic comprising a header portion and a content portion, the content portion representing content being communicated from the content source to the user, the first client optimizer being communicatively coupled with a first client dictionary; and generate a fingerprint using byte-level information comprised by the content portion of the traffic; and a multicaster module, communicatively coupled with the server optimizer, and configured to: determine whether to multicast the traffic by using the fingerprint to determine whether the traffic is currently stored in the first client dictionary; and when the multicaster module determines to multicast the traffic, multicast the traffic over the communications path from the server optimizer to at least the first client optimizer.
20. The server system of claim 19, wherein the server optimizer is further configured to generate the fingerprint by: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
21. The server system of claim 19, wherein: the server optimizer is communicatively coupled with a model of the first client dictionary; and the multicaster module is further configured to determine whether to multicast the traffic by using the fingerprint to determine whether the traffic is currently stored in the first client dictionary by comparing the fingerprint to the model of the first client dictionary.
22. The server system of claim 19, wherein the multicaster module is further configured to: when the traffic is currently stored in the first client dictionary, unicast a highly compressed representation of the traffic over the communications path from the server optimizer to the first client optimizer.
23. The server system of claim 19, wherein the multicaster module is further configured to: determine whether to multicast the traffic by: estimating a multicast cost to the communications system associated with multicasting the traffic from the server optimizer to a set of client optimizers, the set of client optimizers comprising the first client optimizer; and estimating, as a function of the fingerprint, a multicast benefit to the communications system associated with multicasting the traffic from the server optimizer to the set of client optimizers; and multicast the traffic over the communications path from the server optimizer to at least the first client optimizer when the multicast benefit exceeds the multicast cost.
24. The server system of claim 19, wherein the server optimizer is further configured to: determine whether the traffic is a multicast candidate according to a pre-filter criteria; and generate the fingerprint only when the traffic is a multicast candidate according to the pre-filter criteria.
25. The server system of claim 19, further comprising: a coding and modulation module, communicatively coupled with the multicaster module, and configured to: when multicasting the traffic over the communications path from the server optimizer to at least the first client optimizer, identifying a set of client optimizers to receive the multicast; detect a link condition affecting communication between the server optimizer and the set of client optimizers; and select a modcode as a function of the link condition, wherein the multicaster module is further configured to multicast the traffic over the communications path from the server optimizer to the set of client optimizers according to the modcode.
26. A system for deltacasting comprising: a plurality of user systems, each user system comprising: a client dictionary configured to store data local to the respective user system as an indexed set of data blocks; and a client optimizer, configured to receive traffic and control data, and to determine whether to store the received traffic at the respective client dictionary according to the control data; and a server system, in communication with a content source and in communication with the plurality of user systems over a communications path, and comprising: a server optimizer in communication with the client optimizers comprised by the plurality of user systems via the communications path, the server optimizer being configured to: intercept traffic coming from the content source and destined for a first client optimizer associated with a respective first client dictionary, the traffic comprising a header portion and a content portion, the content portion representing content being communicated from the content source to a user associated with the first client optimizer; and generate a fingerprint from byte-level information comprised by the content portion of the traffic; a modeling module configured to store dictionary models indicating contents of the client dictionaries; and a multicaster module, communicatively coupled with the server optimizer and the modeling module, and configured to: determine whether to multicast the traffic by using the fingerprint to determine whether the traffic is currently stored in the first client dictionary; and when the multicaster module determines to multicast the traffic, multicast the traffic over the communications path from the server optimizer to at least the user system associated with the first client optimizer.
27. The system of claim 26, wherein the server optimizer is further configured to generate the fingerprint by: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
28. The system of claim 26, wherein the communications path comprises a shared forward link configured to allow link capacity sharing among the plurality of user systems.
29. The system of claim 28, wherein the shared forward link comprises a spot beam of a satellite link.
30. A method for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the method comprising: intercepting traffic at the server side of the communications system, the traffic comprising a header portion and a content portion and being part of a first client session stream configured to communicate a content stream comprising the traffic to a first client over the communications path, the server side comprising a global stream model configured to maintain models of active session streams being communicated over the communications path; generating a fingerprint using byte-level information comprised by the content portion of the traffic; using the fingerprint to determine whether the traffic matches byte-level information from a second client session stream according to the global stream model, the second client session stream being an active session stream used to communicate the content stream between the server side of the communications system and at least a second client over the communications path; and when the traffic matches the byte-level information from the second client session stream according to the global stream model, configuring a shared session stream to multicast at least a portion of the content stream from the server side of the communications system to the first client and the second client over the communications path.
31. The method of claim 30, further comprising: multicasting the at least a portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client.
32. The method of claim 31 , wherein: configuring the shared session stream to multicast at least the portion of the content stream from the server side of the communications system to the first client and the second client over the communications path comprises associating a content stream identifier with at least the portion of the content stream being communicated as part of the shared session stream; and multicasting the at least a portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client comprises directing the first client and the second client to accept traffic associated with the content stream identifier.
33. The method of claim 30, wherein the content stream comprises live content.
34. The method of claim 30, further comprising: storing a representation of the traffic in the global stream model.
35. The method of claim 30, further comprising: storing a representation of the traffic in a client stream model configured to maintain a model of content being communicated to the first client as part of the shared session stream.
36. The method of claim 35, further comprising: after configuring the shared session stream: intercepting shared traffic associated with the shared session stream at the server side of the communications system; generating a second fingerprint using byte-level information comprised by a content portion of the shared traffic; using the second fingerprint to determine whether the shared traffic has been previously communicated to the first client according to the client stream model; and when the shared traffic has not been previously communicated to the first client according to the client stream model, multicasting the shared traffic over the shared session stream.
37. The method of claim 36, further comprising: when the shared traffic has been previously communicated to the first client according to the client stream model: compressing the shared traffic using the client stream model; and unicasting the compressed shared traffic from the server side of the communications system to the first client over the communications path.
38. The method of claim 35 , wherein the representation of the traffic is stored in the client stream model without verification that the traffic was successfully received by the first client.
39. The method of claim 30, wherein generating the fingerprint comprises: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
40. The method of claim 30, further comprising: when the traffic does not match the byte-level information from the second client session stream according to the global stream model, communicating the traffic using the first client session stream from the server side of the communications system to the first client over the communications path.
41. The method of claim 30, wherein the content stream comprises live content.
42. The method of claim 30, wherein the communications path comprises a satellite link.
43. A server system for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the server system comprising: a modeling module, configured to maintain a global stream model configured to represent models of active session streams being communicated over the communications path; a server optimization module, communicatively coupled with the modeling module, and configured to: intercept traffic at the server side of the communications system, the traffic comprising a header portion and a content portion and being part of a first client session stream configured to communicate a content stream comprising the traffic to a first client over the communications path; generate a fingerprint using byte-level information comprised by the content portion of the traffic; and use the fingerprint to determine whether the traffic matches byte-level information from a second client session stream according to the global stream model, the second client session stream being an active session stream used to communicate the content stream between the server side of the communications system and at least a second client over the communications path; and a stream management module, communicatively coupled with the server optimization module and the modeling module, and configured to: configure a shared session stream to multicast at least a portion of the content stream from the server side of the communications system to the first client and the second client over the communications path when the traffic matches the byte-level information from the second client session stream according to the global stream model.
44. The server system of claim 43, wherein the stream management module is further configured to: multicast the at least a portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client.
45. The server system of claim 44, wherein the stream management module is further configured to: configure the shared session stream to multicast at least the portion of the content stream from the server side of the communications system to the first client and the second client over the communications path by associating a content stream identifier with at least the portion of the content stream being communicated as part of the shared session stream; and multicast the at least a portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client by directing the first client and the second client to accept traffic associated with the content stream identifier.
46. The server system of claim 43, wherein the modeling module is further configured to maintain the global stream model by: when the traffic matches the byte-level information from the second client session stream according to the global stream model, storing a representation of the traffic in the global stream model.
47. The server system of claim 43, wherein the modeling module is further configured to: maintain a client stream model by storing a representation of the traffic in the client stream model when the traffic is communicated to the first client.
48. The server system of claim 47, wherein: the server optimization module is further configured, after the stream management module configures the shared session stream, to: intercept shared traffic associated with the shared session stream; generate a second fingerprint using byte-level information comprised by a content portion of the shared traffic; and use the second fingerprint to determine whether the shared traffic has previously been communicated to the first client according to the client stream model; and the stream management module is further configured to: multicast the shared traffic over the shared session stream when the shared traffic has not been previously communicated to the first client according to the client stream model.
49. The server system of claim 48, wherein the stream management module is further configured to: when the shared traffic has been previously communicated to the first client according to the client stream model: compress the shared traffic using the client stream model; and unicast the compressed shared traffic from the server side of the communications system to the first client over the communications path.
50. The server system of claim 47, wherein the modeling module is further configured to: store the representation of the traffic in the client stream model without verification that the traffic was successfully received by the first client.
51. The server system of claim 43, wherein the server optimization module is configured to generate the fingerprint by: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
52. A machine-readable medium for handling multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the machine-readable medium having instructions stored thereon which, when executed by a machine, cause the machine to perform steps comprising: intercepting traffic at the server side of the communications system, the traffic comprising a header portion and a content portion and being part of a first client session stream configured to communicate a content stream comprising the traffic to a first client over the communications path, the server side comprising a global stream model configured to maintain models of active session streams being communicated over the communications path; generating a fingerprint using byte-level information comprised by the content portion of the traffic; using the fingerprint to determine whether the traffic matches byte-level information from a second client session stream according to the global stream model, the second client session stream being an active session stream used to communicate the content stream between the server side of the communications system and at least a second client over the communications path; and when the traffic matches the byte-level information from the second client session stream according to the global stream model, configuring a shared session stream to multicast at least a portion of the content stream from the server side of the communications system to the first client and the second client over the communications path.
53. The machine-readable medium of claim 52, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: multicasting the at least a portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client.
54. The machine-readable medium of claim 52, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: storing a representation of the traffic in a client stream model configured to maintain a model of content being communicated as part of the first client session stream.
55. The machine-readable medium of claim 54, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: after configuring the shared session stream: intercepting shared traffic associated with the shared session stream at the server side of the communications system; generating a second fingerprint using byte-level information comprised by a content portion of the shared traffic; using the second fingerprint to determine whether the shared traffic has been communicated to the first client according to the client stream model; and when the shared traffic has not been communicated to the first client according to the client stream model, multicasting the shared traffic over the shared session stream.
56. The machine-readable medium of claim 55, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: when the shared traffic has been communicated to the first client according to the client stream model: compressing the shared traffic using the client stream model; and unicasting the compressed shared traffic from the server side of the communications system to the first client over the communications path.
57. The machine-readable medium of claim 52, the instructions stored thereon, when executed by the machine, causing the machine to perform the step of generating the fingerprint by: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
58. A method for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the method comprising: intercepting traffic at the server side of the communications system, the traffic comprising a header portion and a content portion and being part of a first client session stream configured to communicate a content stream comprising the traffic to a first client over the communications path, the server side in communication with a global stream model configured to maintain models of active session streams being communicated over the communications path, one of the active session streams being a second client session stream currently communicating the content stream to a second client over the communications path so that an elapsed portion of the content stream has already been communicated to the second client and a remaining portion of the content stream has not yet been communicated to the second client substantially when the traffic is intercepted; generating a fingerprint using byte-level information comprised by the content portion of the traffic; using the fingerprint to determine whether the traffic matches byte-level information comprised by the elapsed portion of the content stream communicated to the second client over the second client session stream according to the global stream model; and when the traffic matches the byte-level information comprised by the elapsed portion of the content stream, configuring a shared session stream to multicast at least some of the remaining portion of the content stream from the server side of the communications system to the first client and the second client over the communications path substantially as the traffic is communicated to the first client over the first client session stream.
59. The method of claim 58, further comprising: multicasting at least some of the remaining portion of the content stream from the server side of the communications system to the first client and the second client over the communications path over the shared session stream.
60. The method of claim 59, wherein: configuring the shared session stream to multicast at least some of the remaining portion of the content stream from the server side of the communications system to the first client and the second client over the communications path comprises associating a content stream identifier with at least the remaining portion of the content stream being communicated as part of the shared session stream; and multicasting at least some of the remaining portion of the content stream from the server side of the communications system to the first client and the second client comprises directing the first client and the second client to accept traffic associated with the content stream identifier.
61. The method of claim 58 , further comprising : storing a representation of the traffic in the global stream model.
62. The method of claim 58, further comprising: communicating the traffic to the first client; and storing a representation of the traffic in a client model configured to maintain a model of content communicated to the first client.
63. The method of claim 62, wherein the representation of the traffic is stored in the client model without verification that the traffic was successfully received by the first client.
64. The method of claim 62, further comprising: after communicating the traffic to the client, receiving verification from the first client of successful receipt of the traffic by the first client; and wherein the representation of the traffic is stored in the client model only after receiving the verification from the first client.
65. The method of claim 62, wherein the client model comprises a model of a client dictionary configured to store byte level information local to the first client.
66. The method of claim 58, further comprising: after configuring the shared session stream: intercepting shared traffic associated with the shared session stream at the server side of the communications system; and multicasting the shared traffic over the shared session stream to the first client and the second client.
67. The method of claim 62, further comprising: after configuring the shared session stream: intercepting shared traffic associated with the shared session stream at the server side of the communications system; generating a second fingerprint using byte-level information comprised by a content portion of the shared traffic; using the second fingerprint to determine whether the shared traffic has been previously communicated to the first client according to the client model; and when the shared traffic has not been previously communicated to the first client according to the client model, multicasting the shared traffic over the shared session stream.
68. The method of claim 67, further comprising: when the shared traffic has been previously communicated to the first client according to the client model: compressing the shared traffic using the client model; and unicasting the compressed shared traffic from the server side of the communications system to the first client over the communications path.
69. The method of claim 58, wherein generating the fingerprint comprises: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
70. The method of claim 58, wherein the communications path comprises a satellite link.
71. A server system for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the server system comprising: a modeling module, configured to maintain a global stream model configured to represent models of active session streams being communicated over the communications path, one of the active session streams being a second client session stream currently communicating a content stream to a second client over the communications path; a server optimization module, communicatively coupled with the modeling module, and configured to: intercept traffic, the traffic comprising a header portion and a content portion and being part of a first client session stream configured to communicate the content stream comprising the traffic to a first client over the communications path, such that an elapsed portion of the content stream has already been communicated to the second client and a remaining portion of the content stream has not yet been communicated to the second client over the second client session stream substantially when the traffic is intercepted; generate a fingerprint using byte-level information comprised by the content portion of the traffic; and use the fingerprint to determine whether the traffic matches byte-level information comprised by the elapsed portion of the content stream communicated to the second client over the second client session stream according to the global stream model; and a stream management module, communicatively coupled with the server optimization module and the modeling module, and configured to: configure a shared session stream to multicast at least some of the remaining portion of the content stream from the server side of the communications system to the first client and the second client over the communications path substantially as the traffic is communicated to the first client over the first client session stream when the traffic matches the byte-level information comprised by the elapsed portion of the content stream.
72. The server system of claim 71 , wherein the stream management module is further configured to: multicast at least some of the remaining portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client.
73. The server system of claim 71 , wherein the stream management module is further configured to: configure the shared session stream to multicast at least some of the remaining portion of the content stream from the server side of the communications system to the first client and the second client over the communications path by associating a content stream identifier with at least the remaining portion of the content stream being communicated as part of the shared session stream; and multicast at least some of the remaining portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client by directing the first client and the second client to accept traffic associated with the content stream identifier.
74. The server system of claim 71, wherein the modeling module is further configured to maintain the global stream model by: storing a representation of the traffic in the global stream model in association with at least the first client.
75. The server system of claim 71 , wherein the modeling module is further configured to: maintain a client model by storing a representation of the traffic in the client model substantially when the traffic is communicated to the first client.
76. The server system of claim 75, wherein the modeling module is further configured to: store the representation of the traffic in the client model without verification that the traffic was successfully received by the first client.
77. The server system of claim 75, wherein the modeling module is further configured to: receive verification from the first client of successful receipt of the traffic by the first client after communicating the traffic to the client; and store the representation of the traffic in the client model only after receiving the verification from the first client.
78. The server system of claim 71 , wherein: the server optimization module is further configured, after the stream management module configures the shared session stream, to: intercept shared traffic associated with the shared session stream; and the stream management module is further configured to: multicast the shared traffic over the shared session stream to the first client and the second client.
79. The server system of claim 75, wherein: the server optimization module is further configured, after the stream management module configures the shared session stream, to: intercept shared traffic associated with the shared session stream; generate a second fingerprint using byte-level information comprised by a content portion of the shared traffic; and use the second fingerprint to determine whether the shared traffic has previously been communicated to the first client according to the client model; and the stream management module is further configured to: multicast the shared traffic over the shared session stream when the shared traffic has not been previously communicated to the first client according to the client model.
80. The server system of claim 79, wherein the stream management module is further configured to: when the shared traffic has been previously communicated to the first client according to the client model: compress the shared traffic using the client model; and unicast the compressed shared traffic from the server side of the communications system to the first client over the communications path.
81. The server system of claim 71, wherein the server optimization module is configured to generate the fingerprint by: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
82. A machine-readable medium for handling multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the machine-readable medium having instructions stored thereon which, when executed by a machine, cause the machine to perform steps comprising: intercepting traffic at the server side of the communications system, the traffic comprising a header portion and a content portion and being part of a first client session stream configured to communicate a content stream comprising the traffic to a first client over the communications path, the server side in communication with a global stream model configured to maintain models of active session streams being communicated over the communications path, one of the active session streams being a second client session stream currently communicating the content stream to a second client over the communications path so that an elapsed portion of the content stream has already been communicated to the second client and a remaining portion of the content stream has not yet been communicated to the second client substantially when the traffic is intercepted; generating a fingerprint using byte-level information comprised by the content portion of the traffic; using the fingerprint to determine whether the traffic matches byte-level information comprised by the elapsed portion of the content stream communicated to the second client over the second client session stream according to the global stream model; and when the traffic matches the byte-level information comprised by the elapsed portion of the content stream, configuring a shared session stream to multicast at least some of the remaining portion of the content stream from the server side of the communications system to the first client and the second client over the communications path substantially as the traffic is communicated to the first client over the first client session stream.
83. The machine-readable medium of claim 82, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: multicasting at least some of the remaining portion of the content stream over the shared session stream from the server side of the communications system to the first client and the second client.
84. The machine-readable medium of claim 82, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: communicating the traffic to the first client; and storing a representation of the traffic in a client model configured to maintain a model of content communicated to the first client.
85. The machine-readable medium of claim 84, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: after configuring the shared session stream: intercepting shared traffic associated with the shared session stream at the server side of the communications system; and multicasting the shared traffic over the shared session stream.
86. The machine-readable medium of claim 84, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: after configuring the shared session stream: intercepting shared traffic associated with the shared session stream at the server side of the communications system; generating a second fingerprint using byte-level information comprised by a content portion of the shared traffic; using the second fingerprint to determine whether the shared traffic has been previously communicated to the first client according to the client model; and when the shared traffic has not been previously communicated to the first client according to the client model, multicasting the shared traffic over the shared session stream.
87. The machine-readable medium of claim 86, the instructions stored thereon, when executed by the machine, causing the machine to perform steps further comprising: when the shared traffic has been previously communicated to the first client according to the client model: compressing the shared traffic using the client model; and unicasting the compressed shared traffic from the server side of the communications system to the first client over the communications path.
88. The machine-readable medium of claim 82, the instructions stored thereon, when executed by the machine, causing the machine to perform the step of generating the fingerprint by: applying a hashing function to the byte-level information comprised by the content portion of the traffic.
89. A method for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the method comprising: intercepting a data block at the server side of the communications system, the data block comprising a header portion and a content portion and being communicated over the communications path; generating a fingerprint using byte-level information comprised by the content portion of the data block; using the fingerprint to make a matching determination, the matching determination indicating whether the data block matches a logged data block having previously been communicated to at least one of the plurality of clients of the communications system; determining whether a trigger event has occurred according to the matching determination; and when the trigger event has occurred according to the matching determination, multicasting the data block from the server side of the communications system over the communications path.
90. The method of claim 30, further comprising: determining whether the logged data block has previously been communicated more than a threshold number of times, wherein the trigger event occurs when the logged data block has previously been communicated at least the threshold number of times.
91. The method of claim 31 , wherein the threshold number of times is one time.
92. The method of claim 30, further comprising : maintaining a popularity metric indicating popularity of the data block by tracking changes in a number of times the data block is communicated over a period of time, wherein the trigger event occurs when the popularity metric crosses a threshold value.
93. The method of claim 30, wherein: determining whether the trigger event has occurred according to the matching determination comprises determining whether the logged data block has previously been communicated to one of a set of clients capable of sharing bandwidth resources with a requesting client over the communications path during a multicast communication; and the data block is intercepted while being communicated over the communications path to the requesting client.
94. The method of claim 30, further comprising: identifying a set of correlated clients having system usage patterns that correlate with system usage patterns of a requesting client by at least a threshold correlation amount, wherein the trigger event occurs when the logged data block has previously been communicated to at least one of the set of correlated clients, and wherein the data block is intercepted while being communicated over the communications path to the requesting client.
95. The method of claim 94, wherein identifying the set of correlated clients having system usage patterns that correlate with system usage patterns of the requesting client by at least the threshold correlation amount comprises: maintaining a log of data blocks communicated to each of the plurality of clients of the communications system; analyzing the log to generate a set of correlation values representing mathematical correlations between the data blocks communicated to the requesting client and the data blocks communicated to each of the plurality of clients of the communications system; and identifying the set of correlated clients to include those clients for which the respective correlation values represent a correlation by at least the threshold correlation amount.
96. The method of claim 30, further comprising: storing a representation of the data block in a previously communicated data model at the server side of the communications system, wherein the logged data block used to make the matching determination is one of a set of representations data blocks stored in the previously communicated data model.
97. The method of claim 96, further comprising: receiving verification from a client of the communications system that the data block was successfully received by the client after multicasting the data block from the server side of the communications system over the communications path, wherein the representation of the data block is stored in the previously communicated data model in association with the client and only after the verification is received.
98. The method of claim 30, wherein generating the fingerprint comprises: applying a hashing function to the byte-level information comprised by the content portion of the data block.
99. A method for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the method comprising: intercepting a data block at the server side of the communications system, the data block comprising a header portion and a content portion and being communicated to a requesting client over the communications path; updating a client usage model to indicate that the data block is being communicated to the requesting client, the client usage model being configured to represent which data blocks have been previously communicated and to which clients of the communications system the data blocks have been previously communicated; generating a user correlation model by calculating correlations between the data blocks communicated to the requesting client and the data blocks communicated to other clients of the communications system according to the client usage model; and multicasting the data block from the server side of the communications system to at least the requesting client over the communications path according to the user correlation model.
100. The method of claim 99, further comprising: determining whether to multicast the data block by determining, according to the user correlation model, whether a correlation between the requesting client and a non-requesting client of the communications system is above a threshold level, wherein the data block is multicast from the server side of the communications system to at least the requesting user and the non-requesting client over the communications path when the correlation between the requesting client and the non-requesting client is above the threshold level.
101. The method of claim 99, further comprising: identifying a set of correlated clients according to the user correlation model, the set of correlated clients comprising non-requesting clients of the communications system for which a correlation between the requesting client and the respective non-requesting client is above a threshold level, wherein the data block is multicast from the server side of the communications system to at least the requesting user and the set of correlated clients.
102. The method of claim 101, further comprising: generating a fingerprint using byte-level information comprised by the content portion of the data block; using the fingerprint to determine whether the data block has previously been communicated to at least one of the plurality of clients of the communications system; when the data block has previously been communicated to at least one of the plurality of clients of the communications system, determining whether a trigger event has occurred; and when a trigger event has occurred, multicasting the data block from the server side of the communications system over the communications path to at least the requesting user and the set of correlated clients.
103. The method of claim 101, further comprising : generating a popularity metric associated with the data block by tracking at least how often the data block is communicated over a portion of the communications system, wherein the data block is multicast from the server side of the communications system to at least the requesting user and the set of correlated clients only when the popularity metric exceeds a threshold popularity value.
104. A server system for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the server system comprising: an optimizer module, configured to: intercept a data block at the server side of the communications system, the data block comprising a header portion and a content portion and being communicated to a requesting client over the communications path; generate a fingerprint using byte-level information comprised by the content portion of the data block; use the fingerprint to make a matching determination, the matching determination indicating whether the data block matches a logged data block having previously been communicated to at least one of the plurality of clients of the communications system; and determine whether a trigger event has occurred according to the matching determination; and a multicaster module, communicatively coupled with the optimizer module, and configured to: multicast the data block from the server side of the communications system over the communications path when the trigger event has occurred according to the matching determination.
105. The server system of claim 104, wherein the optimizer module is further configured to: determine whether the logged data block has previously been communicated more than a threshold number of times, wherein the trigger event occurs when the logged data block has previously been communicated at least the threshold number of times.
106. The server system of claim 104, wherein the optimizer module is further configured to: maintain a popularity metric indicating popularity of the data block by tracking changes in a number of times the data block is communicated over a period of time, such that the trigger event occurs when the popularity metric crosses a threshold value.
107. The server system of claim 104, wherein the optimizer module is further configured to: determine whether the trigger event has occurred according to the matching determination by determining whether the logged data block has previously been communicated to one of a set of clients capable of sharing bandwidth resources with the requesting client over the communications path during a multicast communication.
108. The server system of claim 104, wherein the optimizer module is further configured to: identify a set of correlated clients having system usage patterns that correlate with system usage patterns of the requesting client by at least a threshold correlation amount, such that the trigger event occurs when the logged data block has previously been communicated to at least one of the set of correlated clients.
109. The server system of claim 104, wherein the optimizer module is configured to generate the fingerprint by: applying a hashing function to the byte-level information comprised by the content portion of the data block.
110. The server system of claim 104, wherein the communications path comprises a satellite link.
111. A server system for multicasting over a communications system having a communications path between a server side of the communications system and a plurality of clients, the communications path comprising a shared forward link over which bandwidth resources are shared during a multicast communication, the server system comprising: an optimizer module configured to: intercept a data block at the server side of the communications system, the data block comprising a header portion and a content portion and being communicated to a requesting client over the communications path; update a client usage model to indicate that the data block is being communicated to the requesting client, the client usage model being configured to represent which data blocks have been previously communicated and to which clients of the communications system the data blocks have been previously communicated; and generate a user correlation model by calculating correlations between the data blocks communicated to the requesting client and the data blocks communicated to other clients of the communications system according to the client usage model; and a multicaster module, communicatively coupled with the optimizer module, and configured to: multicast the data block from the server side of the communications system to at least the requesting client over the communications path according to the user correlation model.
112. The server system of claim 111, wherein the optimizer module is further configured to: determine whether to multicast the data block by determining, according to the user correlation model, whether a correlation between the requesting client and a non-requesting client of the communications system is above a threshold level, wherein the multicaster module is configured to multicast the data block from the server side of the communications system to at least the requesting client and the non-requesting client over the communications path when the correlation between the requesting client and the non-requesting client is above the threshold level.
113. The server system of claim 111, wherein the optimizer module is further configured to: monitor a link condition affecting communications over the communications path; and determine a modcode according to the link condition, wherein the multicaster module is configured to multicast the data block from the server side of the communications system over the communications path according to the modcode.
114. The server system of claim 111, wherein the optimizer module is further configured to: identify a set of correlated clients according to the user correlation model, the set of correlated clients comprising non-requesting clients of the communications system for which a correlation between the requesting client and the respective non- requesting client is above a threshold level, wherein the multicaster module is configured to multicast the data block from the server side of the communications system to at least the requesting client and the set of correlated clients.
115. The server system of claim 114, wherein the optimizer module is further configured to: determine modcodes associated with the set of correlated clients; and select an optimal modcode from among modcode points associated with the set of correlated clients, wherein the multicaster module is configured to multicast the data block from the server side of the communications system over the communications path according to the optimal modcode.
116. The server system of claim 115, wherein the optimal modcode is selected to maximize reliability of communications with the set of correlated clients and minimize bandwidth resources used by communicating the data block over the communications path according to the optimal modcode.
117. The server system of claim 114, wherein the optimizer module is further configured to: generate a fingerprint using byte-level information comprised by the content portion of the data block; use the fingerprint to determine whether the data block has previously been communicated to at least one of the plurality of clients of the communications system; and when the data block has previously been communicated to at least one of the plurality of clients of the communications system, determine whether a trigger event has occurred, wherein the multicaster module is configured to multicast the data block from the server side of the communications system over the communications path to at least the requesting client and the set of correlated clients when a trigger event has occurred.
118. The server system of claim 114, wherein the optimizer module is further configured to: generate a popularity metric associated with the data block by tracking at least how often the data block is communicated over a portion of the communications system, wherein the multicaster module is configured to multicast the data block from the server side of the communications system to at least the requesting client and the set of correlated clients only when the popularity metric exceeds a threshold popularity value.
PCT/US2010/020940 2009-01-13 2010-01-13 Deltacasting Ceased WO2010083248A2 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US14436309P 2009-01-13 2009-01-13
US61/144,363 2009-01-13
US17035909P 2009-04-17 2009-04-17
US61/170,359 2009-04-17

Publications (2)

Publication Number Publication Date
WO2010083248A2 true WO2010083248A2 (en) 2010-07-22
WO2010083248A3 WO2010083248A3 (en) 2010-11-04

Family

ID=42123182

Family Applications (2)

Application Number Title Priority Date Filing Date
PCT/US2010/020940 Ceased WO2010083248A2 (en) 2009-01-13 2010-01-13 Deltacasting
PCT/US2010/020897 Ceased WO2010083214A2 (en) 2009-01-13 2010-01-13 Content set based deltacasting

Family Applications After (1)

Application Number Title Priority Date Filing Date
PCT/US2010/020897 Ceased WO2010083214A2 (en) 2009-01-13 2010-01-13 Content set based deltacasting

Country Status (2)

Country Link
US (18) US20100179984A1 (en)
WO (2) WO2010083248A2 (en)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8842553B2 (en) 2009-01-13 2014-09-23 Viasat, Inc. Correlative anticipatory deltacasting
US8897302B2 (en) 2011-06-14 2014-11-25 Viasat, Inc. Transport protocol for anticipatory content
US9407355B1 (en) 2011-10-25 2016-08-02 Viasat Inc. Opportunistic content delivery using delta coding
WO2017201536A1 (en) * 2016-05-20 2017-11-23 Hughes Network Systems, Llc Multicast aggregation of multiple streaming connections
US10044637B2 (en) 2012-06-15 2018-08-07 Viasat, Inc. Opportunistic delivery of cacheable content in a communications network

Families Citing this family (219)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7886024B2 (en) * 2004-07-01 2011-02-08 Microsoft Corporation Sharing media objects in a network
US8121117B1 (en) 2007-10-01 2012-02-21 F5 Networks, Inc. Application layer network traffic prioritization
US8166189B1 (en) * 2008-03-25 2012-04-24 Sprint Communications Company L.P. Click stream insertions
US8010705B1 (en) 2008-06-04 2011-08-30 Viasat, Inc. Methods and systems for utilizing delta coding in acceleration proxy servers
US8655878B1 (en) * 2010-05-06 2014-02-18 Zeitera, Llc Scalable, adaptable, and manageable system for multimedia identification
AU2010276462B1 (en) * 2010-12-27 2012-01-12 Limelight Networks, Inc. Partial object caching
US9197690B2 (en) * 2008-09-25 2015-11-24 Arris Enterprises, Inc. Method and system for transmitting content
WO2010104927A2 (en) 2009-03-10 2010-09-16 Viasat, Inc. Internet protocol broadcasting
JP5003701B2 (en) * 2009-03-13 2012-08-15 ソニー株式会社 Server apparatus and setting information sharing method
JP5381194B2 (en) * 2009-03-16 2014-01-08 富士通株式会社 Communication program, relay node, and communication method
US8054764B2 (en) * 2009-06-04 2011-11-08 International Business Machines Corporation Transmitting critical table information in databases
JP5556104B2 (en) * 2009-09-24 2014-07-23 ブラザー工業株式会社 Information communication system, information communication method, and information communication program
US20110078017A1 (en) * 2009-09-29 2011-03-31 Selina Lam Systems and methods for rating an originator of an online publication
US8620879B2 (en) * 2009-10-13 2013-12-31 Google Inc. Cloud based file storage service
US10721269B1 (en) 2009-11-06 2020-07-21 F5 Networks, Inc. Methods and system for returning requests with javascript for clients before passing a request to a server
US8806056B1 (en) 2009-11-20 2014-08-12 F5 Networks, Inc. Method for optimizing remote file saves in a failsafe way
US8516253B1 (en) 2010-01-18 2013-08-20 Viasat, Inc. Self-keyed protection of anticipatory content
CN102783167B (en) * 2010-03-05 2015-10-14 三星电子株式会社 Method and device for generating and reproducing adaptive stream based on file format
US9374231B2 (en) * 2010-03-22 2016-06-21 Alcatel Lucent Controller providing gradual transition of multiple terminals from unicast transmission
US20110231482A1 (en) * 2010-03-22 2011-09-22 Strangeloop Networks Inc. Automated Optimization Based On Determination Of Website Usage Scenario
US8244874B1 (en) * 2011-09-26 2012-08-14 Limelight Networks, Inc. Edge-based resource spin-up for cloud computing
US8984048B1 (en) 2010-04-18 2015-03-17 Viasat, Inc. Selective prefetch scanning
US8732208B2 (en) * 2010-04-19 2014-05-20 Facebook, Inc. Structured search queries based on social-graph information
US9307304B2 (en) * 2010-05-11 2016-04-05 Comcast Cable Communications, Llc Dynamic assignment of signals to ports in an access platform
US11777809B2 (en) 2010-05-11 2023-10-03 Comcast Cable Communications, Llc Dynamic assignment of signals to ports in an access platform
US8995439B2 (en) * 2010-05-13 2015-03-31 Comcast Cable Communications, Llc Control of multicast content distribution
US8839278B2 (en) * 2010-06-09 2014-09-16 At&T Intellectual Property I, L.P. Modeling user activity information associated with a network system
US8898324B2 (en) 2010-06-24 2014-11-25 International Business Machines Corporation Data access management in a hybrid memory server
US8954490B2 (en) 2010-06-24 2015-02-10 International Business Machines Corporation Speculative and coordinated data access in a hybrid memory server
US9503375B1 (en) 2010-06-30 2016-11-22 F5 Networks, Inc. Methods for managing traffic in a multi-service environment and devices thereof
US9762639B2 (en) 2010-06-30 2017-09-12 Brightcove Inc. Dynamic manifest generation based on client identity
US9420049B1 (en) 2010-06-30 2016-08-16 F5 Networks, Inc. Client side human user indicator
US9817637B2 (en) * 2010-07-01 2017-11-14 Salesforce.Com, Inc. Methods and systems for providing enhancements to a business networking feed
US8347100B1 (en) 2010-07-14 2013-01-01 F5 Networks, Inc. Methods for DNSSEC proxying and deployment amelioration and systems thereof
CN103004229A (en) * 2010-07-20 2013-03-27 夏普株式会社 Data distribution system, data distribution method, data relay device on distribution side, and data relay device on reception side
US20120023201A1 (en) * 2010-07-26 2012-01-26 Atlas Advisory Partners, Llc Unified Content Delivery Platform
US20120149352A1 (en) 2010-07-26 2012-06-14 Ari Backholm Context aware traffic management for resource conservation in a wireless network
GB2495066B (en) 2010-07-26 2013-12-18 Seven Networks Inc Mobile application traffic optimization
US9170123B2 (en) 2010-08-06 2015-10-27 Nokia Technologies Oy Method and apparatus for generating information
US20120036188A1 (en) * 2010-08-06 2012-02-09 Nokia Corporation Method and Apparatus for Aggregating Document Information
US8392533B2 (en) * 2010-08-24 2013-03-05 Comcast Cable Communications, Llc Dynamic bandwidth load balancing in a data distribution network
US10511887B2 (en) * 2010-08-30 2019-12-17 Saturn Licensing Llc Reception apparatus, reception method, transmission apparatus, transmission method, program, and broadcasting system
US8554938B2 (en) * 2010-08-31 2013-10-08 Millind Mittal Web browser proxy-client video system and method
KR101024846B1 (en) * 2010-08-31 2011-03-28 레이져라이팅(주) Light guide plate laser processing apparatus equipped with laser beam blocking means
US20120059884A1 (en) * 2010-09-07 2012-03-08 Matthew Inventions Llc Devices, systems, and methods of accessing and sharing digital media content among users with a web based server
KR101035302B1 (en) 2010-10-11 2011-05-19 (주)이스트소프트 How to compress and transfer files in the cloud system and cloud system
US9276997B2 (en) * 2011-01-14 2016-03-01 Millind Mittal Web browser proxy—client video system and method
WO2012104827A1 (en) * 2011-01-31 2012-08-09 Altobridge Limited A communication system
US9560468B2 (en) 2011-01-31 2017-01-31 Parallel Limited, LLC Communication system
CN108366070A (en) 2011-03-16 2018-08-03 韩国电子通信研究院 Method and client for providing media content
US9456050B1 (en) 2011-04-11 2016-09-27 Viasat, Inc. Browser optimization through user history analysis
US9912718B1 (en) 2011-04-11 2018-03-06 Viasat, Inc. Progressive prefetching
US9106607B1 (en) 2011-04-11 2015-08-11 Viasat, Inc. Browser based feedback for optimized web browsing
US11983233B2 (en) * 2011-04-11 2024-05-14 Viasat, Inc. Browser based feedback for optimized web browsing
US9037638B1 (en) 2011-04-11 2015-05-19 Viasat, Inc. Assisted browsing using hinting functionality
EP2710784B1 (en) 2011-05-16 2017-12-06 F5 Networks, Inc A method for load balancing of requests' processing of diameter servers
US10075505B2 (en) * 2011-05-30 2018-09-11 International Business Machines Corporation Transmitting data including pieces of data
US8843584B2 (en) * 2011-06-02 2014-09-23 Google Inc. Methods for displaying content on a second device that is related to the content playing on a first device
US10331658B2 (en) * 2011-06-03 2019-06-25 Gdial Inc. Systems and methods for atomizing and individuating data as data quanta
US8812609B2 (en) * 2011-06-06 2014-08-19 Jaguna Networks Ltd Methods, circuits, devices, systems and associated computer executable code for distributed content caching and delivery
US9319842B2 (en) 2011-06-27 2016-04-19 At&T Intellectual Property I, L.P. Mobile device configured point and shoot type weapon
US8396836B1 (en) 2011-06-30 2013-03-12 F5 Networks, Inc. System for mitigating file virtualization storage import latency
WO2013015835A1 (en) 2011-07-22 2013-01-31 Seven Networks, Inc. Mobile application traffic optimization
FR2978889B1 (en) * 2011-08-04 2013-09-20 Centre Nat Etd Spatiales SYSTEM AND METHOD FOR MULTIPLE MANAGEMENT OF TRANSMISSION RESOURCES OF A SPACE RADIO MULTICELLULAR RADIOCOMMUNICATION SYSTEM.
CN102957718B (en) * 2011-08-23 2018-04-03 中兴通讯股份有限公司 The method of User Agreement message synchronization between a kind of service node and service node
US9858551B2 (en) * 2011-09-02 2018-01-02 Bbs Technologies, Inc. Ranking analysis results based on user perceived problems in a database system
US9577824B2 (en) * 2011-09-23 2017-02-21 CSC Holdings, LLC Delivering a content item from a server to a device
US8849976B2 (en) * 2011-09-26 2014-09-30 Limelight Networks, Inc. Dynamic route requests for multiple clouds
US8874781B2 (en) * 2011-10-17 2014-10-28 Qualcomm Incorporated System and apparatus for power efficient delivery of social network updates to a receiver device in a broadcast network
US8463850B1 (en) 2011-10-26 2013-06-11 F5 Networks, Inc. System and method of algorithmically generating a server side transaction identifier
US9614688B2 (en) * 2011-11-15 2017-04-04 Canon Kabushiki Kaisha Providing image data to a client display device
US8918503B2 (en) * 2011-12-06 2014-12-23 Seven Networks, Inc. Optimization of mobile traffic directed to private networks and operator configurability thereof
US8611730B2 (en) 2011-12-08 2013-12-17 At&T Intellectual Property I, L.P. System and method of recording media content
US8744419B2 (en) 2011-12-15 2014-06-03 At&T Intellectual Property, I, L.P. Media distribution via a scalable ad hoc geographic protocol
KR101181558B1 (en) 2011-12-29 2012-09-10 경일대학교산학협력단 Anonymous Authentication Method For Mobile Satellite Communication Systems
KR101173825B1 (en) 2011-12-29 2012-08-16 경일대학교산학협력단 Key agreement method of vsat satellite communications system base on elliptic curve cryptosystem
WO2013108605A1 (en) * 2012-01-17 2013-07-25 パナソニック株式会社 Content management device, method for managing content, and program
US10257109B2 (en) 2012-01-18 2019-04-09 International Business Machines Corporation Cloud-based content management system
US9001651B2 (en) * 2012-02-06 2015-04-07 Verizon Patent And Licensing Inc. Method for call admission control in MPLS networks
DE102012202382A1 (en) * 2012-02-16 2013-08-22 Cortado Ag Method and arrangement for managing data and a corresponding computer program and a corresponding computer-readable storage medium
DE102012202315A1 (en) * 2012-02-16 2013-08-22 Robert Bosch Gmbh Video system for displaying image data, methods and computer program
US10230566B1 (en) 2012-02-17 2019-03-12 F5 Networks, Inc. Methods for dynamically constructing a service principal name and devices thereof
US9244843B1 (en) 2012-02-20 2016-01-26 F5 Networks, Inc. Methods for improving flow cache bandwidth utilization and devices thereof
US9020912B1 (en) 2012-02-20 2015-04-28 F5 Networks, Inc. Methods for accessing data in a compressed file system and devices thereof
GB2500374A (en) * 2012-03-13 2013-09-25 Ibm Optimisation of mobile data communication using byte caching
US9454531B1 (en) * 2012-04-03 2016-09-27 Google Inc. Media content presentation by categorizing and formatting media types
JP5318247B1 (en) * 2012-04-20 2013-10-16 株式会社東芝 Communication control apparatus and communication control method
EP2853074B1 (en) 2012-04-27 2021-03-24 F5 Networks, Inc Methods for optimizing service of content requests and devices thereof
US20130298175A1 (en) * 2012-05-02 2013-11-07 International Business Machines Corporation Constructing a customized message in a video-on-demand service
US9258382B2 (en) * 2012-06-21 2016-02-09 Microsoft Technology Licensing, Llc User-specific roaming settings
US9215269B2 (en) * 2012-08-23 2015-12-15 Amazon Technologies, Inc. Predictive caching for content
US9351196B2 (en) 2012-08-31 2016-05-24 International Business Machines Corporation Byte caching in wireless communication networks
US9288136B2 (en) * 2012-09-21 2016-03-15 Cisco Technology, Inc. Method and apparatus for in-band channel change for multicast data
US10033837B1 (en) 2012-09-29 2018-07-24 F5 Networks, Inc. System and method for utilizing a data reducing module for dictionary compression of encoded data
US9258666B2 (en) * 2012-10-17 2016-02-09 International Business Machines Corporation State migration of edge-of-network applications
US20140122645A1 (en) * 2012-10-25 2014-05-01 Openpeak Inc. Method and system for automatic agnostic provisioning of a computing device
US9578090B1 (en) 2012-11-07 2017-02-21 F5 Networks, Inc. Methods for provisioning application delivery service and devices thereof
US9660745B2 (en) * 2012-12-12 2017-05-23 At&T Intellectual Property I, L.P. Geocast-based file transfer
US9660874B2 (en) * 2012-12-13 2017-05-23 Level 3 Communications, Llc Devices and methods supporting content delivery with delivery services having dynamically configurable log information
US9241046B2 (en) * 2012-12-13 2016-01-19 Ca, Inc. Methods and systems for speeding up data recovery
US9100989B2 (en) * 2012-12-31 2015-08-04 Nokia Technologies Oy Method and apparatus for ad-hoc content sharing
US20140199044A1 (en) 2013-01-15 2014-07-17 Qualcomm Incorporated Supporting transport diversity and time-shifted buffers for media streaming over a network
US10375155B1 (en) 2013-02-19 2019-08-06 F5 Networks, Inc. System and method for achieving hardware acceleration for asymmetric flow connections
WO2014132821A1 (en) 2013-02-27 2014-09-04 ソニー株式会社 Information processing device, method, and program, and content supply system
US9497614B1 (en) 2013-02-28 2016-11-15 F5 Networks, Inc. National traffic steering device for a better control of a specific wireless/LTE network
US9154436B2 (en) 2013-03-14 2015-10-06 Viasat Inc. Delaycast queue prioritization
US9276665B1 (en) 2013-03-15 2016-03-01 Viasat, Inc. Satellite network service sharing
TW201437940A (en) * 2013-03-30 2014-10-01 Ibm A method, a backup server and a computer program product for providing efficient data replication for a transaction processing server
US9674252B2 (en) * 2013-07-17 2017-06-06 Imvision Software Technologies Ltd. System and method for efficient delivery of repetitive multimedia content
US10554707B2 (en) 2013-08-13 2020-02-04 Imvision Software Technologies Ltd. Method and system for self-detection and efficient transmission of real-time popular recorded over-the-top streams over communication networks
CN104301353B (en) * 2013-07-18 2019-10-08 腾讯科技(深圳)有限公司 A kind of methods, devices and systems for subscribing to long-tail category information
US20150089072A1 (en) * 2013-09-25 2015-03-26 Ericsson Television Inc System and method for managing adjacent channels in an adaptive streaming environment
US9444856B2 (en) * 2013-09-25 2016-09-13 Ericsson Ab System and method for managing adjacent channels in an adaptive streaming environment
US20150089073A1 (en) 2013-09-25 2015-03-26 Ericsson Television Inc System and method for effectuating fast channel change in an adpative streaming environment
US9332047B2 (en) * 2013-09-30 2016-05-03 Brightcove Inc. Dynamic chunk manipulation for streaming mixed live and on-demand media: dynamic permutation layer
US10187317B1 (en) 2013-11-15 2019-01-22 F5 Networks, Inc. Methods for traffic rate control and devices thereof
US9749431B1 (en) * 2013-11-21 2017-08-29 Mashable, Inc. Finding a potentially viral first media content and transmitting a second media content that is selected based on the first media content and based on the determination that the first media content exceeds a velocity threshold
JP2015108970A (en) * 2013-12-04 2015-06-11 ソニー株式会社 Server apparatus and information processing method
US9225522B2 (en) 2013-12-27 2015-12-29 Linkedin Corporation Techniques for populating a content stream on a mobile device
CN104811392B (en) 2014-01-26 2018-04-17 国际商业机器公司 For handling the method and system of the resource access request in network
US10097628B2 (en) * 2014-01-29 2018-10-09 Microsoft Technology Licensing, Llc Resource affinity in a dynamic resource pool
US9350484B2 (en) * 2014-03-18 2016-05-24 Qualcomm Incorporated Transport accelerator implementing selective utilization of redundant encoded content data functionality
AU2015240929A1 (en) * 2014-03-31 2016-09-22 Intelsat Corporation Multichannel content distribution via satellite to broadcast-capable mobile networks
US10698569B2 (en) 2014-04-03 2020-06-30 Centurylink Intellectual Property Llc System and method for implementing customer control point or customer portal
US10110710B2 (en) 2014-04-03 2018-10-23 Centurylink Intellectual Property Llc System and method for implementing extension of customer LAN at provider network service point
CN104330649A (en) * 2014-04-24 2015-02-04 广东电网公司江门供电局 On-line power transmission line monitoring method and device based on Beidou communication
US9544388B1 (en) 2014-05-09 2017-01-10 Amazon Technologies, Inc. Client-side predictive caching for content
US10855797B2 (en) 2014-06-03 2020-12-01 Viasat, Inc. Server-machine-driven hint generation for improved web page loading using client-machine-driven feedback
US9819785B2 (en) * 2014-06-23 2017-11-14 Verizon Patent And Licensing Inc. Multimedia messaging service communication using a two way push connection
US9979644B2 (en) * 2014-07-13 2018-05-22 Cisco Technology, Inc. Linking to content using information centric networking
US11838851B1 (en) 2014-07-15 2023-12-05 F5, Inc. Methods for managing L7 traffic classification and devices thereof
WO2016029936A1 (en) * 2014-08-26 2016-03-03 Telefonaktiebolaget L M Ericsson (Publ) Technique for analytical identification of spatio-temporal relationships in a mobile communications network
US10506027B2 (en) * 2014-08-27 2019-12-10 Tensera Networks Ltd. Selecting a content delivery network
US9712546B2 (en) 2014-09-12 2017-07-18 Level 3 Communications, Llc Dynamic configuration of settings in response to DDOS attack
US9565129B2 (en) 2014-09-30 2017-02-07 International Business Machines Corporation Resource provisioning planning for enterprise migration and automated application discovery
US10182013B1 (en) 2014-12-01 2019-01-15 F5 Networks, Inc. Methods for managing progressive image delivery and devices thereof
US9646154B2 (en) * 2014-12-12 2017-05-09 Microsoft Technology Licensing, Llc Return oriented programming (ROP) attack protection
US10313486B2 (en) 2015-01-07 2019-06-04 Sonicwall Inc. Optimizing transfer of fragmented packetized data
US11895138B1 (en) 2015-02-02 2024-02-06 F5, Inc. Methods for improving web scanner accuracy and devices thereof
FR3032580B1 (en) * 2015-02-06 2017-12-29 Thales Sa DYNAMIC ADJUSTMENT OF TRANSMISSION MODE IN A SATELLITE COMMUNICATION SYSTEM
US9961004B2 (en) 2015-02-18 2018-05-01 Viasat, Inc. Popularity-aware bitrate adaptation of linear programming for mobile communications
US9326046B1 (en) 2015-03-19 2016-04-26 Amazon Technologies, Inc. Uninterrupted playback of video streams using lower quality cached files
US10834065B1 (en) 2015-03-31 2020-11-10 F5 Networks, Inc. Methods for SSL protected NTLM re-authentication and devices thereof
US10505818B1 (en) 2015-05-05 2019-12-10 F5 Networks. Inc. Methods for analyzing and load balancing based on server health and devices thereof
US11350254B1 (en) 2015-05-05 2022-05-31 F5, Inc. Methods for enforcing compliance policies and devices thereof
US10628439B1 (en) * 2015-05-05 2020-04-21 Sprint Communications Company L.P. System and method for movie digital content version control access during file delivery and playback
US10673978B2 (en) 2015-05-06 2020-06-02 Centurylink Intellectual Property Llc Method and system for implementing network experience shifting using shared objects
US10481938B2 (en) 2015-05-06 2019-11-19 Centurylink Intellectual Property Llc System and method for implementing network experience shifting
US9813526B2 (en) 2015-05-26 2017-11-07 Sonicwall Inc. Reducing transmission pathway lengths within a distributed network
US9954782B2 (en) 2015-07-07 2018-04-24 At&T Intellectual Property I, L.P. Network for providing appropriate content delivery network selection
US10277703B2 (en) 2015-07-22 2019-04-30 International Business Machines Corporation Optimizing bandwidth usage and improving performance for web page caching
US10158735B2 (en) * 2015-08-07 2018-12-18 Sonicwall Inc. Read-ahead on signed connections with unsigning, inline, transparent proxies
US9906590B2 (en) * 2015-08-20 2018-02-27 Verizon Digital Media Services Inc. Intelligent predictive stream caching
US10349304B2 (en) 2015-09-23 2019-07-09 Cloudflare, Inc. Software defined dynamic filtering
US11336928B1 (en) 2015-09-24 2022-05-17 Amazon Technologies, Inc. Predictive caching of identical starting sequences in content
US10075751B2 (en) * 2015-09-30 2018-09-11 Rovi Guides, Inc. Method and system for verifying scheduled media assets
EP3365802A1 (en) 2015-10-20 2018-08-29 Viasat, Inc. Hint model updating using automated browsing clusters
US10305952B2 (en) 2015-11-09 2019-05-28 T-Mobile Usa, Inc. Preference-aware content streaming
US10193943B2 (en) * 2015-11-09 2019-01-29 T-Mobile Usa, Inc. Data-plan-based quality setting suggestions and use thereof to manage content provider services
US11757946B1 (en) 2015-12-22 2023-09-12 F5, Inc. Methods for analyzing network traffic and enforcing network policies and devices thereof
US10445755B2 (en) * 2015-12-30 2019-10-15 Paypal, Inc. Data structures for categorizing and filtering content
US10609175B2 (en) * 2015-12-31 2020-03-31 Hughes Newtwork Systems, LLC Apparatus and method for broadcast/multicast content delivery and opportunistic caching in a broadband communications network
US10404698B1 (en) 2016-01-15 2019-09-03 F5 Networks, Inc. Methods for adaptive organization of web application access points in webtops and devices thereof
US11178150B1 (en) 2016-01-20 2021-11-16 F5 Networks, Inc. Methods for enforcing access control list based on managed application and devices thereof
US12464021B1 (en) 2016-01-20 2025-11-04 F5, Inc. Methods for providing secure access using preemptive measures and devices thereof
US10797888B1 (en) 2016-01-20 2020-10-06 F5 Networks, Inc. Methods for secured SCEP enrollment for client devices and devices thereof
US9936055B2 (en) * 2016-01-27 2018-04-03 Dell Products L.P. Using multicasting to concurrently image multiple client devices
US10728152B2 (en) 2016-02-08 2020-07-28 T-Mobile Usa, Inc. Dynamic network rate control
US10033733B2 (en) * 2016-03-25 2018-07-24 Experian Health, Inc. Biometric metadata bureau
US10237187B2 (en) * 2016-04-29 2019-03-19 Citrix Systems, Inc. System and method for service chain load balancing
GB2551153A (en) * 2016-06-07 2017-12-13 Avanti Communications Group Plc Satellite communications
EP3469771A1 (en) * 2016-06-09 2019-04-17 Telefonaktiebolaget LM Ericsson (PUBL) Multicast service translation in internet protocol television systems
EP3279301A1 (en) * 2016-08-04 2018-02-07 The Procter & Gamble Company Water-soluble unit dose article comprising a cleaning amine
US10873650B2 (en) * 2016-10-07 2020-12-22 Cox Communications, Inc. System, methods, and devices for distributed physical layer networks
CN107918065B (en) * 2016-10-10 2020-01-31 京元电子股份有限公司 Fingerprint identification electronic component testing device and testing equipment thereof
US10412198B1 (en) 2016-10-27 2019-09-10 F5 Networks, Inc. Methods for improved transmission control protocol (TCP) performance visibility and devices thereof
US11063758B1 (en) 2016-11-01 2021-07-13 F5 Networks, Inc. Methods for facilitating cipher selection and devices thereof
US10505792B1 (en) 2016-11-02 2019-12-10 F5 Networks, Inc. Methods for facilitating network traffic analytics and devices thereof
FR3060920B1 (en) * 2016-12-20 2019-07-05 Thales SYSTEM AND METHOD FOR DATA TRANSMISSION IN A SATELLITE SYSTEM
CN106841915B (en) * 2017-01-15 2020-03-10 东北电力大学 Power transmission line fault positioning method based on compressed sensing
US10812266B1 (en) 2017-03-17 2020-10-20 F5 Networks, Inc. Methods for managing security tokens based on security violations and devices thereof
US10412038B2 (en) * 2017-03-20 2019-09-10 International Business Machines Corporation Targeting effective communication within communities
US11122042B1 (en) 2017-05-12 2021-09-14 F5 Networks, Inc. Methods for dynamically managing user access control and devices thereof
US11343237B1 (en) 2017-05-12 2022-05-24 F5, Inc. Methods for managing a federated identity environment using security and access control data and devices thereof
US11860942B1 (en) * 2017-05-15 2024-01-02 Amazon Technologies, Inc. Predictive loading and unloading of customer data in memory
US10271077B2 (en) 2017-07-03 2019-04-23 At&T Intellectual Property I, L.P. Synchronizing and dynamic chaining of a transport layer network service for live content broadcasting
US11108840B2 (en) * 2017-07-03 2021-08-31 At&T Intellectual Property I, L.P. Transport layer network service for live content broadcasting
US11829583B2 (en) 2017-07-07 2023-11-28 Open Text Sa Ulc Systems and methods for content sharing through external systems
US11570124B2 (en) * 2017-12-01 2023-01-31 At&T Intellectual Property I, L.P. Predictive network capacity scaling based on customer interest
US10764650B2 (en) 2017-12-07 2020-09-01 At&T Intellectual Property I, L.P. Video optimization proxy system and method
US11223689B1 (en) 2018-01-05 2022-01-11 F5 Networks, Inc. Methods for multipath transmission control protocol (MPTCP) based session migration and devices thereof
CN108388813A (en) * 2018-02-28 2018-08-10 中国平安财产保险股份有限公司 Electronic endorsement method, user equipment, storage medium and device
US10796022B2 (en) 2018-05-16 2020-10-06 Ebay Inc. Weighted source data secured on blockchains
CN108882374B (en) * 2018-05-25 2023-04-18 西南电子技术研究所(中国电子科技集团公司第十研究所) Ka frequency band multi-address measurement and control resource scheduling method
US11595456B2 (en) * 2018-05-31 2023-02-28 Microsoft Technology Licensing, Llc Modifying content streaming based on device parameters
CN108924899B (en) * 2018-06-28 2021-10-26 太原科技大学 Double-relay selection method of two-hop multi-relay system
US10917165B2 (en) 2018-07-02 2021-02-09 Intelsat US LLC Base station architecture integrating satellite-based content delivery with 4G/LTE mobile network
US12003422B1 (en) 2018-09-28 2024-06-04 F5, Inc. Methods for switching network packets based on packet data and devices
US10743049B2 (en) 2018-10-24 2020-08-11 At&T Intellectual Property I, L.P. Pre-positioning of streaming content onto communication devices for future content recommendations
US20200153889A1 (en) * 2018-11-12 2020-05-14 Asd Korea Method for uploading and downloading file, and server for executing the same
US10990939B2 (en) 2019-04-15 2021-04-27 Advanced New Technologies Co., Ltd. Method and device for voice broadcast
US20220321368A1 (en) * 2019-08-29 2022-10-06 Intellectual Discovery Co., Ltd. Method, device, computer program, and recording medium for audio processing in wireless communication system
US11188546B2 (en) * 2019-09-24 2021-11-30 International Business Machines Corporation Pseudo real time communication system
US11307911B2 (en) * 2020-05-29 2022-04-19 Microsoft Technology Licensing, Llc File upload modifications for client side applications
DE102020003383B4 (en) 2020-06-04 2021-12-30 MERCK Patent Gesellschaft mit beschränkter Haftung Method for storing and method for transmitting at least one piece of data, corresponding computer program products and devices
US11533366B2 (en) * 2020-10-04 2022-12-20 Siden, Inc. Method and system for controlling the use of dormant capacity for distributing data
CN114465989B (en) * 2020-10-30 2024-07-02 京东方科技集团股份有限公司 Streaming media data processing method, server, electronic device and readable storage medium
CN112600952B (en) * 2020-12-10 2022-09-27 四川迅游网络科技股份有限公司 Method and system for accelerating distribution of mobile terminal network
US11889348B2 (en) * 2021-02-19 2024-01-30 Qualcomm Incorporated Techniques for compressing feedback values in wireless communications
CN112954665B (en) * 2021-03-16 2023-04-07 西安电子科技大学 Satellite network mobility management method based on dynamic service domain
US11734012B2 (en) * 2021-03-31 2023-08-22 Bmc Software, Inc. Systems and methods for efficient transfer of log data
US11916950B1 (en) 2021-04-12 2024-02-27 Vmware, Inc. Coordinating a distributed vulnerability network scan
US11528317B1 (en) * 2021-05-05 2022-12-13 Vmware, Inc. Proxy-enabled communication across network boundaries by self-replicating applications
EP4409913A1 (en) 2021-10-19 2024-08-07 ViaSat Inc. Reducing network bandwidth consumption of real-time broadcasts using generically encoded media objects
AU2022369901A1 (en) * 2021-10-19 2024-05-09 Viasat, Inc. Reducing network bandwidth consumption using generically encoded media objects
CN114172563B (en) * 2021-12-09 2022-09-13 广州爱浦路网络技术有限公司 Communication satellite dormancy control method, heaven-earth integrated communication network and storage medium
US11776507B1 (en) 2022-07-20 2023-10-03 Ivan Svirid Systems and methods for reducing display latency
CN116660680B (en) * 2023-05-31 2024-05-24 国家电网有限公司 A method for analyzing power outage events based on node power line communication
US20250096888A1 (en) * 2023-09-20 2025-03-20 University-Industry Cooperation Group Of Kyung Hee University Intelligent transportation system using multi-layer satellite and communication method using the same

Family Cites Families (158)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5408470A (en) * 1993-10-14 1995-04-18 Intel Corporation Deferred synchronization of distributed objects
US5740367A (en) * 1995-11-03 1998-04-14 Spilo; Michael L. Method and apparatus for improving the throughput of a local area network
US6339787B1 (en) 1995-11-30 2002-01-15 Stampede Technologies, Inc. Apparatus and method for increasing speed in a network file/object oriented server/client system
US5870754A (en) 1996-04-25 1999-02-09 Philips Electronics North America Corporation Video retrieval of MPEG compressed sequences using DC and motion signatures
US5905981A (en) 1996-12-09 1999-05-18 Microsoft Corporation Automatically associating archived multimedia content with current textual content
CA2283591C (en) 1997-03-07 2006-01-31 Intelligent Compression Technologies Data coding network
US5953503A (en) * 1997-10-29 1999-09-14 Digital Equipment Corporation Compression protocol with multiple preset dictionaries
US6182133B1 (en) 1998-02-06 2001-01-30 Microsoft Corporation Method and apparatus for display of information prefetching and cache status having variable visual indication based on a period of time since prefetching
US20010016836A1 (en) 1998-11-02 2001-08-23 Gilles Boccon-Gibod Method and apparatus for distributing multimedia information over a network
US6178461B1 (en) 1998-12-08 2001-01-23 Lucent Technologies Inc. Cache-based compaction technique for internet browsing using similar objects in client cache as reference objects
EP1022875B1 (en) * 1999-01-25 2005-06-01 Nippon Telegraph and Telephone Corporation Push network
US7129860B2 (en) * 1999-01-29 2006-10-31 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
US20070111713A1 (en) 1999-05-25 2007-05-17 Silverbrook Research Pty Ltd Method for accessing content from a computer network via a mobile phone using a two-step retrieval process
US6941338B1 (en) * 1999-09-01 2005-09-06 Nextwave Telecom Inc. Distributed cache for a wireless communication system
US6721780B1 (en) 1999-11-09 2004-04-13 Fireclick, Inc. Predictive pre-download of network objects
US7310629B1 (en) * 1999-12-15 2007-12-18 Napster, Inc. Method and apparatus for controlling file sharing of multimedia files over a fluid, de-centralized network
US6947440B2 (en) 2000-02-15 2005-09-20 Gilat Satellite Networks, Ltd. System and method for internet page acceleration including multicast transmissions
US20030018581A1 (en) 2000-02-16 2003-01-23 Bratton Timothy R. Delivering media data to portable computing devices
US7412462B2 (en) 2000-02-18 2008-08-12 Burnside Acquisition, Llc Data repository and method for promoting network storage of data
US20010032336A1 (en) * 2000-02-23 2001-10-18 Jason Kaufman Broadcast system
US7856485B2 (en) 2000-03-08 2010-12-21 Music Choice Systems and methods for providing customized media channels
WO2001069384A2 (en) * 2000-03-14 2001-09-20 Buzzpad, Inc. Method and apparatus for forming linked multi-user groups of shared software applications
US6701316B1 (en) 2000-04-07 2004-03-02 Nec Corporation Method and apparatus for intelligent network bandwidth and system resource utilization for web content fetch and refresh
US20020006116A1 (en) 2000-05-04 2002-01-17 Reed Burkhart Distributed content management and open broadcast system using satellites and the internet
US6769010B1 (en) 2000-05-11 2004-07-27 Howzone.Com Inc. Apparatus for distributing information over a network-based environment, method of distributing information to users, and method for associating content objects with a database wherein the content objects are accessible over a network communication medium by a user
US7716367B1 (en) * 2000-07-20 2010-05-11 Akamai Technologies, Inc. Network performance monitoring in a content delivery service
US6856651B2 (en) 2000-07-25 2005-02-15 Peribit Networks, Inc. System and method for incremental and continuous data compression
US7023818B1 (en) * 2000-07-27 2006-04-04 Bbnt Solutions Llc Sending messages to radio-silent nodes in ad-hoc wireless networks
US8831995B2 (en) 2000-11-06 2014-09-09 Numecent Holdings, Inc. Optimized server for streamed applications
EP1332585B1 (en) 2000-11-09 2005-03-09 Swisscom AG Method for grouping and transmitting multimedia data
US6879808B1 (en) * 2000-11-15 2005-04-12 Space Systems/Loral, Inc Broadband communication systems and methods using low and high bandwidth request and broadcast links
US6965683B2 (en) 2000-12-21 2005-11-15 Digimarc Corporation Routing networks for use with watermark systems
JP2002236767A (en) 2001-02-07 2002-08-23 Sony Corp Information processing apparatus and method, program storage medium, and program
US7681032B2 (en) 2001-03-12 2010-03-16 Portauthority Technologies Inc. System and method for monitoring unauthorized transport of digital content
JP3990115B2 (en) * 2001-03-12 2007-10-10 株式会社東芝 Server-side proxy device and program
US20020154887A1 (en) 2001-04-23 2002-10-24 Koninklijke Philips Electronics N.V. System and method for storing digital broadcast data
JP2002359641A (en) 2001-05-31 2002-12-13 Matsushita Electric Ind Co Ltd File distribution system, file distribution server device, and receiving client device
US6988147B2 (en) * 2001-05-31 2006-01-17 Openwave Systems Inc. Method of establishing a secure tunnel through a proxy server between a user device and a secure server
US20020188735A1 (en) 2001-06-06 2002-12-12 Needham Bradford H. Partially replicated, locally searched peer to peer file sharing system
US7100200B2 (en) 2001-06-13 2006-08-29 Citrix Systems, Inc. Method and apparatus for transmitting authentication credentials of a user across communication sessions
US6912645B2 (en) 2001-07-19 2005-06-28 Lucent Technologies Inc. Method and apparatus for archival data storage
US7509372B2 (en) 2001-09-13 2009-03-24 International Business Machines Corporation Method and system for redirecting data requests in peer-to-peer data networks
US6865655B1 (en) 2002-07-30 2005-03-08 Sun Microsystems, Inc. Methods and apparatus for backing up and restoring data portions stored in client computer systems
US7509667B1 (en) 2002-08-15 2009-03-24 Sprint Communications Company L.P. Broadband content jukebox with profile-based caching
US20080022135A1 (en) 2002-08-27 2008-01-24 Apple Inc. Method and apparatus for uploading mass-distributed content to a server
US7130890B1 (en) 2002-09-04 2006-10-31 Hewlett-Packard Development Company, L.P. Method and system for adaptively prefetching objects from a network
US7778438B2 (en) 2002-09-30 2010-08-17 Myport Technologies, Inc. Method for multi-media recognition, data conversion, creation of metatags, storage and search retrieval
AU2003279970A1 (en) 2002-10-15 2004-05-04 Ingrian Networks, Inc. Compression of secure content
US20040081199A1 (en) 2002-10-29 2004-04-29 Lopez Ricardo Jorge Multi-channel communication system and method based on class of service requirements
US8176186B2 (en) 2002-10-30 2012-05-08 Riverbed Technology, Inc. Transaction accelerator for client-server communications systems
JP2006506846A (en) * 2002-11-12 2006-02-23 ゼテーラ・コーポレイシヨン Electrical device with improved communication function
US20090005547A1 (en) 2002-11-14 2009-01-01 Dharmacon, Inc. siRNa targeting neuropilin 1 (NRP1)
EP1434385A1 (en) 2002-12-23 2004-06-30 Koninklijke KPN N.V. A system, a method and a message interceptor for overload protection in a data network
US7809154B2 (en) * 2003-03-07 2010-10-05 Technology, Patents & Licensing, Inc. Video entity recognition in compressed digital video streams
US7680897B1 (en) 2003-04-08 2010-03-16 Novell, Inc. Methods and systems for managing network traffic
US7810122B2 (en) 2003-05-09 2010-10-05 At&T Intellectual Property I, L.P. Application services coordinated satellite multicast content delivery
US20070276823A1 (en) 2003-05-22 2007-11-29 Bruce Borden Data management systems and methods for distributed data storage and management using content signatures
US20050033747A1 (en) * 2003-05-25 2005-02-10 Erland Wittkotter Apparatus and method for the server-sided linking of information
US7143251B1 (en) 2003-06-30 2006-11-28 Data Domain, Inc. Data storage using identifiers
US20050010870A1 (en) * 2003-07-09 2005-01-13 Jinsheng Gu Post-processing algorithm for byte-level file differencing
WO2005043279A2 (en) 2003-10-31 2005-05-12 Disksites Research And Development Ltd. Device, system and method for storage and access of computer files
US7340510B1 (en) * 2003-11-18 2008-03-04 Cisco Technology, Inc. Content delivery network (CDN) replication status reporter
WO2005053216A2 (en) 2003-11-25 2005-06-09 Dg2L Technologies Methods and systems for reliable distribution of media over a network
CN1930885A (en) 2004-03-10 2007-03-14 皇家飞利浦电子股份有限公司 System and method for remote recording
US20060047855A1 (en) 2004-05-13 2006-03-02 Microsoft Corporation Efficient chunking algorithm
US8055616B2 (en) * 2004-06-25 2011-11-08 International Business Machines Corporation Application sharing smoothness
US7437364B1 (en) 2004-06-30 2008-10-14 Google Inc. System and method of accessing a document efficiently through multi-tier web caching
US7376150B2 (en) 2004-07-30 2008-05-20 Nokia Corporation Point-to-point repair response mechanism for point-to-multipoint transmission systems
US7165050B2 (en) 2004-09-20 2007-01-16 Aaron Marking Media on demand via peering
US7487169B2 (en) 2004-11-24 2009-02-03 International Business Machines Corporation Method for finding the longest common subsequences between files with applications to differential compression
US7716306B2 (en) 2005-01-25 2010-05-11 International Business Machines Corporation Data caching based on data contents
US20080005086A1 (en) 2006-05-17 2008-01-03 Moore James F Certificate-based search
US20060184960A1 (en) 2005-02-14 2006-08-17 Universal Music Group, Inc. Method and system for enabling commerce from broadcast content
ATE390663T1 (en) * 2005-04-19 2008-04-15 Nahar Anoop METHOD FOR BROADBAND DATA TRANSMISSION
US7610280B2 (en) * 2005-05-05 2009-10-27 Cisco Technology, Inc. Method and system for dynamically pre-positioning content in a network based detecting or predicting user presence
US8856279B2 (en) * 2005-05-26 2014-10-07 Citrix Systems Inc. Method and system for object prediction
US7882181B2 (en) 2005-06-03 2011-02-01 Microsoft Corporation Minimizing data transfer from POP3 servers
CN100588203C (en) * 2005-07-12 2010-02-03 国际商业机器公司 Data storage method and system
US20070033408A1 (en) 2005-08-08 2007-02-08 Widevine Technologies, Inc. Preventing illegal distribution of copy protected content
ATE504878T1 (en) * 2005-10-12 2011-04-15 Datacastle Corp DATA BACKUP METHOD AND SYSTEM
EP1949584B1 (en) * 2005-10-28 2019-03-06 ViaSat, Inc. Adaptive coding and modulation for broadband data transmission
US8230059B1 (en) 2005-11-08 2012-07-24 Hewlett-Packard Development Company, L.P. Method of monitoring resource usage in computing environment
US7636767B2 (en) 2005-11-29 2009-12-22 Cisco Technology, Inc. Method and apparatus for reducing network traffic over low bandwidth links
CN100486170C (en) 2005-12-15 2009-05-06 国际商业机器公司 Method and device for transmitting pro-active HTTP content
US8191098B2 (en) 2005-12-22 2012-05-29 Verimatrix, Inc. Multi-source bridge content distribution system and method
US20070174246A1 (en) 2006-01-25 2007-07-26 Sigurdsson Johann T Multiple client search method and system
JP4701148B2 (en) 2006-03-02 2011-06-15 アラクサラネットワークス株式会社 Failure recovery system and server
US7644111B2 (en) 2006-05-02 2010-01-05 Microsoft Corporation Framework for content representation and delivery
WO2007131132A2 (en) 2006-05-03 2007-11-15 Voxant, Inc. System and method for collecting and distributing content
US7945689B2 (en) 2007-03-23 2011-05-17 Sony Corporation Method and apparatus for transferring files to clients using a peer-to-peer file transfer model and a client-server transfer model
JP2009542081A (en) * 2006-06-20 2009-11-26 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ Generate fingerprint for video signal
US20080016201A1 (en) 2006-07-15 2008-01-17 Solid State Networks, Inc. Methods and apparatus for transferring data
US20080066182A1 (en) * 2006-09-12 2008-03-13 Andrew Hickmott Security techniques for cooperative file distribution
US8230361B2 (en) 2006-09-28 2012-07-24 Google Inc. Content feed user interface
JP4680860B2 (en) * 2006-09-29 2011-05-11 富士通株式会社 Data communication method
US20080115125A1 (en) 2006-11-13 2008-05-15 Cingular Wireless Ii, Llc Optimizing static dictionary usage for signal compression and for hypertext transfer protocol compression in a wireless network
US8819724B2 (en) 2006-12-04 2014-08-26 Qualcomm Incorporated Systems, methods and apparatus for providing sequences of media segments and corresponding interactive data on a channel in a media distribution system
US20080144713A1 (en) 2006-12-13 2008-06-19 Viasat, Inc. Acm aware encoding systems and methods
US7961665B2 (en) 2006-12-13 2011-06-14 Viasat, Inc. Terminal aware multicasting
US20080152316A1 (en) * 2006-12-21 2008-06-26 Nortel Networks Limited Remote control of media content delivery to a digital media recorder
US20080175239A1 (en) 2007-01-23 2008-07-24 Yipes Enterprise Services, Inc Multicast wide-area network for distributing data to selected destinations with limited or no replication
US8259721B2 (en) * 2007-02-22 2012-09-04 Cisco Technology, Inc. Time-based authorization of internet protocol (IP) multicast subscription services
US8131723B2 (en) 2007-03-30 2012-03-06 Quest Software, Inc. Recovering a file system to any point-in-time in the past with guaranteed structure, content consistency and integrity
US20080263130A1 (en) 2007-04-23 2008-10-23 Nir Michalowitz Apparatus, system and method of digital content distribution
US20090006368A1 (en) 2007-06-29 2009-01-01 Microsoft Corporation Automatic Video Recommendation
US8151004B1 (en) 2007-07-13 2012-04-03 Adobe Systems Incorporated File processing to accelerate image viewer initialization
US8505046B2 (en) 2007-08-17 2013-08-06 At&T Intellectual Property I, L.P. Targeted online, telephone and television advertisements based on cross-service subscriber profiling
US8930989B2 (en) 2007-08-20 2015-01-06 AdsVantage System and method for providing supervised learning to associate profiles in video audiences
US8078729B2 (en) 2007-08-21 2011-12-13 Ntt Docomo, Inc. Media streaming with online caching and peer-to-peer forwarding
US7941409B2 (en) 2007-09-11 2011-05-10 Hitachi, Ltd. Method and apparatus for managing data compression and integrity in a computer storage system
US8284773B1 (en) 2007-11-01 2012-10-09 Sprint Spectrum L.P. Advanced joining into multicast group to facilitate later communication among group members
US7697557B2 (en) 2007-12-26 2010-04-13 Alcatel Lucent Predictive caching content distribution network
US7975071B2 (en) 2008-01-18 2011-07-05 Microsoft Corporation Content compression in networks
US8200969B2 (en) 2008-01-31 2012-06-12 Hewlett-Packard Development Company, L.P. Data verification by challenge
US8751663B2 (en) * 2008-02-08 2014-06-10 Front Porch, Inc. Method and apparatus for modifying HTTP at a remote data center via tunneling
US8219544B2 (en) 2008-03-17 2012-07-10 International Business Machines Corporation Method and a computer program product for indexing files and searching files
US20090276314A1 (en) * 2008-04-04 2009-11-05 Anchorfree, Inc. Advertising supported vpn
US8166260B2 (en) 2008-04-18 2012-04-24 Netapp, Inc. Method and system for managing inactive snapshot blocks
US8010705B1 (en) 2008-06-04 2011-08-30 Viasat, Inc. Methods and systems for utilizing delta coding in acceleration proxy servers
US7953881B1 (en) 2008-06-12 2011-05-31 Juniper Networks, Inc. Network characteristic-based compression of network traffic
US20090313329A1 (en) * 2008-06-13 2009-12-17 International Business Machines Corporation Methods, Systems and Computer Program Products for Communication of Information in Electronic Conferences
US8195689B2 (en) * 2009-06-10 2012-06-05 Zeitera, Llc Media fingerprinting and identification system
US8019882B2 (en) 2008-06-27 2011-09-13 Microsoft Corporation Content identification for peer-to-peer content retrieval
US8799955B2 (en) 2008-08-26 2014-08-05 At&T Intellectual Property I, Lp Apparatus and method for managing media content
US20100083322A1 (en) 2008-09-29 2010-04-01 Alan Rouse Providing selective video program content and associated license in response to a promotion token
US7814149B1 (en) * 2008-09-29 2010-10-12 Symantec Operating Corporation Client side data deduplication
US8082228B2 (en) 2008-10-31 2011-12-20 Netapp, Inc. Remote office duplication
US20100158391A1 (en) * 2008-12-24 2010-06-24 Yahoo! Inc. Identification and transfer of a media object segment from one communications network to another
US20100179984A1 (en) * 2009-01-13 2010-07-15 Viasat, Inc. Return-link optimization for file-sharing traffic
US20140040353A1 (en) 2009-01-13 2014-02-06 Viasat, Inc. Return-link optimization for file-sharing traffic
WO2010104927A2 (en) 2009-03-10 2010-09-16 Viasat, Inc. Internet protocol broadcasting
US8397253B2 (en) * 2009-07-23 2013-03-12 Fmr Llc Inserting personalized information into digital content
US8000259B2 (en) 2009-09-04 2011-08-16 Viasat, Inc. Distributed cache—adaptive multicast architecture for bandwidth reduction
US8791787B2 (en) * 2009-12-11 2014-07-29 Sony Corporation User personalization with bezel-displayed identification
WO2011123705A1 (en) 2010-03-31 2011-10-06 Platform Design, Inc. System for subscriber-specific tv and multimedia content distribution over high speed broadcast mediums
US8984048B1 (en) * 2010-04-18 2015-03-17 Viasat, Inc. Selective prefetch scanning
US8898324B2 (en) * 2010-06-24 2014-11-25 International Business Machines Corporation Data access management in a hybrid memory server
US8954490B2 (en) * 2010-06-24 2015-02-10 International Business Machines Corporation Speculative and coordinated data access in a hybrid memory server
US8493902B2 (en) 2010-08-16 2013-07-23 Florida Institute for Human and Machine Cognition Opportunistic listening system and method
EP2437498A1 (en) * 2010-09-30 2012-04-04 British Telecommunications Public Limited Company Digital video fingerprinting
US20120184309A1 (en) 2011-01-19 2012-07-19 Cohen Robert H Provision of content to mobile communication devices
US9912718B1 (en) * 2011-04-11 2018-03-06 Viasat, Inc. Progressive prefetching
US9106607B1 (en) * 2011-04-11 2015-08-11 Viasat, Inc. Browser based feedback for optimized web browsing
PT3633918T (en) 2011-06-14 2022-03-18 Viasat Inc Transport protocol for anticipatory content
US9407355B1 (en) 2011-10-25 2016-08-02 Viasat Inc. Opportunistic content delivery using delta coding
CN104081739B (en) 2011-12-23 2018-03-02 阿卡麦科技公司 Compression and the data difference device and system in Intrusion Detection based on host/path of differentiation engine are utilized in overlay network
US8918804B2 (en) 2012-02-07 2014-12-23 Turner Broadcasting System, Inc. Method and system for a reward program based on automatic content recognition
US8432808B1 (en) * 2012-06-15 2013-04-30 Viasat Inc. Opportunistically delayed delivery in a satellite network
US9146990B2 (en) 2013-01-07 2015-09-29 Gracenote, Inc. Search and identification of video content
US20150127715A1 (en) 2013-11-04 2015-05-07 Viasat Inc. Decoupled dictionary and transmission services over communications networks
US9749431B1 (en) * 2013-11-21 2017-08-29 Mashable, Inc. Finding a potentially viral first media content and transmitting a second media content that is selected based on the first media content and based on the determination that the first media content exceeds a velocity threshold
US10855797B2 (en) * 2014-06-03 2020-12-01 Viasat, Inc. Server-machine-driven hint generation for improved web page loading using client-machine-driven feedback
US10478127B2 (en) * 2014-06-23 2019-11-19 Sherlock Solutions, LLC Apparatuses, methods, processes, and systems related to significant detrimental changes in health parameters and activating lifesaving measures
US11310257B2 (en) * 2019-02-27 2022-04-19 Microsoft Technology Licensing, Llc Anomaly scoring using collaborative filtering
US11902963B2 (en) * 2020-04-17 2024-02-13 Intel Corporation Coverage enhancement for physical uplink control channel transmissions in new radio
US11638040B2 (en) * 2020-08-24 2023-04-25 Schmied Enterprises LLC Eco-friendly codec-based system for low latency transmission
US20220311837A1 (en) * 2021-03-29 2022-09-29 Amazon Technologies, Inc. Customizable data-processing network functions for radio-based networks
US11785272B1 (en) * 2021-12-03 2023-10-10 Amazon Technologies, Inc. Selecting times or durations of advertisements during episodes of media programs

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
None

Cited By (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11252210B2 (en) 2009-01-13 2022-02-15 Viasat, Inc. Content set based deltacasting
US10187436B2 (en) 2009-01-13 2019-01-22 Viasat, Inc. Content set based deltacasting
US9172748B2 (en) 2009-01-13 2015-10-27 Viasat, Inc. Deltacasting for overlapping requests
US9363308B2 (en) 2009-01-13 2016-06-07 Viasat, Inc. Correlative anticipatory deltacasting
US9369516B2 (en) 2009-01-13 2016-06-14 Viasat, Inc. Deltacasting
US10547655B2 (en) 2009-01-13 2020-01-28 Viasat, Inc. Deltacasting
US10536495B2 (en) 2009-01-13 2020-01-14 Viasat, Inc. Content set based deltacasting
US10951671B2 (en) 2009-01-13 2021-03-16 Viasat, Inc. Content set based deltacasting
US8842553B2 (en) 2009-01-13 2014-09-23 Viasat, Inc. Correlative anticipatory deltacasting
US11916990B2 (en) 2009-01-13 2024-02-27 Viasat, Inc. Content set based deltacasting
US9762635B2 (en) 2009-01-13 2017-09-12 Viasat, Inc. Content set based pre-positioning
US9935740B2 (en) 2011-06-14 2018-04-03 Viasat, Inc. Transport protocol for anticipatory content
US11777654B2 (en) 2011-06-14 2023-10-03 Viasat, Inc. Transport protocol for anticipatory content
US8897302B2 (en) 2011-06-14 2014-11-25 Viasat, Inc. Transport protocol for anticipatory content
US12388569B2 (en) 2011-06-14 2025-08-12 Snappi, Inc. Transport protocol for anticipatory content
US11139919B2 (en) 2011-06-14 2021-10-05 Viasat, Inc. Transport protocol for anticipatory content
US11575738B2 (en) 2011-10-25 2023-02-07 Viasat, Inc. Opportunistic content delivery using delta coding
US11290525B2 (en) 2011-10-25 2022-03-29 Viasat, Inc. Opportunistic content delivery using delta coding
US10270842B2 (en) 2011-10-25 2019-04-23 Viasat, Inc. Opportunistic content delivery using delta coding
US12184718B2 (en) 2011-10-25 2024-12-31 Viasat Inc. Opportunistic content delivery using delta coding
US9407355B1 (en) 2011-10-25 2016-08-02 Viasat Inc. Opportunistic content delivery using delta coding
US11070490B2 (en) 2012-06-15 2021-07-20 Viasat, Inc. Opportunistic delivery of cacheable content in a communications network
US10594624B2 (en) 2012-06-15 2020-03-17 Viasat, Inc. Opportunistic delivery of cacheable content in a communications network
US11743207B2 (en) 2012-06-15 2023-08-29 Viasat, Inc. Opportunistic delivery of cacheable content in a communications network
US10044637B2 (en) 2012-06-15 2018-08-07 Viasat, Inc. Opportunistic delivery of cacheable content in a communications network
US12192118B2 (en) 2012-06-15 2025-01-07 Viasat, Inc. Opportunistic delivery of cacheable content in a communications network
US10389775B2 (en) 2016-05-20 2019-08-20 Hughes Network Systems, Llc Multicast aggregation of multiple streaming connections
WO2017201536A1 (en) * 2016-05-20 2017-11-23 Hughes Network Systems, Llc Multicast aggregation of multiple streaming connections

Also Published As

Publication number Publication date
US20130282863A1 (en) 2013-10-24
US20100179986A1 (en) 2010-07-15
US20220141275A1 (en) 2022-05-05
US10547655B2 (en) 2020-01-28
US9369516B2 (en) 2016-06-14
US8775503B2 (en) 2014-07-08
US20200322402A1 (en) 2020-10-08
US10187436B2 (en) 2019-01-22
US8489672B2 (en) 2013-07-16
US20150026241A1 (en) 2015-01-22
US20100179984A1 (en) 2010-07-15
US20160330259A1 (en) 2016-11-10
US11252210B2 (en) 2022-02-15
US20140029612A1 (en) 2014-01-30
US10536495B2 (en) 2020-01-14
WO2010083214A2 (en) 2010-07-22
US8477635B2 (en) 2013-07-02
US20100179987A1 (en) 2010-07-15
US8639744B2 (en) 2014-01-28
WO2010083248A3 (en) 2010-11-04
US20100177642A1 (en) 2010-07-15
US10951671B2 (en) 2021-03-16
US20190306210A1 (en) 2019-10-03
US20240305680A1 (en) 2024-09-12
US20130282796A1 (en) 2013-10-24
US9762635B2 (en) 2017-09-12
US11916990B2 (en) 2024-02-27
US9363308B2 (en) 2016-06-07
US20210281619A1 (en) 2021-09-09
WO2010083214A3 (en) 2010-10-07
US20100185730A1 (en) 2010-07-22
US8842553B2 (en) 2014-09-23
US20150032848A1 (en) 2015-01-29
US20100281105A1 (en) 2010-11-04
US8489673B2 (en) 2013-07-16
US9172748B2 (en) 2015-10-27
US20100180046A1 (en) 2010-07-15

Similar Documents

Publication Publication Date Title
US12388569B2 (en) Transport protocol for anticipatory content
US11916990B2 (en) Content set based deltacasting

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 10707379

Country of ref document: EP

Kind code of ref document: A2

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 10707379

Country of ref document: EP

Kind code of ref document: A2