Làm thế nào để ngang hàng làm việc qua internet?


15

Theo những gì tôi hiểu, không có cách nào để gửi một gói đến máy tính trong mạng cục bộ từ bên ngoài mạng, trừ khi chúng ta biết cơ chế định tuyến được sử dụng bởi bộ định tuyến.

Giả sử chúng ta có một thiết lập trông như thế này:

  1. Máy tính-A, IP 192.168.1.2 (cổng mặc định 192.168.1.1)

  2. Máy tính-B, IP 192.168.1.3 (cổng mặc định 192.168.1.1)

  3. Bộ định tuyến-C, IP 192.168.1.1 (IP bên ngoài 1.1.1.1)

  4. Bộ định tuyến-D (IP ngoài 2.2.2.2)

Máy tính-A, Máy tính-B và Bộ định tuyến-C thuộc cùng một mạng cục bộ. Router-D muốn gửi dữ liệu tới Computer-A, nhưng nó không thể thực hiện việc này mà không thông qua Router-C.

Bây giờ Router-C sẽ chuyển tiếp các gói tới Computer-A nếu cổng đích là 1000 và sẽ chuyển tiếp các gói tới Computer-B nếu cổng đích là 2000. Nhưng chắc chắn, thiết bị duy nhất biết cơ chế định tuyến này là chính Router-C! Ngay cả Computer-A hay Computer-B cũng sẽ không biết về nó, phải không?

Vì vậy, Router-D có thể gửi một gói đến Computer-A nếu nó gửi một gói đến Router-C qua cổng 1000, nhưng Router-D biết làm thế nào để gửi các gói qua cổng 1000, và không nói cổng 1001?

Làm thế nào để các chương trình ngang hàng như Bittorrent vượt qua vấn đề này? Giải pháp duy nhất tôi có thể nghĩ đến là cho Router-D gửi gói đến Router-C thông qua tất cả các cổng, sao cho nó được chuyển tiếp đến Computer-A, nhưng có giải pháp nào tốt hơn không?

Câu trả lời:


9

Sự nhầm lẫn của bạn bắt nguồn từ một số giả định không chính xác.

Nhưng chắc chắn, thiết bị duy nhất biết cơ chế định tuyến này là chính Router-C! Ngay cả Computer-A hay Computer-B cũng sẽ không biết về nó, phải không?

Cái gì, tại sao‽ Vậy tại sao bộ định tuyến được cấu hình để chuyển tiếp các cổng đó đến các IP đó? Bạn phải thiết lập máy khách P2P để sử dụng một cổng cụ thể và sau đó thiết lập bộ định tuyến tương ứng.

nhưng làm thế nào để Router-D biết gửi gói qua cổng 1000 và không nói cổng 1001?

Bởi vì bạn định cấu hình máy khách P2P để sử dụng một cổng cụ thể (tiêu chuẩn hoặc không chuẩn cho giao thức đó).

Giải pháp duy nhất tôi có thể nghĩ đến là cho Router-D gửi gói đến Router-C thông qua tất cả các cổng, sao cho nó được chuyển tiếp đến Computer-A, nhưng liệu có giải pháp nào tốt hơn không?

Nó đơn giản hơn nhiều. Khi máy khách thực hiện kết nối với một thiết bị ngang hàng, nó sẽ chỉ định cổng nào nó muốn sử dụng, do đó, máy chủ sẽ gửi dữ liệu trên cổng đó.

Hmm, nhưng Bittorrent không thay đổi hành vi của bộ định tuyến phải không? Vì một số cơ chế định tuyến có thể đã được động như được thể hiện trong superuser.com/a/187190/78897, làm thế nào để Computer-A có thể biết về nó?

Máy khách không ảnh hưởng trực tiếp đến bộ định tuyến, nhưng bộ định tuyến có thể được cấu hình / đủ thông minh để thích ứng với hành vi của khách hàng. Bạn có thể kích hoạt UPnP trong cả bộ định tuyến và máy khách để tự động định cấu hình kết nối và hầu hết các bộ định tuyến đều có khả năng kiểm tra trạng thái như một phần của cơ chế chuyển tiếp cổng của chúng .

Kết hợp lại với nhau, điều đó có nghĩa là một kết nối có thể được tạo động trên một cổng ngẫu nhiên và sau đó bộ định tuyến có thể theo dõi những gì đang xảy ra thay vì xem mọi thứ là kết nối ngẫu nhiên, vô nghĩa. Bằng cách đó, nó có thể chuyển tiếp một kết nối khi cần thiết vì ví dụ, đó là phản hồi cho kết nối khác vừa xảy ra .

Vấn đề xảy ra khi bạn có nhiều hệ thống sử dụng cùng một chương trình. Có nhiều hệ thống được kết nối với cùng một bộ định tuyến, chia sẻ cùng một IP và sử dụng các cổng động nhanh chóng trở nên khó kiểm soát và ngay cả khi kiểm tra trạng thái, thật khó nếu không thể làm cho nó hoạt động chính xác. Trong trường hợp đó, các cổng tĩnh (mặc định hoặc cách khác) sẽ cần được sử dụng.


Nếu bạn sử dụng một chương trình như SmartSniff hoặc TCPView để giám sát các kết nối của mình, bạn sẽ nhận thấy rằng các kết nối P2P thường sẽ có cổng bạn định cấu hình (hoặc mặc định cho máy khách) làm đích cho các kết nối đến và mặc định hoặc tùy chỉnh / cổng ngẫu nhiên cho nguồn và ngược lại cho các kết nối đi.


Hmm, nhưng Bittorrent không thay đổi hành vi của bộ định tuyến phải không? Vì một số cơ chế định tuyến có thể đã được động như đã trình bày trong superuser.com/a/187190/78897 , làm thế nào để Computer-A có thể biết về nó?
Pacerier

Cổng chuyển tiếp. Bạn thiết lập nó trước.
UtahJarhead

@Pacerier Nếu cả bộ định tuyến và ứng dụng p2p đều sử dụng UPnP , việc chuyển tiếp cổng có thể được thực hiện một cách linh hoạt. Trong trường hợp này, có Bittorrent làm thay đổi hành vi của router.
zero2cx

@ zero2cx, có cách nào để thực hiện ngang hàng mà không thay đổi hành vi của bộ định tuyến không?
Pacerier

@Pacerier, nếu bạn muốn có NAT (nhiều hệ thống chia sẻ kết nối), thì bằng cách nào đó bạn phải định cấu hình bộ định tuyến để biết nơi tạo kết nối (tốt, về mặt kỹ thuật, bạn có thể yêu cầu mọi người kết nối mọi cổng với tất cả các cổng như bạn đề xuất, nhưng đó sẽ là tốt nhất, khủng khiếp). Bạn có thể thực hiện việc này một cách tĩnh (cấu hình IP và cổng) hoặc động (UPnP).
Synetech

4

Câu hỏi của bạn chạm vào trái tim của Internet và định nghĩa về định tuyến. Trong ví dụ của bạn, Bộ định tuyến D gửi dữ liệu đến Máy tính A dựa trên hai tiền đề:

  • Nó được yêu cầu gửi dữ liệu đến Máy tính A.
  • Nó đã được xử lý dữ liệu từ Máy tính A.

Kịch bản của bạn dường như giả sử tùy chọn đầu tiên - Bộ định tuyến D muốn gửi đến Máy tính A. Nhưng làm thế nào để đến đó? Nó làm như vậy thông qua việc sử dụng các bảng định tuyến được chia sẻ bởi các bộ định tuyến lẫn nhau.

Bộ định tuyến C thường xuyên gửi các bản cập nhật cho tất cả các bộ định tuyến biết - kể cả Bộ định tuyến D - rằng nó "biết" mạng "192.168. *" (Trên thực tế - điều này sẽ không xảy ra vì mạng đó không được định tuyến - nhưng nó được coi là riêng tư. Nhưng bỏ qua điều đó.) Vì vậy, Router D đã biết rằng Router C biết mạng đó.

Vì vậy, khi dữ liệu được dành cho Máy tính A, nó sẽ được xử lý trước bởi mạng. Vì vậy, Bộ định tuyến D hỏi: "Tôi cần tìm mạng 192.168. * Tôi có biết không? Không. Tôi có biết người khác làm không? Có. Bộ định tuyến C làm gì. Làm thế nào để tôi đến được bộ định tuyến C? Thông qua 2.2. Giao diện 2.2. "

Sau đó, Bộ định tuyến D sẽ gửi dữ liệu đến Bộ định tuyến C. Bộ định tuyến C lấy dữ liệu đó và nói: "Ồ, tôi có dữ liệu từ Bộ định tuyến D nhưng đó là cho mạng 192.168. Tôi có biết mạng đó không? Có, qua mạng 192.168.1.1 của tôi" chuyển tiếp nó

Có một số công việc khác cần được thực hiện để giải quyết địa chỉ IP và MAC, nhưng tôi đang bao quát việc định tuyến, theo từng se, không phải ARP và mạng cục bộ.

Bạn sẽ nhận thấy giả định đầu tiên của mình - bộ định tuyến từ xa phải biết cơ chế định tuyến - không được sử dụng ở đây. Bộ định tuyến D không quan tâm nếu Bộ định tuyến C đang sử dụng EIGRP, RIP, RIPv2, OSPF hoặc bất cứ điều gì. Tất cả những gì nó quan tâm là nó đã có một bản cập nhật. (Tất nhiên, làm thế nào để có một bản cập nhật là điều quan trọng để đảm bảo cả hai luôn đồng bộ. Nhưng một lần nữa, đó lại là một vấn đề khác.)

Giả định thứ hai của bạn - số cổng đó là một yếu tố trong định tuyến - cũng không chính xác. Bộ định tuyến (nói chung) không cần thông tin cổng để đưa ra quyết định định tuyến. (Điều đó đã thay đổi một chút, do một số công nghệ mạng mới và áp dụng chủ yếu cho tường lửa và proxy, nhưng vẫn giả định rộng hơn vẫn áp dụng cho các bộ định tuyến "thật".)

Tiếp tục với ví dụ của bạn, Bộ định tuyến C sẽ chuyển tiếp dữ liệu trên cổng 1000 (theo kịch bản của bạn) vì có thể có một dịch vụ trên Máy tính A mong đợi dữ liệu trên cổng cụ thể đó. Nhưng nó chỉ biết làm vì Bộ định tuyến D đã gửi nó trên cổng 1000. Và bộ định tuyến D chỉ gửi nó trên cổng đó vì người khởi tạo dữ liệu đã gửi nó đến Bộ định tuyến D trên cổng đó.

Tôi không hiểu việc bạn bao gồm các chương trình bittorrent hoặc P2P như phản ánh câu hỏi bạn hỏi. Những lời giải thích tương tự sẽ được áp dụng. Bộ định tuyến cũng có thể được cấu hình với kích hoạt cổng kết hợp một thiết bị (hoặc IP) cụ thể với một cổng cụ thể. Như vậy khi lưu lượng truy cập đến cổng 1234, các bộ định tuyến sẽ biết gửi dữ liệu đến Thiết bị ABCD. Điều này thường được liên kết với một cổng TCP đi. tức là nếu tôi gửi lưu lượng trên cổng 7890, bộ định tuyến sẽ biết lưu lượng đến sẽ ở cổng 1234 và gửi cho tôi.

Nhưng kích hoạt cổng không liên quan đến các quyết định định tuyến (từ xa) - thay vào đó, nó liên quan đến bảng MAC / IP bên trong mà bộ định tuyến sử dụng cho mạng LAN.

Cập nhật / chỉnh sửa : Để trả lời thêm và giải thích sau bình luận của bạn. Bộ định tuyến D chỉ biết máy tính A bằng địa chỉ IP của nó (192.168.2.2). Nhưng Router C biết máy tính A bằng địa chỉ IP và địa chỉ MAC của nó. MAC (Media Access Control) là mã định danh 48 bit duy nhất (thường là ...) được xác định theo tiêu chuẩn quốc tế. Mỗi thiết bị được kết nối với mạng LAN (có dây và không dây) được cho là có một địa chỉ MAC duy nhất.

Bộ định tuyến (Bộ định tuyến C) liên kết địa chỉ IP và địa chỉ MAC với nhau trong một bảng (bảng địa chỉ MAC). Vì vậy, khi lưu lượng truy cập vào Bộ định tuyến C và bộ định tuyến nhận ra "cục bộ" của nó với nó, nó thực hiện tra cứu bảng địa chỉ MAC. Các bộ định tuyến sau đó thay đổi theo nghĩa đen thông tin địa chỉ khung.

Nó tái tạo (viết lại) thông tin đích của Lớp 2 để có địa chỉ MAC đích của Máy tính A nhưng giữ thông tin địa chỉ IP (Lớp 3) giống nhau.

Nếu tuyến đường KHÔNG biết địa chỉ MAC. Hoặc không có mối quan hệ IP-MAC trong bảng của nó, nó có một thứ gọi là ARP (giao thức phân giải địa chỉ) để hỏi "HEY, mọi người trên mạng này. Bạn có địa chỉ MAC này không?" Hoặc đôi khi - "Mọi người, địa chỉ MAC của bạn là gì?"). Thiết bị / thiết bị phù hợp đáp ứng và bộ định tuyến xây dựng bảng IP-MAC.


Vì vậy, Router-D gửi một gói đến Router-C thông qua cổng 60000 (được cấu hình sẵn), Router-C nhận được gói, nhưng làm thế nào để biết rằng gói này sẽ được chuyển tiếp đến Computer-A?
Pacerier

1
Bộ định tuyến D đã biết đích đến cuối cùng - Máy tính A. Nó (Bộ định tuyến D) chỉ biết Máy tính A bằng địa chỉ IP: 192.168.2.2. Nhưng, Router C biết máy tính A bằng hai phương pháp: địa chỉ IP (192.168.2.2) và một cái gì đó gọi là địa chỉ MAC của nó. Tôi sẽ cập nhật câu trả lời với nhiều thông tin hơn.
John

2

Cảng kích hoạt. Làm thế nào để một máy chủ web gửi một trang web cho bạn sau khi bạn yêu cầu nó? Bởi vì bạn đã yêu cầu nó. Khi bạn yêu cầu nó, bộ định tuyến sẽ biết sẽ trả lời và khi nhận được nó, nó sẽ chuyển tiếp nó tới PC thích hợp. Một số chương trình được viết để kích hoạt mở ra dự đoán tín hiệu từ một PC cụ thể, ngay cả khi một chương trình không thực sự trên đường.

Một số mô hình có một máy chủ trung tâm được sử dụng cho giao tiếp cơ bản. Ví dụ:

  • Client1 đăng nhập bằng Máy chủ để liên lạc 2 chiều.
  • Client2 đăng nhập cho cùng một điều.

Bây giờ máy chủ biết tất cả các tệp mà Client1 và Client2 có.

  • Client2 nói "Tôi muốn tệp X từ Client1" đến Máy chủ.
  • Máy chủ nói với Client1 "Client2 muốn tệp X."
  • Máy khách 1 gửi một mẩu dữ liệu rác đến IP công cộng của Client2, đặt chế độ Kích hoạt cổng để nó mở cổng để trả lời từ Client2.
  • Client2 gửi tín hiệu ban đầu đến IP công cộng của Client1.

Client1 chỉ đánh lừa bộ định tuyến để mở cổng đó cho Client2.

Trong một số trường hợp, chẳng hạn như BitTorrent hoặc Napster gốc (iirc), bạn phải chuyển tiếp một cổng trên bộ định tuyến của mình để nó hoạt động tối ưu.

Theo như các khách hàng khác biết cổng nào sẽ kết nối với ban đầu, thì đó là do khách hàng của bạn đã nói với bầy hoặc máy chủ mà bạn sử dụng cổng nào. BitTorrent thường xuyên sử dụng trình theo dõi và theo dõi các cổng nào được sử dụng bởi các máy khách nào.


Theo như họ biết cổng nào sẽ sử dụng ... bạn định cấu hình máy khách để nghe trên một cổng cụ thể. Khách hàng của bạn nói với bầy đàn (như trong trường hợp của BitTorrent) bạn đang sử dụng cổng nào để các khách hàng khác biết phải kết nối với cái gì. PC của bạn nói với họ.
UtahJarhead

Tôi nghĩ rằng bạn đã trả lời trong khi phụ lục đầu tiên của tôi đã được viết. Chính xác?
UtahJarhead

Nhưng làm thế nào để PC biết cơ chế định tuyến khi nó là bộ định tuyến thực hiện nó? Một số cơ chế có thể đã được động như thể hiện trong superuser.com/a/187190/78897
Pacerier

Không, nó không cần biết định tuyến. Để hầu hết các máy khách P2P hoạt động chính xác, bạn cần phải cấu hình Chuyển tiếp cổng đúng trên bộ định tuyến của mình. Không có nó, bạn chỉ có thể giao tiếp với các khách hàng khác mà lần đầu tiên bạn nói chuyện. Họ không thể bắt đầu cuộc trò chuyện. Tôi thoáng chạm vào điều này trong câu trả lời của tôi (đoạn thứ hai đến đoạn cuối)
UtahJarhead

Nhưng chuyển tiếp cổng chỉ có thể nếu quản trị viên đã cấu hình sẵn .. Bạn có muốn nói rằng Bittorrent cấu hình lại các bộ định tuyến của chúng tôi không?
Pacerier
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.