ARP表,Route表,Mac表
PDF获取:
网络拓扑图解析:
- 每个网络设备上的每个接口都会有一个interface name, 内核用其区分这些接口,例如图中的Lan1, 它的interface name 是 “eth1". 可以通过 ifconfig, ipconfig 命令查看.
- 每个网络设备都会有 ARP表用于存储学习到的ARP记录(ip和Mac的对应关系 ),每条记录都会有生存周期.
- 每个网路设备都会有Route表,数据包会查找此表来确定由哪个接口转发.
- 路由器的网桥,就是一个switch(交换机),switch有Mac的学习能力,switch会学习数据包的源Mac,然后把源Mac和接收它的接口的对应关系记录到Mac表.
- 路由器有LAN(局域网) 和 WAN(广域网),网桥(interface name:br0)会把所有的Lan的接口(eth1~eth4)桥接起来组成LAN,而用一个单独的接口作为WAN.
- LAN 端会有DHCP Server用于给连接到LAN的网络设备动态分配IP地址.
- WAN 端会有DHCP Client 用于从其网络中获得IP地址.
LAN网络设备间的通信
router table
ARP table
Mac table
例如:电脑1(192.168.1.11) ping 电脑4(192.168.1.44).
- 首先,电脑1根据ping的目的ip(192.168.1.44)查找它的router table,查找的结果是ping数据包的目的ip和电脑1的网口ip是同一个网段, 即同一个LAN网络
- 由电脑1的网口发送,接下来会查找ARP table,看是否有192.168.1.44对应的Mac地址,如果没有记录,会向LAN发送ARP请求去询问192.168.1.44的MAC地址,然后电脑4通过ARP回复把其Mac地址告诉电脑1,电脑1会把学习到的记录加入到ARP tabel,然后对应的ping数据包从电脑1网口发出. 如果在查找ARP table的时候有对应的记录存在,直接用对应的Mac地址发送数据包.
- 其次,电脑1的ping数据包会被路由器1的lan1接口接收,因为ping的目的Mac不是网桥(br0)的地址,说明数据包需要转发,所以switch会根据ping的目的Mac查找Mac table,由于电脑4之前发送过ARP回复,电脑4的Mac和Lan4接口的对应关系已经被学习到Mac table,
- ping数据包就直接由Lan4接口发送,进而电脑4收到来自电脑1的ping请求.
查看接口信息
ipconfig / ifconfig/all --windows
brctl–查看网桥 Mac表
安装brctl网桥工具
$ sudo apt-get install bridge-utils
主要参数解释
brctl showmacs br_name:显示网桥学习到的MAC地址信息
brctl delif br_name device:网桥删除端口
查看ARP 表—arp
-a<主机>:显示arp缓冲区的所有条目;
-H<地址类型>:指定arp指令使用的地址类型;
-d<主机>:从arp缓冲区中删除指定主机的arp条目;
-D:使用指定接口的硬件地址;
-e:以 Linux 的显示风格显示arp缓冲区中的条目;
-i<接口>:指定要操作arp缓冲区的网络接口;
-s<主机><MAC地址>:设置指定的主机的IP地址与MAC地址的静态映射;
-n:以数字方式显示arp缓冲区中的条目;
-v:显示详细的arp缓冲区条目,包括缓冲区条目的统计信息;
-f<文件>:设置主机的IP地址与MAC地址的静态映射。
上面00:50:56:f3:c9:8e是网关192.168.2.2的MAC地址,00:50:56:c0:00:08是虚拟机VMnet8的MAC地址。
IP指令–Route表
ip rule – 操作路由策略数据库
基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小,应用或IP源地址等属性来选择转发路径。
增加路由策略
格式类型
判断条件 表ID 优先级
ip rule add from 192.168.3.1 table 10 prio 199
// 添加规则,源地址为192.168.3.1的包,使用表10
参数解释:
- From: 源地址
- to: 目的地址
- dev: 输入的数据,后面会接接口
- fwmark n:做标记 n
ip rule add to 168.95.1.1 table 10 // 目的地址是 168.95.1.1 使用 table 10
ip rule add dev eth2 table 1 // dev eth2 输入的数据,使用 table 1
ip rule add dev eth3 table 3 // dev eth3 输入的数据,使用 table 3
ip rule add fwmark 1 table 1 // fwmark 1 的数据,使用 table 1 标记为1的数据
ip rule add fwmark 2 table 2
ip rule add fwmark 3 table 3
- 通过路由表 1 路由来自源地址为192.203.80/24的数据包
ip rule add from 192.203.80/24 table 1 prio 220 #增加规则220 prio
如果去掉prio的话,最后的222默认就是路由表的名称,并且因为没有设定规则ID,就默认在目前的规则上添加一个,220->219
- 添加一个路由策略,使得所有来自172.21.45.122的数据包都传递到main表中
- 把源地址为193.233.7.83的数据报的源地址转换为192.168.80.144,并通过表1进行路由
ip rule add from 193.233.7.83 nat 192.168.80.144 table 1 prio 311
#nat网络地址转换
- 增加标记
将来自所有的数据包标记为fwmark 0x1,使用table 1
将来自172.21.43.1发送来的数据包标记为fwmark 0x2,使用table 2
删除路由策略
删除规则,可以使用 优先级,源地址,目的地址,路由表 等信息作为判断条件。
ip rule del prio 10 # 按照优先级
ip rule del from 192.168.1.0/24 # 按照判断条件
ip rule del table 1 # 删除表
ip rule del from 192.168.1.0/24 table 1 prio 10
- 根据优先级来删除对应的路由策略
- 按照判断条件来删除源地址的策略
- 删除表中的策略
ip rule del table 1 #一次只能删除一个策略
在 Linux 系统启动时,内核会为路由策略数据库配置三条缺省的规则:
- 0 匹配任何条件 查询路由表local(ID 255) 路由表local是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 0非常特殊,不能被删除或者覆盖。
- 32766 匹配任何条件 查询路由表main(ID 254) 路由表main(ID 254)是一个通常的表,包含所有的无策略路由。系统管理员可以删除或者使用另外的规则覆盖这条规则。
- 32767 匹配任何条件 查询路由表default(ID 253) 路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。
**注:**不要混淆路由表和策略:规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。
route – 管理路由表
route 命令用于查看和操作Linux操作系统中的路由表。它允许您添加,删除和修改路由表的条目,以确定数据包从一台计算机到另一台计算机的传输路径。
查看路由表: windows下
查看路由表:Linux下 “ip route” 或 “route”
以下是一些 route 命令的常用选项:
- route -n:以数字格式显示路由表。这将以 IP 地址和网络掩码的数字形式而非主机名和网络掩码的形式来显示路由表的内容。
- route add:添加新的路由表项。
- **route del:**从路由表中删除一条路由。
- route change:更改路由表中的一条路由。
- route flush:清空整个路由表。
route = route -n #默认显示的是中文,显示当前路由表
route -en #显示的是英文,显示当前路由表
在 route -n 命令的输出中可以看见标志即路由类型。以下是一些常见的路由类型及其含义:
- U 表示该路由是可用的 (up)
- G 表示该路由是一个默认网关 (gateway)
- H 表示该路由是一个主机路由 (host)
- UG 表示该路由同时具有默认网关和可用的属性
- UGH 表示该路由同时具有默认网关、可用和主机路由属性
因此,对于输出中的每一行,第一列的字符组合表示该路由的类型和属性。例如,UG 表示该路由是一个默认网关,并且可用。同样,UGH 表示该路由是一个主机路由,并且是默认网关,并且可用。
route add —— 添加路由
在 route add 命令中,可以使用 -gw 选项指定一个网关,也可以使用 -dev 选项指定要使用的网络设备。
- 添加一个新路由,源地址是172.21.45.0,子网掩码是255.255.255.0,网关/目的地址是172.21.45.254
route add -net 172.21.45.0 netmask 255.255.255.0 gw 172.21.45.254
- 添加默认路由172.21.45.33
- 添加路由的时候指定接口
route add -net 172.21.45.44 netmask 255.255.255.0 dev eth0
route delete —— 删除路由
- 删除指定默认路由 gw 172.21.45.33
route del default gw 172.21.45.33 #指定删除默认路由
#如果不加iP地址,则会默认删除当前的默认路由
- 删除到网络的路由
route change —— 更改路由表
- 更改到网络的路由网关
route change -net 172.21.45.0 netmask 255.255.255.0 gw 172.21.45.2
route flush —— 清空路由表
使用 route flush 命令将清空整个路由表,这意味着所有当前定义的路由都将被删除。在路由表被清空后,系统将无法将数据包路由到其目标地址,将无法访问网络。
因此,在执行 route flush 命令之前,应该确保已经备份了路由表,以便在需要时可以快速恢复。如果需要仅删除特定的路由表项,应该使用 route del 命令来删除特定的路由表项。
ip route – 管理静态路由表
linux 系统中,可以自定义从 1-252个路由表。其中,linux系统维护了4个路由表:
- 0#表: 系统保留表
- 253#表: defulte table 没特别指定的默认路由都放在改表
- 254#表: main table 没指明路由表的所有路由放在该表
- 255#表: local table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改
查找路由表可以通过ip route show table table_number[table name]命令,路由表和表明的对应关系记录在/etc/iproute2/rt_tables中
ip route show table ——查看路由表信息
ip route show table 表号[表名]
# 第一行是默认路由,表示在路由表上查不到数据时时,报文都从 enp0s3 网卡出去,去 IP 为 10.0.0.2 的另一台主机。
# 第二行是网络路由,表示去 10.0.0.0/24 网络的报文都从 enp0s3 网卡出去,报文中携带的源地址(本机地址)为 10.0.0.128。
# 第三行也是网络路由,表示去 172.17.0.0/16 网络的报文都从 docker0 网卡出去,报文中携带的源地址(本机地址)为 172.17.0.1。
# 由第二行可知,走默认路由时,报文中携带的源地址(本机地址)为 10.0.0.128。
ip route add – 增加路由
在编写下列的指令时候,可能会报错**“RTNETLINK answers: Operation not permitted”,在指令的前面加上sudo即可。或者直接使用root权限**
增加的路由必须要和本身的ip地址处于同一子网中才行。
- 增加默认网关(在main路由表中)172.21.45.22
- 在1号路由表中增加默认网管172.21.45.11
ip route add default via 172.21.45.11 table 1
- 添加源地址是172.21.45.2,目的地址是172.21.45.5的路由
ip route add 172.21.45.2 via 172.21.45.5
- 设置172.21.45.4网段的网关为172.21.45.8,数据走enp0s8接口
ip route add 172.21.45.4 via 172.21.45.8 dev enp0s8
- 在2号路由表中增加172.21.45.5网段的网关为172.21.45.10
ip route add 172.21.45.5 via 172.21.45.10 dev enp0s8 table 2
ip route show – 显示系统路由
- ip route 或:ip route show
- 显示系统路由
- ip route show table local
- 查看本地路由表
ip route get – 获取单目标路由
ip route get 172.21.45.4
获取到目标的单个路由,并按照内核所看到的方式打印其内容
ip route delete – 删除路由
ip route del default #删除当前默认网关
如果要想删除指定的默认路由,则需要加上via + ip地址
ip route del default via 172.21.45.254
删除指定路由
ip route del 地址
ip route flush – 输出特定路由
- ip route flush 10.38.0.0/16
- 删除特定路由
- ip route flush table main
- 清空路由表
ip address – 查看所有Ip地址
显示自己的IP地址
hostname -I
ip a:查看所有 IP 地址(以网卡分组)。
ip a show lo:查看 本地 网卡上的 IP 地址。
ip a add 192.168.10.10/24 dev ens33:向 ens33 网卡上添加一个临时 IP 地址 192.168.10.10/24 (dev 是 device 的简写)。
ip a del 192.168.10.10/24 dev ens33:从 ens33 网卡上删除一个临时 IP 地址 192.168.10.10/24。
iptables指令 – 实现对网络数据包进出设备及转发的控制
iptables 是 Linux 防火墙系统的重要组成部分,iptables 的主要功能是实现对网络数据包进出设备及转发的控制。当数据包需要进入设备、从设备中流出或者由该设备转发、路由时,都可以使用 iptables 进行控制。
iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。
“四表”是指 iptables 的功能,默认的 iptables 规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):
- filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。
- nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。
- mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
- raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。
“五链”是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:
INPUT(入站数据过滤)、
OUTPUT(出站数据过滤)、
FORWARD(转发数据过滤)、
PREROUTING(路由前过滤)
POSTROUTING(路由后过滤),
防火墙规则需要写入到这些具体的数据链中。
Linux 防火墙的过滤框架,如图所示:
可以看出,
- 如果是外部主机发送数据包给防火墙本机,数据将会经过 PREROUTING 链与 INPUT 链;
- 如果是防火墙本机发送数据包到外部主机,数据将会经过 OUTPUT 链与 POSTROUTING 链;
- 如果防火墙作为路由负责转发数据,则数据将经过 PREROUTING 链、FORWARD 链以及 POSTROUTING 链。
iptables语法格式
iptables 命令的基本语法格式如下:
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
各参数的含义为:
- -t:指定需要维护的防火墙规则表** filter、nat、mangle或raw**。在不使用 -t 时则默认使用 filter 表。
- COMMAND:子命令,定义对规则的管理。
- chain:指明链表。
- CRETIRIA:匹配参数。cretiria
- ACTION:触发动作。action
iptables 命令常用的选项及各自的功能:
选 项 功 能
-A 添加防火墙规则
-D 删除防火墙规则
-I 插入防火墙规则
-F 清空防火墙规则
-L 列出添加防火墙规则
-R 替换防火墙规则
-Z 清空防火墙数据表统计信息
-P 设置链默认规则
iptables 命令常用匹配参数及各自的功能:
参 数 功 能
[!]-p 匹配协议,! 表示取反
[!]-s 匹配源地址
[!]-d 匹配目标地址
[!]-i 匹配入站网卡接口
[!]-o 匹配出站网卡接口
[!]--sport 匹配源端口
[!]--dport 匹配目标端口
[!]--src-range 匹配源地址范围
[!]--dst-range 匹配目标地址范围
[!]--limit 四配数据表速率
[!]--mac-source 匹配源MAC地址
[!]--sports 匹配源端口
[!]--dports 匹配目标端口
[!]--stste 匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string 匹配应用层字串
iptables 命令触发动作及各自的功能:
触发动作 功 能
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 拒绝数据包通过
LOG 将数据包信息记录 syslog 曰志
DNAT 目标地址转换
SNAT 源地址转换
MASQUERADE 地址欺骗
REDIRECT 重定向
内核会按照顺序依次检查 iptables 防火墙规则,如果发现有匹配的规则目录,则立刻执行相关动作,停止继续向下查找规则目录;如果所有的防火墙规则都未能匹配成功,则按照默认策略处理。使用 -A 选项添加防火墙规则会将该规则追加到整个链的最后,而使用 -I 选项添加的防火墙规则则会默认插入到链中作为第一条规则。
注意:在 Linux CentOS 系统中,iptables 是默认安装的,如果系统中没有 iptables 工具,可以先进行安装。
规则的查看与清除
使用 iptables 命令可以对具体的规则进行查看、添加、修改和删除。
查看规则
iptables -nvL
各参数的含义为:
- -L 表示查看当前表的所有规则,默认查看的是 filter 表,如果要查看 nat 表,可以加上 -t nat 参数。
- -n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快。
- -v 表示输出详细信息,包含通过该规则的数据包数量、总字节数以及相应的网络接口。
【例 1】查看规则。首先需要使用 su 命令,切换当前用户到 root 用户。然后在终端页面输入命令如下:
添加规则
添加规则有两个参数分别是 -A 和 -I。其中 -A 是添加到规则的末尾;-I 可以插入到指定位置,没有指定位置的话默认插入到规则的首部。
【例 2】查看当前规则。首先需要使用 su 命令,切换当前用户到 root 用户,然后在终端页面输入命令如下:
添加一条规则到尾部。首先需要使用 su 命令,切换当前用户到 root 用户,然后在终端页面输入如下命令:
iptables -A INPUT -s 192.168.1.5 -j DROP
iptables -nL --line-number
修改规则
在修改规则时需要使用-R参数。
【例 4】把添加在第1 行规则的 DROP 修改为 ACCEPT。首先需要使用 su 命令,切换当前用户到 root 用户,然后在终端页面输入如下命令:
iptables -R INPUT 1 -s 192.168.1.5 -j ACCEPT
iptables -nL --line-number
对比发现,第 1 行规则的 target 已修改为 ACCEPT。
删除规则
删除规则有两种方法,但都必须使用 -D 参数。
【例 5】删除添加的第 1 行的规则。首先需要使用su命令,切换当前用户到 root 用户,然后在终端页面输入如下命令:
iptables -D INPUT 1 -s 192.168.1.5 -j ACCEPT
或
iptables -D INPUT 1
已经删除第一行的规则
注意:有时需要删除的规则较长,删除时需要写一大串的代码,这样比较容易写错,这时可以先使用 -line-number 找出该条规则的行号,再通过行号删除规则。
防火墙的备份与还原
默认的 iptables 防火墙规则会立刻生效,但如果不保存,当计算机重启后所有的规则都会丢失,所以对防火墙规则进行及时保存的操作是非常必要的。
iptables 软件包提供了两个非常有用的工具,我们可以使用这两个工具处理大量的防火墙规则。这两个工具分别是** iptables-save 和 iptables-restore**,使用该工具可以实现防火墙规则的保存与还原。这两个工具的最大优势是处理庞大的规则集时速度非常快。
CentOS 7 系统中防火墙规则默认保存在 /etc/sysconfig/iptables 文件中,使用 iptables-save 将规则保存至该文件中可以实现保存防火墙规则的作用,计算机重启后会自动加载该文件中的规则。如果使用 iptables-save 将规则保存至其他位置,可以实现备份防火墙规则的作用。当防火墙规则需要做还原操作时,可以使用 iptables-restore 将备份文件直接导入当前防火墙规则。
iptables-save命令
iptables-save 命令用来批量导出 Linux 防火墙规则,语法介绍如下:
保存在默认文件夹中(保存防火墙规则):iptables-save > /etc/sysconfig/iptables
保存在其他位置(备份防火墙规则):iptables-save > 文件名称
直接执行 iptables-save 命令:显示出当前启用的所有规则,按照 raw、mangle、nat、filter 表的顺序依次列出,如下所示:
“#”号开头的表示注释;
“filter”表示所在的表;
“:链名默认策略”表示相应的链及默认策略,具体的规则部分省略了命令名“iptables”;
在末尾处*“COMMIT”表示提交前面的规则设置。**
列出nat表的规则内容,命令如下:
iptables-save -t nat
“-t表名”:表示列出某一个表。
iptables-restore命令
iptables-restore 命令可以批量导入Linux防火墙规则,同时也需要结合重定向输入来指定备份文件的位置。命令如下:
iptables-restore < 文件名称
注意,导入的文件必须是使用 iptables-save工具导出来的才可以。
先使用 iptables-restore 命令还原 text 文件,然后使用 iptables -t nat -nvL 命令查看清空的规则是否已经还原,如下所示:
iptables-restore < test
iptables -t nat -nvL
ip rule,ip route,iptables 三者之间的关系
iptables:iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。
注:图中 “路由判断” 就是使用ip rule,ip route设置的规则,其中ip route配置的路由表服务于ip rule配置的规则。
以一例子来说明:公司内网要求192.168.0.100 以内的使用 **10.0.0.1 **网关上网 (电信),其他IP使用 **20.0.0.1 **(网通)上网。
- 首先要在网关服务器上添加一个默认路由,当然这个指向是绝大多数的IP的出口网关:ip route add default via 20.0.0.1
- 之后通过 ip route 添加一个路由表:**ip route add table 3 via 10.0.0.1 dev ethX **(ethx 是 10.0.0.1 所在的网卡, 3 是路由表的编号)
- 之后添加 ip rule 规则:**ip rule add fwmark 3 table 3 **(fwmark 3 是标记,table 3 是路由表3 上边。 意思就是凡事标记了 3 的数据使用 table3 路由表)
- 之后使用 iptables 给相应的数据打上标记:iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 - 192.168.0.100 -j MARK --set-mark 3
iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 80 -j MARK --set-mark 1 // eth3输入的HTTP协议数据,标记为 mark 1
iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 25 -j MARK --set-mark 2 // eth3 输入的SMTP协议数据,标记为 mark 2
iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 110 -j MARK --set-mark 2 // eth3 输入的POP协议数据,标记为 mark 2
iptables -t mangle -A FORWARD -i eth3 -j MARK --set-mark 3 // eth3 输入的其他数据,标记为 mark 3
ip rule add fwmark 1 table 1 // fwmark 1 的数据,使用 table 1
ip rule add fwmark 2 table 2
ip rule add fwmark 3 table 3
ip link——管理和查看网络接口
ip layer 即链路层。该命令用于管理和查看网络接口。ip link只能看链路层的状态,看不到ip地址
ip link的参数:
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网卡
# 停用 eth1网卡:
ip link set eth1 down
# 启用 eth1网卡:
ip link set eth1 up
等价于:
ifconfig eth1 down 或 ifconfig eth1 up
- 查看所有的网络链接——ip link show
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 #没有eth0
Device "eh0" does not exist.
不过可以看一下别人的答案
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均显示(重要)
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
bitrate 250000 sample-point 0.800
波特率:250000
sample-point:采样点
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
re-started bus-errors arbit-lost error-warn error-pass bus-off
重启次数、总线错误、仲裁丢失错误、错误主动(error-warning)、错误被动(error-passive)、总线关闭。接收的过载错误在统计信息的"overrun"域下面列出。
TX :将套接字缓冲区的CAN帧发送到CAN控制器;RX :从CAN控制器的CAN帧读取到套接字缓冲区。
还是看自己本地的吧
ip -s -h -d link show dev lo
补充:
(1)除了ip link set 和ip link show,ip link还有其他选项,可以通过ip link help查看;
(2)ip命令除了ip link还有其他选项,可以通过ip help查看;
总结了指令参数的含义
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.