참고
이 페이지는 2010년 기준 Java I2P 구현의 피어 프로파일링 및 선택에 대해 설명합니다. 여전히 대체로 정확하지만, 일부 세부사항은 더 이상 올바르지 않을 수 있습니다. 우리는 새로운 위협, 공격 및 네트워크 상황에 대응하기 위해 차단, 블로킹 및 선택 전략을 지속적으로 발전시키고 있습니다. 현재 네트워크는 다양한 버전의 여러 router 구현을 가지고 있습니다. 다른 I2P 구현들은 완전히 다른 프로파일링 및 선택 전략을 가지고 있거나, 프로파일링을 전혀 사용하지 않을 수도 있습니다.
개요
피어 프로파일링
피어 프로파일링은 다른 router나 피어의 관찰된 성능을 기반으로 데이터를 수집하고, 해당 피어들을 그룹으로 분류하는 과정입니다. 프로파일링은 피어가 network database 에 스스로 게시한 성능 데이터는 사용하지 않습니다.
프로필은 두 가지 목적으로 사용됩니다:
- 우리의 트래픽을 중계할 피어 선택하기 (아래에서 논의됨)
- 네트워크 데이터베이스 저장 및 쿼리에 사용할 floodfill router 집합에서 피어 선택하기 (네트워크 데이터베이스 페이지에서 논의됨)
피어 선택
Peer selection은 네트워크상에서 우리의 메시지를 중계할 router들을 선택하는 과정입니다(어떤 peer들에게 우리의 tunnel에 참여하도록 요청할 것인지). 이를 위해 각 peer의 성능을 추적하고(peer의 “프로필”) 해당 데이터를 사용하여 그들의 속도, 우리의 요청을 수락할 빈도, 그리고 과부하 상태이거나 약속한 것을 안정적으로 수행할 수 없는 상태인지를 추정합니다.
다른 일부 익명 네트워크와 달리, I2P에서 주장된 대역폭은 신뢰할 수 없으며 tunnel 라우팅에 충분하지 않은 매우 낮은 대역폭을 광고하는 피어들을 피하기 위해서만 사용됩니다. 모든 피어 선택은 프로파일링을 통해 이루어집니다. 이는 많은 수의 tunnel을 포획하기 위해 높은 대역폭을 주장하는 피어들에 기반한 단순한 공격을 방지합니다. 또한 타이밍 공격 을 더욱 어렵게 만듭니다.
피어 선택은 상당히 자주 수행됩니다. router가 많은 수의 클라이언트 및 탐색용 tunnel을 유지할 수 있고, tunnel 수명이 단 10분이기 때문입니다.
추가 정보
자세한 정보는 PET-CON 2009.1 에서 발표된 논문 Peer Profiling and Selection in the I2P Anonymous Network 을 참조하십시오. 논문 발표 이후의 사소한 변경사항에 대한 참고사항은 아래 를 확인하십시오.
프로필
각 피어는 네트워크 데이터베이스 쿼리에 응답하는 데 걸리는 시간, tunnel 실패 빈도, 우리에게 소개할 수 있는 새로운 피어의 수에 대한 통계와 함께, 마지막으로 해당 피어로부터 소식을 들은 시점이나 마지막 통신 오류가 발생한 시점 같은 단순한 데이터 포인트를 포함하여 수집된 데이터 포인트 집합을 가지고 있습니다.
프로필은 상당히 작으며, 몇 KB 정도입니다. 메모리 사용량을 제어하기 위해 프로필 수가 증가함에 따라 프로필 만료 시간이 단축됩니다. 프로필은 router가 종료될 때까지 메모리에 보관되며, 종료 시 디스크에 기록됩니다. 시작 시에는 프로필을 읽어들여서 router가 모든 프로필을 다시 초기화할 필요가 없도록 하므로, 시작 후 네트워크에 빠르게 재통합할 수 있습니다.
피어 요약
프로필 자체가 피어의 성능 요약으로 간주될 수 있지만, 효과적인 피어 선택을 위해 각 요약을 네 가지 간단한 값으로 나누어 피어의 속도, 용량, 네트워크 통합 정도, 그리고 실패 여부를 나타냅니다.
속도
속도 계산은 단순히 프로필을 살펴보고 1분 동안 해당 peer를 통해 단일 tunnel에서 얼마나 많은 데이터를 송수신할 수 있는지 추정합니다. 이 추정을 위해 이전 1분간의 성능만을 살펴봅니다.
용량
용량 계산은 단순히 프로필을 검토하여 주어진 기간 동안 피어가 참여에 동의할 tunnel 수를 추정합니다. 이 추정을 위해 피어가 수락, 거부, 폐기한 tunnel 빌드 요청 수와 동의한 tunnel 중 나중에 실패한 수를 살펴봅니다. 계산은 최근 활동이 이전 활동보다 더 많이 반영되도록 시간 가중치를 적용하지만, 최대 48시간 전까지의 통계가 포함될 수 있습니다.
신뢰할 수 없고 도달할 수 없는 피어를 인식하고 피하는 것은 매우 중요합니다. 안타깝게도 tunnel 구축과 테스트에는 여러 피어의 참여가 필요하므로, 구축 요청 드롭이나 테스트 실패의 원인을 정확히 식별하기 어렵습니다. router는 각 피어에 대해 실패 확률을 할당하고, 이 확률을 용량 계산에 사용합니다. 드롭과 테스트 실패는 거부보다 훨씬 높은 가중치를 받습니다.
피어 구성
위에서 언급했듯이, 우리는 각 peer의 프로필을 자세히 분석하여 몇 가지 핵심 계산을 수행하고, 이를 바탕으로 각 peer를 빠름, 고용량, 표준의 세 그룹으로 분류합니다.
이러한 그룹들은 상호 배타적이지도 않고 서로 무관하지도 않습니다:
- 피어의 용량 계산이 모든 피어의 중앙값을 만족하거나 초과하면 “고용량” 피어로 간주됩니다.
- 피어가 이미 “고용량"이고 속도 계산이 모든 피어의 중앙값을 만족하거나 초과하면 “고속” 피어로 간주됩니다.
- 피어가 “고용량"이 아니면 “표준” 피어로 간주됩니다.
그룹 크기 제한
그룹의 크기가 제한될 수 있습니다.
- 빠른 그룹은 30개의 피어로 제한됩니다. 더 많은 피어가 있을 경우, 가장 높은 속도 등급을 가진 피어만 그룹에 배치됩니다.
- 고용량 그룹은 75개의 피어로 제한됩니다 (빠른 그룹 포함). 더 많은 피어가 있을 경우, 가장 높은 용량 등급을 가진 피어만 그룹에 배치됩니다.
- 표준 그룹은 고정된 제한이 없지만, 로컬 네트워크 데이터베이스에 저장된 RouterInfo 수보다 다소 작습니다. 오늘날 네트워크의 활성 router에서는 약 1000개의 RouterInfo와 500개의 피어 프로파일이 있을 수 있습니다 (빠른 그룹과 고용량 그룹에 포함된 것들 포함).
재계산과 안정성
요약 정보는 재계산되고, peer들은 그룹으로 재정렬되며, 이 과정은 45초마다 수행됩니다.
그룹들은 상당히 안정적인 경향이 있습니다. 즉, 각 재계산 시 순위에 많은 “변동"이 없습니다. 빠르고 높은 용량 그룹의 피어들은 더 많은 tunnel이 자신을 통해 구축되며, 이는 속도와 용량 등급을 높여 그룹 내 위치를 더욱 강화시킵니다.
Peer 선택
router는 위의 그룹들에서 피어를 선택하여 터널을 구축합니다.
클라이언트 tunnel을 위한 피어 선택
클라이언트 tunnel은 HTTP 프록시 및 웹 서버와 같은 애플리케이션 트래픽에 사용됩니다.
일부 공격 에 대한 취약성을 줄이고 성능을 향상시키기 위해, 클라이언트 tunnel 구축을 위한 피어는 가장 작은 그룹인 “fast” 그룹에서 무작위로 선택됩니다. 동일한 클라이언트를 위한 tunnel에 이전에 참여했던 피어를 선택하는 편향은 없습니다.
탐색용 터널을 위한 피어 선택
탐색용 tunnel은 네트워크 데이터베이스 트래픽 및 클라이언트 tunnel 테스트와 같은 router 관리 목적으로 사용됩니다. 탐색용 tunnel은 이전에 연결되지 않은 router에 연결하는 데도 사용되므로 “탐색용"이라고 불립니다. 이러한 tunnel은 일반적으로 저대역폭입니다.
탐색적 tunnel을 구축하기 위한 피어들은 일반적으로 표준 그룹에서 무작위로 선택됩니다. 이러한 구축 시도의 성공률이 클라이언트 tunnel 구축 성공률에 비해 낮을 경우, router는 대신 고용량 그룹에서 피어들의 가중 평균을 무작위로 선택합니다. 이는 네트워크 성능이 좋지 않을 때에도 만족스러운 구축 성공률을 유지하는 데 도움이 됩니다. 이전에 탐색적 tunnel에 참여했던 피어들을 선택하는 편향은 없습니다.
표준 그룹은 router가 알고 있는 모든 피어의 매우 큰 부분집합을 포함하므로, 탐색용 tunnel은 본질적으로 빌드 성공률이 너무 낮아질 때까지 모든 피어 중에서 무작위로 선택하여 구축됩니다.
제한사항
일부 간단한 공격을 방지하고 성능을 위해 다음과 같은 제한사항이 있습니다:
- 같은 /16 IP 공간의 두 peer는 동일한 tunnel에 있을 수 없습니다.
- 하나의 peer는 router가 생성한 모든 tunnel의 최대 33%까지만 참여할 수 있습니다.
- 극도로 낮은 대역폭을 가진 peer는 사용되지 않습니다.
- 최근 연결 시도가 실패한 peer는 사용되지 않습니다.
터널에서의 피어 순서
Peer들은 predecessor attack (2008 업데이트 )에 대처하기 위해 tunnel 내에서 순서가 정해집니다. 더 자세한 정보는 tunnel 페이지 에서 확인할 수 있습니다.
향후 작업
- 필요에 따라 속도 및 용량 계산을 지속적으로 분석하고 조정
- 네트워크 성장에 따른 메모리 사용량 제어를 위해 필요시 더 적극적인 제거 전략 구현
- 그룹 크기 제한 평가
- 설정된 경우 GeoIP 데이터를 사용하여 특정 peer를 포함하거나 제외
참고사항
논문 Peer Profiling and Selection in the I2P Anonymous Network 을 읽고 계신 분들은 논문 발표 이후 I2P에서 다음과 같은 사소한 변경사항들이 있었다는 점을 염두에 두시기 바랍니다:
- Integration 계산은 여전히 사용되지 않습니다
- 논문에서 “groups"는 “tiers"라고 불립니다
- “Failing” tier는 더 이상 사용되지 않습니다
- “Not Failing” tier는 이제 “Standard"라고 명명됩니다