이더넷이 간헐적으로 시작되지 않습니다.

이더넷이 간헐적으로 시작되지 않습니다.

임베디드 데비안 시스템을 사용하고 있는데 이더넷이 일관되게 작동하도록 할 수 없습니다. eth0이 5~10번 시작되고 실패할 때마다 SSH를 통해 연결할 수 없으며 핑에 응답하지 않습니다. 해결 방법은 재부팅하거나 직렬 콘솔을 통해 로그인한 후 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

나의 현재 해결책은 스크립트가 eth0의 출력을 구문 분석 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 설정과 관계없이 여전히 네트워크에 가끔 문제가 발생합니다.

답변1

이는 이전 버전과의 호환성을 위해 약간 시스템화된 데비안 패치와 관련이 있을 수 있습니다. 그러나 이는 해결 방법이지만 몇 가지 문제가 있습니다. 전체 내용은 다음에서 확인할 수 있습니다.주제에 대한 데비안 위키 페이지. 우리의 목표는 rcSinit 스크립트가 포함된 패키지에 systemd 특정 코드를 추가하여 Stretch(다음 Debian 버전) 문제를 해결하는 것입니다. 대부분의 작업이 완료되었지만 일부만 남아 있습니다.

이 문제를 해결할 수 있는 방법:

  • rc.local귀하의 경우에 가장 중요한 스크립트가 성공적으로 실행되는지 확인 하는 스크립트를 추가하고 rcS그렇지 않은 경우 문제를 해결하십시오(실행하는 것이 systemctl status foo.service도움이 될 수 있음)
  • 네트워크 스크립트를 위한 시스템 단위를 작성하거나 확장하여 가져옵니다(일부 테스트 필요)
  • systemd시스템에서 다음으로 교체하십시오 sysvinit(약간 과잉일 수도 있음).
  • 시스템 로그를 확인하여 어떤 서비스(네트워킹 제외)가 종속성 주기에 포함되어 있는지 확인하고 그 중 하나 이상을 시스템에서 제거하세요.
  • Network Manager를 설치하고 대신 사용하십시오 ifupdown.

관련 정보