Localhost 和 127.0.0.1 有什么區別?你看懂了嗎?
前言
當前端開發人員在本地調試時,他們經常與本地主機交互,只需運行npm run在瀏覽器中打開他們的網頁,地址欄顯示類似http://localhost:xxx/index.html.
在運維查看ip的時候,會看到有一個127.0.0.1的地址。
圖片
那么他們兩者之間有什么區別呢?
什么是本地主機(localhost)
localhost 是一個域名,除了便于記憶之外,與用于訪問互聯網的域名本質上沒有什么不同。
localhost 的范圍僅限于本地機器——它的名字很清楚:“本地”指的是本地范圍內的東西。
每個人都可以在各自的計算機上使用 localhost,訪問各自的頁面內容,而不會互相干擾。
從域名到程序
要真正理解localhost,我們需要討論用戶如何通過域名訪問程序, 以百度為例。
- 在瀏覽器中輸入baidu.com后,首先向DNS查詢baidu.com的IP地址。
為什么是IP地址?打個比方,如果有人向您的公司發送包裹,遞送單將包括公司的地址、名稱和收件人等詳細信息。投遞過程依賴于地址進行路由,最終到達收件人。同樣,在網絡中,域名就像公司名稱,IP 地址就像物理地址。在網絡世界中,IP 地址對于定位相應的程序至關重要。DNS 的作用就像一個公司目錄,列出每個域對應的 IP 地址。有些域名可能未注冊,導致其 IP 地址無法找到,而另一些域名可能有多個 IP 地址,DNS 根據某些規則自動返回一個 IP 地址。購買域名后,域名服務提供商通常會提供 DNS 解析服務,在 DNS 中注冊域名及其對應的 IP 地址。IP地址從哪里來?每臺在線計算機都有一個IP地址,但個人計算機IP通常不適合公共訪問,類似于公司內部位置,內部人員清楚,外部人員則不清楚。對于 Baidu 提供的外部服務,需要公共 IP 地址,通常由互聯網服務提供商提供。例如,如果您的公司使用中國聯通訪問互聯網,您可以讓他們為您公司的網關服務器分配一個公共IP地址。網關服務器就像一個交換機,處理所有內部網絡通信,并設置轉發規則以將傳入請求路由到適當的服務器。
- 有了IP地址,瀏覽器向該地址發送請求,由操作系統將請求封裝成IP數據包,然后通過網絡進行傳輸。網絡的路由協議基于提供的 IP 地址并通過各種路由器,最終到達綁定到該 IP 的計算機。
- 一臺計算機上可能部署多個網絡應用程序。哪一個應該收到請求?這就是端口發揮作用的地方。每個網絡應用程序都可以綁定到一個或多個端口,系統可以防止重疊。在請求中指定端口會將其路由到正確的網絡應用程序。
但是當我們訪問Baidu時,我們并沒有指定端口。這是因為在未指定端口時,將使用默認端口(HTTP 為 80,HTTPS 為 443)。啟動網絡程序時必須綁定端口,盡管某些框架會自動選擇計算機上未使用的端口。
localhost 和 127.0.0.1 有什么區別?
有了上面的基礎知識,我們就很容易理解這個問題了。如前所述,localhost 是一個域名。
127.0.0.1 怎么樣?它是一個IP地址,當前機器的本地IP地址,只能在本機本身使用。您的計算機無需連接互聯網即可使用該IP地址,方便開發和測試網絡程序。我們調試的程序都是綁定到這個IP地址的。
值得注意的是,我們常見的IP地址的格式為XXXX,以點分為四段。實際上,它是一個 32 位二進制數,分為四個 8 位段,然后轉換為十進制數進行顯示。
該解決方案由每臺計算機單獨處理。每臺計算機上都有一個主機文件(/etc/hosts),其中包含一些硬編碼的 DNS 解析規則,包括將 localhost 解析為 127.0.0.1 的規則,這是一種約定。
圖片
如果您不想使用 localhost,也沒關系。您可以將其命名為任何名稱,例如 wodehost,并將其解析為 127.0.0.1。
您甚至可以使用 baidu.com,但它僅供您自己使用,不會影響其他任何人。
總結
localhost 和 127.0.0.1 都是用于指向本地計算機的地址,但它們之間存在一些差異:
- 表示方式:
localhost 是一個域名,它代表本地計算機。
127.0.0.1 是一個ip地址,也代表本地計算機。
- 解析方式:
localhost 被DNS解析成 127.0.0.1,即本地計算機的IP地址。
127.0.0.1 是一個環回地址,它總是指向本地計算機,不需要經過DNS解析。
- 網絡傳輸:
localhost 不經過網卡傳輸,不受網絡防火墻和網卡限制。
127.0.0.1 依賴于網卡,會受到防火墻和網卡的限制。
- 應用場景:
localhost 通常用于本地服務,因為它不會解析成IP,也不會占用網卡、網絡資源,因此在某些情況下使用localhost可能會更方便快捷。
127.0.0.1 也可以用來表示本地計算機,但在某些情況下,使用localhost可能會比使用127.0.0.1更方便,因為它可以避免DNS解析的開銷。
- 特殊用途:
在Linux上,當使用 localhost 來連接數據庫的時候,Mysql會使用Unix domain socket來傳輸數據,這是一種進程內通信(IPC)機制,不需要經過網絡協議棧,因此速度會更快。而使用 127.0.0.1 時,Mysql仍然會使用TCP/IP協議棧來進行數據傳輸。