跳转到内容

Localhost:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
KonaYukiCrash留言 | 贡献
无编辑摘要
 
(未显示19个用户的27个中间版本)
第1行: 第1行:
{{Multiple issues|
{{Rough translation|en:Localhost}}
{{Rough translation|en:Localhost}}
{{Copy edit|time=2024-07-12T10:13:06+00:00}}
在[[计算机网络]]中,'''localhost'''是一[[主]]名意为“本机”,“本地主机”。通过[[本地环回]]网络接口,它被用来访问本机运行的服务。本地环回网络会绕过任何本地网络接口硬件。
{{How-to|time=2024-07-12T10:13:06+00:00}}
}}
{{NoteTA
|G1 = IT
}}
{{Lowercase}}
在[[计算机网络]]中,'''localhost'''是一[[主機名|主機名称]],指當前用於訪問的計算機。localhost一是爲了環迴目的而保留它用于通过[[回环网卡|環迴]]網絡接口,访问本机运行的服务。使用環迴接口会绕过任何物理网络接口硬件。


== 本地環迴 ==
== 本地環迴 ==
運用本地環迴機制,便可在主機上運行網絡服務,期間不須安裝實體網絡介面卡,也無須將該服務開放予主機所在網絡。比方說,在主機內部安裝好網站只要在瀏覽器中輸入 <nowiki>http://localhost</nowiki> 這一網址,便可訪問網站,顯示其首頁
運用本地環迴機制,便可在主機上運行網絡服務,期間不須安裝實體網絡介面卡,也無須將該服務開放予主機所在網絡。例如,在设置本地安装的網站可通过<code><nowiki>http://localhost</nowiki></code>這一網址,訪問本地網站。


Localhost主機名稱,正常而言會解析[[IPv4]] 本地环回地址 127.0.0.1 ,以及 [[IPv6]] 本地环回地址 [::1]。<ref name="IPv6">{{cite web|title=RFC4291: IP Version 6 Addressing Architecture|url=http://tools.ietf.org/html/rfc4291#section-2.5.3|location=Section 2.5.3|publisher=IETF}}</ref>
localhost主機名稱一般[[域名系统|解析]]為[[IPv4]]本地环回地址<code>127.0.0.1</code>和[[IPv6]]本地环回地址<code>[::1]</code>。<ref name="IPv6">{{cite web|title=RFC4291: IP Version 6 Addressing Architecture|url=http://tools.ietf.org/html/rfc4291#section-2.5.3|location=Section 2.5.3|publisher=IETF|accessdate=2018-06-25|archive-date=2020-05-13|archive-url=https://web.archive.org/web/20200513020407/https://tools.ietf.org/html/rfc4291#section-2.5.3|dead-url=no}}</ref>


== 名称解析 ==
== 名称解析 ==
[[IPv4]] 网络标准将整个 127.0.0.0/8 地址块订为[[保留IP地址|保留地址]],供本地环回使用,整个地址块内有超过1600万个IP地址。所以,发送到这些地址(127.0.0.1 到 127.255.255.255)的所有数据包都会返回本机。 地址 127.0.0.1 IPv4 环回的常用标准地址; 其余地址并不是所有的操作系统都支持(多数人也不知道有这些地址)。但是,使用127.0.0.1/8内的不同地址,就可以在本机上设置侦听相同端口的多个服务器。 [[IPv6]] 标准只分配了一个本地环回地址:[::1]。
[[IPv4]]网络标准将整个127.0.0.0/8地址块订为[[保留IP地址|保留地址]],供本地环回使用,整个地址块内有超过1600万个IP地址。所以,发送到这些地址(127.0.0.1 到 127.255.255.255)的所有数据包都会返回本机。地址127.0.0.1是IPv4环回的常用标准地址其余地址并不是所有的操作系统都支持。但是,使用127.0.0.1/8内的不同地址,就可以在本机上设置侦听相同端口的多个服务器。[[IPv6]] 标准只分配了一个本地环回地址[::1]。


要将本地主机名localhost解析到一个或多个 IP 地址,一般是通过在操作系统的 hosts 文件中添加以下代码实现
要将本地主机名localhost解析到一个或多个IP地址,通过在操作系统的[[hosts文件]]中添加以下代码实现:
<pre>
<pre>
127.0.0.1 localhost
127.0.0.1 localhost
::1 localhost
::1 localhost
</pre>
</pre>
本地主机名也可以由 [[DNS]] 服务器解析,但这一主机名的解析请求,应在本地处理,而非发送到远程服务器。
本地主机名也可以由[[DNS]]服务器解析,但这一主机名的解析请求,应在本地处理,而非发送到远程服务器。


除了映射到环回地址(127.0.0.1 和 ::1)之外,localhost 还可以映射到其他 IPv4 环回地址,更可以将其他名称或附加名称分配给任何回环地址。不过, hosts 文件或 DNS 中为localhost这个主机名设置映射地址时,假如新设置的映射地址并不在原本指定的映射地址范围内,所作映射不一定会生效,因为应用程序内部可能已对localhost进行映射操作。
除了映射到环回地址(127.0.0.1 和 ::1)之外,localhost 还可以映射到其他IPv4环回地址,更可以将其他名称或附加名称分配给任何回环地址。不过,在hosts文件或DNS中为localhost这个主机名设置映射地址时,假如新设置的映射地址并不在原本指定的映射地址范围内,所作映射不一定会生效,因为应用程序内部可能已对localhost进行映射操作。


在[[域名]]系统中,localhost 被留作[[顶级域名]],最初的目的,是要被留出以避免与用于回送目的的主机名混淆。IETF 标准禁止域名注册商分配 localhost 名称。<ref>{{cite web |title=RFC2606: Reserved Top Level DNS Names |url=http://tools.ietf.org/html/rfc2606#section-2 |location=Section 2|publisher=IETF}}</ref>
在[[域名]]系统中,localhost被留作[[顶级域名]],最初的目的,是要被留出以避免与用于回送目的的主机名混淆。IETF标准禁止域名注册商分配localhost名称。<ref>{{cite web |title=RFC2606: Reserved Top Level DNS Names |url=http://tools.ietf.org/html/rfc2606#section-2 |location=Section 2 |publisher=IETF |accessdate=2018-06-25 |archive-date=2020-05-06 |archive-url=https://web.archive.org/web/20200506082532/https://tools.ietf.org/html/rfc2606#section-2 |dead-url=no }}</ref>


== IETF 标准 ==
== IETF 标准 ==
名称 '''localhost''' 由 <nowiki>RFC 6761</nowiki>(特殊用途域名)保留,用于环回。<ref>{{cite web|title=RFC6761: Special-Use Domain Names|url=http://tools.ietf.org/html/rfc6761#section-6.3|location=Section 6.3|publisher=IETF}}</ref>该域名在2013年2月达到了建议标准成熟度级别。该标准规定了一些特殊的考虑因素,规范其在域名解析系统中的使用:
名称 '''localhost''' 由 <nowiki>RFC 6761</nowiki>(特殊用途域名)保留,用于环回。<ref>{{cite web|title=RFC6761: Special-Use Domain Names|url=http://tools.ietf.org/html/rfc6761#section-6.3|location=Section 6.3|publisher=IETF|accessdate=2018-06-25|archive-date=2020-11-13|archive-url=https://web.archive.org/web/20201113073142/https://tools.ietf.org/html/rfc6761#section-6.3|dead-url=no}}</ref>该域名在2013年2月达到了建议标准成熟度级别。该标准规定了一些特殊的考虑因素,规范其在域名解析系统中的使用:


* localhost 的 IPv4 或 IPv6 地址查询必须始终解析为相应的环回地址,该地址在单独的标准中指定。
* localhost 的 IPv4 或 IPv6 地址查询必须始终解析为相应的环回地址,该地址在单独的标准中指定。
第30行: 第38行:
* DNS 注册商不能在顶级域 localhost 中委派域名。
* DNS 注册商不能在顶级域 localhost 中委派域名。
* 在上述规定的前提下,当权威名称服务器收到 'localhost' 查询请求时,应该适当处理。
* 在上述规定的前提下,当权威名称服务器收到 'localhost' 查询请求时,应该适当处理。
* IPv4 环回地址由 IETF 特殊用途 IPv4 地址标准(<nowiki>RFC 5735</nowiki>)在 IPv4 地址中保留空间,<ref>{{cite web|title=RFC5735: Special Use IPv4 Addresses |url=http://tools.ietf.org/html/rfc5735#section-4|location=Section 4|publisher=IETF}}</ref>可以追溯到 1986 年 11 月分配号码标准(<nowiki>RFC 990</nowiki>)。<br />
IPv4 环回地址由 IETF 特殊用途 IPv4 地址标准(<nowiki>RFC 5735</nowiki>)在 IPv4 地址中保留空间,<ref>{{cite web|title=RFC5735: Special Use IPv4 Addresses|url=http://tools.ietf.org/html/rfc5735#section-4|location=Section 4|publisher=IETF|accessdate=2018-06-25|archive-date=2020-12-25|archive-url=https://web.archive.org/web/20201225211015/https://tools.ietf.org/html/rfc5735#section-4|dead-url=no}}</ref>可以追溯到 1986 年 11 月分配号码标准(<nowiki>RFC 990</nowiki>)。


相比之下,IETF IPv6 寻址体系结构标准(<nowiki>RFC 4291</nowiki>)在IPv6地址空间内保留单个IPv6 环回地址 ::1。 该标准排除了将该地址分配给任何物理接口以及在任何数据包中将其用作发送到远程主机的源地址或目标地址的用途。任何这类被错误传输的数据包都不应该被路由转发,并且应该被接收它的所有路由器或主机丢弃。
IPv4 环回地址由 IETF 特殊用途 IPv4 地址标准(<nowiki>RFC 5735</nowiki>)在 IPv4 地址中保留空间,可以追溯到 1986 年 11 月分配号码标准(<nowiki>RFC 990</nowiki>)。

相比之下,IETF IPv6 寻址体系结构标准(<nowiki>RFC 4291</nowiki>)在IPv6地址空间内保留单个IPv6 环回地址 ::1。 该标准排除了将该地址分配给任何物理接口,以及在任何数据包中,将其用作发送到远程主机的源地址或目标地址的用途。任何这类被错误传输的数据包都不应该被路由转发,并且应该被接收它的所有路由器或主机丢弃。


== 數據包處理 ==
== 數據包處理 ==
任何發往環迴地址的數據包,其處理都在 [[TCP/IP]] 協定疊的[[数据链路层|链路层]]中實現的。這些數據包不會交由[[網路卡]](NIC)或者裝置驅動程式處理,既不應在電腦系統以外出現,也不可經[[路由器]]轉發。如此一來,電腦上即使沒有實體網路卡,也可進行軟體測試或者運行本機服務。
任何發往環迴地址的數據包,其處理都在 [[TCP/IP]] 協定疊的[[数据链路层|链路层]]中實現的。這些數據包不會交由[[網路卡]](NIC)或者裝置驅動程式處理,既不應在電腦系統以外出現,也不可經[[路由器]]轉發。如此一來,電腦上即使沒有實體網路卡,也可進行軟體測試或者運行本機服務。


环回数据包与其他任何通过 TCP/IP 协议栈的数据包仅通过寻址到的特殊IP地址进行区分。因此,最终接收到的服务将根据指定的目的地进行响应。例如,HTTP服务可以将发往127.0.0.99:80 和 127.0.0.100:80 的数据包路由到不同的 Web 服务器,或发送到返回不同网页的单一服务器。为了简化这种测试,可以将 hosts 文件配置为为每个地址提供合适的名称。
环回数据包与其他任何通过 TCP/IP 协议栈的数据包仅通过寻址到的特殊IP地址进行区分。因此,最终接收到的服务将根据指定的目的地进行响应。例如,HTTP服务可以将发往127.0.0.99:80 和 127.0.0.100:80 的数据包路由到不同的网络服务器,或发送到返回不同网页的单一服务器。为了简化这种测试,可以将 hosts 文件配置为为每个地址提供合适的名称。


具有环回源地址或目标地址的数据包,在非环回接口上收到则必须被删除。这种数据包有时被称为火星包。和其他虚假数据包一样,它们可能是恶意的,它们带来的问题可以通过 bogon 滤波避免。<ref>{{cite web|author=Raymond, Eric S.|title=The Jargon File|url=http://www.catb.org/~esr/jargon/html/M/martian.html}}</ref>
具有环回源地址或目标地址的数据包,在非环回接口上收到则必须被删除。这种数据包有时被称为[[火星数据包|火星包]]。和其他虚假数据包一样,它们可能是恶意的,它们带来的问题可以通过 bogon 滤波避免。<ref>{{cite web|author=Raymond, Eric S.|title=The Jargon File|url=http://www.catb.org/~esr/jargon/html/M/martian.html|accessdate=2018-06-25|archive-date=2020-11-06|archive-url=https://web.archive.org/web/20201106220734/http://www.catb.org/~esr/jargon/html/M/martian.html|dead-url=no}}</ref>


== 特殊情况 ==
== 特殊情况 ==
MySQL 数据库的版本区分使用主机名 localhost 与使用地址 127.0.0.1 和 ::1。<ref>{{cite web|url=http://dev.mysql.com/doc/refman/5.5/en/programs-overview.html|title=MySQL :: MySQL 5.5 Reference Manual :: 4.1 Overview of MySQL Programs|publisher=}}</ref><ref>{{cite web|url=http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html|title=unix domain sockets vs. internet sockets|publisher=}}</ref>当在应用程序的客户端连接器接口中使用 localhost 作为目标时,MySQL 应用程序编程接口使用 Unix 域套接字连接到数据库,而通过环回接口的 TCP 连接需要直接使用显式地址。
在 [[MySQL]] 数据库上,使用主机名 localhost 与地址 127.0.0.1 和 ::1 是有差异的。<ref>{{cite web|url=http://dev.mysql.com/doc/refman/5.5/en/programs-overview.html|title=MySQL :: MySQL 5.5 Reference Manual :: 4.1 Overview of MySQL Programs|publisher=|accessdate=2018-06-25|archive-date=2019-08-21|archive-url=https://web.archive.org/web/20190821131003/https://dev.mysql.com/doc/refman/5.5/en/programs-overview.html|dead-url=no}}</ref><ref>{{cite web|url=http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html|title=unix domain sockets vs. internet sockets|publisher=|accessdate=2018-06-25|archive-date=2020-11-12|archive-url=https://web.archive.org/web/20201112015602/https://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html|dead-url=no}}</ref>当在应用程序的客户端连接器接口中使用 localhost 作为目标时,MySQL 的 API 使用 [[Unix域套接字|Unix 域套接字]]连接到数据库,而通过环回接口的 TCP 连接需要直接使用显式地址。


在 [[Android Studio]] 開發中所使用的模擬器,其網路環境的本地主機名稱 localhost 地址通常為 10.0.2.2,但其實它本身就是 127.0.0.1 地址。<ref>{{cite web|url=https://developer.android.com/studio/run/emulator-networking|title=Set up Android Emulator networking|publisher=|accessdate=2020-03-09|archive-date=2020-11-26|archive-url=https://web.archive.org/web/20201126222430/https://developer.android.com/studio/run/emulator-networking|dead-url=no}}</ref>
使用 127.0.0.0/8 网络地址时,一个值得注意的例外是,它们用在多协议标签交换(MPLS)跟踪路由错误检测中,它们的不可路由属性提供了一种方便的方法来避免向最终用户传送错误数据包。


使用 127.0.0.0/8 网络地址时,一个值得注意的例外是,它们用在[[多协议标签交换]](MPLS)跟踪路由错误检测中,它们的不可路由属性提供了一种方便的方法来避免向最终用户传送错误数据包。
== 另见 ==


==參見==
* [[专用网络]]
* [[专用网络]]
* [[保留IP位址]]
* [[保留IP位址]]


== 参见 ==
==參考資料==
{{reflist}}
{{reflist}}



2024年12月18日 (三) 09:17的最新版本

计算机网络中,localhost是一個主機名称,指當前用於訪問的計算機。localhost一名是爲了環迴目的而保留,它用于通过環迴網絡接口,访问本机运行的服务。使用環迴接口会绕过任何物理网络接口硬件。

本地環迴

[编辑]

運用本地環迴機制,便可在主機上運行網絡服務,期間不須安裝實體網絡介面卡,也無須將該服務開放予主機所在網絡。例如,在设置好本地安装的網站后,可通过http://localhost這一網址,来訪問本地網站。

localhost這个主機名稱一般會解析IPv4本地环回地址127.0.0.1IPv6本地环回地址[::1][1]

名称解析

[编辑]

IPv4网络标准将整个127.0.0.0/8地址块订为保留地址,供本地环回使用,整个地址块内有超过1600万个IP地址。所以,发送到这些地址(127.0.0.1 到 127.255.255.255)的所有数据包都会返回本机。地址127.0.0.1是IPv4环回的常用标准地址,其余地址并不是所有的操作系统都支持。但是,使用127.0.0.1/8内的不同地址,就可以在本机上设置侦听相同端口的多个服务器。IPv6 标准只分配了一个本地环回地址:[::1]。

要将本地主机名localhost解析到一个或多个IP地址,可通过在操作系统的hosts文件中添加以下代码实现:

127.0.0.1    localhost
::1          localhost

本地主机名也可以由DNS服务器解析,但这一主机名的解析请求,应在本地处理,而非发送到远程服务器。

除了映射到环回地址(127.0.0.1 和 ::1)之外,localhost 还可以映射到其他IPv4环回地址,更可以将其他名称或附加名称分配给任何回环地址。不过,在hosts文件或DNS中为localhost这个主机名设置映射地址时,假如新设置的映射地址并不在原本指定的映射地址范围内,所作映射不一定会生效,因为应用程序内部可能已对localhost进行映射操作。

域名系统中,localhost被留作顶级域名,最初的目的,是要被留出以避免与用于回送目的的主机名混淆。IETF标准禁止域名注册商分配localhost名称。[2]

IETF 标准

[编辑]

名称 localhost 由 RFC 6761(特殊用途域名)保留,用于环回。[3]该域名在2013年2月达到了建议标准成熟度级别。该标准规定了一些特殊的考虑因素,规范其在域名解析系统中的使用:

  • localhost 的 IPv4 或 IPv6 地址查询必须始终解析为相应的环回地址,该地址在单独的标准中指定。
  • 应用可以自行解析环回地址,或者将他们交由本地解析器机制。
  • 当名称解析器收到 localhost 的地址(A 或 AAAA)查询时,它应该返回适当的环回地址,以及其他请求的记录类型的请求响应。不应将本地主机的查询转发到缓存名称服务器。
  • 为了避免使域名系统根服务器负担流量,缓存名称服务器不应请求本地主机的名称服务器记录,也不要向权威名称服务器转发解析。
  • DNS 注册商不能在顶级域 localhost 中委派域名。
  • 在上述规定的前提下,当权威名称服务器收到 'localhost' 查询请求时,应该适当处理。

IPv4 环回地址由 IETF 特殊用途 IPv4 地址标准(RFC 5735)在 IPv4 地址中保留空间,[4]可以追溯到 1986 年 11 月分配号码标准(RFC 990)。

相比之下,IETF IPv6 寻址体系结构标准(RFC 4291)在IPv6地址空间内保留单个IPv6 环回地址 ::1。 该标准排除了将该地址分配给任何物理接口,以及在任何数据包中,将其用作发送到远程主机的源地址或目标地址的用途。任何这类被错误传输的数据包都不应该被路由转发,并且应该被接收它的所有路由器或主机丢弃。

數據包處理

[编辑]

任何發往環迴地址的數據包,其處理都在 TCP/IP 協定疊的链路层中實現的。這些數據包不會交由網路卡(NIC)或者裝置驅動程式處理,既不應在電腦系統以外出現,也不可經路由器轉發。如此一來,電腦上即使沒有實體網路卡,也可進行軟體測試或者運行本機服務。

环回数据包与其他任何通过 TCP/IP 协议栈的数据包仅通过寻址到的特殊IP地址进行区分。因此,最终接收到的服务将根据指定的目的地进行响应。例如,HTTP服务可以将发往127.0.0.99:80 和 127.0.0.100:80 的数据包路由到不同的网络服务器,或发送到返回不同网页的单一服务器。为了简化这种测试,可以将 hosts 文件配置为为每个地址提供合适的名称。

具有环回源地址或目标地址的数据包,在非环回接口上收到则必须被删除。这种数据包有时被称为火星包。和其他虚假数据包一样,它们可能是恶意的,它们带来的问题可以通过 bogon 滤波避免。[5]

特殊情况

[编辑]

MySQL 数据库上,使用主机名 localhost 与地址 127.0.0.1 和 ::1 是有差异的。[6][7]当在应用程序的客户端连接器接口中使用 localhost 作为目标时,MySQL 的 API 使用 Unix 域套接字连接到数据库,而通过环回接口的 TCP 连接需要直接使用显式地址。

Android Studio 開發中所使用的模擬器,其網路環境的本地主機名稱 localhost 地址通常為 10.0.2.2,但其實它本身就是 127.0.0.1 地址。[8]

使用 127.0.0.0/8 网络地址时,一个值得注意的例外是,它们用在多协议标签交换(MPLS)跟踪路由错误检测中,它们的不可路由属性提供了一种方便的方法来避免向最终用户传送错误数据包。

參見

[编辑]

參考資料

[编辑]
  1. ^ RFC4291: IP Version 6 Addressing Architecture. Section 2.5.3: IETF. [2018-06-25]. (原始内容存档于2020-05-13). 
  2. ^ RFC2606: Reserved Top Level DNS Names. Section 2: IETF. [2018-06-25]. (原始内容存档于2020-05-06). 
  3. ^ RFC6761: Special-Use Domain Names. Section 6.3: IETF. [2018-06-25]. (原始内容存档于2020-11-13). 
  4. ^ RFC5735: Special Use IPv4 Addresses. Section 4: IETF. [2018-06-25]. (原始内容存档于2020-12-25). 
  5. ^ Raymond, Eric S. The Jargon File. [2018-06-25]. (原始内容存档于2020-11-06). 
  6. ^ MySQL :: MySQL 5.5 Reference Manual :: 4.1 Overview of MySQL Programs. [2018-06-25]. (原始内容存档于2019-08-21). 
  7. ^ unix domain sockets vs. internet sockets. [2018-06-25]. (原始内容存档于2020-11-12). 
  8. ^ Set up Android Emulator networking. [2020-03-09]. (原始内容存档于2020-11-26).