[IPFS] About IPFS

seohyun Kang·2022년 7월 9일
2

IPFS

목록 보기
1/1

IPFS란?

IPFS는 Distributed File System을 통해 데이터를 저장하고 공유하는 프로토콜(Protocol)과 P2P 네트워크입니다. IPFS는 Global-namespace에 연결중인 모든 컴퓨팅 장비에서 Content-addressing을 사용하여 각 파일을 고유하게 확인합니다.

*NFT 안에 이미지 정보를 기록하는 것이 현실적으로 불가능하다보니 이미지와 같은 컨텐츠 정보를 저장하기 위해 IPFS의 사용이 적극적으로 활용되고 있습니다.

NFT란? Non-Fungible Token의 약자로 대체 불가능한 토큰을 지칭합니다. ERC-721, 1155 등 기존 Token과 다르게 Unique한 Token입니다.


Overview

1. CID

IPFS의 가장 큰 특징은 CID라는 Content-ID를 사용해 정보를 조회하며 위치를 가르키는 IP Address가 아니라 컨텐츠 자체를 지칭하는 Content-Address를 사용한다는 점이다.

CID는 Hash값으로 되어 있으며 컨텐츠가 동일하면 같은 Hash값을 생성한다.

CID는 컨텐츠를 암호호한 Hash값과 이를 해석하기 위한 정보를 포함한다.

2. Merkle DAG (Directed Acyclic Graph)

Merkle DAG은 개별 노드마다 고유한 CID가 있으며 상위 노드가 하위 노드를 포함한 데이터를 표현한다.

Merkle DAG 데이터 구조를 표현하기 위해 IPFS는 컨텐츠를 chunk라는 단위의 블록으로 분할하고 컨텐츠의 분할된 조각들은 각각 다른 Peer로 부터 취할 수 있고, 빠르게 검증 할 수 있게 한다.

두 개의 유사한 컨텐츠가 있는 경우, Merkle DAG의 일부를 공유 할 수 있다.

Merkle DAG의 검증 가능성

  • 영속성
    • 컨텐츠 주소에 해당하는 데이터는 절대 바뀔 수 없다.
  • 악의적인 조작으로부터의 보호
    • 요청한 파일과 다른 조작된 파일을 전달 할 수 없다.
  • 모든 노드가 root 노드가 될 수 있다.
    • 모든 노드는 하위 노드를 제외한 다른 노드의 영향을 받지 않기 때문에
      각 노드들은 독립적으로 의미 있는 조각이 될 수 있다.

3. DHT (Distributed Hash Table)

DHT는 해시값을 Key로 가지는 Key-Value 기반의 분산 DB의 한 종류다. 네트워크 전체를 중앙에서 관리하는 조직이 없고, 각 노드들이 데이터를 분산해서 저장한다.

키 공간 분할(Keyspace partitioning)

분산된 서버에 키를 어떻게 배치시킬 것인가를 결정하는 것으로
데이터의 해시값을 이용해 키 영역을 파티셔닝한다.

오버레이 네트워크(Overlay network)

물리적인 서버의 연결과 상관없이 논리적인 서버 간의 연결 관리와 키를 담당하는 노드를 찾아가는 메커니즘을 제공하며 특정 키를 서비스하는 노드를 찾아가는 라우팅 알고리즘을 제공한다.

4. Publishing

CID가 생성되면 Lacal DHT에 CID정보와 Peer목록이 업데이트 된다.

새로운 컨텐츠를 추가한 Peer와 연결된 모든 Peer의 DHT에 새로운 CID정보가 업데이트 된다. CID와 Peer정보만 업데이트 될 뿐, 이 때 컨텐츠가 전파되지는 않는다.

누군가 CID를 통해 컨텐츠를 요청하면, DHT를 검색해서 해당 컨텐츠를 호스팅 중인 Peer로 연결한다.

5. Consuming

  1. A User의 IPFS Network 합류
  2. 인접한 Node를 통해 Storage(DHT) 초기화
  3. CID 1 요청
  4. Local DHT를 검색해서 CID에 매핑된 Peer목록을 확인
    (만약 Local DHT에서 해당 컨텐츠를 호스팅 중인 Peer정보를 찾지 못하면, 연결된 다른 Peer들에 요청)
  5. Peer목록 중 일부 또는 전체에 컨텐츠 조각들을 요청
  6. 새로운 컨텐츠를 다운로드하면 Local DHT에 CID가 업데이트
  7. 업데이트 된 DHT는 자신과 연결된 Peer들에 새로운 정보를 전파

Tutorials

1. Pinning

2. Add

3. Get

4. Peering


References :
Blog IPFS
Documentation IPFS

0개의 댓글