この記事では、mysql_connect localhostと127.0.0.1の違い(ネットワーク層の説明)を中心に、ネットワーク通信レベルの違いについて説明します。お友達も参考にしてください
connects.php
コードは次のとおりです:
strace を使用してシステムコールを取得します:
コードは次のとおりです:
#127.0.0.1 -> インターネットソケット
connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (操作が進行中)
#localhost -> UNIX ドメインソケット
connect(7, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = 0
ソケットはもともとネットワーク通信用に設計されましたが、後にUNIXドメインソケットであるソケットフレームワークに基づいてIPCメカニズムが開発されました。
ネットワーク ソケットは同じホスト上のプロセス間通信 (ループバック アドレス 127.0.0.1 経由) にも使用できますが、IPC では UNIX ドメイン ソケットの方が効率的です。
ネットワーク プロトコル スタック、パッケージ化とアンパック、チェックサムの計算、シーケンス番号と応答の維持などを行う必要はありません。アプリケーション層のデータをあるプロセスから別のプロセスにコピーするだけです。
これは、ネットワーク プロトコルが信頼性の低い通信向けに設計されているのに対し、IPC メカニズムは本質的に信頼性の高い通信であるためです。
UNIX ドメイン ソケットには、TCP や UDP と同様に、ストリーム指向とパケット指向の 2 つの API インターフェイスも用意されていますが、メッセージ指向 (UDP) UNIX ドメイン ソケットも信頼性が高く、メッセージが失われたり順序が崩れたりすることはありません。