ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크: Application layer 정리2(DNS, P2P, CDN)
    네트워크 2020. 9. 28. 01:17

    < DNS(Domain name system) >

     

    우리는 URL을 통해 네이버에 접근할 때 보통은 IP를 통해 접근하지 않는다.

     

    IP 주소를 외우기는 쉽지 않으므로 보통은 "www.naver.com" 이라는 이름으로 접근한다.  

     

    "www.naver.com" 이라는 이름으로 접속 시, 자동으로 해당하는 웹 사이트의 IP로 바뀌어 접속한다.

     

    이러한 도메인을 IP로 바꾸어 주는 것이 DNS이다.

     

    이렇게 DNS는 host나 routers들을 구별하기 위해 필요한 정보를 제공한다.

     

    DNS는 32bit 크기의 IP address를 저장하고 제공함으로 distributed database의 속성을 갖는다.

    (필요한 관계를 저장해두고 필요할 때 제공한다)

     

     

     

     

    < DNS의 특성 >

     

    - Application-layer에 존재

     

    - 호스트의 이름을 IP address로 변환

     

    - 호스트 에일리어싱

     

    - 메일 서버 에일리어싱

     

    - 계층적, 분산적이다.

     

    yahoo.com에서 호스트가 www.amazon.com에 접속하기 원할 때, 

    yahoo.com DNS -> Root DNS-> com DNS -> amazon.com의 순서로 쿼리하고

    호스트는 amazon.com의 IP address를 얻는다. 

     

    (주로 캐시가 저장되어 있기 때문에 가장 먼저 Root DNS 서버에 컨택한다)

     

     

     

    ※ TLD(Top-level domain server)

     

    - com, org, net, edu 이런식으로 끝나는 도메인을 TLD라고 한다.

     

     

     Authoritative DNS server

     

    - 계층구조에서 가장 아래 있는 도메인

    - 호스트들의 정보를 가지고 있다. 

     

     

     

     

    < Local DNS name server >

     

    DNS 계층구조에 포함되어 있지는 않지만 캐시를 가지고 있어서 proxy 처럼 동작하며

    대신해서 쿼리를 처리해주는 역할을 한다.

     

     

    1) Iterated query

    호스트 cis.poly.edugaia.cs.umass.edu resolution하는 과정

     

    1. 먼저 poly.edu를 담당하는 서버에게 쿼리를 보낸다.

    2. Root DNS server에 물어본다

    3. Rootedu를 담당하는 서버의 주소를 알려준다.

    4. 8번까지 iterate한다.

    5. gaia.cs.umass.edu와 직접 통신할 수 있게 된다.

     

     

     

    2) recursive query

    local DNS server가 받는 부담을 줄이면서 정보를 주고 받는다. 

     

    local dns 서버가 다른 dns 서버로부터 관계를 받아오면 cache에 저장해둔다.

     

    통상 2일정도 cache에 저장되고 이렇게 cache에 저장된 정보를

    이용해서 root에 접근하지 않고도 접근할 수 있다. 

     

     

     

     

     

    < DNS records >

     

    DNS의 RR(Resource records)는 다음과 같은 구조를 갖는다.

     

    여기서 type에 따라 name value는 다르게 정의되는데

     

    - type = A

    name : 호스트 이름

    value: IP 주소

     

    - type = NS

    name : 도메인 (e.g., foo,com)

    value:  이 도메인과 관련된 authoritative name server의 호스트 이름

     

    - type = CNAME

    name : 진짜 이름의 약어형태

    value: 진짜 이름

     

    - type = MX

    name : 이름

    value:  메일 서버의 이름

     

    만약 "Panda Utopia"라는 서버를 만들어서 등록하려면

    TLD 서버에 두가지 RR을 등록해야한다.

     

    (pandautopia.com, dns1.pandautopia.com, NS)

    (dns1.pandautopia.com, 212.212.212.1, A)

     

    이렇게 두가지 records가  기본적으로 있어야 이후에 메일서버등을 추가할 수 있다. 

     

     

     

     


     

    <P2P(Peer-to-peer)>

     

    - always-on 상태가 아니다(원할때마다 접속할 수 있다)

    - end system(host)들 끼리 직접 통신한다.

    - peer들은 간헐적으로 연결되고 IP주소는 바뀐다. 

     

    대표적으로 토렌트, 스트리밍, 스카이프가 p2p로 이루어진 서비스다.

     

     

     

     

     

    < File distribution: BitTorrent >

     

    - 대용량의 데이터 처리에 용이하다.

    - 파일들을 256Kbyte로 나눈다.

    - peer들은 토렌트안에서 이 파일들을 주고 받는다.

    - peer들은 각각 다른 peer 들의 리스트를 얻는다. 

    - 이렇게 peer들은 리스트의 peer들과 커넥션하고 peer들은 

    서로 필요한 chunk들을 요청한다. 

    - peer가 필요한 chunk를 받으면 토렌트에서 나갈 수도 있고

    남아서 chunk를 제공해줄 수도 있다. 

     

    tracker

    토렌트에 참여하는 peer들을 tracking한다.

     

     torrent

    peer들의 그룹

    peer들은 다음과 같은 방식으로 chunk를 주고 받는다. 

     

    1. 파일요청(requesting chunks)

     

    - 주기적으로 자신에게 필요한 chunk가 있는지 물어본다.

    - rarest first 기법을 사용한다.  

     

    ※ ratest first

    흔한 chunk은 나중에 요청해도 받을 확률이 높으므로 가장 rare한 chunk를 먼저 요청

     

     

     

    2. 파일전송(sending chunks: tit-for-tat)

     

    - 자신에게 가장 많이 보내주는 상위 4명에게 보낸다.

    - 10초마다 re-evaluate해서 상위 4명을 고른다.

    - 하지만 처음에 chunk가 없는 경우에는 내가 다른사람의 상위4명안에 들지 못하므로 파일을 얻을 수 없다.

      그래서 30초마다 랜덤하게 peer를 선택하며

      초기 chunk가 없는 peer는 chunk하나를 얻으면 다른 peer들과 요청/전송이 가능해진다.

      이를 optimistically unchoked라 한다.

     

    ※ tit-for-tat

    받는 만큼 준다.

     

     

     


     

     

    < Video streaming 과 CDN > 

     

    대부분의 사람들이 video 서비스를 사용하면서 더 효율적이고 확장가능한 서비스가 필요하게 되었다.

     

    이를 위해서 distributed, application-level 인프라구조를 이용한다.

     

     

     

     

    < Video >

     

    - video는 일정한 rate로 보여지는 이미지의 연속 ex) 24images/sec

    - coding: 이미지가 변하면서 유사하거나 반복되는 부분은 그대로 사용하고

    차이가 있는 부분은 새롭게 재구성하는 기법

     

     

     

     

     

    < DASH(Dynamic, Adaptive Streaming over HTTP) >

     

    1. 서버

     

    - 파일을 여러개의 chunk로 나눈다.

    - rate를 다르게 해서 인코딩을 다해서 저장해논다.

      (사용자의 환경에 맞춰서 rate를 다르게 조절한다)

    - manifest file: chunk에 맞는 URL을 제공한다.

     

     

     

    2. 클라이언트

     

    - server-to-client bandwidth를 체크하여 클라이언트 개인에 맞는 masnifest file을 제공한다. 

    - 현재 bandwidth에서 가장 좋은 rate를 선택하여 chunk를 받는다.  

     

    결론적으로 클라이언트가 모든 것을 결정!!

     

     

     

     

    < CDN(content distribution networks) >

     

    어떻게 수많은 사람들에게 video를 stream하게 할까?

     

    -> 여러개의 분산된 지역에 cdn서버를 배치하고 video를 저장하고 제공하게 한다.

     

     

    1. Enter deep: CDN 서버들을 access networks(가입자들이 있는 쪽)에 가깝게 배치한다.

     

    user들의 근처에 있기 때문에 서버양이 아주 많고 빠르게 접근가능하다. 

     

     

    2. Bring home: 서버를 대용량으로 두어 더 적은 수의 서버를 제공하는 방식

     

    서버의 수가 적기 때문에 느릴 수 있다. 

     

     

     

    < Netflix의 video CDN 방식 >

     

     

    1. Bob넷플릭스 서버에 가입한 후, 브라우저에서 Netflix video 검색

     

    2. 넷플릭스 서비스는 Bob에게 manifest file(URL)을 리턴 

     

    3. 아마존서버에 배치되어있는 CDN서비스를 통해서

     

    4. Dash streaming을 이용해 밥은 영화를 볼 수 있다.

    반응형

    댓글

Designed by Tistory.