Làm thế nào để liên kết nam châm BitTorrent hoạt động?


157

Lần đầu tiên tôi sử dụng một liên kết nam châm . Tò mò về cách thức hoạt động, tôi đã tra cứu thông số kỹ thuật và không tìm thấy câu trả lời nào. Wiki nói xtcó nghĩa là "chủ đề chính xác" và được theo sau bởi định dạng ( btihtrong trường hợp này) với hàm băm SHA1. Tôi đã thấy Base32 được đề cập, biết rằng nó có 5 bit cho mỗi ký tự và 32 ký tự, tôi thấy nó chứa chính xác 160 bitcoin, chính xác là kích thước của SHA1.

Không có chỗ cho địa chỉ IP hay bất cứ thứ gì, nó chỉ là SHA1. Vậy làm thế nào để khách hàng BitTorrent tìm thấy tệp thực tế? Tôi đã bật URL Snooper để xem nếu nó truy cập một trang (sử dụng TCP) hoặc thực hiện tra cứu hoặc tương tự, nhưng không có gì xảy ra. Tôi không biết làm thế nào khách hàng tìm thấy đồng nghiệp. Cái này hoạt động ra sao?

Ngoài ra, băm của là gì? Đây có phải là một hàm băm của tất cả các tệp băm cùng nhau không? Có lẽ đó là một hàm băm của tệp torrent thực tế cần thiết (tước thông tin nhất định)?


Trong một VM, tôi đã thử một liên kết nam châm với uTorrent (được cài đặt mới) và nó đã tìm được các đồng nghiệp. Trường hợp đầu tiên đã đến từ đâu? Nó là tươi và không có torrent khác.


3
Điều này thậm chí có liên quan đến lập trình?
Krypton

Câu trả lời:


156

Liên kết nam châm BitTorrent xác định một torrent bằng cách sử dụng 1 giá trị băm SHA-1 hoặc cắt ngắn SHA-256 được gọi là "infohash". Đây là cùng một giá trị mà các đồng nghiệp (khách hàng) sử dụng để xác định các torrent khi giao tiếp với các trình theo dõi hoặc các đồng nghiệp khác. Tệp .torrent truyền thống chứa cấu trúc dữ liệu với hai khóa cấp cao nhất : announce, xác định (các) trình theo dõi để sử dụng để tải xuống và infochứa tên tệp và băm cho torrent. "Infohash" là hàm băm của infodữ liệu được mã hóa .

Một số liên kết nam châm bao gồm trình theo dõi hoặc hạt web, nhưng chúng thường không. Khách hàng của bạn có thể không biết gì về torrent ngoại trừ thông tin của nó. Điều đầu tiên nó cần là tìm các đồng nghiệp khác đang tải torrent. Nó thực hiện điều này bằng cách sử dụng một mạng ngang hàng 2 riêng biệt vận hành một "bảng băm phân tán" (DHT). Một DHT là một chỉ mục phân tán lớn, ánh xạ các torrent (được xác định bằng infohash) vào danh sách các đồng nghiệp (được xác định bởi địa chỉ IP và cổng) đang tham gia vào một torrent cho torrent đó (tải lên / tải xuống dữ liệu hoặc siêu dữ liệu).

Lần đầu tiên khách hàng tham gia mạng DHT, nó tạo ra ID 160 bit ngẫu nhiên từ cùng một không gian như infohash. Sau đó, nó khởi động kết nối của nó với mạng DHT bằng cách sử dụng các địa chỉ khách hàng được mã hóa cứng do nhà phát triển ứng dụng khách kiểm soát hoặc các máy khách hỗ trợ DHT trước đây gặp phải trong một torrent. Khi nó muốn tham gia vào một nhóm cho một torrent nhất định, nó sẽ tìm kiếm mạng DHT cho một số khách hàng khác có ID càng gần 3 càng tốt với infohash. Nó thông báo cho những khách hàng này rằng họ muốn tham gia vào bầy đàn và hỏi họ về thông tin kết nối của bất kỳ đồng nghiệp nào mà họ đã biết về những người đang tham gia vào bầy đàn.

Khi các đồng nghiệp đang tải lên / tải xuống một torrent cụ thể, họ cố gắng nói với nhau về tất cả các đồng nghiệp khác mà họ biết rằng họ đang tham gia vào cùng một torrent. Điều này cho phép các đồng nghiệp biết về nhau một cách nhanh chóng mà không phải theo dõi hoặc theo dõi các yêu cầu liên tục. Khi bạn đã biết về một vài đồng nghiệp từ DHT, khách hàng của bạn sẽ có thể hỏi những người đó về thông tin kết nối của nhiều đồng nghiệp hơn trong bầy torrent, cho đến khi bạn có tất cả các đồng nghiệp bạn cần.

Cuối cùng, chúng ta có thể yêu cầu các đồng nghiệp này cho infosiêu dữ liệu của torrent , chứa tên tệp và danh sách băm. Khi chúng tôi đã tải xuống thông tin này và xác minh rằng nó chính xác bằng cách sử dụng đã biết infohash, thực tế chúng tôi ở cùng một vị trí với một khách hàng bắt đầu với một .torrenttệp thông thường và có một danh sách các đồng nghiệp từ trình theo dõi đi kèm.

Việc tải xuống có thể bắt đầu.

1 Infohash thường được mã hóa hex, nhưng một số khách hàng cũ đã sử dụng cơ sở 32 thay thế. v1 ( urn:btih:) sử dụng trực tiếp thông báo SHA-1, trong khi v2 ( urn:bimh:) thêm tiền tố multihash để xác định thuật toán băm và độ dài tiêu hóa.
2 Có hai mạng DHT chính: DHT "đường chính" đơn giản hơn và giao thức phức tạp hơn được Azureus sử dụng.
3 Khoảng cách được đo bằng XOR.

Đọc thêm


1
Là nút bootstrap, ví dụ dht.transmission.com, chỉ đơn giản là một trình theo dõi? Theo cách hiểu của tôi, nó cần theo dõi danh sách các đồng nghiệp trên mỗi thông tin băm - đó chính xác là những gì một trình theo dõi làm.
Kar

3
@Kate Không chính xác. Một nút DHT điển hình lưu trữ danh sách ngang hàng cho một số torrent "gần" nó trong "không gian" của mạng DHT. Thay vào đó, một trình theo dõi cố gắng lưu trữ danh sách ngang hàng cho mọi torrent mà nó biết. Ngoài ra, các nút DHT bootstrap đặc biệt không lưu trữ danh sách ngang hàng cho bất kỳ torrent nào . Thay vào đó, họ chỉ phân phối danh sách các nút DHT khác, để giúp bạn kết nối với mạng tổng thể. Sau đó, bạn có thể tìm thấy một nút DHT điển hình với danh sách ngang hàng mà bạn quan tâm.
Jeremy Banks

"Một số liên kết nam châm bao gồm trình theo dõi hoặc hạt web" - Tôi hơi bối rối. Magnet đang được sử dụng để tải xuống tệp torrent như bạn mô tả. Từ thông số URI Magnet, tôi thấy "nguồn có thể chấp nhận" và "trình theo dõi" là thông tin có thể được mã hóa trong URI. Bây giờ trình theo dõi rõ ràng là Bittorrent cụ thể và rất có thể sẽ được sử dụng cùng với các trình theo dõi được liệt kê trong tệp torrent. Là "nguồn có thể chấp nhận" có nghĩa là được sử dụng để tải xuống tệp torrent hoặc (một trong) các tệp thực tế sẽ được tải xuống thông qua tệp Torrent?
Frederick Nord

@FrederickNord Khi hỗ trợ máy khách torrent, ws=tham số trỏ đến URL hạt giống web BEP-19 của dữ liệu thực tế và xs=tham số trỏ đến một URL bằng .torrentchính tệp đó. Tôi nghĩ rằng điều này là một chút không phù hợp với các sử dụng khác của magnet:chương trình, nhưng đó là như vậy. Tôi quên nếu bất kỳ khách hàng nào sử dụng as=cho bất cứ điều gì ... có thể chỉ là một dự phòng xs=, nhưng không được hỗ trợ rộng rãi, IIRC.
Jeremy Banks

46

Khám phá ngang hàng và khám phá tài nguyên (các tệp trong trường hợp của bạn) là hai điều khác nhau.

Tôi quen thuộc hơn với JXTA nhưng tất cả các mạng ngang hàng đều hoạt động trên cùng các nguyên tắc cơ bản.

Điều đầu tiên cần phải xảy ra là khám phá ngang hàng.

Khám phá ngang hàng

Hầu hết các mạng p2p là các mạng "hạt giống": khi lần đầu tiên bắt đầu một mạng ngang hàng sẽ kết nối với một địa chỉ nổi tiếng (mã hóa cứng) để lấy danh sách các máy ngang hàng đang chạy. Nó có thể là seeding trực tiếp như kết nối với dht.transmissionbt.comnhư được đề cập trong một bài đăng khác hoặc seeding gián tiếp như thường được thực hiện với JXTA nơi mà ngang hàng kết nối với một địa chỉ chỉ cung cấp một danh sách văn bản đơn giản của các địa chỉ mạng ngang hàng khác.

Khi kết nối được thiết lập với (vài) đồng nghiệp đầu tiên, đồng nghiệp kết nối thực hiện khám phá các đồng nghiệp khác (bằng cách gửi yêu cầu ra) và duy trì một bảng của chúng. Vì số lượng các đồng nghiệp khác có thể rất lớn, nên kết nối ngang hàng chỉ duy trì một phần của Bảng băm phân tán (DHT) của các đồng nghiệp. Thuật toán để xác định phần nào của bảng mà kết nối ngang hàng sẽ duy trì khác nhau tùy thuộc vào Mạng. BitTorrent sử dụng Kademlia với số nhận dạng / khóa 160 bit.

Khám phá tài nguyên

Khi một vài đồng nghiệp đã được phát hiện bởi đồng nghiệp kết nối, cái sau sẽ gửi một vài yêu cầu để khám phá tài nguyên cho họ. Liên kết nam châm xác định các tài nguyên đó và được xây dựng theo cách chúng là "chữ ký" cho tài nguyên và đảm bảo rằng chúng xác định duy nhất nội dung được yêu cầu trong số tất cả các đồng nghiệp. Đồng nghiệp kết nối sau đó sẽ gửi yêu cầu khám phá về liên kết / tài nguyên nam châm cho các đồng nghiệp xung quanh nó. DHT được xây dựng theo cách nó giúp xác định những đồng nghiệp nào nên được hỏi trước về tài nguyên (đọc trên Kademlia trong Wikipedia để biết thêm). Nếu ngang hàng được yêu cầu không giữ tài nguyên được yêu cầu, nó thường sẽ "chuyển" truy vấn đến các đồng nghiệp bổ sung được lấy từ DHT của chính nó.

Số lượng "bước nhảy" mà truy vấn có thể được truyền vào thường bị giới hạn; 4 là một số thông thường với các loại mạng JXTA.

Khi một đồng nghiệp giữ tài nguyên, nó trả lời với đầy đủ chi tiết. Đồng đẳng kết nối sau đó có thể kết nối với đồng nghiệp đang giữ tài nguyên (trực tiếp hoặc thông qua chuyển tiếp - Tôi sẽ không đi vào chi tiết ở đây) và bắt đầu tìm nạp nó.

Tài nguyên / Dịch vụ trong mạng P2P không được gắn trực tiếp vào địa chỉ mạng: chúng được phân phối và đó là nét đẹp của các mạng có khả năng mở rộng cao này.


Điều này tôi nghĩ là câu trả lời ngắn gọn nhất mà không có nhiều thuật ngữ kỹ thuật. Cảm ơn.
desaivv

26

Tôi đã tò mò bởi chính câu hỏi tương tự. Đọc mã để truyền, tôi tìm thấy như sau libtrnasmission/tr-dht.c:

3248:     bootstrap_from_name( "dht.transmissionbt.com", 6881,
                               bootstrap_af(session) );

Nó thử 6 lần, đợi 40 (!) Giây giữa các lần thử. Tôi đoán bạn có thể kiểm tra nó bằng cách xóa các tệp cấu hình ( ~/.config/transmissiontrên unix) và chặn tất cả thông tin liên lạc đến dht.transmissionbt.comvà xem điều gì xảy ra (ít nhất là đợi 240 giây).

Vì vậy, nó xuất hiện máy khách có một nút bootstrap được tích hợp để bắt đầu. Tất nhiên, một khi nó đã vào mạng, nó không cần nút bootstrap nữa.


9

Cuối cùng tôi đã tìm thấy đặc điểm kỹ thuật. Lần đầu tiên google không giúp đỡ . (wiki được liên kết với bittorrent.com là trang web chính. Tôi đã nhấp vào liên kết nhà phát triển, chú ý tab bittorrent.org ở bên phải, thật dễ dàng từ đó. nhấp chuột đi).

Có vẻ như tất cả các torrent đều có một mạng lưới các đồng nghiệp. Bạn tìm thấy đồng nghiệp từ trình theo dõi và bạn giữ chúng giữa các phiên. Mạng cho phép bạn tìm các đồng nghiệp và những thứ khác. Tôi chưa đọc cách nó được sử dụng với các liên kết nam châm nhưng có vẻ như nó không được xác định làm thế nào một khách hàng mới tìm thấy đồng nghiệp. Có lẽ một số được đưa vào, hoặc họ sử dụng máy chủ gia đình của họ hoặc các trình theo dõi đã biết được nhúng vào máy khách để có được máy ngang hàng đầu tiên trong mạng.


À, tôi đoán là tôi đã đúng khi đến DHT để tìm khách hàng. "Nếu không có trình theo dõi nào được chỉ định, khách hàng NÊN sử dụng DHT (BEP 0005 [3]) để thu được các đồng nghiệp."
Jeff Mercado

8

Khi tôi bắt đầu trả lời câu hỏi của bạn, tôi không nhận ra bạn đang hỏi cách thức hoạt động của sơ đồ nam châm. Chỉ cần nghĩ rằng bạn muốn biết làm thế nào các phần có liên quan đến giao thức bittorrent được tạo ra.


Hàm băm được liệt kê trong uri nam châm là hàm băm thông tin của torrent được mã hóa trong base32. Băm thông tin là băm sha1 của khối thông tin được mã hóa của torrent.

Mã python này cho thấy làm thế nào nó có thể được tính toán.

Tôi đã viết một triển khai C # (rất ngây thơ) để kiểm tra điều này vì tôi không có sẵn bencoder và nó phù hợp với những gì được mong đợi từ khách hàng.

static string CalculateInfoHash(string path)
{
    // assumes info block is last entry in dictionary
    var infokey = "e4:info";
    var offset = File.ReadAllText(path).IndexOf(infokey) + infokey.Length;
    byte[] fileHash = File.ReadAllBytes(path).Skip(offset).ToArray();
    byte[] bytes;
    using (SHA1 sha1 = SHA1.Create())
        bytes = sha1.ComputeHash(fileHash, 0, fileHash.Length - 1); // need to remove last 'e' to compensate for bencoding
    return String.Join("", bytes.Select(b => b.ToString("X2")));
}

Theo tôi hiểu, hàm băm này không bao gồm bất kỳ thông tin nào về cách định vị trình theo dõi, khách hàng cần tìm hiểu điều này thông qua các phương tiện khác (url thông báo được cung cấp). Đây chỉ là những gì phân biệt một torrent này với một torrent khác trên trình theo dõi.

Mọi thứ liên quan đến giao thức bittorrent vẫn xoay quanh trình theo dõi. Nó vẫn là phương tiện liên lạc chính giữa bầy đàn. Sơ đồ uri nam châm không được thiết kế dành riêng cho bittorrent. Nó được sử dụng bởi bất kỳ giao thức P2P nào như một hình thức giao tiếp thay thế. Các ứng dụng khách Bittorrent được điều chỉnh để chấp nhận các liên kết nam châm như một cách khác để xác định các torrent theo cách mà bạn không cần phải tải xuống các tệp .torrent nữa. Nam châm uri vẫn cần chỉ định tracker để xác định vị trí của nó để khách hàng có thể tham gia. Nó có thể chứa thông tin về các giao thức khác nhưng không liên quan đến giao thức bittorrent. Giao thức bittorrent cuối cùng sẽ không hoạt động nếu không có trình theo dõi.


2
Điều này không giúp được gì. Nhưng bạn có nói rằng nó băm toàn bộ tệp torrent bỏ qua khối thông tin không? Câu hỏi của tôi là về cách nó tìm thấy các đồng nghiệp.

1
@ acidzombie24 Có lẽ bạn đang nghĩ về các trình theo dõi phân tán sử dụng DHT để định vị các đồng nghiệp. Điều này không có gì để làm với các liên kết nam châm. ( en.wikipedia.org/wiki/ Kẻ )
Alexander Sagen

2
@Jeff M: Nhưng những gì 'gửi' một danh sách các đồng nghiệp trở lại. Một liên kết chỉ là một liên kết không có trình theo dõi liên quan đến nó. Tôi đã cố gắng tìm ra những gì gửi lại đồng nghiệp.

1
+1. Ngoài ra Liên kết nam châm trong câu hỏi không chỉ định tr (acker). Chỉ có sha1 mà làm tôi bối rối. Đặc biệt là khi tôi đang sử dụng một bản cài đặt mới không có torrent nào đang chạy (và không được kết nối với bất kỳ đồng nghiệp nào) và có liên kết nam châm tìm các đồng nghiệp. Phép thuật của nó, tôi không biết làm thế nào nó hoạt động. Phải có một số máy chủ gia đình nó có thể yêu cầu các đồng nghiệp. Nhưng điều đó có nghĩa là tôi gửi các truy vấn cho các đồng nghiệp đang tìm kiếm một hàm băm và khách hàng chuyển thông điệp đến nhiều đồng nghiệp cho đến khi một câu trả lời cuộc gọi của tôi?

1
Tôi không chắc làm thế nào để trả lời điều đó. Tất cả các uris nam châm tôi đã thấy luôn chỉ định theo dõi. Nó có thể là khách hàng của bạn đang thử một danh sách các trình theo dõi công khai mà nó biết và một người tình cờ có nó. Trình theo dõi nào danh sách torrent liên quan đang được sử dụng? Nó được hiển thị như thế nào? Có bất kỳ mối quan hệ nào giữa trình theo dõi mà nó kết nối và nguồn của liên kết nam châm không? Có lẽ đó là một torrent sử dụng DHT? Liệu cùng một công việc cho một torrent riêng tư? Một lần nữa, tôi không biết làm thế nào DHT hoạt động chính xác. Tôi sẽ xem nếu tôi có thể tìm thấy thêm thông tin.
Jeff Mercado

3

danh sách các đồng nghiệp có thể được điền từ torrent nâng cấp máy khách (ví dụ: có một torrent cho utorrent nâng cấp nó). miễn là mọi người sử dụng cùng một khách hàng, điều đó sẽ tốt vì bạn không có lựa chọn nào khác ngoài việc chia sẻ nâng cấp.


Đó là một nơi rất logic để tìm kiếm băm và các đồng nghiệp khác. +1
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.