Nói một cách đơn giản, làm thế nào để một khách hàng BitTorrent ban đầu phát hiện ra các đồng nghiệp sử dụng DHT?


45

Tôi đã đọc câu trả lời SuperUser nàybài viết Wikipedia này nhưng cả hai đều quá kỹ thuật để tôi thực sự quấn đầu.

Tôi hiểu ý tưởng của một trình theo dõi: khách hàng kết nối với một máy chủ trung tâm duy trì một danh sách các đồng nghiệp trong một bầy.

Tôi cũng hiểu ý tưởng trao đổi ngang hàng: các khách hàng đã sẵn sàng gửi danh sách đầy đủ các đồng nghiệp của họ cho nhau. Nếu các đồng nghiệp mới được phát hiện, họ sẽ được thêm vào danh sách.

Câu hỏi của tôi là, DHT hoạt động như thế nào? Đó là, làm thế nào một khách hàng mới có thể tham gia một bầy mà không có người theo dõi hoặc kiến ​​thức của ít nhất một thành viên của bầy để trao đổi với bạn bè?

(Lưu ý: giải thích đơn giản là tốt nhất.)

Câu trả lời:


48

Tóm lược

Làm thế nào một khách hàng mới có thể tham gia một bầy mà không có người theo dõi hoặc kiến ​​thức của ít nhất một thành viên của bầy để trao đổi với các đồng nghiệp?

Bạn không thể. Nó là không thể.*

* (Trừ khi một nút trên mạng cục bộ của bạn tình cờ đã là một nút trong DHT. Trong trường hợp này, bạn có thể sử dụng cơ chế phát sóng, chẳng hạn như Avahi, để "khám phá" ngang hàng này và bootstrap từ chúng. Nhưng làm thế nào họ bootstrap mình? Cuối cùng, bạn sẽ đạt một tình huống mà bạn cần phải kết nối với mạng Internet công cộng. Và Internet công cộng là unicast-chỉ, không multicast, vì vậy bạn đang mắc kẹt với việc sử dụng danh sách được xác định trước của các đồng nghiệp.)


Người giới thiệu

Bittorrent DHT được triển khai thông qua một giao thức được gọi là Kademlia , đây là trường hợp đặc biệt về khái niệm lý thuyết của bảng băm phân tán .


Triển lãm

Với giao thức Kademlia, khi bạn tham gia mạng, bạn sẽ thực hiện thủ tục bootstrapping , điều này hoàn toàn đòi hỏi bạn phải biết trước , địa chỉ IP và cổng của ít nhất một nút đã tham gia vào mạng DHT. Ví dụ, trình theo dõi mà bạn kết nối có thể là nút DHT. Khi bạn được kết nối với một nút DHT, sau đó bạn tiến hành tải xuống thông tin từ DHT, cung cấp cho bạn thông tin kết nối cho nhiều nút hơn và sau đó bạn điều hướng cấu trúc "biểu đồ" đó để có được kết nối đến nhiều nút hơn, người có thể cung cấp cả hai nút kết nối với các nút khác và dữ liệu tải trọng (khối tải xuống).

Tôi nghĩ rằng câu hỏi thực tế của bạn được in đậm - đó là làm thế nào để tham gia mạng lưới DHT của Kademlia mà không biết bất kỳ thành viên nào khác - dựa trên giả định sai.

Câu trả lời đơn giản cho câu hỏi của bạn in đậm là, bạn không . Nếu bạn hoàn toàn không biết BẤT K information thông tin nào về một máy chủ có thể chứa siêu dữ liệu DHT, bạn sẽ bị kẹt - thậm chí bạn không thể bắt đầu. Ý tôi là, chắc chắn, bạn có thể vũ phu cố gắng khám phá một IP trên internet công cộng với một cổng mở xảy ra để phát thông tin DHT. Nhưng nhiều khả năng, máy khách BT của bạn được mã hóa cứng cho một số IP hoặc DNS tĩnh cụ thể phân giải thành nút DHT ổn định, chỉ cung cấp siêu dữ liệu DHT.

Về cơ bản, DHT chỉ theo phân cấp như cơ chế tham gia, và vì cơ chế tham gia khá giòn (không có cách nào để "phát sóng" trên toàn bộ Internet! Vì vậy bạn phải unicast đến trước giao máy chủ cá nhân để có được DHT dữ liệu), Kademlia DHT không thực sự phi tập trung. Không theo nghĩa chặt chẽ nhất của từ này.

Hãy tưởng tượng kịch bản này: Một người nào đó muốn P2P ngừng hoạt động và chuẩn bị một cuộc tấn công vào tất cả các nút DHT ổn định thường được sử dụng để khởi động. Khi họ đã tổ chức cuộc tấn công của mình, họ sẽ thực hiện nó trên tất cả các nút cùng một lúc. Wham ; mỗi nút DHT bootstrapping duy nhất đều giảm trong một cú trượt. Giờ thì sao? Bạn bị mắc kẹt với việc kết nối với các trình theo dõi tập trung để tải xuống danh sách các đồng nghiệp truyền thống từ những người đó. Chà, nếu họ cũng tấn công các trình theo dõi, thì bạn thực sự, thực sựlên một con lạch. Nói cách khác, Kademlia và toàn bộ mạng BT bị hạn chế bởi những hạn chế của Internet, trong đó, có một số lượng máy tính hữu hạn (và tương đối nhỏ) mà bạn sẽ phải tấn công thành công hoặc ngoại tuyến để ngăn chặn> 90% của người dùng từ kết nối với mạng.

Khi tất cả các nút bootstrapping "tập trung giả" đều biến mất, các nút bên trong của DHT, không phải bootstrapping vì không ai ở bên ngoài DHT biết về các nút bên trong , là vô ích; họ không thể mang các nút mới vào DHT. Vì vậy, khi mỗi nút bên trong ngắt kết nối với DHT theo thời gian, do mọi người tắt máy tính, khởi động lại để cập nhật, v.v., mạng sẽ bị sập.

Tất nhiên, để giải quyết vấn đề này, ai đó có thể triển khai ứng dụng khách BitTorrent đã vá với một danh sách mới các nút hoặc địa chỉ DNS ổn định được xác định trước và quảng cáo rầm rộ cho cộng đồng P2P để sử dụng danh sách mới này. Nhưng điều này sẽ trở thành một tình huống "đánh đòn" trong đó kẻ xâm lược (kẻ ăn nút) sẽ tự mình tải xuống các danh sách này và nhắm mục tiêu vào các nút bootstrapping mới dũng cảm, sau đó cũng đưa chúng ngoại tuyến.


Cách bạn mô tả âm thanh DHT giống như trao đổi ngang hàng.
Celeritas

Điều được phân phối về DHT là tải trọng dữ liệu thực tế - nghĩa là danh sách các IP và cổng nơi các tệp có thể được tải xuống - được phân phối. Trong một trao đổi ngang hàng, toàn bộ danh sách được lưu trữ trên một máy tính, thường là trình theo dõi và được tải xuống không giống với tải xuống tệp. Tôi có thể đề cập rằng trong câu trả lời của mình, nhưng toàn bộ câu hỏi này (và câu trả lời) chỉ là về khám phá ban đầu hoặc tham gia mạng lưới DHT, chứ không phải về những gì xảy ra sau khi bạn tham gia.
allquixotic

1
Đánh vào tất cả các nút bootstrap sẽ ngăn người dùng mới khởi động, nhưng không nhất thiết người dùng hiện tại sẽ ngoại tuyến và sau đó quay lại. Tôi có cảm tưởng rằng một số khách hàng nhớ bộ nút hoạt động của họ và sử dụng chúng để kết nối lại, thay vì bootstrapping mỗi lần.
clacke

Với các dự án như masscan ( github.com/robertdavidgraham/masscan ) khám phá các nút DHT mà không có thư mục tập trung nên khả thi
newlog

19

Câu trả lời ngắn: Nó lấy nó từ tệp .torrent.

Khi ứng dụng khách BitTorrent tạo tệp .torrent không theo dõi (nghĩa là khi ai đó sẵn sàng chia sẻ thứ gì đó mới thông qua BitTorrent), nó sẽ thêm khóa "nút" (khóa như trong "cặp khóa / giá trị"; như tiêu đề phần, không phải là khóa mật mã) cho tệp .torrent chứa K nút DHT gần nhất được biết với máy khách đó.

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

Một từ điển torrent không theo dõi không có khóa "thông báo". Thay vào đó, một torrent không theo dõi có khóa "nút". Khóa này phải được đặt thành K nút gần nhất trong bảng định tuyến của máy khách tạo torrent. Ngoài ra, khóa có thể được đặt thành một nút tốt đã biết, chẳng hạn như nút được vận hành bởi người tạo torrent. Vui lòng không tự động thêm "router.bittorrent.com" vào tệp torrent hoặc tự động thêm nút này vào bảng định tuyến của máy khách.

Vì vậy, khi bạn cung cấp cho khách hàng BitTorrent của bạn tệp .torrent của một torrent không theo dõi mà bạn muốn tải xuống, nó sử dụng giá trị của khóa "nút" đó từ tệp .torrent để tìm một vài nút DHT đầu tiên.


3
Điều này là tốt, thông tin giải thích. Tôi nghĩ rằng câu trả lời của bạn giải thích những gì khách hàng BitTorrent hiện tại làm để xử lý các hạn chế và vấn đề lý thuyết được xác định trong câu trả lời của tôi. Hy vọng rằng cả hai câu trả lời của chúng tôi đều được nâng cao, vì chúng giải thích các khía cạnh khác nhau của câu trả lời.
allquixotic

3
Có phải đó là lý do tại sao "hợp nhất tệp torrent mới với tải xuống torrent" trong nhiều máy khách làm cho một torrent chết trở nên sống động?
Jesvin Jose

2
@aitchnyu có, nhưng tệp torrent cũng có thể có các trình theo dõi bổ sung / khác nhau.
longneck

2
Dường như không có máy khách BitTorrent nào thực sự bao gồm thông tin các nút. Đã thử nghiệm Truyền, Vuze, Deluge, Mainline và những người khác.
Aeyoun

1

bạn không thể bạn phải biết ít nhất một IP của một trong số đó, đây là điểm yếu của mạng p2p. Bạn có thể phát sóng một cách mù quáng để tìm IP đầu tiên, nhưng trong một mạng lớn, nếu mọi người đang làm điều đó, chúng tôi sẽ gặp vấn đề tắc nghẽn. Bạn có thể sử dụng bộ đệm, nhưng chỉ có thể cho các bầy lớn (bộ đệm địa chỉ ngang hàng lớn hơn). Bạn luôn phải kết nối một trình theo dõi để chỉ yêu cầu IP đầu tiên.

Được phân phối trong DHT có nghĩa là khách hàng không phải giữ tất cả danh sách chứa tổng md5 của tên tệp được chia sẻ, với các đồng nghiệp tương ứng. Danh sách băm là các hình dạng thành các phần bằng nhau và được phân phối với sự dư thừa vượt qua bầy đàn. Nếu một ngắt kết nối ngang hàng, có một nơi khác với cùng một phần của danh sách băm. Các đồng nghiệp chia sẻ cho nhau địa chỉ cho người nắm giữ tốt phần băm.

torrent-freak đã viết một bài về chủ đề này


0

Làm thế nào một khách hàng mới có thể tham gia một bầy mà không có người theo dõi hoặc kiến ​​thức của ít nhất một thành viên của bầy để trao đổi với các đồng nghiệp?

Nó yêu cầu nó.

Các máy khách Bittorrent hỗ trợ DHT chạy hai ứng dụng ngang hàng riêng biệt.

Người đầu tiên thực hiện chia sẻ tệp: Một bầy trong biệt ngữ bittorrent là một nhóm các đồng nghiệp chia sẻ một đối tượng bittorrent (ví dụ: cấu trúc tệp hoặc thư mục). Mỗi đối tượng bittorent có một số siêu dữ liệu được lưu trong tệp .torrent. (Nó bao gồm kích thước đối tượng, tên của thư mục, có thể là thông tin theo dõi hoặc các nút. Ect.) Hàm băm của siêu dữ liệu cần thiết để tải xuống đối tượng bittorrent này được gọi là infohash.

Về cơ bản, DHT là một ứng dụng P2P thứ hai nhằm thay thế các trình theo dõi: Nó lưu trữ các cặp (infohash, swarm) và cập nhật bầy đàn nếu nhận được tin nhắn thông báo. Một khách hàng mới phải có kiến ​​thức về một số "nút" (bittorrent lingo cho một đồng đẳng của DHT) để khởi động lại thông tin của nó về DHT. Ở đây các đối số được đưa ra bởi @allquixotic áp dụng. Vì MDHT hiện bao gồm hơn 7 triệu đồng nghiệp, một cuộc tấn công từ chối dịch vụ được duy trì lâu dài dường như là không thể.

Sau đó, nó có thể truy vấn DHT liên quan đến một infohash và không phải sử dụng trình theo dõi hoặc biết một đồng nghiệp là một phần của bầy đàn trước đó. Nếu một trong những đồng nghiệp của ông chỉ liên lạc hỗ trợ chia sẻ metadata nó chỉ cần infohash thể lấy .torrent file từ bầy đàn.


0

Hầu hết các máy khách mạng p2p đều được bootstraged từ một danh sách các đồng nghiệp hạt giống mà chúng ban đầu kết nối với ... một khi chúng kết nối với một mạng ngang hàng bootstraoped nó sẽ tải phần còn lại theo cách phân tán. Nó kết nối với các đồng nghiệp bootstrap và tải xuống danh sách các đồng nghiệp DHT của nó và sau đó đi đến từng cái đó và thực hiện tương tự, v.v.

Ví dụ:

Dưới đây là danh sách các nút bootstrap:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10

Đây là nơi khách hàng kết nối với họ để hydrat hóa danh sách ngang hàng:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60

Điều này tương tự như cách một trình theo dõi hoạt động, ngoại trừ khá nhiều người có thể là nút bootstrap nên gần như không thể tắt chúng.

Ví lõi Bitcoin hoạt động theo cách tương tự. Nó cho phép bạn thay đổi các đồng nghiệp hạt giống bootstrap nếu vì lý do nào đó những cái mặc định bị tắt.


Các liên kết đã chết
zella
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.