Mô Hình Peer To Peer

  -  

Kiến trúc mạng Peer to Peer là một trong những nền tảng cơ bản trong công nghệ Blockchain. Kiến trúc phi tập trung của các mạng Peer to Peer giúp cho blockchain có thể hoạt động liên tục mà không cần sự kiểm soát trung gian. Bài viết này sẽ trả lời cho các câu hỏi mạng Peer to Peer là gì? Cơ chế hoạt động của nó ra sao, tại sao nó lại được ứng dụng trong công nghệ blockchain ?

Mạng Peer to Peer là gì?

Peer to Peer Network (còn được gọi là mạng ngang hàng, hoặc mạng đồng đẳng), là một kiến trúc ứng dụng phân tán trong đó hoạt động của mạng chủ yếu dựa vào khả năng tính toán và băng thông của các máy tham gia chứ không tập trung vào một số nhỏ các máy chủ trung tâm như các mạng thông thường (kiểu client – server). Trong các mạng Peer to Peer không có khái niệm máy chủ và máy khách, nói cách khác, tất cả các máy tham gia đều bình đẳng và được gọi là peer, đây là một nút mạng vừa đồng thời đóng vai trò là máy khách và vừa đồng thời đóng vai trò là máy chủ đối với các máy khác trong mạng. Trong các mô hình khách – chủ chẳng hạn như hệ thống truyền tệp sử dụng FTP thì các chương trình máy khách và máy chủ là khác nhau: máy khách thực hiện chuyển yêu cầu và máy chủ đáp ứng các yêu cầu này. Trong khi với hệ thống truyền tệp như BitTorrent thì bất cứ máy nào trong mạng cũng có thể gửi cũng như đáp ứng yêu cầu cho các máy khác.

Bạn đang xem: Mô hình peer to peer

*

Các nút trong mạng ngang hàng đóng góp một phần tài nguyên cho hoạt động của mạng, chẳng hạn như sức mạnh xử lý, dung lượng lưu trữ trên ổ đĩa hoặc băng thông cho mạng. Các nút vừa là người cung cấp vừa là người sử dụng tài nguyên, trái ngược với mô hình máy khách-máy chủ truyền thống trong đó việc tiêu thụ và cung cấp tài nguyên được phân chia riêng biệt giữa hai phía. Điều này giúp mang lại lợi ích cho toàn bộ các thành viên tham gia.

Các mạng Peer to Peer thực chất là một công nghệ không mới. Phiên bản ứng dụng phổ biến đầu tiên của nó là mạng lưới chia sẻ nhạc Napster với thời kỳ đỉnh cao có đến hơn 80 triệu người dùng, nhưng sau đó đã bị đóng cửa vì lí do pháp lí vào năm 2001. Các hệ thống Peer to Peer vẫn rất phổ biến hiện nay với hệ thống chia sẻ file ngang hàng BitTorrent. Mạng ngang hàng có nhiều ứng dụng. Ứng dụng thường xuyên gặp nhất là chia sẻ tệp tin như âm thanh, hình ảnh, dữ liệu,… hoặc để truyền dữ liệu thời gian thực như điện thoại VoIP. Tuy nhiên, không dừng lại ở đó, khái niệm này đã truyền cảm hứng cho các cấu trúc và triết lý mới trong nhiều lĩnh vực tương tác của con người. Nó tạo ra một hệ thống mạng xã hội bình đẳng, được kích hoạt bởi các công nghệ Internet. Và hiện nay điều đó đang được hiện thực hoá trong các mạng lưới blockchain.

Kiến trúc mạng ngang hàng

Các mạng ngang hàng thường triển khai một số dạng mạng lớp phủ ảo trên cấu trúc mạng vật lý, trong đó các nút trong lớp phủ tạo thành một tập hợp con của các nút trong mạng vật lý. Dữ liệu vẫn được trao đổi trực tiếp qua mạng TCP/IP bên dưới, nhưng ở các lớp ứng dụng, các nút có thể giao tiếp trực tiếp với nhau, thông qua các liên kết lớp phủ logic (mỗi liên kết tương ứng với một đường dẫn qua mạng vật lý bên dưới). Lớp phủ được sử dụng để lập chỉ mục và khám phá các nút ngang hàng, và làm cho hệ thống P2P độc lập với cấu trúc liên kết mạng vật lý. Dựa trên cách các nút được liên kết với nhau trong mạng lớp phủ và cách các tài nguyên được lập chỉ mục và định vị, chúng ta có thể phân loại các mạng là không có cấu trúc, có cấu trúc, hoặc hỗn hợp.

Mạng peer to peer không có cấu trúc

Các mạng ngang hàng không có cấu trúc không sử dụng một cấu trúc cụ thể nào trên mạng lớp phủ theo thiết kế, mà các liên kết trên mạng được tạo ngẫu nhiên, các nút tham gia giao tiếp ngẫu nhiên với nhau.


*

Do không có cấu trúc cố định, nên các mạng không có cấu trúc rất dễ xây dựng và cho phép tối ưu hóa cục bộ đến các khu vực khác nhau của lớp phủ. Ngoài ra, do vai trò của tất cả các nút trong mạng là như nhau, nên các mạng không có cấu trúc rất mạnh mẽ và mềm dẻo. Nó có thể dễ dàng xử lý các vấn đề về tính không ổn định của mạng khi các nút thường xuyên tham gia và rời khỏi mạng với tần suất cao.

Tuy nhiên, những hạn chế chính của mạng không có cấu trúc cũng phát sinh từ sự thiếu cấu trúc này. Cụ thể, do các nút không cố định vì vậy, khi một nút tham gia muốn tìm một phần dữ liệu mong muốn nào đó trong mạng, nó sẽ phải thực hiện các truy vấn tìm kiếm tràn qua toàn mạng để tìm ra càng nhiều nút để chia sẻ dữ liệu càng tốt. Điều này có thể dẫn đến vấn đề ngập lụt lưu lượng băng thông trên mạng, cũng như sử dụng hao tổn nhiều tài nguyên CPU hoặc bộ nhớ hơn. Sỡ dĩ như vậy bởi nó yêu cầu mọi nút ngang hàng phải xử lý tất cả các truy vấn. Hơn nữa, vì không có mối tương quan giữa một nút và nội dung được quản lý bởi nó, do đó, không có gì đảm bảo rằng việc truy vấn toàn mạng sẽ tìm thấy được một nút có dữ liệu mong muốn. Điềy này không phải vấn đề quá lớn với các nội dung phổ biến, bởi nó sẽ thường có sẵn ở một số nút và do đó có thể dễ dàng được tìm thấy. Điều này thực ra không phải là vấn đề lớn trên các mạng lưới blockchain ngang hàng, bởi toàn bộ các nút thường duy trì một phiên bản cơ sở dữ liệu thống nhất duy nhất để xác thực vì vậy dữ liệu có thể được dễ dàng tìm thấy với tốc độ tương đối cao. Tuy nhiên, với các dữ liệu hiếm được chia sẻ trong các dịch vụ chia sẽ file ngang hàng, thì việc tìm kiếm sẽ rất phức tạp và có khả năng không thành công rất cao.

Mạng peer to peer có cấu trúc

Trong các mạng ngang hàng có cấu trúc, lớp phủ được tổ chức thành một cấu trúc liên kết cụ thể và các giao thức được thiết kế để đảm bảo rằng bất kỳ nút nào cũng có thể truy vấn và tìm kiếm mạng cũng như các tệp tài nguyên trên mạng một cách hiệu quả, ngay cả khi tài nguyên đó cực kỳ hiếm.


*

Loại mạng P2P có cấu trúc phổ biến nhất thực hiện bảng băm phân tán (DHT), trong đó mỗi nút duy trì một bảng băm lưu trữ các giá trị được sử dụng để định danh và gán quyền sở hữu của dữ liệu cho một nút cụ thể chứa nó. Điều này cho phép các nút tìm kiếm tài nguyên trên mạng rất nhanh chóng bằng cách sử dụng bảng băm: nghĩa là, các cặp (khóa, giá trị) được lưu trữ trong DHT và bất kỳ nút tham gia nào cũng có thể truy xuất giá trị được liên kết với một khóa đã cho một cách hiệu quả.

Tuy nhiên, để định tuyến lưu lượng truy cập hiệu quả trong mạng, các nút trong mạng sẽ phải lưu trữ và duy trì danh sách các hàng xóm thỏa mãn các tiêu chí cụ thể. Điều này làm cho chúng kém hiệu quả trong các mô hình mạng thiếu ổn định với số lượng rút tham gia và rời khỏi thường xuyên.

Mạng peer to peer lai

Các mô hình mạng peer to peer lai là sự kết hợp giữa các mô hình ngang hàng và mô hình có máy chủ trung tâm truyền thống. Trong mô hình này, có một máy chủ trung tâm đóng vai trò duy trì các cơ sở dữ liệu liên kết và do đó giúp các nút tìm thấy nhau dễ dàng hơn. Một ví dụ về mô hình lai có thể kể đến dịch vụ Spotify trước đây. Các mạng lai đánh đổi cấu trúc phi tập trung, bình đẳng của các nút được cung cấp trong mạng ngang hàng thuần túy với tính hiệu quả và tốc độ của nó. Sự phân cấp giúp các truy vấn và quá trình tìm kiếm dữ liệu được diễn ra hiệu quả hơn.

Trong các mạng P2P tập trung, tồn tại một chỉ mục trung tâm được duy trì ở một vị trí duy nhất cố định chứa các thông tin về vị trí của các đối tượng, và địa chỉ của các nút trong mạng… Các thành viên tham gia tìm vị trí của các tài nguyên mong muốn trong mạng bằng cách truy vấn đến máy chủ chỉ mục trung tâm. Cấu trúc Peer to Peer này không đáp ứng được quy mô mở rộng và máy chủ chỉ mục trung tâm có thể bị tấn công hoặc hỏng hóc, gián đoạn, gây ra gián đoạn hoạt động của toàn mạng.

*

Ngược lại với kiến trúc tập trung, các P2P có thể sử dụng cấu trúc thư mục phân tán. Trong đó tồn tại nhiều hơn một trung tâm chỉ mục tập trung. Các hệ thống này có thể phi tập trung hoàn toàn như Gnutella trong đó các nút hoạt động hoàn toàn bình đẳng, tức là đều chứa tài nguyên và cấu trúc để truy vấn trên mạng. Hoặc các hệ thống cũng có thể có kiến trúc kết hợp, trong đó một số nút trong mạng đóng vai trò duy trì các cơ sở dữ liệu chỉ mục được gọi là các nút thông báo hay các “siêu nút” nhằm phục vụ các yêu cầu tìm kiếm và truy vấn tài nguyên của các nút thông thường khác.

Các kiến trúc mạng này đều được sử dụng trong blockchain, tuỳ theo từng thiết kế về chức năng của blockchain đó. Chẳng hạn các public blockchain đa phần đều có tính chất phi tập trung và không có nút thông báo. Tuy nhiên, một số hệ thống blockchain vẫn có những nút tập trung để điều tiết dữ liệu chẳng hạn như IoTA,…

Dựa trên các cấu trúc mạng này và sự phân quyền trong blockchain, chúng ta có thể chia blockchain thành 3 loại: Blockchain công khai (Public blockchain), Blockchain riêng tư (Private blockchain) và Blockchain hợp tác (Consortium blockchain), trong đó:

Public blockchain: là loại Blockchain mà bất kỳ ai cũng có thể tham gia và có quyền đọc và ghi dữ liệu. Điển hình cho loại Blockchain này là các đồng tiền điện tử như Bitcoin, Ethereum… Các nút có thể tham gia hoặc rời bỏ mạng và mọi nút trên mạng là độc lập hoàn toàn, không hề có nút trung tâm kiểm soát hoặc chứa các bảng định tuyến địa chỉ (ngoài các seed node sẽ tìm hiểu ở phần tiếp theo). Việc xác thực giao dịch trên public blockchain diễn ra theo các cơ chế đồng thuận dựa trên chứng minh (chẳng hạn như Proof of Work hay Proof of Stake) và đòi hỏi sự tham gia của nhiều nút trên mạng. Hệ thống Blockchain này được đánh giá khá an toàn do chi phí cần thiết để thực hiện một vụ tấn công vào hệ thống là khá cao và cao hơn rất nhiều so với lợi ích thu được khi tấn công thành công.

Private blockchain: Đây là các mạng lưới blockchain mà trạng thái của nó được quyết định bởi một hoặc một số hữu hạn các thành viên tham gia. Các thành viên này được xác thực danh tính và thường biết và tin cậy lẫn nhau tuyệt đối. Các thành viên này có khả năng ghi dữ liệu và quyết định trạng thái hoạt động của blockchain. Ngoài ra, những người dùng khác chỉ được quyền đọc dữ liệu, không có quyền ghi. Private blockchain được xây dựng từ các nhóm thành viên tin cậy lẫn nhau do đó, nó thường sử dụng các cơ chế đồng thuận dựa trên kháng lỗi Byzantine với thời gian xác thực giao dịch khá nhanh (vì chỉ cần một lượng nhỏ thiết bị tham gia vào việc xác thực). Ripple là một dạng Private Blockchain, hệ thống này chỉ cần 80% các nút hoạt động ổn định là có thể tiến hành giao dịch.

Xem thêm: Hack Wifi Dễ Dàng Bằng Cách Tấn Công Mạng Wifi Của Bạn Và Cách Phòng Tránh

Permissioned: Hay còn gọi là Consortium, một dạng của Private blockchain nhưng bổ sung thêm một số tính năng nhất định, kết hợp giữa “niềm tin” khi tham gia vào Public blockchain và “niềm tin tuyệt đối” khi tham gia vào Private blockchain. Khi đó các thành viên tham gia sẽ được một nhóm các thành viên khác xác minh và cấp quyền gia nhập mạng lưới. Ví dụ: Các ngân hàng hay tổ chức tài chính liên doanh sẽ sử dụng Blockchain cho riêng mình.

Định tuyến trong mạng Peer to Peer

Kiến trúc mạng peer to peer được thiết kế dựa trên các nút ngang hàng. Các nút này có khả năng đồng thời hoạt động như cả “máy khách” và “máy chủ”. Điều này tạo ra khó khăn hơn trong các mô hình truyền thống. Với các mô hình truyền thống, máy chủ thường có địa chỉ cố định do đó, một máy khách bất kỳ có thể dễ dàng truy vấn đến máy chủ thông qua địa chỉ IP của nó hoặc thông qua một máy chủ DNS định danh trung gian. Nhưng điều này không tồn tại trong kiến trúc mạng ngang hàng. Các nút tham gia mạng P2P này có thể tham gia hoặc rời khỏi hệ thống bất cứ lúc nào, do đó, các mạng P2P tính chất động và không ổn định cao.Trong mạng Peer to Peer có 2 vấn đề quan trọng cốt lõi đó là: làm thế nào để các nút có thể tìm thấy được nhau và làm thế nào có thể phát tán và đồng bộ hoá dữ liệu ra toàn mạng.

*

Chắc hẳn một trong những thắc mắc đầu tiên của chúng ta khi tìm hiểu về mạng Peer to Peer như BitTorrent hay Blockchain đó là làm thế nào để các nút trong mạng có thể tìm thấy được các nút khác và thậm chí rộng hơn là các tài nguyên được chia sẻ khác ở trên mạng.

Để làm được điều này, các mạng peer to peer sử dụng hai cơ chế: tìm kiếm và đánh địa chỉ. Các nút và các tài nguyên trong mạng được đánh dấu bằng các địa chỉ cụ thể và thông tin về địa chỉ đó được lưu trữ tại các nút khác nhau trong mạng. Khi các nút muốn liên lạc và giao tiếp qua mạng, chúng sẽ tìm kiếm dữ liệu về các địa chỉ này và tiến hành gửi nhận thông tin với nhau. Các cơ chế đánh địa chỉ và tìm kiếm xác định cấu trúc hoạt động của mạng, cũng như tính hiệu quả của việc sử dụng các tài nguyên trong mạng.

Hầu hết các kỹ thuật tìm kiếm là dựa trên việc chuyển tiếp gói tin. Các nút khi có nhu cầu giao tiếp sẽ tạo ra các gói tin để truy vấn đến các nút khác, truy vấn này sẽ được chuyển tiếp (hoặc định tuyến) cho đến khi nó đến được nút có dữ liệu mong muốn (hoặc con trỏ tới dữ liệu mong muốn). Để chuyển tiếp được các thông điệp, mỗi nút phải giữ thông tin về một số nút “hàng xóm” khác. Thông tin của các hàng xóm này tạo thành bảng định tuyến của một nút.

Khi một nút mới khởi động, nó phải tìm kiếm các nút khác trên mạng để kết nối. Để bắt đầu quá trình này, một nút mới phải khám phá ít nhất một nút hiện có trên mạng và kết nối với nó.

Đến đây, bạn sẽ có thể có một thắc mắc là: rõ ràng trong mạng P2P chúng ta sẽ không có cấu trúc mạng, và mỗi máy tính trên mạng đều có một địa chỉ riêng, do đó chúng ta sẽ rất khó khăn để quét qua toàn bộ mạng nhằm tìm ra được các nút hàng xóm được và do đó cũng rất khó để tìm ra được các nút khác trên mạng. Vậy thực sự trong mạng peer to peer chúng ta sẽ giải quyết vấn đề này như thế nào?

Có rất nhiều cách khác nhau để các nút có thể liên kết với mạng lưới, điều này phụ thuộc vào từng giao thức khác nhau. Nhưng về cơ bản chúng ta có thể kể đến các phương pháp như sau:

Sử dụng một địa chỉ bên ngoài đã biết

Các nút tham gia vào mạng có thể vào các diễn đàn, các dịch vụ web công cộng để lấy thông tin về một số địa chỉ IP của mạng lưới bên ngoài. Địa chỉ này có thể được sử dụng để thêm vào bảng định tuyến một cách thủ công.

Đối với mỗi địa chỉ này, máy khách sẽ cố gắng kết nối, gửi các yêu cầu HTTP, đọc dòng phản hồi thích hợp và phân tích địa chỉ IP từ địa chỉ đó. Nếu quá trình này thành công, địa chỉ IP được trả về, nó sẽ được quảng bá đến các nút khác mà nó được kết nối đến.

Kết nối đến địa chỉ truy vấn đến nó (Callback Address)

Khi một nút nhận được một kết nối đến nó từ một nút nào đó trong mạng lưới. Hai nút sẽ khởi tạo kết nối, và nút nhận được kết nối này sẽ quảng bá địa chỉ của nó đến nút yêu cầu để tạo kết nối cục bộ nếu muốn.

Sau khi gửi lại địa chỉ của mình, nút này sẽ gửi các yêu cầu đến nút Callback Address để lấy thêm danh sách các địa chỉ khác trong mạng lưới mà nút kia đang có nhằm bổ sung thêm cho bảng định tuyến của mình.

Địa chỉ IRC

Ngoài việc học và chia sẻ địa chỉ của chính nó, các nút còn tìm kiếm địa chỉ của các nút khác thông qua kênh IRC. Đây là một trong những cách được sử dụng trong các phiên bản Bitcoin cũ.

Sau khi một nút mã hóa địa chỉ của chính nó thành một chuỗi được sử dụng làm biệt hiệu. Nó sẽ tham gia ngẫu nhiên một kênh IRC (trong Bitcoin thì kênh này có tên giữa # bitcoin00 và # bitcoin99). Sau đó, nó sẽ ban hành một lệnh WHO, đọc các dòng khi chúng xuất hiện và giải mã địa chỉ IP của các nút khác trong kênh. Điều này được lặp đi lặp lại mãi mãi cho đến khi nút được tắt.

Địa chỉ các nút mặc định

Khi một nút mới tham gia vào mạng lưới, nó chưa hề biết bất cứ thông tin gì về các thành viên khác. Vậy trong trường hợp này, làm thế nào để nó có thể tìm thấy và kết nối đến các nút khác?

Về nguyên tắc, trên các mạng lưới blockchain sẽ không có các nút đặc biệt, vai trò của các nút là ngang hàng với nhau. Tuy nhiên, trên thực tế vẫn tồn tại một số nút ổn định đã hoạt động trong một thời gian dài, hoặc các nút được duy trì với một số mục đích nhất định theo thiết kế. Các nút này được gọi là các nút mầm (seed node). Các seed node được duy trì và liệt kê trong một danh sách nằm trong chính phần mềm ứng dụng blockchain hoặc trên một số cơ sở dữ liệu cố định được cung cấp. Và các nút khác khi mới tham gia vào mạng lưới có thể truy vấn và lấy danh sách địa chỉ sử dụng cho việc định tuyến của mình trong các seed node này. Mặc dù, việc kết nối này là không bắt buộc, các nút hoàn thành có thể tự chỉ định địa chỉ kết nối của các nút hàng xóm của mình như ở trên, tuy nhiến việc kết nối đến các seed node có thể giúp đơn giản hóa quá trình khởi tạo kết nối và bảng định tuyến trên các nút và giúp các nút trong mạng có thể tìm kiếm lẫn nhau một cách nhanh chóng.

Ngoài ra có những seed node được duy trì trên một số máy chủ DNS trên mạng. Để kết nối đến các seed node này và tìm kiếm các máy khác trên mạng, máy khách sẽ đưa ra các truy vấn DNS đến một danh sách các tên máy chủ dịch vụ DNS được chọn. Chẳng hạn với Bitcoin, danh sách các địa chỉ này hiện nay bao gồm:

seed.bitcoin.sipa.bednsseed.bluematt.mednsseed.bitcoin.dashjr.orgseed.bitcoinstats.comseed.bitcoin.jonasschnelli.chseed.btc.petertodd.org

Các phản hồi DNS có thể chứa nhiều địa chỉ IP được yêu cầu. Và các địa chỉ này có thể được thêm vào trong danh sách định tuyến của nút.

Xem thêm: Copy Trade Là Gì ? Các Bước Để Copy Trade Thành Công Copy Trade Là Gì

Sau khi đã tìm ra các nút liên kết, máy khách sẽ tiến hành kết nối với nó thông qua việc thiết lập các kết nối TCP. Khi thiết lập kết nối, các nút sẽ bắt đầu khởi động một giao thức bắt tay trực tiếp bằng cách truyền nhận các thông điệp để thiết lập kết nối và tìm kiếm các thông tin cần thiết. Trong Bitcoin cổng mặc định được sử dụng là 8333 hoặc một số cổng thay thế khác.

Khi một hoặc nhiều kết nối được thiết lập, nút mới sẽ gửi một thông điệp chứa địa chỉ IP của chính nó tới các nút hàng xóm. Những nút hàng xóm này sẽ lần lượt chuyển tiếp thông điệp đó tới các nút hàng xóm khác của họ. Điều này giúp cho địa chỉ của nút mới được thiết lập được quảng bá trên toàn mạng và được kết nối tốt hơn. Ngoài ra, các nút mới được kết nối có thể gửi yêu cầu truy vấn thêm địa chỉ cho các nút hàng xóm, và yêu cầu các nút này trả về một danh sách địa chỉ IP của các nút khác trên mạng. Bằng cách này, một nút có thể tìm thấy các nút khác để kết nối và quảng bá sự tồn tại của nó trên mạng để các nút khác có thể tìm thấy nó. Điều này có thể mô tả như hình dưới đây: