127.0.0.1とlocalhostの違いは何ですか


157

で以下が定義されていると仮定します.../hosts

127.0.0.1 localhost

特に、接続をリッスンしているローカルで実行されているプロセスにアクセスする場合、サーバー名としての127.0.0.1との実際の違いは何localhostですか?


15
あなたは言うことができるlocalhostプロトコル独立しており、IPv4とIPv6の両方が動作します。
Steve-o

回答:


122

まあ、最も可能性の高い違いは、どこかで実際の検索を行う必要があることですlocalhost

を使用する127.0.0.1場合、(インテリジェントな)ソフトウェアはそれを直接IPアドレスに変換して使用します。の一部の実装でgethostbynameは、ドット形式(およびおそらく同等のIPv6形式)が検出され、ルックアップはまったく行われません。

それ以外の場合は、名前を解決する必要があります。また、hostsファイルが実際にその解決に(最初に、またはまったく)使用される保証はないためlocalhost、完全に異なる IPアドレスになる可能性があります。

つまり、一部のシステムでは、ローカルhostsファイルがバイパスされる可能性があります。このhost.confファイルは、Linux(および他の多くのUnices)でこれを制御します。


6
主な違いは、ここで述べたように、接続は、Unixのドメインソケット経由で行うことができることである。stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
ドンViegues

/etc/nsswitch.confhostsnssが実行されている場合、ホスト検索に最初にDNSを使用するかどうかを選択します。
マーク・Lakata

@DonVieguesこれは、MySQL固有であり、IMOの設計が悪い。これはlocalhostを参照し、IPを使用して接続する代わりにunix-socketを使用しようとしますが、127.0.0.1の場合はIPを使用します。
Arman Ordookhani

@ArmanOrdookhani AFAIK SSH経由でリモートホストに接続し、そこからMySQL(MySQLサーバーに到達するためのSSHトンネルなど)に接続している場合は、TC / IPを経由するため、127.0.0.1を使用する必要があります。ただし、同じマシンで実行されている2つのプロセスが接続する場合、localhost(UNIXソケット)の方が高速であるか、またはオーバーヘッドが発生します。ありがとう!
Don Viegues

1
@DonVieguesそうですね、UNIXソケットはTCP / IPよりオーバーヘッドが少ないです。この動作はMySQLに固有であり、OSレベルやネットワークレベルではないことに言及したいと思います。
アルマンOrdookhani

36

ウィキペディアはこれをうまくまとめています:

最近のコンピューターシステムでは、ホスト名としてのlocalhostは、127.0.0.0 / 8(ループバック)ネットブロックのIPv4アドレス(通常は127.0.0.1、またはIPv6の:: 1)に変換されます。

唯一の違いは、localhost解決先のシステムのDNSを検索することです。このルックアップは本当に、とても速いです。たとえばstackoverflow.com、アドレスバーに入力した(または、ここを指すブックマークレットを使用した)場合は、いずれにせよ、あなたはホスト名を通してここに来ました。localhost同様の機能を提供します。


11
これは実際に重要です。localhostはIPv6アドレスに解決できますが、127.0.0.1はできません。IPv6のみのシステムでlocalhostを使用しても機能しますが、IPv4を使用できないため、127.0.0.1は機能しません。
アーウィン・ヤンセン2017

32

一部のアプリケーションは「localhost」を特別に扱います。mysqlクライアントは、127.0.0.1上のサーバーへの接続にtcpを使用する代わりに、localhostをローカルUNIXドメインソケットへの接続要求として扱います。これはより高速で、別の認証ゾーンにある可能性があります。

私はlocalhostを127.0.0.1とは異なる方法で処理する他のアプリを知りませんが、おそらくいくつかあります。


8

まあ、IPによる方が速いです。

基本的に、サーバー名で呼び出すと、元のIPに変換されます。

ただし、ドメイン名が作成されたため、IPを記憶することは困難です。

個人的にはhttp://localhosthttp://127.0.0.1またはの代わりに使用しますhttp://username


localhostはより高速で、TCP / IPを使用しません
Don Viegues '21

@Don Viegues-あなたが言うことは、このスレッドの他の答えと矛盾しています。詳しく説明できますか?
Dikla、2015

はい、私の他のコメントをコピーして貼り付けます:主な違いは、ここに記載されているように、Unix Domain Socket経由で接続できることです:stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues、2015

5
@DonVieguesはlocalhost特別な方法で処理しているMySQLに固有です。他のアプリケーションは引き続きルックアップしますlocalhost
ウィリアムデニス2016

0

違いは何もありません。片方はもう片方より覚えやすいです。通常、IPアドレスに関連付ける名前を定義します。127.0.0.1にlocalhostを指定する必要はありません。任意の名前を指定できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.