2013-03-29 22 views
14

Tôi biết rằng khi một yêu cầu HTTP được thực hiện, các gói được gửi từ một cổng có số lượng cao có vẻ ngẫu nhiên (ví dụ: 4575) trên máy khách đến cổng 80 trên máy chủ. Sau đó, máy chủ gửi trả lời đến cùng một cổng có số cao, router biết cách định tuyến đến máy khách, và tất cả đã hoàn tất.Cổng nguồn cho HTTP được xác định như thế nào? Có bao giờ va chạm trong NAT?

Câu hỏi của tôi là: Cổng quay lại (4575 trong ví dụ này) được xác định như thế nào? Có phải ngẫu nhiên không? Nếu vậy, trong phạm vi nào? Có bất kỳ ràng buộc nào không? Điều gì xảy ra, ví dụ, nếu hai máy tính trong mạng LAN gửi yêu cầu HTTP với cùng một cổng nguồn đến cùng một trang web? Làm thế nào để router biết cái nào để định tuyến tới máy tính nào? Hoặc có lẽ tình huống này là hiếm hoi mà không ai làm phiền để chống lại nó?

+1

Tôi sẽ rất vui khi nghe downvoters giải thích tại sao họ không thích câu hỏi này. –

+0

Tôi đã không downvote - nhưng tôi đoán nó thực sự là "không phải là một câu hỏi lập trình" - ít nhất là trên bề mặt. – Brad

+2

Thậm chí nếu nó không phải là một câu hỏi lập trình nó có thể khá hữu ích, expecially để có được một ý tưởng chung. Hơn nữa có thể trở nên tiện dụng khi viết kịch bản hoặc mã tùy chỉnh khác –

Trả lời

14

NAT sẽ quyết định/xác định cổng đi cho kết nối/phiên NAT, thông qua phương tiện nội bộ riêng. Có nghĩa là, nó sẽ thay đổi tùy theo việc thực hiện NAT. Điều này có nghĩa là bất kỳ phản hồi nào sẽ quay trở lại cùng một cổng đi.

Đối với câu hỏi của bạn:

gì xảy ra, ví dụ, nếu hai máy tính trong một mạng LAN gửi HTTP yêu cầu với các cổng cùng một nguồn để cùng một trang web?

Nó sẽ gán cổng outbound khác nhau cho mỗi . Do đó, nó có thể phân biệt giữa hai câu trả lời mà nó nhận được. Một NAT sẽ tạo/duy trì ánh xạ các cổng đã dịch, tạo số cổng đi mới cho các phiên mới. Vì vậy, ngay cả khi có hai phiên "nội bộ" khác nhau, từ hai máy khác nhau, trên số cùng một số cổng, thì nó sẽ ánh xạ tới hai số cổng khác nhau ở mặt số gửi đi. Do đó, khi các gói dữ liệu trở lại trên các cổng tương ứng, nó sẽ biết cách dịch chúng trở lại đúng địa chỉ/cổng trên mạng LAN bên trong.

Diagram:

enter image description here

+0

Làm thế nào NAT có thể là cổng đặt cổng nguồn, khi NAT trên bộ định tuyến và yêu cầu có nguồn gốc từ máy tính? Không phải là yêu cầu gửi đến router, với một cổng nguồn, trước khi router thậm chí còn biết về sự tồn tại của nó? –

+3

Có - tuy nhiên, NAT sau đó sử dụng một cổng nguồn * khác nhau giữa nó và máy chủ bên ngoài. Vấn đề là nguồn gốc sử dụng một cổng, và NAT sử dụng một cổng khác. NAT dịch giữa hai số cổng này. Đây là cách nó có thể phân biệt hai cổng giống nhau từ các địa chỉ IP nội bộ khác nhau. – Brad

+1

Ở đây, tôi đã vẽ cho bạn một bức tranh [crappy] để cố gắng minh họa: http://www.bradgoodman.com/nat.png – Brad

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