이전처럼 server-client 구조가 아님
Pure P2P 구조
- 서버가 항상 켜져 있지 않음
- end system == peer 간 직접 통신
- peer는 간헐적으로 네트워크에 연결되고 IP 주소가 시시각각 바뀜
- ex
File Distribution : client-server VS P2P
질문 : 하나의 서버로 n명에게 F 크기의 파일 보내기
File Distribution : client-server
서버가 각 사용자에게 차례대로 전송
한 개를 전송하는 데 걸린 시간 = F/us
n 개라면 N*(F/us) (N에 따라 linear하게 증가)
dmin이 클라이언트의 다운로드 속도라면
클라이언트가 다운받는데 걸린 시간 = F/dmin (상수)
서버가 업로드하고 클라이언트가 다운로드하는 것은 병렬적으로 할 수 있기에 둘 중 큰 것으로
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을 지향
- 자신이 공급할 수 있는 양의 정도가 비슷한 사람끼리 교환할 수 있도록 지원함 - 이기적인 유저들을 걸러냄
BitTorrent : tit-for-tat
higher upload rate find better trading partners, get file faster |
'CS > Network' 카테고리의 다른 글
Socket programming with UDP, TCP (0) | 2021.10.16 |
---|---|
Video Streaming and CDNs (Content Distribution Networks) (0) | 2021.10.16 |
DNS (0) | 2021.10.15 |
Electronic Mail (0) | 2021.10.15 |
Caching (0) | 2021.10.15 |