Sự khác biệt giữa 127.0.0.1 và localhost là gì


157

Giả sử như sau được định nghĩa trong .../hosts:

127.0.0.1 localhost

Điều gì, nếu có, là sự khác biệt thực tế giữa việc sử dụng 127.0.0.1localhostnhư tên máy chủ, đặc biệt là khi nhấn các quy trình đang chạy cục bộ đang lắng nghe các kết nối?


15
Bạn có thể nói localhostlà giao thức độc lập, cả IPv4 và IPv6 sẽ hoạt động.
Steve-o

Câu trả lời:


122

Vâng, sự khác biệt rất có thể là bạn vẫn phải làm một thực tế tra cứu của localhostnơi nào đó.

Nếu bạn sử dụng 127.0.0.1, thì phần mềm (thông minh) sẽ biến trực tiếp thành địa chỉ IP và sử dụng nó. Một số triển khai gethostbynamesẽ phát hiện định dạng chấm (và có lẽ là định dạng IPv6 tương đương) và hoàn toàn không tra cứu.

Nếu không, tên phải được giải quyết. Và không có gì đảm bảo rằng hoststệp của bạn sẽ thực sự được sử dụng cho độ phân giải đó (đầu tiên hoặc localhosthoàn toàn ) vì vậy có thể trở thành một địa chỉ IP hoàn toàn khác .

Điều đó có nghĩa là, trên một số hệ thống, một hoststệp cục bộ có thể được bỏ qua. Các host.confđiều khiển tập tin này trên Linux (và nhiều unices khác).


6
Sự khác biệt chính là kết nối có thể được thực hiện thông qua Unix Domain Socket, như đã nêu ở đây: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues

/etc/nsswitch.confchọn nếu hostshoặc DNS được sử dụng trước tiên để tra cứu máy chủ, nếu nss đang chạy.
Mark Lakata

@DonViegues Đó là thiết kế xấu của IMO và IMO. Nó sẽ thấy localhost và cố gắng sử dụng unix-socket thay vì kết nối bằng IP nhưng đối với 127.0.0.1 thì nó chỉ sử dụng IP.
Arman Ordookhani

@ArmanOrdookhani AFAIK nếu bạn đang kết nối với máy chủ từ xa thông qua SSH và sau đó đến MySQL (như đường hầm SSH để đến máy chủ MySQL), bạn phải sử dụng 127.0.0.1, vì toàn bộ điều này sẽ vượt qua TC / IP. Nhưng nếu 2 quá trình chạy trên cùng một máy muốn kết nối, localhost (ổ cắm unix) sẽ nhanh hơn / có chi phí hoạt động. Cảm ơn!
Don Viegues

1
@DonViegues Vâng, bạn đúng là ổ cắm unix có ít chi phí hoạt động hơn TCP / IP. Tôi chỉ muốn đề cập đến hành vi này là dành riêng cho MySQL và không phải là một cái gì đó ở cấp độ hệ điều hành hoặc mạng.
Arman Ordookhani

35

Wikipedia tổng hợp điều này tốt:

Trên các hệ thống máy tính hiện đại, localhost với tư cách là tên máy chủ dịch sang địa chỉ IPv4 trong khối mạng 127.0.0.0/8 (loopback), thường là 127.0.0.1 hoặc :: 1 trong IPv6.

Sự khác biệt duy nhất là nó sẽ tìm kiếm trong DNS cho hệ thống những gì localhostgiải quyết. Tra cứu này là thực sự, thực sự nhanh chóng. Ví dụ, để nhận được stackoverflow.combạn đã nhập vào thanh địa chỉ (hoặc sử dụng bookmarklet được chỉ ở đây). Dù bằng cách nào, bạn đã đến đây thông qua một tên máy chủ. localhostcung cấp một chức năng tương tự.


11
Điều này thực sự quan trọng. localhost có thể phân giải thành địa chỉ IPv6, trong khi 127.0.0.1 thì không thể. Sử dụng localhost trên hệ thống chỉ IPv6 có thể hoạt động, trong khi 127.0.0.1 sẽ không có vì IPv4 không khả dụng.
Erwin Jansen

31

một số ứng dụng sẽ xử lý "localhost" đặc biệt. máy khách mysql sẽ coi localhost như một yêu cầu kết nối với ổ cắm miền unix cục bộ thay vì sử dụng tcp để kết nối với máy chủ trên 127.0.0.1. Điều này có thể nhanh hơn và có thể ở một khu vực xác thực khác.

Tôi không biết các ứng dụng khác đối xử với localhost khác với 127.0.0.1, nhưng có lẽ có một số ứng dụng.


8

Vâng, bởi IP là nhanh hơn.

Về cơ bản, khi bạn gọi bằng tên máy chủ, nó được chuyển đổi thành IP gốc.

Nhưng sẽ rất khó để ghi nhớ một IP, vì lý do này, tên miền đã được tạo.

Cá nhân tôi sử dụng http://localhostthay vì http://127.0.0.1hoặc http://username.


localhost nhanh hơn, không sử dụng TCP / IP
Don Viegues

@Don Viegues - những gì bạn nói trái ngược với các câu trả lời khác trong chủ đề này. Bạn có thể xây dựng?
Dikla 5/2/2015

Có, tôi sẽ sao chép và dán nhận xét khác của tôi: Sự khác biệt chính là kết nối có thể được thực hiện thông qua Unix Domain Socket, như đã nêu ở đây: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues 6/2/2015

5
@DonViegues đó là cụ thể cho MySQL, được xử lý localhosttrong một cách đặc biệt . Các ứng dụng khác có thể vẫn sẽ tra cứu localhost.
William Denniss

0

Không có gì khác nhau. Một cái dễ nhớ hơn cái kia. Nói chung, bạn xác định một tên để liên kết với một địa chỉ IP. Bạn không phải chỉ định localhost cho 127.0.0.1, bạn có thể chỉ định bất kỳ tên nào bạn muốn.


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.