Peer-to-Peer Architecture
서버가 항상 있는 구조가 아니라, end system이 직접적으로 서로 통신하는 방법이다. peer가 다른 peer에게 서비스를 요청하면, 요청을 받은 peer는 서비스를 제공한다. 이러한 예시로는 BitTorrent, KanKan, VoIP 등이 있다.
File Distribution
지난 번에 Client-server Paradigm과 Peer-to-Peer Paradigm에 대해 언급한 적이 있다. 이번에는 파일 공유 관점에서 더욱 자세히 분석해보자.
하나의 서버에서 N개의 peer에게 파일을 공유하는데 시간이 얼마나 소요될까?
클라이언트-서버 모델은 클라이언트가 서버에 연결하고 데이터를 조금씩 받아가는데 시간이 소요된다. 그러나 P2P는 파일을 sharing 하는 개념으로 클라이언트-서버 모델보다 시간이 덜 소요된다.
Peer들의 수가 들어날수록 파일 공유에 소요되는 시간이 비례해 증가하는 클라이언트-서버 모델과 달리, P2P는 그보다 훨씬 적은 시간이 소요된다는 것을 알 수 있다.
BitTorrent
BitTorrent는 파일을 분배하는 프로토콜이다. 파일은 256Kb의 chunk들로 분배되고 torrent 내의 peer들은 파일 chunk를 송수신한다.
- Tracker : torrent 네트워크 상에 참여하는 peer들의 리스트를 가지고 있다. 한 peer가 Torrent에 가입하면 Torrent에 peer 정보를 등록하고 주변의 peer들과 TCP 연결을 한다.
- Torrent : chunk를 교환하는 peer 그룹
파일 분배 관점에서 3가지 방법을 고려할 수 있다.
- 서버에 저장된 데이터를 클라이언트가 접속하는 방법
- peer들이 가지는 파일의 리스트를 공유
- 파일 공유의 목적이 있는 peer들만 논리적으로 연결(물리적으로 연결하지 않음) -> overlay network
Video Streaming Networks
영상을 스트리밍하는 것은 엄청나게 많은 트래픽이 발생한다. 그렇다면, 엄청나게 많은 사용자에게 크기가 큰 영상을 어떻게 전달할까? 또 사용자들은 서로 다른 대역폭을 갖기 때문에 스트리밍 품질이 다르다. 이 문제를 해결할 수 있는 방법이 분산된, application-level의 인프라이다.
영상은 이미지의 연속된 것을 기록한 것으로 bit로 구성된 픽셀로 이루어진다. 이를 코딩하는 방식(MPEG 기술)은 2가지이다.
- Spatial(공간적 코딩)
- 이미지 내의 중복된 정보를 최소화하는 방식이다.
- 이미지 내의 같은 보라색이 N개가 있다고 하면, N개의 색 정보를 모두 보내는게 아니라, 보라색이라는 색 정보와 개수를 보낸다.
- Temporal(시간적 코딩)
- 이미지와 다음 이미지 사이의 변화를 기록한다.
- 연속된 비디오 프레임 간의 차이가 없다면 이전 프레임과의 차이만 전송함으로써 효과적으로 인코딩할 수 있다.
이렇게 코딩된 이미지를 encoding 하는 방법도 2가지가 있다.
- CBR(Constant Bit Rate) : 일정한 시간에 일정한 양을 전송한다.
- VBR(Variable Bit Rate) : 변화량을 감지해 전송하는 양을 변화시킨다.
저장된 비디오를 스트리밍하는 건 여전히 문제가 있다. 서버-클라이언트 대역폭은 네트워크 혼잡 정도에 따라 매우 다양하고, 혼잡 정도가 크면 packet loss나 delay가 발생한다. 데이터를 내보내는데 네트워크 딜레이가 발생한다. 일정한 간격으로 데이터를 보내고 일정한 간격으로 수신하면 문제 없이 비디오를 시청할 수 있다. 그러나 간격이 일정하지 않게 데이터를 수신하거나 delay가 발생하면 클라이언트에서 버퍼링이 필요하다. 클라이언트에서 버퍼링 얼마나, 어떻게 해야할 지, 비디오 패킷의 loss를 어떻게 해결할 것인지에 대한 해결책이 필요하다.
DASH
비디오 스트리밍 서비스를 이용하는 클라이언트 각각의 대역폭이 서로 다른데, 똑같이 인코딩된 비디오를 수신한다는 문제를 해결하기 위해 나타난 서비스이다. DASH는 네트워크 상태에 따라서 스트리밍 콘텐츠의 bit rate를 자동으로 조정해 최적의 스트리밍 품질을 제공한다.
- 서버 : 비디오 파일을 각 청크로 나누어 저장하고, 다른 rate로 encoding한다. 비트율에 따라 버전을 제공하는 manifest file을 가지고 있다.
- 클라이언트 : 서버의 manifest file을 받아서 네트워크 품질에 따라 원하는 품질을 요청할 수 있다. AI를 적용해서 언제 chunk를 요청할지, encoding rate는 어떻게 할것인지, 어디로 chunk를 요청해야 할지 등을 결정한다.
CDNs
수 많은 사람들에게 컨텐츠를 스트리밍할 때 어떻게 해야 할까?
한 가지 방법은 mega-server를 사용하는 것이다. 그러나, 이는 한 서버에서 문제가 발생하면 모든 서비스가 중지되는 문제가 있고, 네트워크에 과도한 트래픽으로 인해 혼잡이 발생한다. 또 지리적으로 거리가 먼 클라이언트은 서비스를 제공받는데 어려움이 있다.
두 번째 방법은 컨텐츠의 복사본을 많이 저장해놓고 이것을 제공하는 것이다. 지리적으로 서버를 분산해서 한 곳에 몰려있어 제대로된 서비스를 제공받지 못하는 클라이언트들도 높은 품질의 서비스를 제공받을 수 있게 된다. 이것이 바로 CDN이다.
- Enter deep : 되도록 지리적으로 가까운 거리에 server를 배치하는 것이다.
- bring home : server의 개수는 줄이고 큰 서버 클러스터를 형성하는 방법이다.
정리해보면, CDN은 분산된 서버에 컨텐츠의 복사본을 저장해놓고, 인접한 클라이언트의 요청을 받아들이고 이를 전달한다.
예시를 보자.
위 그림은 클라이언트인 bob이 netcinema.com 웹페이지에서 비디오를 요청해 스트리밍하는 과정을 나타낸 것이다.
bob의 Local DNS server에 질의를 보내고, Local DNS Server는 netcinema의 Authoratative로 질의를 전송한다. 이때 Authoratative는 bob 근처의 CDN 주소를 넘겨주고, DASH를 통해서 비디오를 스트리밍할 수 있다.
참고로, CDN은 DASH로 인코딩된 비디오 콘텐츠를 제공하는 서버들을 지원한다. 사용자가 콘텐츠를 요청할 때 적절한 DASH 비디오 버전을 제공하기 위해 CDN과 협력함으로써, 온라인 비디오 스트리밍 서비스의 성능을 향상시키고 사용자 경험을 최적화하는 데 기여한다.
Socket Programming
UDP
비신뢰성 데이터그램이다. Connection이라는 개념이 없고 데이터를 보낸 순서와 받는 순서가 다를 수 있다. 수신측에서는 데이터가 오는대로 큐에 넣고 정렬해둔다.
TCP
신뢰 있는 전송을 보장하며 IP 주소와 Port 번호를 보고 OS가 소켓을 연결하고 순서에 맞게 정렬한다.
'CS > 네트워크' 카테고리의 다른 글
[데이터통신] 3. Data Link Layer(DLC 프로토콜) (0) | 2024.04.17 |
---|---|
[데이터통신] 3. Data Link Layer(데이터링크 계층, DLC functions) (0) | 2024.04.17 |
[컴퓨터망] 2. Application Layer(E-mail, SMTP, IMAP, DNS) (0) | 2024.04.13 |
[컴퓨터망] 2. Application Layer(Web과 HTTP) (0) | 2024.04.13 |
[컴퓨터망] 2. Application Layer(네크워크 애플리케이션) (0) | 2024.04.13 |