- 현재, 비디오 스트리밍 traffic은 ISP traffic의 80%를 차지할 정도로, major consumer of Internet이다.
→ 그렇다면, 우리는 어떻게 10억이 넘는 유저를 관리할 수 있을까? 단순히 하나의 Mega-server 형태는 아닐 것이다.
→ 또한, 각 유저마다 Network에 대해 각각 다른 capability를 보유하고 있을 것인데, 이 간극을 어떻게 해결했을까?
- 바로 distributed, application-level infrastructure을 이용하는 것이다 !
우선, Video의 Streaming 원리에 대해서 살펴보자.
Multimedia : Video
- 비디오는, 초당 24~30개의 image가 연속적으로 나타나는 이미지의 연속이다.
- 압축되지 않은 디지털 이미지는, 픽셀 단위로 구성되며 각각의 픽셀은 비트 단위로 인코딩된다.
→ 또한 매우 많은 양의 데이터( 프레임과 픽셀 ) 을 포함하기 때문에 인코딩 과정에서 효율적으로 computation하는 것이 매우 중요하다. 이를 위해 , ‘Redundancy’를 활용한 계산법이 등장하였다.
- Spatial coding : 이미지 내부에서 발생하는 중복을 줄이는 기법
예를들어, 아래와 같은 사진에서 purple pixel을 가지는 N개의 픽셀을 모두 전송하기보다,
color value, # of repeated value 이 2가지 값을 전송해 전송량을 줄일 수 있다.
- Temporal coding : 연속된 프레임 사이의 중복을 줄이는 기법
또한, 위의 사진에서 아래의 사진으로 프레임이 변했다고 하면, 두개의 사진을 모두 전송하는 것이 아니라, 전 프레임과의 “차이점”만을 전송할 수도 있다.
또한, 비트를 인코딩 할 때에도, 2가지 기법이 존재한다.( Bit rate = 일정시간동안 전송되는 비트의 양 )
- CBR (Constant Bit Rate )
- 비트 rate가 고정된 상태로 인코딩하는 방법이다.
- 비디오의 complexity와 상관없이 항상 일정한 속도로 데이터를 전송한다.
- 네트워크의 대역폭을 예측하기 쉽고, 일정한 대역폭을 유지해야하는 실시간 스트리밍 서비스에서 유리하다.
- 하지만 비디오가 단순할 때도 일정한 비트율을 사용하기 때문에, 불필요하게 많은 데이터를 사용할 수 있다.
- VBR (Variable Bit Rate)
- Vedio의 complexity에 따라 bit rate가 변하는 방법
- 빠른 움직임이 있는 곳에서는 많은 비트율을, 정적인 곳에선 낮은 비트율을 사용
- Spatial, Temporal change에 따라서 조정됨
- 고품질을 유지하면서도 데이터를 효율적으로 전송할 수 있고, 저장공간을 절약할 수 있다.
- 하지만 Bandwidth 예측이 어렵고 갑작스러운 비트율 증가로 지연이 발생할 수 있다.
⇒ 이 2가지 방법 중 하나를 선택해 사용하는 format이 MPEG format임
- MPEG-1 (CD-ROM) = 1.5Mbp의 CBR 이용
- MPEG-2 (DVD) = 3-6Mbps의 VBR 이용
- MPEG-4 ( internet streaming) = 64kbps - 12Mbps의 VBR이용
Streaming stored Video
그렇다면, 그림으로 Server에 저장된 비디오가 클라이언트로 도달하는 과정을 알아보자.
- 우선, 30frames/sec의 데이터를 가지는 video가 서버에 계단식으로 저장되었다고 생각해보자.
- 서버는, client를 통해 video를 보낼 것이고, network delay(이 예시에선 고정)의 시간 후에 client가 재생하게 된다.
- 이때, 비디오는 모두 도착하지 않았지만, client는 재생을 시작한다.
- 비디오는 30frames/sec로 재생되며, 이는 서버가 전송하는 속도와 동기화된다.
⇒ 그런데, 이 상황에서 발생할 수 있는 문제점이 존재한다.
- Continuous Playout Constraint
- 클리아언트 측의 재생이 시작되면, 비디오는 원래 시간에 맞춰 연속적으로 도착해야한다.
- 그러나 “네트워크 지연”이 시간에 따라 가변적인 상황이 일반적이다.
- 네트워크 혼잡 등으로 인해 패킷 도착시간에 변동성이 발생하여, 연속적인 재생을 방해할 수 있다.
⇒ 이를 해결하기 위해, “Client buffer”라는 개념을 도입한다.
- 초기 재생을 시작하기 전에, client buffer은 미리 일정양의 비디오 데이터를 저장해놓고, 지연이 발생해도 중단 없이 영상을 이어갈 수 있도록 한다.
- 아래의 예시를 보자
- 만약 CBR로 Video를 전송한다고 하면, variable network delay가 발생할 수 있기에, client buffer에 잠시 데이터를 보관해둔다.
- 이후, 충분히 버퍼에 데이터가 모였으면, 서버로부터 처음 데이터가 도착한 이후 “client playout delay”만큼의 시간이 흐른 뒤 video 재생을 시작한다.
- 하지만 이러한 버퍼는 일시적인 끊김이 발생하지 않도록 데이터를 저장하는 것이었다.
- 장기적인 네트워크 변동이 있을 때에는 버퍼만으로 문제를 해결하기 어렵고, 모바일 환경에서는 네트워크 상태가 자주 변하므로 단순히 버퍼를 사용한 방식만으로는 quality 유지에 한계가 있었다.
- 또한, 버퍼는 “이미 수신된 데이터”를 재생하는 동안만 효과적이다.
- 네트워크 상황에따라 “실시간 Bit Rate”를 조절할 필요가 있는 경우에는 버퍼는 무의미하다.
- 예를 들어, CBR에서는 실시간으로 Bit rate를 유연하게 조율할 수 없다.
⇒ 이러한 버퍼의 문제를 해결하기 위해서, HTTP 기반 스트리밍인 DASH가 나오게 되었다.
HTTP Streaming and DASH
- DASH (Dynamic , Adaptive Streaming HTTP)
- HTTP를 통해 adaptive video streaming을 제공하는 프로토콜이다.
- 네트워크 상황에 따라 최적의 bit rate를 선택해 재생할 수 있다.
- ex) youtuve ,Netflix
이러한 DASH protocol에서, 서버의 역할은 다음과 같다
- Role of server
- 비디오를 여러 chunk로 나눈다.
- 이 chunk를, 여러 bit rate로 인코딩한다.
- 각 청크는 다양한 비트율로 인코딩되어 다양한 품질 옵션을 제공한다.
- ex) 360p, 720p, 1080p
- Manifest file을 제공한다.
- Manifest file은 모든 청크의 URL과 정보를 포함하는 file이다.
- 클라이언트는, 이 manifest file을 참고하여 필요한 청크를 요청한다.
또한 client의 역할은 다음과 같다
- Role of client
- 주기적으로, server→client bandwidth를 측정한다.
- 이는 대역폭을 파악해 네트워크 상태를 체크하기 위함이다.
- Manifest file을 참고해, 네트워크 상태에 맞는 chunk를 요청한다.
- 네트워크가 좋으면 높은 bit rate chunk 선택하면 좋겠쬬?
- 가용 bandwith에 따라 선택
- 주기적으로, server→client bandwidth를 측정한다.
⇒ 그럼, 이러한 DASH protocol의 장점을 살펴보자.
가장 큰 장점은 바로, 클라이언트에게 지능적 결정을 맡기는 것이다 (Intelligence at Client)
- When to request chunk
- so that buffer starvation, overflow가 발생 x
- What endoing rate
- higher quality when more network bandwith available
- Where to request chunk
- 가장 가까운 서버 / 대역폭이 충분한 서버 에서 chunk를 요청한다.
- 이 과정은 Content Distribution network와 같은 분산 서버에서 이루어진다.
- 가장 가까운 서버 / 대역폭이 충분한 서버 에서 chunk를 요청한다.
⇒ 이러한 특성 덕분에, DASH Protocol은 3가지 component로 이루어진다
DASH = encoding + DASH + playout buffering
- Encoding: 비디오를 다양한 비트율과 품질로 인코딩하고,
- DASH: 클라이언트가 네트워크 상태에 따라 적응형으로 청크를 선택하고 다운로드한다.
- Playout Buffering: 재생 중단을 방지하기 위해 클라이언트 측 버퍼에서 데이터를 관리한다.
그렇다면, Client가 chunk를 요청하는 Content Distribution Network도 궁금할 것이다.
⇒ DASH는 어떻게 HTTP Protocol을 사용하는지 briefly explain 하시오.
Content Distribution Network ( CDN )
- 우선, DASH 방식에서 Client가 비디오 청크를 요청할때, 다음과 같은 문제가 발생할 수 있다.
- Client가 data center와 위치가 먼 경우, 다양한 access link와 ISP들을 거치게 되는데, 이. LInk들 중 하나라도 Vedio 소비율보다 낮은 bit rate를 가지는 경우 Bottle neck이 발생한다.
- 또한 서버 입장에서는, 인기있는 비디오는 같은 access link를 통해 여러번 반복적으로 전송될 것인데, 동일한 Byte를 전송하는데 반복적으로 비용을 지불해야한다.
- CDN (Content Distribution Network)
- CDN은 다수의 지점에 분산된 네트워크를 이용해, 비디오 등의 컨텐츠의 복사본을 분산 서버에 저장해놓는다.
- 사용자는 최적의 서비스를 제공받을 수 있는 CDN에 연결된다
- 구글처럼 사설 CDN일 수도 있고,제 3자가 운영하는 CDN을 통해 서비스될 수도 있다.
- CDN 서버 위치를 선정할 때 고려하는 점은 다음과 같다.
- Enter deep
- Akamai에 의해 주장된 것으로, 서버 클러스터를 세계 곳곳에 구축해 ISP 서버로 깊숙히 침투하는 것이다.
- 즉, 최대한 서버를 사용자 근처에 위치시켜 라우팅 횟수를 낮추어, delay와 bit rate를 개선한다.
- 작은 서버 클러스터를 최대한 많은 곳에 분산배치
- push CDN servers deep into many access networks
- Bring home
- 큰 서버 클러스터를 소수의 지점에 배치
- POP란, ISP가 사용자에게 네트워크 접속을 제공하는 거점지점이다.
- 보통 클러스터는 IXP에 배치된다.
- 이렇게 하면 처리율은 enter deep보다 느려지지만, 유지보수하기 편하다는 장점이 있다.
- smaller number (10’s) of larger clusters in POP (point of presence) s near (but not within) access networks
- Enter deep
- 그럼, 그림을 통해 CDN의 동작 과정을 살펴보자
- 넷플릭스가, MADMEN이라는 영상을 각 CDN node에 저장해놓는다고 해보자.
- 구독자는, MADMEN에 대한 request를 보내게 된다.
- 이때 사용자가 요청한 컨텐츠가 저장된 노드로 요청이 리다이렉션 된다.
- 이로써 delay를 낮추고 빠르게 전송할 수 있게 한다.
- 하지만, congestion이 발생할 경우도 존재한다.
- 이럴 경우에는 manifest file을 참고해 어떤 노드에 복사본이 있는지 알려주어 사용자가 최적의 경로로 연결될 수 있도록 한다.
이러한 형태의 데이터 전송을 지원하는 것이 바로 OTT (Over-the-Top)인데, OTT에서 CDN은 매우 중요한 역할을 맡게 된다.
- OTT
- OTT란, 전통적인 방송사나 통신사 네트워크를 거치지 않고 직접 사용자에게 컨텐츠를 제공하는 방법이다.
- ex) youtube, netflix 등
- OTT가 빠르게 서비를 제공하기 위해서는 곳곳에 CDN을 배치해야 하고, 최적의 경로를 제공해야한다.
이 때, 생각해볼 수 있는 문제점은 다음과 같다.
- 어느 CDN 노드에서 컨텐츠를 가져올 것인가?
- congestion이 발생할 때 viewr의 행동 변화는 어떻게 할 것인가?
- 어느 컨텐츠를 어느 CDN 노드에 배치할 것인가?
이에 대한 해답을 내리기 위해 CDN은 DNS를 이용한다. 하나의 사례를 들어 생각해보자.
이 상황은 Bob이라는 client가 http://netcinema.com/6Y7B23V라는 비디오를 요청한 상황이다.
- 우선, Bob은 URL을 입력한다.
- 사용자의 host는 URL의 host name에 대한 질의를 Bob의 Loacl DNS로 보낸다 (resolving한다.)
- 로컬 DNS는 host name의 authoritative DNS server로, CNAME Type으로 질의를 넘긴다.
- 이때 authoritative server는 해당 질의를 CDN 서버로 연결하기 위해 Local DNS에게 CDN 서버의 athoritative server의 IP 주소를 전달해준다.
- 로컬 DNS는 다시 CDN Authoritative server로 질의를 넘기고, CDN Authoritative 서버는 CDN 서버의 IP 주소를 로컬 DNS로 응답한다.
- 여기서 콘텐츠를 제공받게 될 주소 결정!
- 로컬 DNS는, 호스트에게 CDN 서버의 IP 주소를 넘기낟.
- 알게된 IP 주소로 HTTP또는 DASH protocol을 이용해 비디오를 받아온다.
- 이때, 4번 과정에서 Authoritative DNS 서버는 CDN의 IP 주소를 로컬 DNS에게 넘겨준다고 하였다.
- CDN은, DNS를 통해 가로채는 과정에서 클라이언트의 로컬 DNS IP 주소에 기초해 최선의 클러스터를 선택하게 된다.
- Geographically Close
- 사용자의 지리정보는 DB를 뒤지면 나오기에 가장 가까운 클러스터를 선택한다.
- 대부분 맞지만, 홉의 길이와 수에 따라서 아닐 수도 있다.
- Real-time measurements
- Client 사이의 delay를 측정해, 현재 네트워크 상황을 반영해 선택한다.
- 근데 로컬 DNS 서버가 이러한 측정에 응답을 안해준다 ㅋㅋㅋㅋ
위의 과정을 사용하는 OTT의 사례로, Netflix가 존재한다.
'Computer Network > Ch2) Application layer' 카테고리의 다른 글
Ch2-5) P2P application (0) | 2024.10.27 |
---|---|
Ch2-4) Domane Name System : DNS (0) | 2024.10.27 |
Ch2-3) Email, SMTP, IMAP (0) | 2024.10.27 |
Ch2-2-2) Cookie and web cache (0) | 2024.10.27 |
Ch2-2-1) Web and HTTP (0) | 2024.10.27 |