Trong mạng máy tính, **localhost** là một tên máy chủ của *một* *máy tính*. Nó được sử dụng để truy cập các dịch vụ mạng đang chạy trên máy chủ thông qua giao diện mạng loopback. Việc sử dụng giao diện mạng loopback không cần giao diện mạng vật lý khác.

Loopback
--------

Cơ chế loopback cục bộ hữu ích cho thử nghiệm phần mềm trong quá trình phát triển độc lập với cấu hình mạng. Ví dụ: website được cài đặt cục bộ có thể được truy cập qua trình duyệt Web bằng URL *http://localhost* để hiển thị trang chủ của nó.

Tên *localhost* thường được phân giải thành địa chỉ loopback IPv4 là *127.0.0.1* và địa chỉ loopback IPv6 là *::1*.

Phân giải tên
-------------

Tiêu chuẩn IPv4 dành riêng toàn bộ khối địa chỉ 127.0.0.0/8 (hơn 16 triệu địa chỉ) cho mục đích loopback. Điều đó có nghĩa là bất kỳ gói tin nào được gửi tới bất kỳ địa chỉ nào trong số đó đều được loopback. Địa chỉ *127.0.0.1* là địa chỉ tiêu chuẩn cho lưu lượng truy cập qua loopback IPv4; phần còn lại không được hỗ trợ bởi tất cả các hệ điều hành. Tuy nhiên chúng có thể được sử dụng để thiết lập các ứng dụng máy chủ trên máy chủ lưu trữ, tất cả đều theo dõi trên cùng một số cổng. Tiêu chuẩn IPv6 chỉ định một địa chỉ duy nhất cho loopback là *::1*.

Phân giải của tên *localhost* thành một hoặc nhiều địa chỉ IP được cấu hình bằng các dòng sau ở trong tập tin hosts của hệ điều hành:

```
127.0.0.1    localhost
::1          localhost

```

Tuy nhiên, nó cũng có thể được phân giải với Hệ thống phân giải tên miền (DNS) nhưng truy vấn cho các tên này phải được phân giải cục bộ và không được chuyển tiếp tới máy chủ định danh từ xa.

Ngoài việc *localhost* ánh xạ cho các địa chỉ loopback (*127.0.0.1* và *::1*), *localhost* còn có thể ánh xạ tới địa chỉ IPv4 (loopback) khác và cũng có thể chỉ định hoặc thêm tên mới đến bất kỳ địa chỉ loopback nào. Việc ánh xạ của *localhost* đến các địa chỉ ngoài phạm vi địa chỉ loopback được chỉ định trong tệp hosts hoặc trong DNS sẽ không đạt được kết quả như mong muốn vì các ứng dụng có thể ánh xạ tên cục bộ.

Trong hệ thống tên miền, tên *localhost* được dành riêng như một tên miền cấp cao, ban đầu nó được bỏ qua để tránh nhầm lẫn với tên máy chủ được sử dụng cho mục đích loopback. Các tiêu chuẩn IETF cấm các công ty đăng ký tên miền gán tên *localhost*.

Tiêu chuẩn IETF
---------------

Tên *localhost* được dành riêng cho mục đích loopback bởi tiêu chuẩn RFC 6761 (*Tên miền Đặc Dụng*), đã đạt được chuẩn đề xuất trong tháng 2, năm 2013. Tiêu chuẩn đặt ra một số cân nhắc đặc biệt về việc sử dụng tên trong Hệ thống Tên Miền:

* Truy vấn địa chỉ IPv4 hoặc IPv6 cho tên localhost luôn luôn phải phân giải đến địa chỉ loopback tương ứng được quy định trong tiêu chuẩn riêng biệt.
* Ứng dụng có thể phân giải tên thành một địa chỉ loopback hoặc chuyển nó đến các cơ chế phân giải tên cục bộ.
* Khi một trình phân giải tên nhận được một địa chỉ (A hoặc AAAA) truy vấn cho *localhost* thì nó sẽ trả về địa chỉ loopback thích hợp. Ngược lại, nó trả về phản hồi tiêu cực đối với bất kỳ loại yêu cầu bản ghi nào khác. Không nên gửi các truy vấn cho *localhost* đến các máy chủ định danh trong bộ nhớ đệm.
* Để giảm gánh nặng cho các Hệ thống phân giải tên miền của máy chủ gốc, bộ nhớ đệm của máy chủ định danh không bao giờ được yêu cầu bản ghi máy chủ định danh cho *localhost* hoặc chuyển tiếp phân giải tới máy chủ định danh có thẩm quyền.
* Các công ty đăng ký DNS không được phép ủy quyền tên miền cấp cao nhất *localhost*.
* Mặc dù các điều khoản đã đề cập, khi máy chủ định danh có thẩm quyền nhận được các truy vấn cho 'localhost' thì hãy phân giải chúng một cách thích hợp.

Địa chỉ loopback IPv4 được dành ra riêng trong không gian địa chỉ IPv4 theo tiêu chuẩn "Địa chỉ IPv4 đặc dụng" của IETF (RFC 5735). Việc đặt trước có thể bắt nguồn từ tiêu chuẩn "Số được ấn định" vào tháng 11 năm 1986 (RFC 990).

Ngược lại Tiêu chuẩn "Kiến trúc địa chỉ IP phiên bản 6" của IETF (RFC 4291) chỉ dự trữ địa chỉ loopback IPv6 duy nhất là *::1* trong không gian địa chỉ IPv6. Tiêu chuẩn ngăn cản việc gán địa chỉ đó cho bất kỳ giao diện vật lý nào cũng như việc sử dụng nó làm địa chỉ nguồn hoặc địa chỉ đích trong bất kỳ gói tin nào được gửi đến các máy chủ từ xa. Bất kỳ gói nào như vậy được truyền sẽ không được định tuyến và sẽ bị loại bỏ bởi tất cả các bộ định tuyến hoặc máy chủ nhận được nó.

Xử lý gói tin
-------------

Quá trình xử lý bất kỳ gói nào được gửi đến một địa chỉ loopback được thực hiện trong lớp liên kết của ngăn xếp TCP/IP. Các gói như vậy không bao giờ được chuyển cho bất kỳ bộ điều khiển giao diện mạng (NIC) hoặc driver thiết bị phần cứng nào và không được xuất hiện bên ngoài hệ thống máy tính hoặc được định tuyến bởi bất kỳ bộ định tuyến nào. Điều này cho phép thực hiện việc kiểm tra phần mềm và các dịch vụ cục bộ trong trường hợp không có bất kỳ giao diện mạng phần cứng nào.

Các gói loopback được phân biệt với bất kỳ gói nào khác đi ngang qua ngăn xếp TCP/IP bằng địa chỉ IP đặc biệt mà chúng đã được đặt. Như vậy các dịch vụ đầu cuối nhận được chúng sẽ trả về phản hồi đến địa chỉ đích đã được chỉ định. Ví dụ: một dịch vụ HTTP có thể định tuyến các gói được gửi đến *127.0.0.99:80* và *127.0.0.100:80* đến các máy chủ Web khác nhau hoặc đến một máy chủ duy nhất trả về các trang web khác nhau. Để đơn giản hóa việc kiểm tra thì tập tin hosts có thể được cấu hình để cung cấp các tên thích hợp cho từng địa chỉ.

Các gói nhận được trên giao diện non-loopback với nguồn loopback hoặc có chứa địa chỉ đích phải bị loại bỏ. Các gói như vậy đôi khi được gọi là các gói Sao Hỏa Chúng có thể là những gói tin độc hại và có thể gây ra một số vấn đề nhưng ta có thể tránh được chúng bằng cách áp dụng bộ lọc bogon.

Các trường hợp đặc biệt
-----------------------

Các bản phát hành của cơ sở dữ liệu MySQL có sự phân biệt giữa việc sử dụng tên máy chủ *localhost* và việc sử dụng các địa chỉ *127.0.0.1* và *::1*. Nếu sử dụng đích đến là *localhost* trong giao diện kết nối máy khách của ứng dụng thì giao diện lập trình ứng dụng MySQL kết nối với cơ sở dữ liệu bằng cách sử dụng Ổ cắm tên miền Unix, trong khi kết nối TCP qua giao diện loopback yêu cầu phải sử dụng địa chỉ trực tiếp rõ ràng.

Một ngoại lệ đáng chú ý đến việc sử dụng các địa chỉ mạng *127.0.0.0/8* là việc sử dụng chúng trong việc theo dõi phát hiện lỗi Chuyển mạch nhãn đa giao thức (MPLS), trong đó nhờ có đặc tính không thể định tuyến của chúng giúp ích trong việc tránh phân phối các gói tin bị lỗi cho người dùng đầu cuối.

Xem thêm
--------

* Mạng riêng
* Địa chỉ IP riêng
* 0.0.0.0

Tham khảo
---------

1. ↑  "RFC4291: IP Version 6 Addressing Architecture". IETF. Section 2.5.3.
2. ↑  M. Cotton; L. Vegoda; R. Bonica; B. Haberman (April 2013). *Special-Purpose IP Address Registries*. Internet Engineering Task Force. BCP 153. RFC 6890. .  Updated by RFC 8190.
3. ↑  "RFC2606: Reserved Top Level DNS Names". IETF. Section 2.
4. ↑  "RFC6761: Special-Use Domain Names". Section 6.3: IETF.Quản lý CS1: địa điểm (liên kết)
5. ↑  "RFC5735: Special Use IPv4 Addresses". IETF. Section 4.
6. ↑  Raymond, Eric S. "The Jargon File".
7. ↑  "MySQL :: MySQL 5.5 Reference Manual :: 4.1 Overview of MySQL Programs".