Sự khác biệt giữa địa chỉ IP 0.0.0.0 và 127.0.0.1 là gì?


220

Tôi biết rằng 127.0.0.1 ~ 127.255.255.254 là địa chỉ IP loopback cho hầu hết các hệ điều hành hiện đại và những địa chỉ IP này có thể được sử dụng để chỉ máy tính của chúng ta.

Nhưng 0,0.0.0 là gì? Có vẻ như nó cũng đề cập đến máy tính cục bộ, vậy sự khác biệt là gì?

Và, bạn có thể giải thích các kết nối IP sau cho tôi không:

ảnh chụp màn hình của netstat -an đầu ra


6
Cũng có một cái nhìn về câu hỏi này, vì nó cung cấp chi tiết về 0,0.0.0 là gì (và không phải): serverfault.com/questions/228629/ Kẻ
Ellie Kesselman

Một hệ điều hành hiện đại sẽ được sử dụng ::1làm địa chỉ loopback.
kasperd

Câu trả lời:


157

Điều duy nhất là bạn không nói "tất cả các địa chỉ nên có quyền truy cập" - điều đó được thực hiện trong (các) tường lửa của bạn và / hoặc phần mềm máy chủ và / hoặc các lớp bảo mật khác như tcpwrappers.

0.0.0.0, trong ngữ cảnh này, có nghĩa là "tất cả địa chỉ IP trên máy cục bộ" (thực tế có lẽ là "tất cả địa chỉ IPv4 trên máy cục bộ"). Vì vậy, nếu máy chủ web của bạn có hai địa chỉ IP là 192.168.1.1 và 10.1.2.1 và bạn cho phép một trình nền máy chủ web như apache nghe trên 0.0.0.0, thì cả hai địa chỉ IP đó đều có thể truy cập được. Nhưng chỉ những gì có thể liên hệ với những địa chỉ IP đó và (các) cổng web.

Lưu ý rằng, trong một ngữ cảnh khác (định tuyến) 0.0.0.0 thường có nghĩa là tuyến mặc định (tuyến đến "phần còn lại" của internet, ngoài các tuyến trong mạng cục bộ của bạn, v.v.).


vì vậy, ý bạn là ổ cắm của máy chủ web bị ràng buộc với bất kỳ địa chỉ khả dụng nào khi nó lắng nghe vào ngày 0.0.0.0?
onmyway133 17/07/13

0.0.0.0có nghĩa là tuyến mặc định chỉ khi nó đi kèm với tiền tố /0(hoặc netmask 0.0.0.0)
minmaxavg

Cần lưu ý: nếu một số quá trình lắng nghe vào ngày 0.0.0.0, nó có thể truy cập được tại các địa chỉ IP của tất cả các giao diện mạng của máy bao gồm địa chỉ hiện được cấu hình của giao diện vòng lặp. Nhưng nếu quy trình chỉ nghe trên một cổng <portNumber> của địa chỉ loopback, ví dụ 127.0.0.1, thì quá trình chỉ có thể truy cập từ cùng một máy bằng cách nhắm mục tiêu chính xác 127.0.0.1: <portNumber> . Hãy thử công cụ python này để chơi!
Gab 是

77

Khi một dịch vụ đang nghe trên 0.0.0.0, điều này có nghĩa là dịch vụ đang nghe trên tất cả các giao diện mạng được định cấu hình, khi nghe trên 127.0.0.1, dịch vụ chỉ bị ràng buộc với giao diện loopback (chỉ khả dụng trên máy cục bộ)


38

Địa chỉ IP 0.0.0.0có thể có ý nghĩa rất khác nhau, tùy thuộc vào nơi nó được sử dụng.

  • Đây không phải là địa chỉ hợp lệ được cung cấp cho giao diện mạng thực tế, cùng với bất kỳ địa chỉ nào khác trong mạng con 0.0.0.0/8 (tức là bất kỳ địa chỉ nào bắt đầu bằng 0.).
  • Nó không thể được sử dụng làm địa chỉ nguồn trên bất kỳ gói IP nào, trừ khi điều này xảy ra khi máy tính vẫn không biết địa chỉ IP của chính nó và nó đang cố lấy một địa chỉ (ví dụ cổ điển: DHCP).
  • Nếu được sử dụng trong bảng định tuyến, nó xác định cổng mặc định; một tuyến đến 0.0.0.0 là tuyến mặc định, tức là tuyến được sử dụng khi không có tuyến nào cụ thể hơn có sẵn cho địa chỉ đích.
  • Cuối cùng, khi nhìn thấy trong đầu ra của netstatlệnh (đó là những gì bạn đã yêu cầu), điều đó có nghĩa là một ổ cắm nhất định đang lắng nghe trên tất cả các địa chỉ IP có sẵn mà máy tính có; khi một máy tính có nhiều địa chỉ IP, một ổ cắm chỉ có thể được gắn kết với một địa chỉ và cặp cổng cụ thể hoặc với một cổng và tất cả các địa chỉ; nếu bạn thấy một địa chỉ IP ở đó, điều đó có nghĩa là socket chỉ nghe trên cổng đó và địa chỉ cụ thể đó; nếu bạn thấy 0.0.0.0, điều đó có nghĩa là nó đang nghe trên cổng đó trên tất cả các địa chỉ của máy, bao gồm cả loopback one ( 127.0.0.1).

3
Điều đó có nghĩa là gì nếu bạn cuộn 0,0.0.0? Là curl thực sự liên hệ và gửi một yêu cầu thông qua các giao diện có sẵn? Làm thế nào để nó biết giao diện nào là đúng? Tôi hiểu làm thế nào một máy chủ có thể lắng nghe trên tất cả các giao diện, nhưng cơ chế nào để máy khách yêu cầu tất cả các giao diện, chẳng hạn như khi tôi thực hiện curl 0.0.0.0 hoặc curl [::].
CMCDragonkai

1
HĐH sẽ rất có thể ngăn bạn làm điều đó, vì nó không chỉ có ý nghĩa từ góc độ mạng. Cố gắng ping 0.0.0.0trên một hệ thống Windows dẫn đến một thông báo lỗi.
Massimo

curl 0.0.0.0mang lại lợi nhuận connection refusedtrên Arch Linux. ping 0.0.0.0mặt khác, dường như là một bí danh ping 127.0.0.1hoạt động tốt.
Matthias Braun

@MatthiasBraun connection refusedcó thể là do curl theo mặc định cố gắng kết nối với cổng 80 / tcp. Cố gắng tìm các cổng mở của bạn với nmap -sV localhostvà sau đó, ví dụ: nếu 631 / tcp : curl 0.0.0.0:631.
Pablo A

27

Câu trả lời của Lee B là đúng, nhưng đây là một số RFC có liên quan trong trường hợp bạn quan tâm.

0,0.0.0:

Từ RFC1122 , Mục 3.1.2.3:

Bây giờ chúng tôi tóm tắt các trường hợp đặc biệt quan trọng đối với địa chỉ IP loại A, B và C, sử dụng ký hiệu sau cho địa chỉ IP:

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

Chỉ là, "máy chủ này trên mạng này" ... vì câu trả lời của Lee B nói rằng điều này dịch cho tất cả các địa chỉ IP có sẵn trên máy chủ của bạn. Lưu trữ một dịch vụ trên 0.0.0.0 sẽ tự động lưu trữ dịch vụ đó trên mọi giao diện địa chỉ.

127.0.0.1:

Từ RFC5735 :

127.0.0.0/8 - Khối này được chỉ định để sử dụng làm địa chỉ vòng lặp máy chủ Internet. Một datagram được gửi bởi một giao thức cấp cao hơn tới một địa chỉ ở bất cứ đâu trong khối này lặp lại bên trong máy chủ. Điều này thường được thực hiện bằng cách chỉ sử dụng 127.0.0.1 / 32 cho loopback. Như được mô tả trong [RFC1122], Mục 3.2.1.3, các địa chỉ trong toàn bộ khối 127.0.0.0/8 không xuất hiện hợp pháp trên bất kỳ mạng nào ở bất kỳ đâu.

Sự khác biệt giữa 0.0.0.0 và địa chỉ loopback 127.0.0.1 là địa chỉ loopback được thiết kế để cho phép giao diện IP hoạt động đầy đủ trong chính máy chủ, bất kể phần còn lại của thiết lập mạng, nếu có, trông như thế nào. Bất kỳ lưu lượng nào được gửi đến thiết bị loopback sẽ được nhận ngay lập tức trên thiết bị. Không quá nhiều khi mạng loopback "đề cập" đến máy chủ của chính bạn ... giống như bạn có một phân đoạn mạng nhỏ trong máy chủ của mình mà các thiết bị, quy trình và ổ cắm và có thể mở và kết nối.


4

Nói một cách đơn giản: Nghe trên 0.0.0.0 có nghĩa là nghe từ bất kỳ nơi nào có quyền truy cập mạng vào máy tính này, ví dụ, từ chính máy tính này, từ mạng cục bộ hoặc từ Internet, trong khi nghe trên 127.0.0.1 có nghĩa là chỉ nghe từ chính máy tính này

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.