起動時にLAN接続を確立するのに時間がかかるのはなぜですか?

起動時にLAN接続を確立するのに時間がかかるのはなぜですか?

起動時に仮想マシンがローカルネットワークに接続するのに時間がかかる問題が発生しました。

次のコマンドを使用して仮想マシンを作成します。

virt-install \
    --connect qemu:///system \
    --name demo \
    --noautoconsole \
    --disk path=/demo.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback \
    --disk path=/base.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback \
    --import \
    --vcpus 1 \
    --virt-type kvm \
    --ram 256 \
    --hvm \
    --os-type linux

systemdUbuntu 14.04.4 LTSを実行しているホストからマシンを作成すると、すべてがうまく機能します。スクリプトを実行する前に、仮想マシンが起動してLANに接続されます。ただし、ホストシステムがDebian 8.5を実行している場合は、systemdネットワークリソースを実際に使用する前に仮想マシンを接続してスクリプトの実行を開始するのに時間がかかります。

デバッグ中に次のスクリプトを作成しました。

#!/bin/bash

date >> /ping.log
ping -c 3 -W 3 "192.168.1.7" >> /ping.log
date >> /ping.log
curl google.com >> ping.log
date >> /ping.log

以下はそのsystemd構成です。

[Unit]
Description=Demo
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/demo-init

[Install]
WantedBy=multi-user.target

マシンが起動すると、ping.log次の内容が含まれます。

Tue Jul 19 12:57:56 UTC 2016
PING 192.168.1.7 (192.168.1.7) 56(84) bytes of data.
From 192.168.1.35 icmp_seq=1 Destination Host Unreachable
From 192.168.1.35 icmp_seq=2 Destination Host Unreachable
From 192.168.1.35 icmp_seq=3 Destination Host Unreachable

--- 192.168.1.7 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2001ms
pipe 3
Tue Jul 19 12:57:59 UTC 2016
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
[...]
</BODY></HTML>^M
Tue Jul 19 12:58:16 UTC 2016

以下を示します。

  • ping失敗する、
  • 接続に20秒かかります。

これと比較して、Ubuntuホストで同じマシンを実行すると、次のものが保存されますping.log

Tue Jul 19 13:18:12 UTC 2016
PING 192.168.1.7 (192.168.1.7) 56(84) bytes of data.
64 bytes from 192.168.1.7: icmp_seq=1 ttl=64 time=2.27 ms
64 bytes from 192.168.1.7: icmp_seq=2 ttl=64 time=0.711 ms
64 bytes from 192.168.1.7: icmp_seq=3 ttl=64 time=5.47 ms

--- 192.168.1.7 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.711/2.819/5.472/1.981 ms
Tue Jul 19 13:18:14 UTC 2016
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
[...]
</BODY></HTML>^M
Tue Jul 19 13:18:14 UTC 2016

ここで:

  • ping成功した
  • 実際に操作を実行するのにかかる時間は2秒かかりますping

実際のホスト(DebianとUbuntu)はハードウェアが異なるため(NICの数が異なる)構成を比較するのは困難です。ただし、仮想マシンはDebianがプリインストールされているのと同じ基本ディスクに基づいて、まったく同じ方法で展開され、次の機能があります/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 192.168.1.35
    netmask 255.255.240.0
    network 192.168.0.0
    broadcast 192.168.3.255
    gateway 192.168.1.1
    dns-nameservers 192.168.1.3 192.168.1.4 8.8.8.8 8.8.4.4

2つの質問があります。

  • そのような大きな遅延が発生するのはなぜですか?

  • 私は誤解しましたか?目標network-online.target?スクリプトを実行するときに基本的な接続を保証すると思います。そうではありませんが、これの目的は何ですか?

ベストアンサー1

それを発見。同様の状況で、著者は次のように文句を言った。

ネットワークが正常に戻るまで約20秒待つ必要があります。

そうだ:

この遅延はSTP(Spanning Tree Protocol)によって引き起こされます。

実際、違いの1つは/etc/network/interfacesDebianホストには含まれていますが、bridge_stp onUbuntuには宣言されていないことですbridge_stp

おすすめ記事