Ethernet с перерывами выходит из строя

Я работаю со встроенной системой Debian, и мне сложно работать в сети. Если каждые 5 или 10 раз, что eth0 воспитывается, что-то терпит неудачу, и я не могу подключиться к нему через ssh, и он не отвечает на ping. Решение состоит в том, чтобы либо перезагрузиться, либо войти в систему через последовательную консоль и довести eth0 вниз, а затем снова. Я могу реплицировать проблему либо путем повторной перезагрузки, либо путем повторного выпуска ifconfig eth0 down && ifconfig eth0 up тех пор, пока устройство перестанет отвечать на запросы.

Мой / 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.122 gateway 192.168.1.1 netmask 255.255.255.0 

Когда работа в сети dmesg говорит:

 [ 2612.775183] PHY found at addr 7 [ 2612.776944] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready [ 2614.414704] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready 

И когда это не dmesg говорит:

 [ 2617.224970] PHY found at addr 7 [ 2617.227005] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready 

Когда работа сети ifconfig выводится:

 eth0 Link encap:Ethernet HWaddr 00:d0:69:46:d9:08 inet addr:192.168.1.122 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::2d0:69ff:fe46:d908/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1528 Metric:1 RX packets:3242 errors:0 dropped:0 overruns:0 frame:0 TX packets:1382 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:300701 (293.6 KiB) TX bytes:132344 (129.2 KiB) Interrupt:22 

И когда он не выводит ifconfig :

 eth0 Link encap:Ethernet HWaddr 00:d0:69:46:d9:08 inet addr:192.168.1.122 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1536 Metric:1 RX packets:3355 errors:0 dropped:0 overruns:0 frame:0 TX packets:1430 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:310120 (302.8 KiB) TX bytes:136800 (133.5 KiB) Interrupt:22 

Когда работа в сети работает, ip link show eth0 выходы:

 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1528 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 00:d0:69:46:d9:08 brd ff:ff:ff:ff:ff:ff 

Когда что-то не работает, ip link show eth0 дает:

 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1536 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000 link/ether 00:d0:69:46:d9:08 brd ff:ff:ff:ff:ff:ff 

Мое текущее решение состоит в том, чтобы сценарий проанализировал вывод ip link show eth0 и перезапустил eth0 до тех пор, пока он не появится, но это кажется довольно взломанным.

Любая идея, что может быть проблемой или где еще я должен искать?

Изменить: выход из ethtool eth0 когда все работает:

 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Link partner advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Link partner advertised pause frame use: Symmetric Link partner advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: MII PHYAD: 7 Transceiver: internal Auto-negotiation: on Link detected: yes 

Выход из ethtool eth0 если это не так:

 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Speed: 10Mb/s Duplex: Half Port: MII PHYAD: 7 Transceiver: internal Auto-negotiation: on Link detected: no 

Я также смоделировал систему, над которой я работал и тестировался на второй идентичной машине, но с разными кабелями и другим маршрутизатором и видел такое же поведение.

Редактирование 2: Наблюдение за ttsiodras Я провел некоторое тестирование MTU. Я обнаружил, что когда устройство загружается, MTU изначально 1508. Каждый раз, когда я приношу eth0 вниз, резервное копирование MTU увеличивается на 4, максимум до 1540, после чего он остается неизменным. К сожалению, не было никакой корреляции между MTU и когда я потерял связь с сетью. Я также попытался вручную установить MTU на различные значения между 1508 и 1540, и сеть по-прежнему будет периодически терпеть неудачу, независимо от настройки ручного MTU.

  • Почему моя виртуальная машина Debian VMWare теряет все сетевые подключения через 15 минут после загрузки?
  • Как назначить IP-адрес конкретному URL-адресу для ssh?
  • Настройка сетевых интерфейсов с использованием linux sysfiles
  • Способ проверки подключения к другому серверу
  • Настройка Gentoo на VM IP вручную
  • Как вернуть время успешного соединения OpenVPN
  • Проблемы, связанные с тем, что Debian получает IP-адрес от заданного адреса сервера, используя DHCP от сервера имен в сети
  • DHCP-сервер со статическим IP-адресом, не разрешающим имена хостов (клиенты делают)
  • One Solution collect form web for “Ethernet с перерывами выходит из строя”

    Это может быть связано с тем, что система Debian немного исправляет отстающую совместимость. Однако это обходное решение, и это несколько проблематично; полную историю можно найти на странице вики Debian по этому вопросу . Цель состоит в том, чтобы исправить это для Stretch (следующий выпуск Debian), добавив код, специфичный для системы, к пакетам, содержащим rcS init rcS . Большая часть работы была сделана, но все еще осталось небольшое количество.

    Вещи, которые могут решить эту проблему:

    • Добавьте скрипт в rc.local который проверяет, rc.local ли rcS наиболее важные сценарии rcS (для вашей ситуации), и который исправляет ситуацию, если нет ( systemctl status foo.service может помочь systemctl status foo.service )
    • Напишите блок systemd для сетевого сценария или возьмите его с натяжения (потребуется некоторое тестирование)
    • Замените systemd на свои системы sysvinit (хотя это может быть излишним)
    • Проверьте системные журналы, чтобы выяснить, какие службы (кроме сетевых) задействованы в цикле зависимостей и удалить одну или несколько из них из системы
    • Установите сетевой менеджер и используйте его, а не ifupdown .
    Linux и Unix - лучшая ОС в мире.