2013-02-17 24 views
18

Nếu tường lửa chặn tất cả các kết nối đến theo mặc định, làm thế nào để công nghệ p2p hoạt động? Giống như torrents, làm cách nào để bạn kết nối với tất cả những người chia sẻ tệp và nhận thông tin từ họ? Liệu nó đi qua một máy chủ chuyển tiếp hoặc một cái gì đó?Nếu tường lửa không chấp nhận các kết nối đến theo mặc định, các mạng p2p hoạt động như thế nào?

+0

http://stackoverflow.com/questions/8523330/programming-p2p-application/8524609#8524609 – selbie

Trả lời

14

Tôi không nghĩ về mọi thứ về BitTorrent, như tôi nói về kỹ thuật kết nối P2P chung. Thông thường, các khách hàng trong một cuộc họp mạng P2P trên một máy chủ báo hiệu chung (ví dụ: SIP, XMPP, máy chủ theo dõi, trang web) để trao đổi địa chỉ IP, dữ liệu meta khác và tin nhắn để khởi động các kết nối trực tiếp. Sau đó, sử dụng bất kỳ kỹ thuật sau đây dưới đây để có được một phiên liên lạc đi:

  • Cả hai bên đều cố gắng kết nối với nhau cùng một lúc - trong trường hợp một bên không thể chấp nhận các kết nối, nhưng được phép thực hiện các kết nối outbound . Đó là trường hợp cho kịch bản tường lửa.

  • Đục lỗ (được sử dụng cùng với ở trên). Rơ le không cần thiết cho mỗi lần truy cập, nhưng giúp đảm bảo kết nối khi cả hai máy ngang hàng gặp phải các thiết bị mạng khó có thể đi qua. Có cả hai kỹ thuật UDP Hole Punching cũng như TCP Hole Punching. Thông tin thêm here.

  • Rơ le, bao gồm TURN servers, có thể được triển khai vào mạng P2P khi không thể kết nối trực tiếp. Tất cả các ứng dụng cuộc gọi video yêu thích của bạn đều triển khai chuyển tiếp cho các tình huống này, nhưng hãy cố gắng hết sức để kết nối trực tiếp với các đồng nghiệp để tránh chi phí chuyển tiếp.

Bing cho các chủ đề sau: STUN, TURN, ICE (Thiết lập kết nối tương tác), libjingle, pjnath, libnice.

+0

http://stackoverflow.com/questions/21501359/p2p-message-transfer-behind-firewalls-and-nat bạn có thể vui lòng đọc câu hỏi này và giúp tôi một chút không? –

+0

cho BT máy chủ báo hiệu được gọi là bộ theo dõi. – bond

+0

Đối với điểm đầu tiên, thật khó để tìm tài liệu về nó. Bạn đúng cho điểm thứ hai, Hole Punching, được mô tả trong [Vuze DHT Fetures] (https://wiki.vuze.com/w/Distributed_hash_table#Additional_Features) và dựa trên khái niệm về các nút Rendez-Vous từ [ Tài liệu khám phá Vuze Swarm] (https://wiki.vuze.com/w/Swarm_Discoveries#Introduction). Đối với điểm cuối cùng, STUN/TURN là [không được triển khai, ít nhất là trong Vuze] (http://vote.vuze.com/forums/170588-general/suggestions/3101012-implement-stun-t). – KrisWebDev

5

Nếu tường lửa (trái ngược với NAT) dự định chặn các kết nối đến (mà tôi cho rằng chúng thường làm), bạn không thể làm gì với nó. Bạn có thể thử tất cả các lỗ đấm bạn thích. Điều này đạt được bằng cách chỉ thực hiện NAT đối xứng, tức là mỗi lỗ pin được mở riêng cho cổng ip, cổng bốn (nguồn, cổng đích và IP).

BitTorrent không có khả năng ngừng hoạt động chỉ vì bạn không thể nhận kết nối đến, nó sẽ chỉ hoạt động kém hơn một chút. Rất có thể có ít nhất một số người trên bầy đàn có thể nhận các kết nối và bạn chỉ cần kết nối với họ.

This là giải thích cũ về cách tường lửa chủ yếu chỉ có nghĩa là hiệu suất kém hơn.

EDIT:

Câu trả lời ngắn đến "tại sao" là đa số các đồng nghiệp không phải đằng sau bức tường lửa (chỉ NAT).

+0

Bạn có thể xây dựng trên http://bt.degreez.net/firewalled.html không? Làm thế nào họ có được "mà đồng nghiệp với cổng mở nhận được sự chú ý nhiều gấp 2,4 lần như những người có cổng bị chặn"? – Geremia

+0

vì bạn sẽ có nhiều kết nối ngang hàng hơn (ít nhất bạn có nhiều kết nối ngang hàng tiềm năng hơn) nếu bạn có thể nhận được các kết nối đến. Con số đó không thể áp dụng cho đàn nói chung, mà là cho ví dụ của họ nói riêng. – Arvid

+0

Dường như số lượng sẽ hơi <2 trong trường hợp đó, không phải là 2,4 (xem [câu trả lời của tôi ở đây] (https://stackoverflow.com/a/48193512/1429450)). – Geremia

1

Đối với hậu thế:

Câu trả lời ngắn là, nó được thực hiện thông qua https://en.wikipedia.org/wiki/Hole_punching_(networking)

Khi bạn kết nối với google.com từ máy tính của bạn (mà rất có thể ngồi đằng sau một router và NAT) máy địa chỉ IP của bạn và NAT 'số cổng ed được gửi tới máy chủ google. Google sử dụng các thông tin kết nối này để gửi kết quả tìm kiếm đến máy của bạn.

Bạn có thể nghĩ các máy chủ của Google tương tự như một nút trong mạng p2p.Google có thể 'tiếp cận' bạn từ máy chủ của họ mặc dù bộ định tuyến của bạn không chấp nhận kết nối đến. Đó là vì họ không khởi tạo kết nối (họ không biết kết hợp ip: NATedport của bạn để bắt đầu kết nối). Nhưng máy của bạn có thể tạo ra các kết nối gửi đi và gửi/xuất bản ip của bạn: NATedport kết hợp với thế giới bên ngoài. Vì vậy, cả hai nút trong p2p gửi ip: NATedport combo đến trang web của bên thứ ba và trao đổi thông tin này và bắt đầu kết nối (bất kỳ ai có thông tin đầu tiên) với nhau.

0

Hãy
F = # firewalled nút,
O = # nút với cổng đi vào mở,
T = F + O = tổng số # của các nút,
P = O/T = phần nhỏ của tổng số nút có cổng mở,
C f = kết nối tối đa # mỗi nút tường lửa có thể có, và
C o = kết nối tối đa # mỗi nút mở có thể có.

Sau đó,
C f = O, ∵ nút tường lửa chỉ có thể kết nối để mở nút
C o = T-1, ∵ nút mở có thể kết nối với tất cả các nút khác (và một khi tất cả các nút tường lửa đã kết nối đầu tiên với chúng)
vậy
C o/C f = (T-1)/O = 1/P-1/O.

Nếu T là lớn,
C o/C f ≈ 1/P.

Ví dụ: giả sử một nửa các nút có các cổng đến mở: P = ½. Sau đó,
C o/C f ≈ 2,
có nghĩa là nút mở có ~ 2 × số lượng kết nối như các nút tường lửa (có nghĩa là họ đang quá tải, nhưng cũng có nghĩa là họ có nhiều khả năng hiển thị).

Do đó, tốt hơn cho các nút cụ thể và cho toàn bộ mạng có P = 1; tất cả các nút sẽ hiển thị như nhau và không kém phần gánh nặng.

Nếu P = 0, mạng sẽ không hoạt động ∵ không ai có thể bắt đầu kết nối với các đồng nghiệp khác.

Các vấn đề liên quan