Làm thế nào để các gói trả lời IP đến đích bên trong mạng LAN riêng? [bản sao]


26

Đây là một câu hỏi lý thuyết nhỏ đã làm tôi bối rối trong một thời gian khá dài.

Về cơ bản, nếu chúng ta ở trong một mạng LAN riêng và chúng ta muốn các gói đến đạt được, ví dụ, một máy chủ HTTP nằm trên một trong các máy, chúng ta chuyển tiếp các cổng để các gói đến tiếp cận chính xác với máy tính đó.

Bây giờ, tôi khá bối rối về cách các gói 'phản hồi' đến đích bên trong mạng LAN, như khi chúng ta mở một trang web hoặc hơn thế. Thực sự không thể tìm thấy bất kỳ thông tin hữu ích về chủ đề đó.

Tôi hy vọng ai đó có thể cho tôi một vài manh mối hoặc liên kết tôi với một số thông tin có thể giải thích nó. Cảm ơn.

EDIT: Tôi nghĩ rằng tôi nên làm rõ. Một ví dụ về những gì tôi đang hỏi sẽ giống như thế này:
1. Một máy tính bên trong mạng LAN có một IP bên ngoài cố gắng tải trang web từ máy chủ web bên ngoài mạng LAN này (Về cơ bản trên Internet)
2 . Máy chủ web trả lời và gửi trang web trở lại máy tính đó.

Điều khiến tôi khá bối rối vào thời điểm này là, làm thế nào để bộ định tuyến biết máy tính nào sẽ gửi dữ liệu đến (bộ định tuyến được kết nối với mạng LAN có nhiều máy tính) mà không cần chuyển tiếp cổng trước đó.


Chỉ cần xem một video hay về chủ đề: Dịch địa chỉ mạng - Computerphile
Der Hochstapler

Câu trả lời:


56

Mặc dù câu hỏi đã được bảo hiểm đầy đủ. Tôi cảm thấy như quá trình này tốt nhất nên được mô tả từng bước.

Trong ví dụ này, tôi ngồi trong một mạng LAN riêng được kết nối với Internet thông qua bộ định tuyến. Vì mạng của chúng tôi chia sẻ một địa chỉ IP công cộng duy nhất, chúng tôi sử dụng NAT.

Vì vậy, khi tôi yêu cầu trang superuser.comsẽ tạo ra nhiều gói IP. Hãy nhìn vào một cái duy nhất.


Nguồn gói IP : 192.168.1.12(IP của tôi)
Đích: 64.34.119.12(superuser.com)

Bây giờ, hệ thống của tôi rất có thể được thiết lập tương tự như trong câu hỏi. Tôi có địa chỉ IP của riêng tôi ( 192.168.1.12), mặt nạ mạng con ( 255.255.255.0) và cổng mặc định ( 192.168.1.1). Bây giờ, vì trường Đích trong gói IP của tôi trỏ đến một mạng khác với mạng của tôi, nên nó được gửi đến cổng mặc định của tôi (chứ không phải trực tiếp đến máy tính).

Nhưng làm thế nào gói có thể đến cổng mặc định, nếu Điểm đến ở một nơi hoàn toàn khác?

Ethernet

Điều đó thật dễ dàng, bởi vì chúng tôi sử dụng địa chỉ của giao thức Ethernet cho điều đó. Chúng tôi chỉ đặt địa chỉ IP đích của chúng tôi trong gói IP và địa chỉ MAC của cổng mặc định của chúng tôi làm đích trong Khung Ethernet .

Bây giờ sẽ đảm bảo rằng cổng mặc định của chúng tôi có được gói cho superuser.com. Yay!

Bây giờ cổng có gói của chúng tôi và có thể gửi nó ngay trên đường dẫn của nó. Nhưng để chắc chắn rằng nó sẽ nhận được câu trả lời, trước tiên, nó cần thay thế địa chỉ Nguồn gói (nếu không superuser.comsẽ cố gửi câu trả lời đến một số thiết bị không tồn tại (có thể) bằng địa chỉ IP của tôi trên mạng của họ. rất hay.)
Vì vậy, bộ định tuyến của tôi sẽ đặt địa chỉ IP công cộng của nó vào trường Nguồn :


Nguồn gói IP : 92.69.127.243(IP công cộng của tôi)
Điểm đến: 64.34.119.12(superuser.com)

Bây giờ trò chơi tương tự cứ lặp đi lặp lại với tất cả các bộ định tuyến trên thế giới cho đến khi gói cuối cùng xuất hiện superuser.comvà một câu trả lời được tạo ra.

Câu trả lời

Trả lời Gói IP
Nguồn: 64.34.119.12(superuser.com)
Đích: 92.69.127.243(IP công cộng của tôi)

Ok, câu trả lời đã đến bộ định tuyến của tôi, bây giờ thì sao? Làm thế nào để bộ định tuyến của tôi biết để gửi câu trả lời 192.168.1.12?

TCP

Vâng, điều đó thực sự hoạt động bởi vì chúng tôi chỉ xem xét các phần IP và Ethernet của giao tiếp. Điều làm cho công việc này là phần TCP.

Bạn rất có thể biết rằng các máy chủ web thường chạy trên cổng 80. IP không có khái niệm về cổng . Điều đó đến từ TCP . Trong TCP, chúng ta có (như trong IP) một cổng nguồnđích .

Gói TCP của tôi tới superuser.com
Nguồn: 192.168.1.12(IP của tôi)
Cổng nguồn: 11111(cổng mà máy tính của tôi tạo thành)
Đích: 64.34.119.12(superuser.com)
Cổng đích:80

Khi bộ định tuyến của bạn gửi gói ban đầu đó (được gửi đến superuser.comcổng 80), anh ta sẽ đặt một cổng nguồn mới vào đó (như 12345).
Và đây là phần quan trọng! Anh sẽ nhớ sự thay thế đó!

Gói TCP của bộ định tuyến của tôi tới superuser.com
Nguồn: 92.69.127.243(IP công cộng của tôi)
Cổng nguồn: 12345(cổng mà bộ định tuyến của tôi tạo thành)
Điểm đến: 64.34.119.12(superuser.com)
Cổng đích:80

Vì vậy, gói câu trả lời mà bộ định tuyến nhận được thực sự trông như thế này:
Trả lời Gói TCP từ superuser.com
Nguồn: 64.34.119.12(superuser.com)
Cổng nguồn: 80
Destination: 92.69.127.243(IP công cộng của tôi)
Cổng đích: 12345(cổng mà bộ định tuyến của tôi tạo thành)

Vì vậy, bây giờ anh ta nhận được gói đó và thấy rằng nó là một cổng mà nó đã nhớ trước đó được gán cho các hoạt động NAT cho địa chỉ IP 192.168.1.12(địa chỉ IP của tôi).

Trả lời Gói TCP từ bộ định tuyến của tôi
Nguồn: 64.34.119.12(superuser.com)
Cổng nguồn: 80
Đích: 192.168.1.12(IP của tôi)
Cổng đích: 11111(cổng mà máy tính của tôi tạo thành)


1
Tôi đã chỉnh sửa câu trả lời của bạn, nó không hiển thị rõ ràng những gì đang xảy ra với số cổng. Tôi đã thêm nhiều ví dụ về các bước trung gian và số cổng trong đó mỗi bước.
Scott Chamberlain

1
@OliverSalzburg Tôi đang tìm kiếm câu hỏi tương tự đã được trả lời và lời giải thích của bạn đã giúp tôi nhớ lại, chỉ là một câu hỏi nhanh về điều này. Tự hỏi bao lâu bộ định tuyến sẽ giữ ánh xạ ngược này (cổng nguồn) có cảm giác như nó sẽ hết dung lượng nếu nó tiếp tục làm điều đó cho rất nhiều yêu cầu, liệu nó có xóa chúng quá thường xuyên không?
Ahmed

@Ahmed: Dung lượng bộ nhớ để theo dõi thông tin đó bị giới hạn. Có 65536 số cổng có thể, chúng được lưu trữ trong 2 byte. Vì vậy, để nhớ một địa chỉ IP (4 byte) cho mỗi cổng sẽ tổng hợp lên tới 65536 x 4 byte = 262144 byte = 256 kB. Tuy nhiên, các chi tiết cụ thể được triển khai trong bộ định tuyến, đó không phải là nhiều bộ nhớ.
Der Hochstapler

@Oliver Câu trả lời tuyệt vời, chính xác những gì tôi đang tìm kiếm! Tôi có một vài câu hỏi - (1) "cùng một trò chơi diễn ra với tất cả các bộ định tuyến trên thế giới" - điều đó có chính xác không? Chắc chắn trường nguồn sẽ không tiếp tục được thay thế ở mỗi bước? (2) Bộ định tuyến có nhớ các cổng đã mở dài hạn hay nó thường xuyên thả chúng cho các yêu cầu không đáp ứng? .
Jon Bentley

1
Làm thế nào để phản hồi ping ICMP trở lại máy tính trong mạng LAN? Liệu nó có một cái gì đó tương tự như cổng cho TCP? Làm thế nào về các giao thức khác?
Jean

11

Dịch Địa chỉ Mạng . Tóm lại, khi bộ định tuyến cổng mạng LAN riêng thay thế địa chỉ nguồn LAN riêng bằng địa chỉ công cộng riêng, nó sẽ sửa đổi gói theo cách nào đó như gán một số cổng duy nhất và vô nghĩa cục bộ mà nó ánh xạ trở lại nút LAN ban đầu và yêu cầu gửi đi . Nó nhớ ánh xạ cổng này vì vậy khi trả lời trở lại IP công cộng / cổng duy nhất #, nó (bộ định tuyến) biết cách hủy ánh xạ đó trở lại một trong các nút khởi tạo của nó. Đây cũng là cách bạn có thể chạy nhiều tab, trình duyệt hoặc phiên bản trình duyệt và trả lời cho từng yêu cầu trình duyệt trở lại đúng trình duyệt và tab.


2
JRobert: Thế còn các giao thức IP (ví dụ ICMP), ngoài tcp hoặc udp, không có số cổng thì sao?
Uri

0

Khi một gói ban đầu đến giao diện bên ngoài của bộ định tuyến, nó sẽ thay đổi địa chỉ IP đích của gói theo cấu hình chuyển tiếp cổng và truyền gói đã sửa đổi trên giao diện bên trong của bộ định tuyến (sau ARP thông thường nếu cần)

Gói đến máy chủ web và vẫn có địa chỉ IP nguồn bên ngoài sẽ được sử dụng làm địa chỉ đích cho bất kỳ phản hồi nào. Máy chủ theo đó giải quyết (các) gói trả lời đi theo cách thông thường với địa chỉ IP đích bằng với địa chỉ IP nguồn của yêu cầu. Vì địa chỉ IP của người yêu cầu là bên ngoài, nên gói được gửi, ở lớp MAC, tới giao diện bên trong của bộ định tuyến.

Lưu ý rằng có các mục tiêu khác nhau trong mỗi lớp mạng.


0

Chuyển tiếp cổng thường được thực hiện trên một bộ định tuyến hoặc thiết bị liền kề với nó. Khi một thiết bị trên mạng LAN gửi lưu lượng đến một thiết bị khác trên cùng mạng LAN đó, bộ định tuyến hoàn toàn không liên quan. Giao thông thậm chí không chạm vào nó. Quy tắc chuyển tiếp cổng của bạn sẽ không có hiệu lực đối với lưu lượng LAN-to-LAN.

Ethernet được thiết kế với cấu trúc liên kết "bus" trong đó mỗi máy tính được kết nối vật lý với cùng một phương tiện. Trong khi các thiết bị chuyển mạch hiện đại tối ưu hóa lưu lượng truy cập bằng cách tìm hiểu địa chỉ MAC ở đầu kia của cổng và sao chép lưu lượng phù hợp, cấu trúc liên kết "xe buýt" vẫn còn. Bất cứ điều gì được kết nối với một bộ chuyển đổi tiêu chuẩn đều có thể "trực tiếp" tiếp cận bất kỳ thứ gì khác (giả sử nó nằm trong cùng một mạng con) mà không phải "đi qua" một thiết bị trung gian như bộ định tuyến.

Bạn có thể bối rối nếu thiết bị bạn đang kết nối tất cả các máy tính có nhiều cổng Ethernet "LAN" và sau đó là một cổng "WAN". Những loại thiết bị này thực sự là cả một bộ định tuyến và chuyển đổi trong cùng một khung.

Vì vậy, bên trong mạng LAN của bạn, nếu máy chủ HTTP của bạn có địa chỉ 192.168.1.55, để truy cập vào bên trong mạng LAN của bạn, bạn sẽ cần nhập " http://192.168.1.55 " trên thanh địa chỉ của trình duyệt. Bộ định tuyến không bao giờ nhìn thấy nó. Để tiếp cận nó bên ngoài mạng LAN của bạn, bạn sẽ cần nhập IP bên ngoài của mình, tức là " http://256.99.88.77 : {cổng bạn đã chuyển tiếp ở đây}" hoặc bất cứ điều gì. Điều này không ảnh hưởng đến bộ định tuyến của bạn, chức năng NAT của bộ định tuyến hoạt động trên bộ định tuyến và sau đó bộ định tuyến gửi nó tới 192.168.1.55.


0

Rất đơn giản, khi một máy tính bên trong mạng LAN riêng khởi tạo kết nối đi, cổng NAT sẽ tự động tạo ánh xạ cổng cho nó. Chúng giống như ánh xạ cổng mà bạn đã nhập thủ công trước đây: {cổng công cộng, địa chỉ riêng, cổng riêng} và được sử dụng theo cùng một cách. Sự khác biệt lớn nhất với ánh xạ động là cổng NAT thường phải tự ý gán các cổng công cộng cho ánh xạ, khi số cổng dự kiến ​​đã được sử dụng.

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.