Tại sao có sự khác biệt giữa địa chỉ ping ping localhost trực tuyến và địa chỉ IP ping địa phương IP?


32

Sử dụng cmdpingtrên Windows đã cho tôi các kết quả sau:

  • Ping "localhost":

Nhập mô tả hình ảnh ở đây

  • Ping "192.168.0.10" (địa chỉ IP cục bộ):

Nhập mô tả hình ảnh ở đây

Cả hai tình huống không giống nhau?

Ý tôi là, tôi đang ping cùng một giao diện, cùng một máy và cùng một địa chỉ. Tại sao tôi nhận được kết quả khác nhau như vậy?

EDIT: Đây là ipconfig /allmàn hình của tôi :

Nhập mô tả hình ảnh ở đây


18
Bạn không ping cùng một giao diện , ngay cả khi không có bất kỳ giao diện vật lý nào, bạn vẫn có một "máy chủ cục bộ".
Tamara Wijsman

Nếu theo "cùng một giao diện", bạn có nghĩa là giao diện loopback, bạn đã đúng. Nếu bạn có nghĩa là giao diện Ethernet, bạn đã sai vì một số lý do. (Ví dụ: làm thế nào :: 1 được liên kết với giao diện Ethernet? Và tại sao giao diện Ethernet - công việc của họ là gửi các gói Ethernet trên dây và nhận chúng từ dây - sẽ tham gia vào một hoạt động không bao giờ liên quan đến Gói Ethernet hay dây?)
David Schwartz

Tôi khá chắc chắn câu hỏi này đã được hỏi trên Stackoverflow trước đây, nếu tôi có thể tìm thấy nó ...
Chris S

Trung tâm của điều này được trả lời bởi SO này, tôi tin rằng: stackoverflow.com/questions/6938039/iêu
Dawson Toth

Tôi nghĩ rằng điều thú vị là: tại sao bạn nhận được một số byte được truyền và một TTL khi ping máy chủ từ xa, nhưng cả khi ping ping localhost? Không ai có thể quan tâm rằng định dạng địa chỉ IP là một chút tắt.
dhasenan

Câu trả lời:


46

Bạn không ping cùng một giao diện , không có bất kỳ giao diện vật lý nào bạn vẫn có một "máy chủ cục bộ".

Your localhostđược sử dụng để chỉ máy tính của bạn từ IP "bên trong" của nó, không phải từ bất kỳ IP "bên ngoài" nào của máy tính của bạn. Vì vậy, các gói ping không đi qua bất kỳ giao diện mạng vật lý nào; chỉ thông qua một giao diện vòng lặp ảo mà trực tiếp gửi các gói từ cổng này sang cổng khác mà không có bất kỳ bước nhảy vật lý nào.

Bạn vẫn có thể tự hỏi tại sao lại localhostgiải quyết ::1, trong khi theo truyền thống, chúng tôi sẽ mong đợi nó giải quyết theo địa chỉ IPv4 127.0.0.1. Lưu ý rằng .localhosttheo truyền thống là TLD (xem RFC 2606 ) trỏ lại địa chỉ IP của vòng lặp trở lại (đối với IPv4, xem RFC 3330 , đặc biệt là 127.0.0.0/8).

Tra cứu localhostbằng cách sử dụng nslookupcho chúng tôi:

nslookup localhost

...
Name:    localhost
Addresses:  ::1
          127.0.0.1

Do đó, Windows thích sử dụng địa chỉ IP quay lại IPv6 ::1(xem RFC 2373 ) vì nó được liệt kê đầu tiên.

Được rồi, vì vậy, nó đến từ đâu, hãy nhìn vào tập tin máy chủ.

type %WINDIR%\System32\Drivers\Etc\Hosts

...
# localhost name resolution is handled within DNS itself.
#       127.0.0.1       localhost
#       ::1             localhost
...

Hmm, chúng ta phải xem các cài đặt DNS của Windows.

Bài viết KB này cho chúng tôi biết về một cài đặt ảnh hưởng đến những gì Windows thích, được nhấn mạnh bằng chữ in đậm:

  1. Trong Registry Editor, xác định vị trí và sau đó nhấp vào khoá con đăng ký sau:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
    
  2. Bấm đúp vào DisconnectComponents để sửa đổi mục DisconnectComponents.

    Lưu ý: Nếu mục DisablesComponents không có sẵn, bạn phải tạo nó. Để làm điều này, hãy làm theo các bước sau:

    1. Trong menu Chỉnh sửa, trỏ đến Mới, rồi bấm Giá trị DWORD (32-bit).

    2. Nhập DisconnectComponents, sau đó nhấn ENTER.

    3. Bấm đúp vào DisconnectComponents.

  3. Nhập bất kỳ một trong các giá trị sau vào trường Dữ liệu giá trị: để định cấu hình giao thức IPv6 sang trạng thái mong muốn, sau đó bấm OK:

    • Nhập 0để kích hoạt tất cả các thành phần IPv6. (Cài đặt mặc định của Windows)
    • Nhập 0xffffffffđể vô hiệu hóa tất cả các thành phần IPv6, ngoại trừ giao diện loopback IPv6. Giá trị này cũng cấu hình Windows để sử dụng Giao thức Internet phiên bản 4 (IPv4) hơn IPv6 bằng cách sửa đổi các mục trong bảng chính sách tiền tố. Để biết thêm thông tin, hãy xem Lựa chọn địa chỉ nguồn và đích.
    • Nhập 0x20để thích IPv4 hơn IPv6 bằng cách sửa đổi các mục trong bảng chính sách tiền tố.
    • 0x10để vô hiệu hóa IPv6 trên tất cả các giao diện nontunnel (trên cả hai mạng LAN và Point-to-Point Protocol [PPP] giao diện).
    • Nhập 0x01để tắt IPv6 trên tất cả các giao diện đường hầm. Chúng bao gồm Giao thức địa chỉ đường hầm tự động nội bộ (ISATAP), 6to4 và Teredo.
    • Nhập 0x11để vô hiệu hóa tất cả các giao diện IPv6 ngoại trừ giao diện loopback IPv6.
  4. Khởi động lại máy tính để cài đặt này có hiệu lực.

Bảng chính sách tiền tố này là gì?

netsh interface ipv6 show prefixpolicies(hoặc prefixpolicytrên các phiên bản trước)

Precedence  Label  Prefix
----------  -----  --------------------------------
        50      0  ::1/128
        45     13  fc00::/7
        40      1  ::/0
        10      4  ::ffff:0:0/96
         7     14  2002::/16
         5      5  2001::/32
         1     11  fec0::/10
         1     12  3ffe::/16
         1     10  ::/96

Bảng này quyết định tiền tố nào được ưu tiên hơn các tiền tố khác trong quá trình phân giải DNS.

À, vì vậy bằng cách sử dụng KB đó, chúng tôi có thể thêm các mục ở đây biểu thị rằng IPv4 có quyền ưu tiên cao hơn IPv6.

Lưu ý: Không có lý do để ghi đè hành vi này, trừ khi bạn đang gặp vấn đề tương thích. Thay đổi cài đặt này trên Máy chủ Windows của chúng tôi đã phá vỡ máy chủ thư của chúng tôi, do đó, cần xử lý cẩn thận ...


Trên thực tế, 'localhost' không phải là tên miền cấp cao nhất, mà là tên máy chủ. Sự khác biệt là cực kỳ tinh tế, nhưng về cơ bản, mỗi tên miền là một tên máy chủ, nhưng không phải tất cả các tên máy chủ đều là tên miền. Theo quy ước, tên máy chủ kết thúc ở điểm dừng phải là FQDN và hầu hết tên máy chủ không kết thúc ở điểm dừng hoàn toàn có thể được chuyển đổi thành FQDN bằng cách nối thêm tên miền mẹ, quay lại nối thêm gốc nếu cần. Tuy nhiên, đó chỉ là những quy ước. 'Localhost' được RFC 2606 bảo lưu, để ngăn nó trở thành TLD, vì nó có khả năng không hoạt động đúng và thậm chí có thể gây ra sự cố.
Kevin Cathcart

2
Không chính xác, như RFC 2606 đề cập: The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use. Lưu ý việc sử dụng TLDvà lưu ý được xác định theo truyền thống . Trong thực tế, ping localhost.các công trình xác nhận rằng điều này ít nhất là đúng trong bối cảnh của câu hỏi này. Câu cuối cùng của bạn không phải là những gì RFC đã nói, xin vui lòng trích dẫn nếu nó "ngăn không cho nó trở thành TLD" bởi vì theo những gì nó nói thì theo truyền thống là TLD. Khác họ sẽ không đề cập đếnthe .localhost TLD
Tamara Wijsman

Tôi đã hơi quá mạnh. localhostcó thể là TLD nếu máy chủ DNS thực tế phản hồi cho nó, nhưng nói chung localhost thường được định nghĩa là tên máy chủ trong / etc / hosts, trong đó tên máy chủ được tra cứu trước khi cố gắng giải quyết qua DNS. Vì vậy, dig localhostthường không trả về bản ghi "A" cho 127.0.0.1 hoặc bản ghi AAAA cho :: 1. Điều đó có nghĩa là RFC bị nhầm khi nói traditionally been statically defined in host DNS implementations, nhưng được trả về bởi dịch vụ tra cứu tên của hệ thống, không phải lúc nào cũng sử dụng DNS.
Kevin Cathcart

@KevinCathcart: Chúng tôi đang có một câu hỏi về Windows ở đây và các phiên bản Windows đề cập đến việc này được thực hiện bởi chính DNS. nslookupkhông trả lại hồ sơ. Vì vậy, YMMV ...
Tamara Wijsman

1
@KevinCathcart digtrả lại hồ sơ A, AAAA và NS cho tôi localhost, bao gồm hồ sơ thẩm quyền cho:localhost. IN NS localhost.
KutuluMike

20

Các giao diện loopback tồn tại độc lập với giao diện Ethernet của bạn (s).

Ngay cả khi không có sự phức tạp của IPv6, bạn vẫn có hai địa chỉ riêng biệt.

Địa chỉ IPv4 lặp lại : 127.0.0.1
Địa chỉ IPv4 của giao diện Ethernet của bạn: 192.168.0.10

Giao diện loopback có thể nằm trong một lớp phần mềm khác, cách xa phần cứng thực hơn. Tôi nghi ngờ nó phụ thuộc vào bất kỳ cách nào trên trình điều khiển giao diện Ethernet cụ thể của bạn chẳng hạn.


11

Localhost và địa chỉ IP của bạn không giống nhau.

Localhost là một phần mềm đặc biệt chỉ có Địa chỉ IP, được liên kết với hệ thống của bạn. Localhost, hoặc 127.0.0.1, là một địa chỉ lặp lại. Nó luôn trỏ đến hệ thống của bạn và chỉ có thể truy cập từ máy tính của bạn. Định tuyến này xảy ra ở cấp độ HĐH và chắc chắn không bao giờ rời khỏi NIC ... Vì vậy, không có cơ hội nào để nó truy cập mạng ....

Ping địa chỉ IP của riêng bạn là tương tự nhưng nó có khả năng liên quan đến toàn bộ ngăn xếp mạng, vì nó cần phát hiện ra rằng đó là địa chỉ IP của bạn và định tuyến chính xác ...

Hiệu quả nên giống nhau, nhưng có thể có sự khác biệt.

Ví dụ, rút ​​cáp mạng của bạn. Ping địa chỉ IP tĩnh của bạn. Bạn có thể không có tuyến đường đến máy chủ, hoặc các lỗi khác. Bây giờ ping localhost hoặc 127.0.0.1, và nó sẽ hoạt động.


Vì vậy, ping localhost hoàn toàn vô dụng? Ý tôi là, nếu tôi muốn kiểm tra giao diện của mình ....
Diogo

4
@DiogoRocha đúng, ping localhost không chạm vào phần cứng bao giờ. Heck ping 192.168.0.10 cũng có thể không cung cấp cho bạn thông tin đáng tin cậy nếu trình điều khiển của card mạng chặn các yêu cầu được cung cấp cho chính nó.
Scott Chamberlain

@DiogoRocha Thuật ngữ của bạn bị tắt. 127.0.0.1 là một giao diện, nhưng là một giao diện ảo.
barlop

@Diogo, Không hẳn. Localhost cho phép bạn kiểm tra hành vi mạng của một ứng dụng hoặc xác minh rằng ngăn xếp mạng đang hoạt động .... Nhưng nó không kiểm tra trình điều khiển. Vì vậy, ví dụ, nếu bạn có Trình điều khiển NIC xấu, localhost có thể giúp chứng minh đó là trình điều khiển nic. Số dặm của bạn chắc chắn sẽ thay đổi mặc dù !!
Benjamin Schollnick

6

Tôi nhận ra từ các ảnh chụp màn hình câu hỏi này không phải về Linux, nhưng có lẽ nó là một "trường hợp điển hình" hữu ích.

Trên hệ điều hành đó, nếu bạn ping một trong các địa chỉ bộ điều hợp cục bộ của mình, nó sẽ được dịch sang thiết bị loopback (trường hợp hack đặc biệt). Điều này có nghĩa là các gói thực sự đi đến thiết bị loopback (có tất cả ý nghĩa mà bạn có thể nghĩ: ví dụ từ quan điểm tường lửa, các gói đó xuất hiện trên giao diện loopback và sẽ khớp với quy tắc cho giao diện đó).

Thiết bị được gán IP sẽ không bao giờ nhìn thấy các gói. (Điều này là tốt bởi vì nó sẽ không làm điều đúng với các gói đó: nó sẽ muốn gửi những kẻ hút ra ngoài.)

Tuy nhiên, nếu giao diện chứa IP đó bị sập, bạn đã mất kết nối đó. Ánh xạ tới loopback sẽ ngừng hoạt động.

Vì vậy, nói cách khác, đây là một thiết kế hoàn toàn khả thi khi coi các địa chỉ cục bộ đó là bí danh cho thiết bị loopback.

Mã tham khảo:

http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623

Hãy xem chức năng ip_route_output_slow. Cuộc gọi này fib_lookupvà nếu hàm này trả về mã RTN_LOCAL, dev_outđược viết lại thành loopback:

http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769


4

Có vẻ như bí danh "Localhost" đang phân giải thành vòng lặp IPv6 và khi bạn sử dụng rõ ràng một địa chỉ IPv4 thì rõ ràng là không.


6
Hệ điều hành dường như không đồng ý với bạn.
EBGreen

6
Không thành vấn đề, rõ ràng là nó đã được thiết lập cho máy tính, localhost đang quay lại vòng lặp ipv6.
Cướp

1
@DiogoRocha Không có địa chỉ như vậy :: 1 trong thế giới IPV4. 127.0.0.1 là IP dành riêng cho loopback ở đó. :: 1 tuy nhiên DOES tồn tại cho IPV6, và giống như 127.0.0.1, được dành riêng cho vòng lặp IPV6.
Andy

4
Làm thế nào để trả lời câu hỏi này? Bạn chỉ nói rõ ràng.
Tamara Wijsman

4
Xin hãy giải thích câu trả lời của bạn, điều này thực sự không giải thích bất cứ điều gì
Ivo Flipse

1

@ebwhite nói đúng về điều gì.

Bây giờ, lý do tại sao bạn có thể thiết lập Teredo (Tôi không thể nói từ ảnh chụp màn hình của bạn, chuyển nó sang tệp văn bản và dán toàn bộ đầu ra là tốt hơn) - hành vi của localhost là IPv6 phù hợp với các hệ thống trên tôi Mạng chỉ có IPv4 được cài đặt teredo, nhưng các hệ thống không có mạng hoạt động như bạn mong đợi sẽ nhận được 127.0.0.1khi bạn ping localhost. Tôi đã thử nghiệm điều này với Windows XP và cần xem hệ thống Windows 7 của tôi làm gì và cập nhật câu hỏi.

Nói chung, hệ thống mặc định IPv6 nếu IPv6 có sẵn như vậy, hệ thống của bạn đang làm việc như mong muốn .


anh ta không nhận được Byte được chuyển hoặc TTL, với một trong các ảnh chụp màn hình, đó có phải là IPv6 không? tại sao?
barlop

cũng phù hợp với những gì tôi thấy trên windows 7 - tôi đoán là thời gian khứ hồi là không đáng kể
Journeyman Geek
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.