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ở và 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 và (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 1
nếu máy khách có phần đặc biệt này , 0
nếu không.
Vì vậy, nếu LC được chocked và quan tâm và RC có unchocked ô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).