Users are increasingly using networks such as the Internet to access content, such as video files and live streaming/video on demand content, via client machines. Such content is often large, time sensitive, or both. As demand for such content increases, there are ongoing challenges in distributing that content efficiently and with high quality. As one example, when a client requests content (e.g., a particular television episode), the content may be available in multiple bitrates from multiple sources. Unfortunately, the client may not receive the content from the most appropriate source, or in the most appropriate bitrate.
Various embodiments of the invention are disclosed in the following detailed description and the accompanying drawings.
The invention can be implemented in numerous ways, including as a process; an apparatus; a system; a composition of matter; a computer program product embodied on a computer readable storage medium; and/or a processor, such as a processor configured to execute instructions stored on and/or provided by a memory coupled to the processor. In this specification, these implementations, or any other form that the invention may take, may be referred to as techniques. In general, the order of the steps of disclosed processes may be altered within the scope of the invention. Unless stated otherwise, a component such as a processor or a memory described as being configured to perform a task may be implemented as a general component that is temporarily configured to perform the task at a given time or a specific component that is manufactured to perform the task. As used herein, the term ‘processor’ refers to one or more devices, circuits, and/or processing cores configured to process data, such as computer program instructions.
A detailed description of one or more embodiments of the invention is provided below along with accompanying figures that illustrate the principles of the invention. The invention is described in connection with such embodiments, but the invention is not limited to any embodiment. The scope of the invention is limited only by the claims and the invention encompasses numerous alternatives, modifications and equivalents. Numerous specific details are set forth in the following description in order to provide a thorough understanding of the invention. These details are provided for the purpose of example and the invention may be practiced according to the claims without some or all of these specific details. For the purpose of clarity, technical material that is known in the technical fields related to the invention has not been described in detail so that the invention is not unnecessarily obscured.
In the example shown in
The CDN (and/or CDN node) assigned to Alice's client device can be selected in a variety of ways. As one example, a CDN can be selected based on current estimated load, or for financial reasons (e.g., where traffic to one CDN is preferred over another). Further, a given CDN node can be assigned (e.g., by the CDN) based on its distance to Alice (i.e., with the CDN node that is the fewest hops away from her client device being selected). As another example, a CDN node may be assigned based on a load balancing scheme, irrespective of or in addition to its distance from Alice. As will be described in more detail below, the CDN node closest to Alice (or that would be assigned based, e.g., on a round robin load balancing scheme) may or may not offer her the best viewing experience relative to other CDN nodes having been assigned (including those belonging to other CDNs). Using the techniques described herein, a decision of which content source should be used, and/or what bitrate should be used, can be made. As will be described in more detail below, such decisions can be made both at the time Alice initially requests content, and also as an ongoing decision. Also as will be described in more detail below, such decisions can be made for Alice's client based on historical performance information collected from other client devices that share some commonality with her client.
Client device 104 is operated by a user hereinafter referred to as Bob. Bob also lives in Washington, D.C., and also likes to stream movies from service 112. Bob's ISP is “Beta Telecommunications.” Many additional client devices (represented by client devices 106 and 108) connect to service 112, from a variety of geographical locations (e.g., Milwaukee and Albuquerque), via a variety of ISPs. Client devices also connect to other services, such as sports video service 114.
Quality Issue Examples
Using bar 202 as an example: approximately 51% of the time, an arbitrary client located in Washington, D.C. and serviced by ACME will have the best video streaming experience when connected to CDN 1. CDN 2 will provide the best experience to the client approximately 16% of the time, and CDN 3 will provide the best experience to the client approximately 33% of the time. Using bar 204 as another example: approximately 17% of the time, an arbitrary client also located in Washington, D.C., but serviced by Beta will have the best video streaming experience when connected to CDN 1. CDN 2 will provide the best experience to the client approximately 76% of the time, and CDN 3 will provide the best experience to the client approximately 5% of the time. Thus, even though Alice and Bob are both located in Washington, D.C., their respective clients will likely experience different performance when connecting to the same CDN (e.g., CDN 1), because they have different ISPs. Specifically, Alice's client is most similar to clients represented by bar 202, and Bob's client is most similar to clients represented by bar 204.
Determining Assignments
In some embodiments, content management system 406 and content distribution coordinator 408 are operated by the same entity. For example, an online movie streaming service could operate both content management system 406 and content distribution coordinator 408. Content distribution coordinator can also be operated by other entities. For example, content distribution coordinator 408 can be operated by an operator of a CDN. Content distribution coordinator 408 can operate independently of content management system 406 and/or independently of a CDN. As one example, the owner of content distribution coordinator 408 could provide services to multiple content management systems (e.g., one associated with movie service 112 and one associated with sports video service 114) and/or multiple CDNs.
As will be described in more detail below, quality experienced by clients such as clients 414 is measured and stored by content distribution coordinator 408. The information obtained from/about clients 414 is partitioned (412) and can be used, e.g., by a video direction engine 410 to predict a performance quality likely to be experienced by a client device if it is assigned a given content source.
When a client, such as client device 402, requests content, information such as is shown in
The values depicted in
In the examples shown in
In some cases, a given partition may have data on few or no clients. Such a scenario is depicted in
Referring now to
To control the selection of the CDN and bitrate, an indirection mechanism is used. Specifically, instead of including a traditional URL to the manifest file, the CMS returns a URL that points the client to the CDC. This URL is also referred to herein as a “Virtual Resource Locator” or VRL. The VRL (described in more detail in conjunction with
In the example of
Once the client receives the manifest file (808), the client uses (814) the information in this file to download (816) and start playing the video chunks. In various embodiments, content source/bitrate decision-making is performed on an ongoing, periodic basis, and a given client can be provided with updated instructions midstream. As one example, after ten consecutive chunks are received by a client, the client can be provided with a new VRL 804, or a manifest that includes a VRL (i.e., causing CDC to re-evaluate the client's content source/bitrate) and send revised instructions if warranted. As another example, in some embodiments, clients run dedicated video player applications and/or applications that otherwise natively support a feature that allows the client to periodically evaluate its performance and request revised instructions, e.g., when quality issues are experienced midstream.
The following is a list of example optional parameters that can be embedded in portion 912.
tok (“securityToken”): A token generated by the CDC that is passed out-of-band to the video CMS and is validated at request time.
an (“assetName”): a human-readable string describing the video asset. Maximum length: 127 bytes.
at (“assetType”): a string identifying the type of the content. May be one of the following values: ON DEMAND, LIVE EVENT, LINEAR LIVE, EVENT REPLAY, OTHER.
dvt (“deviceType”): a string indicating the form-factor type of the device. May be one of the following: PC, MOBILE, CONSOLE, SETTOP, SMART TV, OTHER.
dvb (“deviceBrand”): a string that names the brand of the device. Maximum length is 64 bytes. For example, “Roku,” “Microsoft.”
dvm (“deviceModel”): a string that defines the model of the device. Maximum length is 64 bytes. For example, “Xbox 360.”
dvv (“deviceVersion”): a string representing the firmware version number of the device. Maximum length is 64 bytes.
dvc (“deviceConnection”): a string describing the last-mile access connection the video device has to the Internet. May have one of the following values: T1, CABLE, DSL, WIFI, 4G, 3G, OTHER.
dvid (“deviceId”): a string defining a unique device identifier. Must be less than 127 bytes. For example, UDIDs for iOS devices.
drm: (“drmType”): The type of digital rights management technology used. May be one of the following: MICROSOFT_PLAY_READY, APPLE_FAIR_PLAY, ADOBE_ACCESS, MARLIN, ADOBE_PHDS, ADOBE_PHLS, OTHER, NONE.
os: a string naming the operating system in which the video is playing. Maximum length is 64 bytes.
osv (“osVersion”): a string indicating the full version number of the operating system indicated under “os,” if any. Maximum length is 64 bytes.
vid (“viewerld”): a string identifying the video sessions of a single viewer, without collecting any personally identifiable information. Typically a hashed/obfuscated version of a Subscriber ID. Maximum length is 127 bytes.
<other customer meta-data> For example:
“serviceType”: “SkyGo”
“show”: “PopIdol”
“episode”: “S8:E5”
The process begins at 1002 when an indication that a client requires video streaming instructions is received. In some embodiments, portion 1002 of the process is performed when CDC 408 is contacted by client 102 as a result of client 102 receiving a VRL from CMS 406 and being directed to CDC 408. In other embodiments, portion 1002 of the process is performed when a CMS receives a request for a resource, and contacts CDC 408 on behalf of the requesting client.
At 1004, past performance for a plurality of clients that are correlated to the requiring client is determined. As one example, portion 1004 of the process is performed when CDC 408 receives attributes about the requesting client, determines (e.g., from partitions 412) which other clients are most similar to the requesting client, and evaluates those clients performance history. Suppose a determination is made that the requesting client is in a particular DMA and ASN. The performance history of other clients in the same DMA and ASN is examined at 1004.
In some embodiments, a video director engine included in CDC 408 is configured to perform the actions of (a) determining which set of clients are most similar to the requesting client, and (b) evaluating their performance history. The clients most similar to the requesting client need not be requesting (or have requested) the same content as is requested by the client. For example, other clients in the same DMA and ASN may be (have been) watching other movies from movie video service 112. As a further example, correlated clients may be (have been) watching video provided by other services, such as sports video service 114. CDC 408 can be configured to collect statistical information from a wide variety of clients, including clients associated with multiple services (e.g. services 112 and 114), and can use the collected information to aid in decision-making.
At 1006, at least one of: a content source, and a bitrate, is determined based at least in part on the past performance information examined at 1004. As one example, the correlated clients' performance with respect to different CDNs can be examined (e.g., at 1004), and a decision that the requesting client should obtain content from a particular CDN can be made based on the examination (e.g., as described in conjunction with
In some embodiments, the decision made at 1006 is based wholly, or predominantly, on the performance information of correlated clients. As one example, in the case of a video service that offers short clips and does not require users to log in, very little, if any, information may be known about the specific requesting client. Further, as explained above, the requesting client may be running a standard browser application that does not provide details about the client/the client's performance to other entities such as CMS 406 or CDC 408. In other embodiments, the performance information of correlated clients is one of multiple factors in deciding a content source and/or bitrate for the client. For example, if CMS has existing information about the client (e.g., because it has stored historical performance information about the client), or if CDC 408 has information about the client (e.g., because the client is already streaming content and/or is reporting statistical information to either of CMS 406 or CDC 408), the decision made at 1006 can be based both on knowledge about the client, as well as knowledge about clients correlated with the client.
Finally, at 1008, instructions are provided to the client. As one example, instructions are provided to the client at 1008 when a CDC provides a manifest to a client (e.g., 808). As another example, where CMS 406 contacts a CDC to obtain instructions on behalf of a client, the CMS provides the obtained instructions to the client at 1008.
Additional Detail Regarding Embodiments of the Content Distribution Coordinator
Clients 1104-1112 each include a monitoring module that collects status information. As one example, performance information associated with video playback is collected, is other information about the client (e.g., information usable for partitioning as described above). Note that clients 1104-1112 can represent a subset of all clients included in an environment such as is shown in
When the monitoring module on a client is activated (e.g., because the client has started an instrumented video player), the client is mapped to a dispatcher server. As one example, when the monitoring module starts, it reads a configuration file that includes a list of dispatcher servers. The monitoring module selects a dispatcher server at random from the list.
A dispatcher server (1114) includes two conceptual modules. The first module implements a communication interface for receiving status information from clients. In some embodiments the module is implemented using an off-the-shelf web server, and allows clients to connect over the HTTP protocol (and also allows clients to securely communicate via SSL). Data received by the first module is passed to the second module. The second module normalizes the data (to a format suitable for further processing) and passes the normalized data to a real-time stream processing component (1116).
The real-time stream processing (RSP) layer includes an optimized software component that processes the telemetry data that it receives from the dispatcher in real-time. A dispatcher sends all heartbeats belonging to the same session to the same RSP component.
In some embodiments, the RSP component is implemented as a continuously running service that reads and processes the telemetry data received from dispatchers via the network over TCP. The telemetry data stream comprises individual records, each of which represents the telemetry data sent by the monitoring module. The RSP component reads network data one record at a time and parses the data into a local data representation. The data received by the RSP component can be stored as in-memory hash tables of records allowing fast execution, and very high throughputs. Since the RSP component does not require old information, it can periodically purge the in-memory hash tables and increase scalability accordingly. In other embodiments, optimized in-memory databases are used.
An example mapping function to map heartbeats having a session identifier “ID” to a particular RSP component “i” as follows:
i=hash(ID)mod m,
where hash( ) is a hash function and “m” is the total number of RSP components.
Once an RSP component parses the data records, it performs two main tasks. First, it performs data filtering. A filter is a logical expression and is installed at each RSP component instance. As one example, the following filter would identify viewers located in San Francisco, connected to ISP SP1, streaming from CDN A, one of two particular shows:
(city=“San Francisco” AND ISP=“SP1” AND CDN=“CDN A” AND ((show=“NewsAt10”) OR (show=“SundayMagazine”))
For each message of incoming telemetry data, the (key, value) pairs in the record are matched against the filter. If the filter is matched, the data is associated with the filter.
The second task performed is to compute snapshots and on-line statistics over the telemetry data matching each filter. One example of a snapshot is the number of players that are in a particular state (e.g., “playing”). The RSP component generates sequences of these snapshots (e.g., one every second). Examples of statistics computed by the RSP component include: the average number of bytes played over all video streams matching a filter over a given time interval (e.g., 10 seconds) and the minimum frames per second experienced by a stream matching a filter over a time interval. Snapshots and statistics are updated continuously, from new telemetry data received from clients.
The RSP component provides its computed snapshots and statistics to a real-time global aggregation component (1118). The real-time global aggregation (RTGA) component aggregates the information provided by the RSP component for each filter.
As explained above, each RSP component (1116) receives (via a dispatcher) telemetry data from a subset of the monitoring modules and calculates snapshots and statistics for all filters. Each RGA component instance is in turn responsible for a subset of the filters. Based on the identifier of the filter, all RSP components send data for that filter to a single RGA component. The RGA component combines the data from all RSP components for the filters that it is responsible for, resulting in a global snapshot and statistics based on information from all monitoring modules. Examples of aggregation operations performed by an RGA component include: counting the total number of viewers that match a particular filter, determining the percentage of viewers matching a given filter that are in buffering state, the join time distribution experienced by viewers joining a given stream, the current number of viewers in a given city, the rank of the most popular live events, and so on.
In some embodiments an RGA component's functionality is implemented as a continuously running service. It reads records sent by the RSPs asynchronously, thus achieving a high throughput. The RGA component stores the records it receives in in-memory hash tables allowing optimized access for real-time processing. Old information is periodically purged from the hash tables to improve efficiency.
As shown in
Gateway 1122 also provides access controls and persistently stores the information regarding the API requests, data access and presentation policies, and filter descriptions. The information is maintained in a persistent database, such as mySQL or Oracle database.
Although the foregoing embodiments have been described in some detail for purposes of clarity of understanding, the invention is not limited to the details provided. There are many alternative ways of implementing the invention. The disclosed embodiments are illustrative and not restrictive.
This application is a continuation of U.S. patent application Ser. No. 13/752,252, entitled SOURCE ASSIGNMENT BASED ON NETWORK PARTITIONING filed Jan. 28, 2013 which is incorporated herein by reference for all purposes, which claims priority to U.S. Provisional Patent Application No. 61/697,225 entitled SOURCE ASSIGNMENT BASED ON NETWORK PARTITIONING filed Sep. 5, 2012 which is incorporated herein by reference for all purposes.
Number | Name | Date | Kind |
---|---|---|---|
5926204 | Mayer | Jul 1999 | A |
5930473 | Teng | Jul 1999 | A |
5987621 | Duso | Nov 1999 | A |
6006264 | Colby | Dec 1999 | A |
6026077 | Iwata | Feb 2000 | A |
6032857 | Kitagawa | Mar 2000 | A |
6188993 | Eng | Feb 2001 | B1 |
6208977 | Hernandez | Mar 2001 | B1 |
6223206 | Dan | Apr 2001 | B1 |
6250557 | Forslund | Jun 2001 | B1 |
6279039 | Bhat | Aug 2001 | B1 |
6324565 | Holt, III | Nov 2001 | B1 |
6377996 | Lumelsky | Apr 2002 | B1 |
6405251 | Bullard | Jun 2002 | B1 |
6434159 | Woodward | Aug 2002 | B1 |
6438592 | Killian | Aug 2002 | B1 |
6469991 | Chuah | Oct 2002 | B1 |
6470389 | Chung | Oct 2002 | B1 |
6487540 | Smith | Nov 2002 | B1 |
6502747 | Stoutenburg | Jan 2003 | B1 |
6542933 | Durst, Jr. | Apr 2003 | B1 |
6711622 | Fuller | Mar 2004 | B1 |
6735630 | Gelvin | May 2004 | B1 |
6754833 | Black | Jun 2004 | B1 |
6769028 | Sass | Jul 2004 | B1 |
6836691 | Stirton | Dec 2004 | B1 |
6892236 | Conrad | May 2005 | B1 |
6892307 | Wood | May 2005 | B1 |
6906743 | Maurer | Jun 2005 | B1 |
6920580 | Cramer | Jul 2005 | B1 |
6941270 | Hannula | Sep 2005 | B1 |
6950855 | Sampathkumar | Sep 2005 | B2 |
7006666 | Montgomery | Feb 2006 | B2 |
7010598 | Sitaraman | Mar 2006 | B2 |
7020082 | Bhagavath | Mar 2006 | B2 |
7024452 | O'Connell, Jr. | Apr 2006 | B1 |
7024468 | Meyer | Apr 2006 | B1 |
7039694 | Kampe | May 2006 | B2 |
7092696 | Hosain | Aug 2006 | B1 |
7139834 | Albanese | Nov 2006 | B1 |
7159234 | Murphy | Jan 2007 | B1 |
7222190 | Klinker | May 2007 | B2 |
7233926 | Durand | Jun 2007 | B2 |
7277896 | Matsubara | Oct 2007 | B2 |
7313087 | Patil | Dec 2007 | B2 |
7318107 | Menon | Jan 2008 | B1 |
7353023 | Link, II | Apr 2008 | B1 |
7356341 | Nanda | Apr 2008 | B2 |
7367044 | Fowler | Apr 2008 | B2 |
7373415 | Deshan | May 2008 | B1 |
7389537 | Callon | Jun 2008 | B1 |
7487509 | Hugly | Feb 2009 | B2 |
7490136 | Suzuki | Feb 2009 | B2 |
7509372 | Dutta | Mar 2009 | B2 |
7519703 | Stuart | Apr 2009 | B1 |
7574488 | Matsubara | Aug 2009 | B2 |
7593333 | Li | Sep 2009 | B2 |
7599698 | Cheng | Oct 2009 | B2 |
7617525 | Moeck | Nov 2009 | B1 |
7620848 | Tanner | Nov 2009 | B1 |
7627872 | Hebeler | Dec 2009 | B2 |
7668761 | Jenkins | Feb 2010 | B2 |
7668914 | Parker | Feb 2010 | B2 |
7689485 | Kanekar | Mar 2010 | B2 |
7689508 | Davis | Mar 2010 | B2 |
7698460 | Zhang | Apr 2010 | B2 |
7702581 | Hogl | Apr 2010 | B2 |
7721292 | Frasier | May 2010 | B2 |
7725576 | Sitaraman | May 2010 | B2 |
7792889 | Lee | Sep 2010 | B1 |
7813326 | Kelm | Oct 2010 | B1 |
7844491 | Haitsuka | Nov 2010 | B1 |
7853529 | Walker | Dec 2010 | B1 |
7873727 | Pal | Jan 2011 | B2 |
7904580 | Mandera | Mar 2011 | B2 |
7921215 | Dessart | Apr 2011 | B2 |
7921222 | Courtemanche | Apr 2011 | B2 |
7930347 | Maxwell | Apr 2011 | B2 |
7941823 | Hasek | May 2011 | B2 |
7969987 | Hansen | Jun 2011 | B1 |
7970402 | Wu | Jun 2011 | B2 |
8028159 | Li | Sep 2011 | B2 |
8038535 | Jensen | Oct 2011 | B2 |
8046765 | Cherkasova | Oct 2011 | B2 |
8098160 | Howarth | Jan 2012 | B2 |
8108403 | Gopalraj | Jan 2012 | B2 |
8135855 | Sitaraman | Mar 2012 | B2 |
8156204 | Leblanc | Apr 2012 | B2 |
8182326 | Speer, II | May 2012 | B2 |
8230105 | Melnyk | Jul 2012 | B2 |
8234350 | Gu | Jul 2012 | B1 |
8259597 | Oak | Sep 2012 | B1 |
8370887 | Virdi | Feb 2013 | B2 |
8374929 | Lappas | Feb 2013 | B1 |
8387094 | Ho | Feb 2013 | B1 |
8402494 | Hu | Mar 2013 | B1 |
8417797 | Thoen | Apr 2013 | B2 |
8484319 | Wein | Jul 2013 | B2 |
8489683 | Leblanc | Jul 2013 | B2 |
8489923 | Lakshminarayanan | Jul 2013 | B1 |
8555355 | Rathbun | Oct 2013 | B2 |
8589473 | Bruss | Nov 2013 | B2 |
8639553 | Knauth | Jan 2014 | B1 |
8647203 | Albrecht | Feb 2014 | B2 |
8677428 | Lewis | Mar 2014 | B2 |
8683066 | Hurst | Mar 2014 | B2 |
8719876 | Kotecha | May 2014 | B2 |
8751605 | Zhang | Jun 2014 | B1 |
8751679 | McHugh | Jun 2014 | B2 |
8843597 | Leblanc | Sep 2014 | B2 |
8874725 | Ganjam | Oct 2014 | B1 |
8874964 | Lakshminarayanan | Oct 2014 | B1 |
8898338 | McGowan | Nov 2014 | B1 |
8909736 | Bosch | Dec 2014 | B1 |
8924996 | Shafiee | Dec 2014 | B2 |
8930991 | Philpott | Jan 2015 | B2 |
8943170 | Li | Jan 2015 | B2 |
8954491 | Medved | Feb 2015 | B1 |
9098844 | Davis | Aug 2015 | B2 |
9100288 | Ganjam | Aug 2015 | B1 |
9100826 | Weiss | Aug 2015 | B2 |
9264780 | Stoica | Feb 2016 | B1 |
9356821 | Jagannathan | May 2016 | B1 |
9456015 | Chen | Sep 2016 | B2 |
9549043 | Stoica | Jan 2017 | B1 |
9613042 | Joseph | Apr 2017 | B1 |
9819566 | Ganjam | Nov 2017 | B1 |
9898781 | Silverman | Feb 2018 | B1 |
10021672 | Cole | Jul 2018 | B2 |
10530852 | Newton | Jan 2020 | B2 |
20020002708 | Arye | Jan 2002 | A1 |
20020016831 | Peled | Feb 2002 | A1 |
20020029190 | Gutierrez-Sheris | Mar 2002 | A1 |
20020052841 | Guthrie | May 2002 | A1 |
20020082730 | Capps | Jun 2002 | A1 |
20020095400 | Johnson | Jul 2002 | A1 |
20020126135 | Ball | Sep 2002 | A1 |
20020133601 | Kennamer | Sep 2002 | A1 |
20020141343 | Bays | Oct 2002 | A1 |
20020143798 | Lisiecki | Oct 2002 | A1 |
20020175934 | Hand | Nov 2002 | A1 |
20020183972 | Enck | Dec 2002 | A1 |
20020184357 | Traversat | Dec 2002 | A1 |
20020198984 | Goldstein | Dec 2002 | A1 |
20030046383 | Lee | Mar 2003 | A1 |
20030046396 | Richter | Mar 2003 | A1 |
20030046704 | Laksono | Mar 2003 | A1 |
20030046708 | Jutzi | Mar 2003 | A1 |
20030050966 | Dutta | Mar 2003 | A1 |
20030051051 | O'Neal | Mar 2003 | A1 |
20030061305 | Copley | Mar 2003 | A1 |
20030061356 | Jason, Jr. | Mar 2003 | A1 |
20030065739 | Shnier | Apr 2003 | A1 |
20030065763 | Swildens | Apr 2003 | A1 |
20030074142 | Steeg | Apr 2003 | A1 |
20030084003 | Pinkas | May 2003 | A1 |
20030105850 | Lean | Jun 2003 | A1 |
20030135593 | Lee | Jul 2003 | A1 |
20030140108 | Sampathkumar | Jul 2003 | A1 |
20030140180 | Brown | Jul 2003 | A1 |
20030145066 | Okada | Jul 2003 | A1 |
20030169863 | Hernandez | Sep 2003 | A1 |
20030204613 | Hudson | Oct 2003 | A1 |
20040010544 | Slater | Jan 2004 | A1 |
20040019675 | Hebeler | Jan 2004 | A1 |
20040047354 | Slater | Mar 2004 | A1 |
20040049793 | Chou | Mar 2004 | A1 |
20040057420 | Curcio | Mar 2004 | A1 |
20040064556 | Zhang | Apr 2004 | A1 |
20040088347 | Yeager | May 2004 | A1 |
20040093155 | Simonds | May 2004 | A1 |
20040107387 | Larsson | Jun 2004 | A1 |
20040128682 | Liga | Jul 2004 | A1 |
20040133471 | Pisaris-Henderson | Jul 2004 | A1 |
20040136327 | Sitaraman | Jul 2004 | A1 |
20040158643 | Suzuki | Aug 2004 | A1 |
20040162901 | Mangipudi | Aug 2004 | A1 |
20040187159 | Gaydos | Sep 2004 | A1 |
20040193716 | McConnell | Sep 2004 | A1 |
20040233918 | Larsson | Nov 2004 | A1 |
20040236846 | Alvarez | Nov 2004 | A1 |
20040267691 | Vasudeva | Dec 2004 | A1 |
20050010915 | Chen | Jan 2005 | A1 |
20050021715 | Dugatkin | Jan 2005 | A1 |
20050060158 | Endo | Mar 2005 | A1 |
20050076104 | Liskov | Apr 2005 | A1 |
20050086300 | Yeager | Apr 2005 | A1 |
20050086469 | Dunagan | Apr 2005 | A1 |
20050089043 | Seckin | Apr 2005 | A1 |
20050114262 | Howard | May 2005 | A1 |
20050120131 | Allen | Jun 2005 | A1 |
20050169179 | Antal | Aug 2005 | A1 |
20050177785 | Shrader | Aug 2005 | A1 |
20050183120 | Jain | Aug 2005 | A1 |
20050187873 | Labrou | Aug 2005 | A1 |
20050243735 | Kashima | Nov 2005 | A1 |
20050251835 | Scott | Nov 2005 | A1 |
20050278259 | Gunaseelan | Dec 2005 | A1 |
20060052100 | Almgren | Mar 2006 | A1 |
20060059248 | Ikeda | Mar 2006 | A1 |
20060075094 | Wen | Apr 2006 | A1 |
20060085246 | Li | Apr 2006 | A1 |
20060100932 | Ohmori | May 2006 | A1 |
20060123080 | Baudino | Jun 2006 | A1 |
20060135172 | Dronne | Jun 2006 | A1 |
20060136218 | Lee | Jun 2006 | A1 |
20060136597 | Shabtai | Jun 2006 | A1 |
20060143350 | Miloushev | Jun 2006 | A1 |
20060165060 | Dua | Jul 2006 | A1 |
20060168304 | Bauer | Jul 2006 | A1 |
20060179154 | Sitaraman | Aug 2006 | A1 |
20060190615 | Panwar | Aug 2006 | A1 |
20060206539 | Thompson | Sep 2006 | A1 |
20060236017 | Rooholamini | Oct 2006 | A1 |
20060246880 | Baldwin | Nov 2006 | A1 |
20060259949 | Schaefer | Nov 2006 | A1 |
20060285489 | Francisco | Dec 2006 | A1 |
20070005809 | Kobayashi | Jan 2007 | A1 |
20070025381 | Feng | Feb 2007 | A1 |
20070041584 | O'Connor | Feb 2007 | A1 |
20070055632 | Hogl | Mar 2007 | A1 |
20070066403 | Conkwright | Mar 2007 | A1 |
20070097997 | MacLean | May 2007 | A1 |
20070101202 | Garbow | May 2007 | A1 |
20070125840 | Law | Jun 2007 | A1 |
20070136311 | Kasten | Jun 2007 | A1 |
20070140113 | Gemelos | Jun 2007 | A1 |
20070150612 | Chaney | Jun 2007 | A1 |
20070183427 | Nylander | Aug 2007 | A1 |
20070198413 | Nagao | Aug 2007 | A1 |
20070204011 | Shaver | Aug 2007 | A1 |
20070232332 | Holur | Oct 2007 | A1 |
20070250560 | Wein | Oct 2007 | A1 |
20070265984 | Santhana | Nov 2007 | A1 |
20070282994 | Beers | Dec 2007 | A1 |
20070286351 | Ethier | Dec 2007 | A1 |
20070288638 | Vuong | Dec 2007 | A1 |
20080016205 | Svendsen | Jan 2008 | A1 |
20080037438 | Twiss | Feb 2008 | A1 |
20080046499 | Cabrera | Feb 2008 | A1 |
20080046777 | Chen | Feb 2008 | A1 |
20080046974 | Minodier | Feb 2008 | A1 |
20080049616 | Kamath | Feb 2008 | A1 |
20080049786 | Ram | Feb 2008 | A1 |
20080052226 | Agarwal | Feb 2008 | A1 |
20080063195 | Li | Mar 2008 | A1 |
20080096562 | Wu | Apr 2008 | A1 |
20080104454 | White | May 2008 | A1 |
20080112315 | Hu | May 2008 | A1 |
20080120707 | Ramia | May 2008 | A1 |
20080140520 | Hyder | Jun 2008 | A1 |
20080140688 | Clayton | Jun 2008 | A1 |
20080141131 | Cerny | Jun 2008 | A1 |
20080144513 | Small | Jun 2008 | A1 |
20080151821 | Cho | Jun 2008 | A1 |
20080155586 | Yang | Jun 2008 | A1 |
20080195461 | Li | Aug 2008 | A1 |
20080209499 | Ramesh | Aug 2008 | A1 |
20080215718 | Stolorz | Sep 2008 | A1 |
20080215756 | Lee | Sep 2008 | A1 |
20080235746 | Peters | Sep 2008 | A1 |
20080247326 | Cormier | Oct 2008 | A1 |
20080263180 | Hurst | Oct 2008 | A1 |
20080305801 | Burgess | Dec 2008 | A1 |
20080313040 | Rose | Dec 2008 | A1 |
20090010155 | Liu | Jan 2009 | A1 |
20090019503 | Vorbau | Jan 2009 | A1 |
20090043906 | Hurst | Feb 2009 | A1 |
20090059812 | Chinnaswamy | Mar 2009 | A1 |
20090082020 | Ch'ng | Mar 2009 | A1 |
20090083631 | Sidi | Mar 2009 | A1 |
20090106392 | Zuckerman | Apr 2009 | A1 |
20090117893 | Weigand | May 2009 | A1 |
20090119722 | Versteeg | May 2009 | A1 |
20090125625 | Shim | May 2009 | A1 |
20090150487 | Wolfish | Jun 2009 | A1 |
20090164656 | Guan | Jun 2009 | A1 |
20090170440 | Eyuboglu | Jul 2009 | A1 |
20090172200 | Morrison | Jul 2009 | A1 |
20090187956 | Sommer | Jul 2009 | A1 |
20090192929 | Hoeflinger | Jul 2009 | A1 |
20090234940 | Pal | Sep 2009 | A1 |
20090248872 | Luzzatti | Oct 2009 | A1 |
20090271101 | Relyea | Oct 2009 | A1 |
20090271520 | Siddiqui | Oct 2009 | A1 |
20090288012 | Hertel | Nov 2009 | A1 |
20090327489 | Swildens | Dec 2009 | A1 |
20090328124 | Khouzam | Dec 2009 | A1 |
20100043014 | Hebeler, Jr. | Feb 2010 | A1 |
20100080290 | Mehrotra | Apr 2010 | A1 |
20100088373 | Pinkham | Apr 2010 | A1 |
20100100635 | Takemura | Apr 2010 | A1 |
20100114562 | Hutchinson | May 2010 | A1 |
20100125675 | Richardson | May 2010 | A1 |
20100131642 | Chalikouras | May 2010 | A1 |
20100138273 | Bateni | Jun 2010 | A1 |
20100161729 | Leblanc | Jun 2010 | A1 |
20100169195 | Trest | Jul 2010 | A1 |
20100235503 | Sitaraman | Sep 2010 | A1 |
20100241701 | Lester | Sep 2010 | A1 |
20100302002 | Guo | Dec 2010 | A1 |
20100306368 | Gagliardi | Dec 2010 | A1 |
20110014972 | Herrmann | Jan 2011 | A1 |
20110016225 | Park | Jan 2011 | A1 |
20110047413 | McGill | Feb 2011 | A1 |
20110058675 | Brueck | Mar 2011 | A1 |
20110060649 | Dunk | Mar 2011 | A1 |
20110082946 | Gopalakrishnan | Apr 2011 | A1 |
20110119724 | Damola | May 2011 | A1 |
20110179435 | Cordray | Jul 2011 | A1 |
20110196943 | Bornstein | Aug 2011 | A1 |
20110202593 | Vaderna | Aug 2011 | A1 |
20110218957 | Coon | Sep 2011 | A1 |
20110235103 | Ito | Sep 2011 | A1 |
20110252138 | Ahuja | Oct 2011 | A1 |
20110258049 | Ramer | Oct 2011 | A1 |
20110296048 | Knox | Dec 2011 | A1 |
20110314130 | Strasman | Dec 2011 | A1 |
20120007866 | Tahan | Jan 2012 | A1 |
20120047542 | Lewis | Feb 2012 | A1 |
20120093098 | Charbit | Apr 2012 | A1 |
20120110167 | Joch | May 2012 | A1 |
20120124179 | Cappio | May 2012 | A1 |
20120166430 | Bakalov | Jun 2012 | A1 |
20120173753 | Moorthy | Jul 2012 | A1 |
20120178426 | Filipov | Jul 2012 | A1 |
20120198492 | Dhruv | Aug 2012 | A1 |
20120204068 | Ye | Aug 2012 | A1 |
20120204153 | Peterson | Aug 2012 | A1 |
20120209717 | Henry | Aug 2012 | A1 |
20120219271 | Vunic | Aug 2012 | A1 |
20120221421 | Hammad | Aug 2012 | A1 |
20120226734 | Poese | Sep 2012 | A1 |
20120231885 | Speer, II | Sep 2012 | A1 |
20120240176 | Ma | Sep 2012 | A1 |
20120259698 | Yurow | Oct 2012 | A1 |
20120265596 | Mazed | Oct 2012 | A1 |
20120278496 | Hsu | Nov 2012 | A1 |
20120311126 | Jadallah | Dec 2012 | A1 |
20130024364 | Shrivastava | Jan 2013 | A1 |
20130024371 | Hariramani | Jan 2013 | A1 |
20130046861 | Biderman | Feb 2013 | A1 |
20130067052 | Reynolds | Mar 2013 | A1 |
20130067109 | Dong | Mar 2013 | A1 |
20130091249 | McHugh | Apr 2013 | A1 |
20130094445 | De Foy | Apr 2013 | A1 |
20130124724 | Madgwick | May 2013 | A1 |
20130132605 | Kocks | May 2013 | A1 |
20130142129 | Rinne | Jun 2013 | A1 |
20130144785 | Karpenko | Jun 2013 | A1 |
20130151673 | Gouache | Jun 2013 | A1 |
20130151687 | Mooneyham | Jun 2013 | A1 |
20130159531 | Katyal | Jun 2013 | A1 |
20130166332 | Hammad | Jun 2013 | A1 |
20130198328 | Green | Aug 2013 | A1 |
20130198361 | Matsuzaki | Aug 2013 | A1 |
20130218765 | Hammad | Aug 2013 | A1 |
20130304642 | Campos | Nov 2013 | A1 |
20130305299 | Bergstrom | Nov 2013 | A1 |
20130326024 | Chen | Dec 2013 | A1 |
20130336221 | Damola | Dec 2013 | A1 |
20140019352 | Shrivastava | Jan 2014 | A1 |
20140108671 | Watson | Apr 2014 | A1 |
20140129303 | Aiglstorfer | May 2014 | A1 |
20140143089 | Campos | May 2014 | A1 |
20140149557 | Lohmar | May 2014 | A1 |
20140150046 | Epstein | May 2014 | A1 |
20140198641 | Perkuhn | Jul 2014 | A1 |
20140245359 | De Foy | Aug 2014 | A1 |
20140324690 | Allen | Oct 2014 | A1 |
20140330980 | Richardson | Nov 2014 | A1 |
20140337175 | Katzin | Nov 2014 | A1 |
20140348049 | Kim | Nov 2014 | A1 |
20150026239 | Hofmann | Jan 2015 | A1 |
20150067185 | Tamblin | Mar 2015 | A1 |
20150088607 | Georgoff | Mar 2015 | A1 |
20150112774 | Georgoff | Apr 2015 | A1 |
20150134431 | Georgoff | May 2015 | A1 |
20150201042 | Shah | Jul 2015 | A1 |
20150220989 | Hayes | Aug 2015 | A1 |
20150302456 | Rego | Oct 2015 | A1 |
20150334153 | Koster | Nov 2015 | A1 |
20150379554 | Copeland | Dec 2015 | A1 |
20160055583 | Liberty | Feb 2016 | A1 |
20160234293 | Berger | Aug 2016 | A1 |
20160292731 | Khwaja | Oct 2016 | A1 |
20160328272 | Ahmed | Nov 2016 | A1 |
20170161717 | Jun 2017 | A1 | |
20170289188 | Shaikh | Oct 2017 | A1 |
20170339222 | Newton | Nov 2017 | A1 |
Entry |
---|
“Relay Nodes in Wireless Sensor Networks: A Survey” —Ataul Bad, University of Windsor, Nov. 2005, http://richard.myweb.cs.uwindsor.ca/cs510/survey_bari.pdf. |
“Simple Opportunistic Routing Protocol for Wireless Mesh Networks”—Rozner et al, University of Texas at Austin, Aug. 2011 http://ericrozner.com/papers/wimesh06.pdf. |
http://www.cs.berkeley.edu/˜kubitron/articles/techreview.pdf “The Internet Reborn”—Wade Roush, Technology Review, Oct. 2003. |
Theotokis et al., A Survey of Peer-to-Peer Content Distribution Technologies, ACM Computing Surveys, vol. 36, No. 4, Dec. 2004, pp. 335-371. |
Wade Roush, Technology Review, Published by MIT, TR10: Peering into Video's Future, Mar. 12, 2007, http://technologyreview.com/printer_friendly_article.aspx?id=18284. |
“Firefly-Inspired Heartbeat Synchronization in Overlay Networks”—Binci et al., University of Bologna, Italy, Feb. 2007 http://www.cs.unibo.it/babaoglu/courses/cas06-07/papers/pdf/fireflies.pdf. |
Coppens et al., Design and Performance of a Self-Organizing Adaptive Content Distribution Network, 2006. |
Elo et al., “Virtual URLs for Browsing & Searching Large Information Spaces”, WebNet Journal, pp. 38-43, p. 66, Jan.-Mar. 1999. |
Number | Date | Country | |
---|---|---|---|
61697225 | Sep 2012 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 13752252 | Jan 2013 | US |
Child | 14971023 | US |