이 글은 이화여자대학교 이미정 교수님의 2014년 2학기 컴퓨터 네트워크 강의를 기반으로 재구성한 것입니다. 삽화는 링크를 출처로, 저작권은 J.F Kurose and K.W. Ross에게 있다는 것을 밝힙니다.
Application Layer에서는 크게 3가지를 살펴본다.
- application principle
- client-server 구조
- peer-to-peer (P2P) 구조
- transport layer service model
- internet protocol - HTTP, electronic mail(SMTP, POP3, IMAP), DNS, P2P
- network application의 작성을 위한 interface - socket, UDP, TCP
이 글에서는 P2P가 왜 빠른지, 그리고 P2P의 예시 중 하나인 BitTorrent를 살펴본다.
P2P, Peer to Peer
하향식 접근 네트워크 - (1) Application Principle 포스팅에서 P2P의 특징을 한 번 살펴봤었다. 특징을 다시 작성하면 다음과 같다.
- no always-on server : server가 없다.
- end system(user host, 또는 peer)가 직접적으로 통신한다.
- peer들은 intermittently하게 연결하고, IP address를 바꾼다.
- self scalability : peer가 P2P에 join한 경우, [requset + scalability]를 동시에 가져오기 때문에 system이 커져도 scalinlg할 수 있다.
단점으로는 불특정 다수가 file을 공유하기 때문에 저작권이 걸린 file을 공유하는 것을 막기 힘들다는 점이 있다.
P2P의 속도가 빠른 이유
size F인 file을 N명의 client에게 전달할 때 어떻게 시간이 결정되는지 살펴보자.
- u$_s$ : server upload capacity, server가 internet에 upload하는 속도.
- u$_i$ : peer i의 upload capacity, peer i가 internet에 upload하는 속도.
- d$_i$ : peer i의 download capacity, peer i가 ineternet에서 download하는 속도.
- d$_{\text{min}}$ : 모든 d$_i$ 중 최솟값.
라고 정의하자.
server-client architecture의 경우
하나의 file을 internet에 올리는 데 걸리는 시간은 $\frac{F}{u_{s}}$이다. N명의 client에게 전달해야 하므로 총 N번 올려야 하고, 그 시간은 $\frac{NF}{u_{s}}$이다. (server가 N개의 file을 올리는 데 걸리는 시간)
이 때, client가 file을 download할 때 걸리는 시간은 $\frac{F}{d_{\text{min}}}$이다. (제일 느린 client가 받는 시간)
그러면 server-client architecture에서 size F인 file을 N명의 client에게 보낼 때 걸리는 시간은 다음과 같다.
max{$\frac{NF}{u_{s}}$, $\frac{F}{d_{\text{min}}}$}
이 때 d$_{\text{min}}$은 고정값인 반면 N은 가변이다. 위 식의 우항은 고정이지만 좌항은 가변이라는 뜻이다. 즉, N이 커지면 커질수록 server가 더 많은 file을 올려야 하고, 전체 시간은 증가한다.
P2P architecture의 경우
P2P인 경우를 살펴보자. 하나의 file을 internet에 올리는 데 걸리는 시간은 $\frac{F}{u_{s}}$이고, server는 단 한 번만 server에 file을 올리면 된다. 이후로는 peer들이 알아서 한다. (server가 file 하나를 올릴 때 걸리는 시간)
하나의 client가 file을 download할 때 걸리는 시간은 $\frac{F}{d_{\text{min}}}$로, 동일하다. (제일 느린 client가 받는 시간)
모든 client가 file을 가지기 위해서는 총 NF bit가 network에 올라가야 한다. upload capacity는 [u$_s$ + $\sum u_{i}$]인데 NF bit를 올려야 하므로 걸리는 시간은 $\frac{NF}{u_s + \sum u_{i}}$이다.
그러면 P2P architecture에서 size F인 file을 N명의 client에게 보낼 때 걸리는 시간은 다음과 같다.
max{$\frac{F}{u_{s}}$, $\frac{F}{d_{\text{min}}}$, $\frac{NF}{u_s + \sum u_{i}}$}
N은 가변이므로 제일 오른쪽 항에서 N이 커질수록 분자가 증가한다. 그러나 분모에 있는 [u$_s$ + $\sum u_{i}$]의 경우, average client upload capacity를 u_$\text{average}$라고 하면 분모는 [u$_s$ + $N * u_{\text{average}}$]가 된다. N으로 나타난 부분이 서로 약분되기 때문에 constant에 수렴한다.
정리
server-client architecture의 경우에는 file을 원하는 client가 늘어나면 그만큼 server가 더 많은 file을 올려야 했다. 반면 P2P architecture의 경우 file을 원하는 client가 늘어나도라도 그만큼 capacity가 늘어나 속도의 증가폭이 훨씬 적다.
BitTorrent의 구동 방식
P2P를 사용한 프로그램들은 file distribution에서는 BitTorrent, streaming에는 KanKan, VoIP에는 Skype 등이 있는데, 여기서는 BitTorrent의 작동 방식을 살펴보고자 한다.
BitTorrent는 file을 256Kb의 chunk로 나눈다.
- torrent : file chunk를 교환하는 user group.
- tracker : torrent peer를 tracking한다.
- tracker는 server이지만 file을 network에 올리는 것이 아니라 torrent peer를 알려주는 역할만 한다.
새 user가 도착하면 다음과 같은 과정을 거친다.
- tracker에게 원하는 file의 torrent를 물어본다.
- peer로부터 file chunk를 받는다.
- 이후 충분한 시간이 지나 chunk를 받게 되면 다른 chunk를 받음과 동시에 자신도 공유한다.
churn
P2P에서 중요한 개념 중 하나로, peer가 변하는 것을 의미한다. network 상황, peer들의 상황에 따라 참여하는 peer는 계속계속 변한다.
churn에 의해 chunk를 공유하고 있는 peer가 사라졌을 때, 아래 2가지를 달성할 수 있어야 한다.
- P2P는 해당 chunk를 계속 공급받을 수 있어야 한다.
- 또한 selfish peer가 없게 만들어야 한다.
- selfish peer는 자기가 받을 것만 받고 공유하지 않는 peer를 의미한다.
request chunk : rarest first
P2P에 참여하는 어떤 peer는 자신이 가지고 있지 않은 chunk를 다른 peer로부터 얻어야 한다. 이를 위해 peer는 주기적으로 torrent에게 어떤 chunk를 가지고 있는지 묻는다. 이 때 download capacity의 한계로 인해 급한 chunk부터 받아야 하는데, 이 때 rarest한 것을 제일 먼저 받는다. rare한 chunk들은 churn에 의해 peer가 사라지면 받을 수 없을 수도 있기 때문이다.
sending chunk : tit for tat
selfish peer를 없애기 위해 BitTorrent는 tit for tat을 사용하며, 이 방법은 chunk를 잘 주는 peer에게 잘 주는 방법으로, selfish peer가 살아남기 힘들게 한다.
구체적으로는, 10초에 한 번씩 자신에게 잘 주는 top 4 peer를 뽑고, 이들에게 chunk를 더 잘 준다. 이 방식으로만 하면 새로온 newbie들이 chunk를 잘 못 받기 때문에 30초에 한 번씩 chunk를 주는 대상을 random하게 바꾼다. 바꾼 후에는 optimistically하게 chunk를 잘 줘보고, 응답이 잘 오면 계속 잘 보내주고, 잘 안주면 주는 걸 줄여버린다.
이 과정을 거쳐 더 좋은 peer를 계속 찾아나가며, selfish peer가 살아남기 힘들게 한다.
잘못된 내용이나 오탈자에 대한 지적, 질문 등은 언제나 환영합니다.
'CS > Network' 카테고리의 다른 글
[Network] 하향식 접근 네트워크 - 3. Transport Layer - (1) Principles & UDP (0) | 2023.07.29 |
---|---|
[Network] 하향식 접근 네트워크 - 2. Application Layer - (6) Socket Programming (1) | 2023.07.27 |
[Network] 하향식 접근 네트워크 - 2. Application Layer - (4) DNS (0) | 2023.07.27 |
[Network] 하향식 접근 네트워크 - 2. Application Layer - (3) SMTP, POP3, IMAP (0) | 2023.07.27 |
[Network] 하향식 접근 네트워크 - 2. Application Layer - (2) HTTP (0) | 2023.07.27 |