ROS(로봇 운영 체제) 설정을 사용할 때 Ubuntu 18.04에서 네트워크 연결이 끊어집니다.

ROS(로봇 운영 체제) 설정을 사용할 때 Ubuntu 18.04에서 네트워크 연결이 끊어집니다.

다음 설정을 갖춘 로봇이 있는데 [컴퓨터 A]의 이더넷 인터페이스(enp4s0)가 무작위로 삭제됩니다.

컴퓨터가 많은 작업을 수행하지 않을 때 인터페이스가 중단되지 않습니다. 그러나 [컴퓨터 B]가 [컴퓨터 A]를 통해 [내 컴퓨터]로 압축된 이미지 스트림 스트리밍을 시작하면 이더넷 인터페이스가 중단됩니다.

따라서 의도하지 않게 네트워크에 플러딩이 발생하여 네트워크 연결이 끊어지는 구성 문제인 것 같습니다. 이 문제에 대해 조언을 구하고 싶습니다.

dmesg의 출력이 별로 도움이 되지 않았습니다.

컴퓨터 A의 dmesg

[Mon Apr 12 13:43:33 2021] igb 0000:04:00.0 enp4s0: igb: enp4s0 NIC Link is Down
[Mon Apr 12 13:43:33 2021] br0: port 1(enp4s0) entered disabled state
[Mon Apr 12 13:43:35 2021] igb 0000:04:00.0 enp4s0: igb: enp4s0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX
[Mon Apr 12 13:43:35 2021] br0: port 1(enp4s0) entered blocking state
[Mon Apr 12 13:43:35 2021] br0: port 1(enp4s0) entered listening state
[Mon Apr 12 13:43:39 2021] br0: port 1(enp4s0) entered learning state
[Mon Apr 12 13:43:44 2021] br0: port 1(enp4s0) entered forwarding state
[Mon Apr 12 13:43:44 2021] br0: topology change detected, propagating
[Mon Apr 12 14:05:50 2021] igb 0000:04:00.0 enp4s0: igb: enp4s0 NIC Link is Down
[Mon Apr 12 14:05:50 2021] br0: port 1(enp4s0) entered disabled state
[Mon Apr 12 14:05:52 2021] igb 0000:04:00.0 enp4s0: igb: enp4s0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX 

내가 이미 수행한 작업:

  1. 모든 이더넷 케이블을 확인하고 새 케이블로 교체했습니다.
  2. 모든 컴퓨터와 센서를 예비품으로 교체하세요
  3. 4의 순방향 지연으로 네트워크 브리지에서 STP를 활성화합니다.

불행하게도 로봇 내부의 크기 제약으로 인해 스위치에 모든 것을 연결할 수는 없습니다.

설정

SBC 설정

모든 컴퓨터는 Ubuntu 18.04를 실행하고 있으며ROS 멜로딕 모레니아.

아래와 같이 netplan을 사용하여 네트워크 브리지를 설정했습니다.

# Netplan on Computer A
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    #Computer B
    enp1s0:
      dhcp4: no
    #Sensor 
    enp2s0:
      dhcp4: no
    #SBC to switch
    enp4s0:
      dhcp4: no
      

  #Setup a bridge and link eno1 to it
  bridges:
    br0:
      interfaces: [enp1s0, enp2s0, enp4s0]
      addresses: [192.168.1.1/24]
      gateway4: 192.168.1.253
      nameservers:
        addresses: [8.8.8.8]
      dhcp4: no

내가 시도한 다른 것들:

포트 전달을 활성화하고 [컴퓨터 B]에서 [컴퓨터 A]로의 경로를 추가하고 다음의 다른 서브넷에 NIC를 설정합니다 /etc/sysctl.conf.

net.ipv4.ip_forward = 1

컴퓨터 B

route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1

# Netplan on Computer A
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    #Computer B
    enp1s0:
      addresses:
        - 192.168.2.1/24
      dhcp4: no
    #Sensor 
    enp2s0:
      addresses:
        - 192.168.3.1/24
      dhcp4: no
    #SBC to switch
    enp4s0:
      addresses:
        - 192.168.1.1/24
      dhcp4: no
      gateway4: 192.168.1.253      
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

답변1

eno1과 enp4s0이 다른 드라이버를 사용하고 있다는 것을 알았습니다. 그래서 두 인터페이스를 모두 전환해 보았는데 이제 인터페이스가 떨어지지 않습니다. 드롭의 원인이 되는 오래된 드라이버일 수 있습니다.

sudo lspci -v

인터페이스 eno1

Ethernet controller: Intel Corporation Ethernet Connection (6) I219-LM (rev 30)                                                                                                                      
Subsystem: Intel Corporation Ethernet Connection (6) I219-LM                                                                                                                                         
Flags: bus master, fast devsel, latency 0, IRQ 141                                                                                                                                                   
Memory at a1a00000 (32-bit, non-prefetchable) [size=128K]                                                                                                                                            
Capabilities: [c8] Power Management version 3                                                                                                                                                        
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+                                                                                                                                           
Kernel driver in use: e1000e                                                                                                                                                                         
Kernel modules: e1000e   

인터페이스 enp4s0

Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at a1780000 (32-bit, non-prefetchable) [size=512K]
I/O ports at 3000 [disabled] [size=32]
Memory at a1800000 (32-bit, non-prefetchable) [size=16K]
Expansion ROM at a1700000 [disabled] [size=512K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
Capabilities: [70] MSI-X: Enable+ Count=5 Masked-
Capabilities: [a0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number c4-00-ad-ff-ff-4c-52-bf
Capabilities: [1a0] Transaction Processing Hints
Kernel driver in use: igb
Kernel modules: igb

컴퓨터 A의 현재 넷플랜

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp2s0:
      addresses:
        - 192.168.3.1/24
      dhcp4: no
    enp1s0:
      mtu: 1500
      addresses:
        - 192.168.2.1/24
      dhcp4: no
    eno1:
      mtu: 1500
      dhcp4: no
      addresses: [192.168.1.1/24]
      gateway4: 192.168.1.253
      nameservers:
        addresses: [8.8.4.4,8.8.8.8]
    enp4s0:
      mtu: 1500
      dhcp4: no
      addresses: [192.168.1.2/24]
      gateway4: 192.168.1.253
      nameservers:
        addresses: [8.8.4.4,8.8.8.8]

관련 정보