서버가 업로드하고 클라이언트가 다운로드하는 것은 병렬적으로 할 수 있기에 둘 중 큰 것으로
Dc-s : client-server 방법으로 F를 N명에게 분배하는데 걸린 시간
(N에 따라 linear하게 증가)
속도는 해당 파일을 server upload capacity에 대해, client download capacity에 대해 각각 나눔
서버는 n명에게 보내야 하고 서버는 한 사람으로부터만 받음
N*F/us - server upload하는데 걸린 시간
F/dmin - 클라이언트가 download받는 데 걸린 시간
이 둘이 동시에 발생 가능해서 둘 중 큰 쪽을 따라감
여기에 부등호가 들어가는 이유는,
첫 출발은 upload와 download가 동시에 딱 시작하지 않을 때가 있어서
등호 뿐만 아니라 크다 표시도 해야 함
File Distribution : P2P
최소 한 개를 업로드하는데 걸린 시간 = F/us
클라이언트가 다운로드 받는데 걸린 최대 시간 = F/dmin
업로드해야 하는 총량이 N*F bit를 업로드하는데 걸린 최대 시간 =
us는 상수 : server upload capacity
N이 증가하면 분자 속 N은 증가, 분모 속 시그마 ui도 더 많은 대상을 더하느라 증가하기에
분모 분자 둘 다 증가하므로, 일정 시간을 유지할 수 있게 됨
n이 충분히 커지면 F/us 무시하고 이 항 때문에 전체 시간이 결정됨
서버가 최초로 파일을 업로드하면
받기 시작한 클라이언트 입장에서 업로드에 같이 참여할 수 있고,
- 서버가 업로드하는 일,
- 클라이언트가 업로드하는 일,
- 클라이언트가 다운로드받는 일
이 3가지 일은 동시에 발생
서버가 file을 최초로 업로드하는 일
클라이언트가 다운로드 하는 일
업로드할 전체 양이 업로드 되는 일
완벽히 이 세가지 일이 동시에 시작하지 않기 때문에 등호가 아닌 부등호로 들어감
client-server VS P2P
n : client의 수
client의 download capacity는 영향을 미치지 않도록 충분히 크다고 함 (dmin>=us)
무튼 P2P를 쓰면 n이 증가하더라도 client-server에 비해 급격히 증가하지 않음
u = client upload rate
us = server upload rate = 10u
dmin = client download rate
# NF/us 와 F/dmin 비교 -> dmin이 us보다 크므로 더 작음
#Dc-s = NF/us = N * 0.1hour
n=1 일 때
F/10u = F/u*0.1 = 0.1
n=10일 때
서버 10us이고 client-server에서
upload capacity는 10u,
p2p에는 사용자마다 10us 추가 되어
p2p는 10u+10u(10명의 사용자라서) => 딱 두 배
(20명이었다면 10u + 20u)
보내야할 총량이 10F이니
c-s에서 10F/10u = 10/10 * F/u = 1
p2p에서 10F/20u = 0.5
Consider distributing a file of F = 10 Gbits to N peers. The server has an upload rate of us = 20 Mbps, and each peer has a download rate of di = 1 Mbps and an upload rate of u. For N = 10, 100, and 1,000 and u = 1 Mbps, prepare a chart giving the minimum distribution time for each of the combinations of N for both client-server distribution and P2P distribution.
Note: 200 Kbps = 200/1024 Mbps
10 Gbits = 10 * 1024 Mbits = 10240 Mbits
us = 20Mbps
dmin = di = 1Mbps
client-server
Dc-s = max {NF/us, F/dmin}.
NF/us = N * (10240 Mbit / 20 Mbit) sec = N * 512 sec
F/dmin = ( 10240 Mbit / 1 Mbit) sec = 10240
N = 10
N = 100
N = 1000
10240
51200
512000
P2P
Dp2p = max {F/us, F/dmin,)}
= N * ( 10240 Mbits / (20 Mbits + (N*u Mbps)) sec
N = 10
N = 100
N = 1000
10240
10240
10240
P2P file distribution : BitTorrent
파일을 256Kb의 청크단위로 분리
peer들은 이 청크들을 송신/수신
torrent : 청크 파일을 주고받는 peer 집단
tracker: torrent에 참여한 peer를 추적
P2P application인 BitTorrent에서 각 peer는
다른 peer들에게 그들이 보유한 chunk list를 받아서
현재 자신이 보유하고 있지 않은 chunk 중
그 chunk를 보유한 이웃이 가장 적은 chunk부터 요청
사용자는 tracker로부터 peer들의 리스트를 얻어서 현재 peer를 파악
그들 중 일부와 연결을 맺은 peer들은 neighbors라고 부름
처음 torrent에 들어온 사람들은 청크를 공급받기만 하지만,
축적되면 다른 peer에게 업로드함
이후에는 교환할 peer를 바꿈
churn : peer는 원할때마다 들어오고 나갈 수 있음(이기적), 남아서 다른 이들을 위해 업로드할 수 있음(이타적)
Requesting chucks
어떤 청크를 요청할 것인가
청크들의 제각기 다른 부분집한들을 여러 peer들이 가지고 있음
각 peer에게 자신이 가진 chunk를 물어보고
그 중 가장 희귀한 chuck부터 요청하여
희귀한 것부터 빠르게 확산될 수 있도록 함
Sending chunks : tit-for-tat rule
자신에게 가장 많이 공급하는 4명의 peer에게 보냄
매 10초마다 4명을 선정
choke : 그 peer 외에는 보내지 않음
optimistically unchoke : 매 30초마다 보낼 peer들을 무작위로 선택
이들이 상위 4명에 포함될 수도 있음
fair trading을 지향
자신이 공급할 수 있는 양의 정도가 비슷한 사람끼리 교환할 수 있도록 지원함 - 이기적인 유저들을 걸러냄