P2P 네트워크 연결
비트코인 노드들이 서로 데이터를 주고받기 위해서는 노드들간의 P2P 네트워크 형성이 필요합니다. 이를 위해서 각 노드들은 각자 몇 개의 노드와의 연결을 형성해야 합니다.
만약 새로운 노드가 네트워크에 참여하려면 어떻게 해야할까요? 지금부터는 이 부분에 대해 알아보겠습니다.
노드 탐색
비트코인 네트워크에 연결하기 위한 가장 첫 단계는 연결 가능한 노드를 찾는 일입니다. 비트코인 커뮤니티가 제공하는 dns를 이용하면 비트코인 노드의 아이피 주소를 쉽게 얻을 수 있습니다. 해당 주소는 다음과 같습니다.
seed.bitcoin.sipa.be.
일반적인 윈도우 환경에서는 dns를 조회할 수 있는 dig명령어가 없기 때문에 아래 사이트를 이용하면 됩니다. 아래 사이트에 위 주소를 입력하면 다음과 같은 결과를 얻을 수 있습니다.
seed.bitcoin.sipa.be. 3600 IN A 201.221.234.200
seed.bitcoin.sipa.be. 3600 IN A 86.99.43.249
seed.bitcoin.sipa.be. 3600 IN A 79.77.182.180
seed.bitcoin.sipa.be. 3600 IN A 46.146.248.89
seed.bitcoin.sipa.be. 3600 IN A 99.240.71.212
seed.bitcoin.sipa.be. 3600 IN A 104.165.54.92
seed.bitcoin.sipa.be. 3600 IN A 95.167.180.230
seed.bitcoin.sipa.be. 3600 IN A 99.29.225.23
seed.bitcoin.sipa.be. 3600 IN A 13.245.30.239
seed.bitcoin.sipa.be. 3600 IN A 3.34.240.93
seed.bitcoin.sipa.be. 3600 IN A 176.9.32.126
seed.bitcoin.sipa.be. 3600 IN A 34.80.137.236
seed.bitcoin.sipa.be. 3600 IN A 128.199.144.10
seed.bitcoin.sipa.be. 3600 IN A 71.184.224.62
seed.bitcoin.sipa.be. 3600 IN A 157.245.64.189
seed.bitcoin.sipa.be. 3600 IN A 3.219.41.205
seed.bitcoin.sipa.be. 3600 IN A 85.236.190.252
seed.bitcoin.sipa.be. 3600 IN A 45.76.69.19
seed.bitcoin.sipa.be. 3600 IN A 135.181.56.49
seed.bitcoin.sipa.be. 3600 IN A 51.75.145.71
seed.bitcoin.sipa.be. 3600 IN A 206.189.63.80
seed.bitcoin.sipa.be. 3600 IN A 54.76.242.3
seed.bitcoin.sipa.be. 3600 IN A 213.250.21.112
seed.bitcoin.sipa.be. 3600 IN A 158.140.141.69
seed.bitcoin.sipa.be. 3600 IN A 54.176.141.169
가장 오른쪽에 위치한 아이피 주소가 비트코인 노드의 아이피 주소입니다. 여기에서 무작위로 노드를 선택하여 연결을 시도합니다.
노드 연결
노드 연결을 위해서는 노드의 아이피 주소로 연결 요청을 전송해야 합니다. 이때 전송하는 메시지를 버전 메시지라고 합니다. 버전 메시지에는 연결을 요청하는 노드의 버전 정보와 아이피 등을 담고 있습니다. 해당 메시지를 받은 노드는 메시지를 정상적으로 받았다는 의미에서 요청한 노드에게 verack 메시지를 보냅니다. verack은 version acknowledge의 약자입니다.
이 과정을 마치면 새로운 노드는 다른 노드와 연결되고, 다른 노드에게 추가적인 메시지를 보낼 수 있게 됩니다. 참고로 이 과정 전체를 핸드 셰이크(Handshake)라고도 부릅니다.
지금까지 비트코인 노드가 다른 노드와 연결하는 방법에 대해 알아봤습니다. 이어지는 글에서는 다른 노드에게 여러 요청을 보내는 방법에 대해 알아보겠습니다. 감사합니다.
이어지는 글들
'비트코인 > 비트코인 구조' 카테고리의 다른 글
[비트코인 구조] 메시지 헤더와 주요 메시지 (0) | 2023.01.06 |
---|---|
[비트코인 구조] 네트워크 요청과 응답 (0) | 2023.01.03 |
[비트코인 구조] 작업증명(Proof-of-Work)과 난이도 (0) | 2022.12.30 |
[비트코인 구조] 블룸 필터(Bloom Filter) (0) | 2022.12.28 |
[비트코인 구조] SPV(Simplified Payment Verification) (0) | 2022.12.22 |