Androidエミュレーターが実行されると、仮想ネットワークが自動生成されます。
そして、エミュレーターは、仮想ネットワークに接続された一つのコンピュータとして扱われます。
仮想ネットワークは開発マシン(Android Studioが起動しているマシン)にも接続されてるので、エミュレーターから開発マシンへ、ネットワークを介した通信が可能です。
開発マシンへWebサーバーを構築すれば、サーバーと通信を行うアプリ開発が行えます。
開発者の机の上に、バックエンド(サーバ側)とフロントエンド(クライアント側)の開発環境が得られて、とても便利です。
※環境:Android Studio Otter | 2025.2.1
Android emulator version 36.2.12.0
仮想ネットワーク
仮想ネットワークは図のような構成になっています。

仮想ネットワークの構成についてGoogleのドキュメントに記載がありますが、API毎に異なっている場合があるようです。
特に、wlan(WiFi)とradio(3G通信)は「独自のドメインを持ったり/持たなかったり」します。
仮想DNS(10.0.2.3)、Emulator(10.0.2.15)、Alias(10.0.2.2)は、どのAPIでも確実に存在しています。
※「adb shell」で実行
※ API34の場合(Googleのドキュメントに最も近い構成)
※ 3G通信がeth(10.0.2.15)に割り当てられている
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope: Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:29 errors:0 dropped:0 overruns:0 frame:0
TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3404 TX bytes:3404
dummy0 Link encap:Ethernet HWaddr 1a:fa:15:dd:08:38
inet6 addr: fe80::18fa:15ff:fedd:838/64 Scope: Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:8352
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56 Driver virtio_net
inet addr:10.0.2.15 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fec0::5054:ff:fe12:3456/64 Scope: Site
inet6 addr: fe80::5054:ff:fe12:3456/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2350 TX bytes:6313
wlan0 Link encap:Ethernet HWaddr 02:15:b2:00:00:00 Driver mac80211_hwsim
inet addr:10.0.2.16 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fec0::2d03:d321:266f:5d95/64 Scope: Site
inet6 addr: fe80::d53e:5a4c:95c1:a454/64 Scope: Link
inet6 addr: fec0::908f:6e20:efe6:91f2/64 Scope: Site
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1180 errors:0 dropped:0 overruns:0 frame:0
TX packets:717 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1574228 TX bytes:75204
# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.0.0 * 255.0.0.0 U 0 0 0 eth0
10.0.2.0 * 255.255.255.0 U 0 0 0 wlan0
特殊エイリアス
「10.0.2.2」は開発マシンのループバックの別名です。
ですので、10.0.2.2に対するアクセスは、開発マシンの127.0.0.1に対するアクセスと見なされます。
例えば、開発マシンでWebサーバーを起動し、エミュレーターのChromeブラウザーで10.0.2.2を参照すれば、Webサーバーに構築されたWebページを表示できます。


エミュレーターインスタンス
エミュレータを複数起動すると、そのインスタンス毎に仮想ネットワークが構築されます。

各インスタンスは同じIP(10.0.2.15)を持ちますが、仮想Routerによりネットワークアドレス空間(10.0.2/24)が隔離されるため、通信の衝突は発生しません。
また、デフォルトの状態では、仮想ネットワークを跨いでインスタンスを参照(また通信)できません。
エミュレーター間で通信
ネットワークリダイレクトを用いると、開発マシンを経由してエミュレータインスタンス間で通信が行えます。
ネットワークリダイレクトとは、「開発マシンのポートのトラフィックをエミュレータのポートへ転送する」ことです。

リダイレクトはエミュレーターコンソールから設定できます。以下はリダイレクトの例です。
> telnet localhost 5554 ... エミュレーターコンソールへ接続 認証処理の案内が表示される! OK auth ********** ... 案内に従い認証 OK redir add tcp:5000:6000 ... リダイレクトの設定 OK redir list ... リダイレクトの確認 ipv4 tcp:5000 => 6000 OK quit ... エミュレーターコンソールの終了 ※5554はエミュレータインスタンスAのポート番号 ※フォーマット:redir add <protocol>:<host-port>:<guest-port>
例のリダイレクトは、(1)開発マシンのPort:5000のトラフィックが、インスタンスAのPort:6000へ転送されます。
この状態で、(2)インスタンスBが10.0.2.2のPort:5000と通信を行うと、インスタンスAとBの通信が成立します。
(1)は「仮想ネットワークA」、(2)は「仮想ネットワークB」で行われる動作です。
関連記事:
