Bittorrent hoạt động như thế nào?


34

Tôi muốn tìm hiểu thêm về cách chia sẻ tập tin bittorrent. Tôi là một người dùng (lập trình viên) kỹ thuật tiên tiến, vì vậy tài liệu kỹ thuật tiên tiến không có vấn đề gì, nhưng nó phải ngắn gọn và đi vào vấn đề. Tôi cần một cuốn sách / web tài nguyên tốt giải thích kiến ​​trúc bittorrent tổng thể.

Tôi không quan tâm đến chi tiết, chỉ là kiến ​​trúc tổng thể và thuật ngữ như hạt giống, đồng nghiệp, v.v.

Bất kỳ đề xuất?

Câu trả lời:


29

Tổng quan về cách hoạt động của bittorrent:

  • Bạn có đồng nghiệp và một tracker . Tất cả các đồng nghiệp với nhau tại bất kỳ thời điểm nào là bầy đàn . Tình huống thông thường là một hoặc một vài đồng nghiệp có tập tin hoàn chỉnh và mong muốn cung cấp nó cho các đồng nghiệp khác.

  • Một máy ngang hàng có được một tệp .torrent, trong đó có một số thứ khác A) hàm băm SHA-1 của tập tin, B) URL của trình theo dõi và C) số lượng các mảnh mà tệp bị phá vỡ, cũng như một băm SHA-1 của mỗi mảnh. Kích thước của các mảnh được xác định bởi chính torrent.

  • Sau đó, ngang hàng kết nối với trình theo dõi bằng URL được chỉ định trong torrent. Người theo dõi trả lời với một danh sách các đồng nghiệp. Trình theo dõi nói chuyện HTTP qua cổng 80 hoặc 443.

  • Sau đó, người ngang hàng chọn một người khác, sử dụng thông tin từ trình theo dõi và liên hệ trực tiếp với nó để thiết lập một phiên trao đổi, cố gắng lấy một mảnh. Lưu ý rằng các phiên trao đổi được thực hiện trực tiếp bởi các đồng nghiệp và người theo dõi KHÔNG tham gia vào việc chuyển tiền. Trình theo dõi chỉ cung cấp thông tin.

  • Khi máy ngang hàng có một mảnh, nó sẽ xác minh nó dựa vào hàm băm SHA-1 và ghi nó vào tệp. Sau đó, nó có thể cung cấp phần đó khi chọn một đồng nghiệp khác. Các phiên trao đổi sau đó liên quan đến các phần "giao dịch". Tôi tin rằng đồng nghiệp nói chung sẽ chỉ cung cấp cho bạn mảnh đầu tiên nếu bạn không có mảnh khác.

  • Các đồng nghiệp thường xuyên xem xét lại trình theo dõi để có được một danh sách các đồng nghiệp được cập nhật. Người ngang hàng không phải đợi một trao đổi kết thúc trước khi bắt đầu một trao đổi khác nếu nó có nhiều phần, vì vậy một khi đồng đẳng có một loạt các phần, việc chuyển tiền có thể thực sự tăng tốc. Đây là lý do tại sao torrent bắt đầu chậm nhưng tăng tốc nhanh chóng khi các đồng nghiệp mua lại các mảnh.

  • Khi một thiết bị ngang hàng có tất cả các mảnh, toàn bộ tệp được xác minh dựa vào hàm băm SHA-1. Sau đó, nó trở thành một seeder , và bây giờ không làm gì ngoài việc giúp các tập tin có sẵn cao hơn. Những người ngang hàng không có tất cả các mảnh là đỉa .

  • Nếu một torrent không có hạt giống, nó đã chết, mặc dù nếu một bản sao hoàn chỉnh của tệp tồn tại giữa tất cả các phần được giữ bởi tất cả các đồng nghiệp, cuối cùng họ sẽ giao dịch để có được một bản sao hoàn chỉnh giữa họ.

  • Hàm băm SHA-1 là cách trình theo dõi và các đồng nghiệp "biết" tập tin nào được cho là tràn ngập. Tên tệp trong torrent không được sử dụng để xác định dữ liệu. Các phần không được xác minh đối với các hàm trong tệp .torrent sẽ bị loại bỏ. Các đồng nghiệp liên tục gửi các mảnh xấu bị các đồng nghiệp khác đánh cắp và cuối cùng sẽ không thể kết nối với bất kỳ ai trong bầy đàn.

  • Kích thước mảnh nhỏ hơn có nghĩa là torrent mạnh hơn do các đồng nghiệp có thể giao dịch các mảnh nhanh hơn, nhưng điều đó cũng có nghĩa là nhiều băm của các mảnh trong tệp .torrent phải được liệt kê và do đó tệp .torrent có thể lớn.

  • Nếu bạn đang xuất bản một cái gì đó thông qua BitTorrent, tốt nhất bạn nên chọn tệp miễn là bạn muốn làm cho nó có sẵn. Các đồng nghiệp khác sẽ giúp bạn, vì hầu hết các phần mềm BitTorrent thực hiện các thuật toán có lợi cho việc cố gắng truyền bá mọi thứ giữa càng nhiều đồng nghiệp càng tốt để tối đa hóa các kết nối liên kết. Bằng cách này, BitTorrent có thể giúp bạn xuất bản mọi thứ và tiết kiệm chi phí băng thông.


1
Một câu trả lời đẹp! Một quip: Tôi tin rằng hạt giống thích hạt giống hiếm nhất , không phải là những mảnh đầu tiên. Không chắc đây có phải là một thuật toán không, nhưng đó là những gì tôi đã nhận được từ một chương trình torrent một lần trong khi làm rối với các cài đặt.
Gallifreyan


8

Có một video khá hay trên YouTube giải thích điều này theo cách trực quan với các đoạn cắt bìa cứng. Đây không phải là một lời giải thích mang tính kỹ thuật cao, nhưng thật tuyệt vời để giải thích ý tưởng đằng sau BitTorrent cho mọi người một cách đơn giản, dễ hiểu.

bittorrent hoạt động như thế nào trên youtube


3
+1 Video hữu ích. Cho nó xem bố tôi. Anh không có câu hỏi nào sau đó. Kinh ngạc. :)
zero2cx

2

Tổng quan về giao thức tin nhắn ngang hàng .

Máy khách có thể sử dụng hai giao thức để chia sẻ thông tin với các đồng nghiệp, TCP hoặc uTP (trên UDP). Dữ liệu này tuân theo đặc tả giao thức bittorrent , phần tin nhắn ngang hàng .

Vì vậy, theo lập trình, một kết nối phải bắt đầu giữa hai khách hàng. Sau khi kết nối được đặt (thông qua TCP hoặc uTP), một cái bắt tay bittorrent được khởi tạo bởi ứng dụng khách đã lấy thông tin của người dùng từ xa (ip & port) từ trình theo dõi hoặc thông qua DHT . Cái bắt tay này chứa tin_hash xác định torrent mà kết nối này sẽ có.

Trước tiên chúng ta hãy xem dữ liệu của Torrent được cắt bớt thông qua giao thức. Một phần là một phần của dữ liệu bạn đang chia sẻ thông qua mạng. Không được nhầm lẫn với một khối , đó là một phần của một mảnh được gói vào một gói. Các khối là granularity để chia sẻ một mảnh thông qua các gói dữ liệu, và một mảnh là granularity để chia sẻ một Torrent thông qua các đồng nghiệp.

Khi kết nối bắt đầu, cả máy khách (máy khách cục bộ, mà tôi sẽ gọi LC và máy khách từ xa, RC ) đều bị nghẹt thởkhông quan tâm . Nghẹn có nghĩa là "Tôi sẽ không trả lời bất kỳ tin nhắn nào của bạn, quá bận rộn, nhưng tôi có thể đưa chúng vào tài khoản". Unchocked do đó có nghĩa là "Tôi sẽ trả lời tin nhắn của bạn". Quan tâm tất nhiên là tôi muốn một số phần bạn có. Do đó, trạng thái kết nối giữa hai đồng nghiệp có thể được xác định với bốn trạng thái đó: LC_chocked?, LC_interested?, RC_chocked?, RC_interested? Để cảnh báo RC mà tôi (un) bị nghẹt thở hoặc (un) quan tâm, Tôi phải gửi cho anh ấy (un) những tin nhắn quan tâm(un) bị bóp nghẹt , và có đi có lại.

Để thông báo cho nhau những phần mà họ có, họ có thể gửi tin nhắn bitfield ngay sau khi bắt tay. Như tên của nó cho thấy, đó là một chuỗi bit trong đó mỗi bit được đặt thành 1nếu máy khách có phần đặc biệt này , 0nếu không.

Vì vậy, nếu LC được chockedquan tâmRCunchocked ông, sau đó ông có thể gửi một yêu cầu thông điệp để yêu cầu một khối thuộc một mảnh ông biết LC có nhờ bitfield nhắn.

Khi một đồng nghiệp đã nhận được toàn bộ mảnh , anh ta có thể gửi một tin nhắn mảnh để thông báo cho tất cả các đồng nghiệp từ xa để họ cập nhật bitfield liên quan mà họ đang giữ.

Đó là một tổng quan rất cơ bản và tất nhiên không phải tất cả các chi tiết đều được cung cấp ở đây, như thuật toán nghẹt thở v.v ... Nếu bạn muốn biết thêm chi tiết, hãy kiểm tra hai liên kết tôi đã đăng ở trên, trong phần bình luận (với tư cách là người dùng mới tôi có thể 't có nhiều hơn hai liên kết trong một bài).

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.