ip link 命令总结

时间:2025-03-31 10:42:21

link表示link layer的意思,即链路层。该命令用于管理和查看网络接口。
ip link set

ip link set DEVICE  { up | down | arp { on | off } | name NEWNAME | address LLADDR } 
选项说明:
dev DEVICE:指定要操作的设备名
up and down:启动或停用该设备
arp on or arp off:启用或禁用该设备的arp协议
name NAME:修改指定设备的名称,建议不要在该接口处于运行状态或已分配IP地址时重命名
address LLADDRESS:设置指定接口的MAC地址

例如:

停用 eth1网卡:
  ~ # ip link set eth1 down
启用 eth1网卡:
    ~ # ip link set eth1 up
等价于:
~ #  ifconfig eth1 down 或 ifconfig eth1 up

ip link show

语法格式:
    ip [ -s | -h | -d ] link show [dev DEV] 
    选项说明:
    -s[tatistics]:将显示各网络接口上的流量统计信息;
    -h[uman-readable]:以人类可读的方式显式,即单位转换;
    -d[etails]:显示详细信息
	(选项说明可以通过ip help查看)

例如:

~ # ip -s -h -d  link show  dev eth0
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 00:01:02:a4:71:28 brd ff:ff:ff:ff:ff:ff promiscuity 0 numtxqueues 8 numrxqueues 8
    RX: bytes  packets  errors  dropped overrun mcast
    160M       2.86M    0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    192k       1.43k    0       0       0       0
~ #

各字段含义说明:

BROADCAST:支持广播
MULTICAST:支持组播
UP:代表网卡开启状态;如果是关闭状态则不显示UP(重要)
LOWER_UP:有说法是代表网卡的网线被接上,自己测试验证发现使用ifconfig eth0 down后,UP和LOWER_UP均不显示;
使用ifconfig eth0 up后,UP和LOWER_UP均显示(重要)
参考补充(3)
mtu 1500:网络接口的最大传输单元(Maximum Transmission Unit ):1500字节。是包或帧的最大长度,一般以字节记。
qdisc:排队规则
state UNKNOWN :
mode DEFAULT :
group default :
qlen 1000:
link/ether 00:01:02:a4:71:28 表示物理网卡地址
brd ff:ff:ff:ff:ff:ff 
promiscuity 0 
numtxqueues 8 
numrxqueues 8
~ # ip -s -h -d  link show  dev can0
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
    link/can  promiscuity 0
    can state ERROR-ACTIVE restart-ms 100
          bitrate 250000 sample-point 0.800
          tq 400 prop-seg 3 phase-seg1 4 phase-seg2 2 sjw 1
          mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
          clock 12500000
          re-started bus-errors arbit-lost error-warn error-pass bus-off
          0          0          0          0          0          0         numtxqueues 1 numrxqueues 1
    RX: bytes  packets  errors  dropped overrun mcast
    21.6M      2.71M    1       0       1       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0
~ #

各字段含义说明:

NOARP:没有arp协议
ECHO:Echo发送的数据包
can state ERROR-ACTIVE restart-ms 100:
一般情况,正常的时候,每个节点大多数时间出于CAN_STATE_ERROR_ACTIVE这个状态,也就是错误主动状态。别看这个状态名字叫错误,但是实际上就
是对应的普通状态。标示这个节点检测到错误,会发出主动错误标示。
随着问题的增多,节点逐渐会升级到CAN_STATE_ERROR_WARNING状态。但是这个状态并没有固定的硬件标示,实际上是一个软件层面的预警。也就是
说,对于CAN_STATE_ERROR_ACTIVE和CAN_STATE_ERROR_WARNING而言,这个节点的任何逻辑行为(包括软硬件)都不会有什么区别。
随着问题的继续增多,节点会升级到CAN_STATE_ERROR_PASSIVE状态。在这个状态下,节点的硬件行为会改变,收到错误的时候,发送的是被动错误标
示。
如果此时问题还会继续,则节点会进入CAN_STATE_BUS_OFF状态。这个时候只有检测到128个连续的11个隐性位才能回到CAN_STATE_ERROR_ACTIVE。(参考文献8)
如果使用ip link set can0 down关闭can设备,can state显示为: STOPPED 
restart-ms 100:自动重启的延时时间。出现太多错误时,设备可能进入总线关闭状态,给canrestart-ms 设置一个非零值,可以开启总线关闭自动恢复功能,
设置时需要先关闭can设备,如:
ip link set can0 down
ip link set can0 type can bitrate 250000 loopback on
ip link set can0 type can restart-ms 200
ip link set can0 up
(参考文献9)
bitrate 250000 sample-point 0.800
波特率:250000 
sample-point:采样点(参考文献10)
tq 400 prop-seg 3 phase-seg1 4 phase-seg2 2 sjw 1
mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
(参考文献11-12)
re-started bus-errors arbit-lost error-warn error-pass bus-off
重启次数、总线错误、仲裁丢失错误、错误主动(error-warning)、错误被动(error-passive)、总线关闭。接收的过载错误在统计信息的"overrun"域下面列出。
TX :将套接字缓冲区的CAN帧发送到CAN控制器;RX :从CAN控制器的CAN帧读取到套接字缓冲区。
(参考文献13)

补充:
(1)除了ip link set 和ip link show,ip link还有其他选项,可以通过ip link help查看;
(2)ip命令除了ip link还有其他选项,可以通过ip help查看;(参考文献2-4)
(3)参考文献5:

IFF_ALLMULTI      Receive all multicast packets.        接收所有多播数据包。
IFF_AUTOMEDIA     Auto media selection active.          自动媒体选择激活。
IFF_BROADCAST     Valid broadcast address set.          有效的广播地址集。
IFF_DEBUG         Internal debugging flag.              内部调试标志。
IFF_DORMANT       Driver signals dormant (since Linux 2.6.17)   驱动程序信号休眠(从Linux 2.6.17开始)
IFF_DYNAMIC       The addresses are lost when the interface goes down. 当接口关闭时,地址将丢失。
IFF_ECHO          Echo sent packets (since Linux 2.6.25)    Echo发送的数据包(从Linux 2.6.25开始)
IFF_LOOPBACK      Interface is a loopback interface.   接口是一个环回接口。
IFF_LOWER_UP      Driver signals L1 up (since Linux 2.6.17)    驱动程序信号L1启动(从Linux 2.6.17开始)
IFF_MASTER        Master of a load balancing bundle.  负载平衡捆绑包的主控程序。。
IFF_MULTICAST     Supports multicast    支持多播
IFF_NOARP         No arp protocol, L2 destination address not set.   没有arp协议,未设置二级目标地址。
IFF_NOTRAILERS    Avoid use of trailers.     
IFF_POINTOPOINT   Interface is a point-to-point link.
IFF_PORTSEL       Is able to select media type via ifmap.
IFF_PROMISC       Interface is in promiscuous mode. 
IFF_RUNNING       Resources allocated.
IFF_SLAVE         Slave of a load balancing bundle.
IFF_UP            Interface is running.

参考资料

参考文献1:linux–ip link命令
参考文献2:ifconfig、route、ip route、ip addr、 ip link 用法
参考文献3:IP命令详解
参考文献4:ifconfig、route、ip route、ip addr、 ip link 用法
参考文献5:网卡信息 UP 和 LOWER_UP 区别
参考文献6:趣谈计算机网络1 - 通讯协议综述
参考文献7:MAC地址详解
参考文献8:ARM Linux CAN 异常排查步骤
参考文献9:SocketCan 问题笔记
参考文献10:CAN采样点设置为多少合适
参考文献11:CAN总线模块的位时间(Bit-Timing)配置
参考文献12:CAN通讯系列–CAN总线基础
参考文献13:树莓派spi转can通信之C编程实现