ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [네트워크] 7. P2P와 Video Streaming
    CS/네트워크 2023. 3. 25. 18:37

    1. P2P

    peer to peer 방식으로 client - server 구조와 대비되는 형태입니다.

    P2P 방식은 서버가 항상 열려있지는 않고, peer간 간헐적으로 연결을 하며 IP주소를 바꿉니다.

    대표적인 예시로 BitTorrent가 있습니다.

     

    1.1 p2p와 client-server의 성능 차이

    client-server 성능

    첫 번째로 client-server 의 File distribution time을 계산해보도록 하겠습니다.

    다음과 같은 상황을 가정해 보도록 하겠습니다.

    • 파일 하나의 size는 F 입니다.
    • 서버의 업로드 capacity는 Us, 클라이언트의 업로드 & 다운로드 capacity는 각각 Ui, Di입니다.
    • 클라이언트는 총 N개 있습니다.

    이러한 상황에서 N개의 클라이언트가 서버로부터 다운로드 받는 시간을 구해봅시다.

     

    클라이언트의 다운로드 속도는 다 다른데, 이 중 가장 느린 속도를 d(min)이라고 하겠습니다.

    그럼 서버가 클라이언트에게 배포하기 위한 총 시간은 Max( N*F / Us, F/d(min) )가 됩니다.

    N개의 F크기의 파일을 Us 속도로 나누어 나온 서버의 업로드 시간과, F크기 파일을 다운로드 하는 클라이언트의 시간 중 더 큰 값입니다.

    대부분의 상황에서는 서버가 업로드하는 시간인 NF/Us가 더 클 것입니다.

     

     

     

     

    P2P 성능

    P2P 방식은 peer가 서버의 업로드 역할도 하기 때문에 하나의 서버가 N번 업로드 할 필요가 없습니다.(단, 최초 1회는 필요)

    서버가 업로드하는 횟수가 1, 2, 3, 4번을 증가하면, 업로드를 할 수 있는 peer의 수가 1, 2, 4, 8로 기하급수적으로 증가합니다.

    따라서 총 배포 시간은 다음 세 가지 중 최댓값이 됩니다.

    • F / Us : 서버가 하나의 파일을 배포하는데 걸리는 시간
    • F / d(min) : peer가 하나의 파일을 다운로드 받는 데 걸리는 시간(가장 느린)
    • N*F / (Us + ∑u) : 총 배포 파일의 사이즈를 서버와 peer의 업로드 속도로 나눈 시간

    client- server 방식과 P2P 방식을 그래프로 표현해보면 아래와 같습니다.

    P2P의 방식은 N이 증가함에 따라 수렴한다는 것을 볼 수 있습니다.

     

    1.2 BitTorrent

    P2P 방식의 대표적인 예로 BitTorrent가 있습니다.

    BitTorrent는 다음과 같은 방식으로 데이터를 교환합니다.

    1. 큰 용량의 파일은 256Kb의 청크로 나뉘어 peer들에게 나눠집니다.
    2. 서버에 있는 tracker가 데이터를 교환할 peer들을 추적하고, peer들의 리스트를 만듭니다. 
    3. 유저pc에서 필요한 청크를 확인하고, 청크 교환이 필요한 peer들끼리 그룹을 만듭니다. 이 그룹을 torrent라고 합니다.
    4. torrent안에서 peer들끼리 파일의 청크를 교환하게 됩니다.

     

    BitTorrent는 다음과 같은 특징을 띄웁니다.

    • churn : peer는 마음대로 들어올 수 있고, 나갈 수 있습니다.
    • 한번 torrent에 들어오면, selfishly하게 떠나거나, altruistically 남을 수 있습니다.(이기적 / 이타적)
    • requesting chunk : 청크는 가장 희귀한 것부터 요청하게 됩니다.
    • sending chunks(tit for tat) : selfish한 peer를 버리기 위한 방법으로, 가장 많은 청크를 보내는 4개의 peer를 10초마다 지속적으로 보며 교체를 합니다. 이 과정에서 peer가 고정되는 것을 막기 위해 30초마다 랜덤한 peer로 교체하게 됩니다.
      이 방법으로 항상 좋은 성능을 유지하며 데이터를 교환할 수 있습니다.

     

    2. Video streaming and CDN

    비디오 스트리밍은 youtube, netflix 등이 제공하는 서비스입니다.

     

    영상의 원리는 연속된 이미지를 빠르게 보여주면서 우리 눈이 실제로 움직인다고 착각하게 만드는 데에 있습니다.

    컴퓨터 또한 디지털 이미지를 빠르게 보여주는 방법을 이용합니다.

     

    Coding

    하지만 비디오는 대부분의 경우 1 프레임 사이 이미지의 변화는 크게 없습니다. 비슷한 부분을 계속 보내는 건 비용이 많이 듭니다.

    따라서 모든 픽셀에 대한 부분을 보내는 것이 아닌, coding 방식에 따라 더 빠른 속도로 보내게 합니다.

    • 예시로 spatial coding과 temporal coding이 있습니다. spatial은 비슷한 색상에 대해 색상 값과 반복되는 값 두 가지만 보내는 방법입니다. temporal coding은 전 프레임과 달라진 부분만 보내는 방식입니다.

     

     

    2.1 Streaming vs Download

    다운로드 방식은 클라이언트가 인터넷에 접속하고, 서버에 저장된 비디오를 한번에 다운로드 받는 방식입니다.

    다운로드가 끝나야지만 play할 수 있습니다.

     

    streaming은 반대로 일정 데이터를 받고 재생을 하는 것을 반복하는 것입니다.

    streaming 방식에 대해 좀 더 자세히 알아보도록 하겠습니다.

     

     

     

    2.2 DASH (Dynamic, Adaptive Streaming over Http)

    스트리밍은 Http프로토콜을 이용한 유동적이고, 적응형 스트리밍이라는 의미의 DASH라는 방식입니다.

     

    Server

    • 비디오를 여러 청크로 나눕니다.
    • 각 청크에 여러 화질로 인코딩 된 데이터가 저장되어 있습니다.
    • manifest file : 청크들의 URL을 제공합니다.

    Client 

    • server-to-client의 대역폭(bandwidth)를 계산합니다.
    • 하나의 요청에 하나의 청크를 받아냅니다.
    • 대역폭이 견뎌낼 수 있는 코딩을 결정하고, 다른 화질의 코딩 방식을 고를 수 있습니다.
    • 네트워크 환경이 갑자기 안 좋아지면, 화질을 낮춘 것을 보여줍니다.

     

     

     

    Progressive Download

    순차적으로 다운로드를 하는 방법입니다.

    download & play 방법으로, 네트워크 환경에 유연하게 대처하기 어렵습니다.

     

     

    [참고]

    옛날에는 비트를 주는 속도가 느리기 때문에 progressive 방법으로 화면에 뿌리게 되면, 화면이 차는 게 눈에 보였습니다.

    따라서 짝수번째 먼저 찍고, 이후 홀수 번째를 찍는 Interasive방식을 사용하였습니다.

    최근은 비트를 보내는 속도가 빨라져, progressive 방식을 대부분 사용합니다.

     

     

    Adaptive HTTP Streaming

    네트워크 환경에 유연하게 대처할 수 있는 적응형 스트리망 방법입니다.

    서버에는 화질별로 청크를 저장해두고, 네트워크 환경에 맞게 해당 청크를 보내줍니다.

    어떤 화질을 받을 지는 클라이언트가 결정합니다. 아래는 클라이언트가 결정하는 사항입니다.

    • when : 언제 청크를 가져올 지 결정합니다.
    • what encoding rate : 어떤 인코딩 비율(bandwidth에 맞는)로 요청할 지 결정합니다.
    • where : 어디 서버로 청크를 요청할 지 결정합니다. (거리상 가까운 곳, 대역폭이 넓은 곳 등등)

     

     

     

     

    2.3 CDN

    스트리밍 서비스를 하나의 서버가 담당하면 문제가 있습니다. 따라서 비디오를 복제하여 여러 사이트에 두게 됩니다.

    이를 Content Distribution Networks라고 합니다.

    유저는 가까이 있는 CDN에게 스트리밍 요청을 보내게 됩니다. (속도가 느릴 경우 다른 경로를 선택합니다)

     

     

    위는 유저가 스트리밍을 CDN을 통해 이용하는 방법입니다.

    1. 유저는 스트리밍 서비스를 제공하는 웹 페이지의 URL을 받습니다.
    2. 유저의 local DNS를 통해 웹 페이지를 확인합니다.
    3. 스트리밍 웹 페이지의 DNS는 자신이 아닌 CDN의 URL을 알려줍니다.
    4. CDN의 DNS로 authoritative DNS를 통해 IP주소를 얻어냅니다.
    5. 최종 IP 주소를 local DNS가 유저에게 알려줍니다.
    6. 얻어낸 IP주소로 HTTP 를 통한 스트리밍을 요청합니다.

     

    Over the top( OTT )

    넷플릭스와 같이 특정 플랫폼에 서비스를 계약하여 제공하는 것을 의미합니다. 이 방법으로 인터넷 혼잡을 피할 수 있습니다.

     

     

    본 글은 Computer networking : a top-down approach 라는 책을 통해 작성되었습니다.

    댓글

Designed by Tistory.