Since video streaming account for the majority of network traffic, it’s important to understand how videos are streamed on the network. Generally, to stream a video it’s necessary to make a GET request to the video url, a TCP connection is setup and the client start receiving frames. Once it has buffered enough frames the application starts playing the video.
One drawback of HTTP streaming is that clients receive the same encoding of the video despite the variation in bandwidth availability. Dynamic Adaptive Strategy over HTTP (DASH) was developed to tackle this issue. With DASH each video encoded in several version with different bitrate and all versions are stored in the HTTP server, with different URL. The server also uses a manifest file that provide urls for each version so that the client can requests a byte range from a specific version according to the bandwidth at a specific time.
Content Distribution Networks (CDN), manages servers in multiple geographically distributed locations, store copies of the data and attempt to direct each client request to the location that will best provide the best experience to the user. According to their setup, CND might be private of provided by third-parties.
There are mainly two philosophy regarding CDN configuration
- Enter deep: By placing many server cluster in access ISPs to get as close to the end user as possible
- Bring home: Fewer server cluster are placed a IXPs to simplify the maintenance and management.
CND never actively push new content to their clusters but whenever a client request a video that is not present in the cluster, then the cluster itself retrieve the media and stores a copy. When a cluster storage fulling up, strategy similar to web caching are sued to remove the least requested content.
Most CDN take advantage of DNS to redirect a client request to a specific cluster, by using cluster selection strategies. Although these strategies are generally proprietary, one naive strategy might be to select the geographically closest cluster, other might determine the cluster based on performance metric: by taking real-time measurements a CDN might decide the appropriate cluster based on network congestion.