Linux嵌入式设备怎么确定网络端口的速率

突发奇想,就是Linux下面我能不能查询到端口的速率,以此来判断要不要频繁的发送网络数据包呢?

或者更换包利用率更高的协议呢。

于是抱着这样的想法,我开始学习。

首先Linux下查询网络的命令是ifconfig

ifconfig

那么我能不能用ifconfig查询网络速率呢?

$ ifconfig
eth0 Link encap:Ethernet HWaddr 42:4C:4E:00:01:02
inet addr:192.168.0.66 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37204 errors:0 dropped:123 overruns:0 frame:0
TX packets:1014 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2382367 (2.2 MiB) TX bytes:128498 (125.4 KiB)
Interrupt:62 lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:147 errors:0 dropped:0 overruns:0 frame:0
TX packets:147 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14144 (13.8 KiB) TX bytes:14144 (13.8 KiB)

可以看出ifconfig只能看到IP地址是多少,并不能看到端口的速率。

然后我看了一下网上的方法,说ethtool可以查看端口速率。

那么ethtool可不可以?

ethtool

ethtool的查看方法是ethtool 网卡名,例如: ethtool eth0

所以说前面的ifconfig就是这一步的基础,可以看到有什么网卡。

$ ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Cannot get wake-on-lan settings: Operation not permitted
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes

发现是可以的

Speed: 1000Mb/s和Duplex: Full表示这个端口是全双工的1Gbps的速率。

也就是说发送和接收的最高速率都是1G,注意这个是小b,也就是说1000Mb/8 = 125MB。

125MB每秒,这个是理论的最高速率,实际达不到这么高。但也不会说特别慢。

那么问题来了,实际上我在嵌入式设备上没有ethtool指令,这时候我该怎么办呢。

我可以交叉编译一下ethtool,确实是个好办法。

其实只要获取端口速率的话,还有个办法。

dmesg

dmesg是非常通用的调试指令,基本上很多内核消息都会打印在里面。Linux很多设备的初始化信息都会记录在里面

$ dmesg | grep eth0
[ 10.309153 ] gmac-dwmac ffc40000.ethernet eth0: No Safety Features support found
[ 10.309205 ] gmac-dwmac ffc40000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[ 10.309662 ] gmac-dwmac ffc40000.ethernet eth0: registered PTP clock
[ 11.332929 ] gmac-dwmac ffc40000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx

可以看到Link is Up - 1Gbps/Full,所以是全双工的1Gbps。

那我们只要加上过滤eth0: Link is Up这个信息就好了。

问题点

不过我们的嵌入式设备不一定所有设备都有eth0,这个时候需要借助ifconfig来判断。

另外这个只在网口上线的时候才会有打印,实际上也不一定所有网口都上线了。

除开这两点,dmesg仍然不失为一个能快速查询网络端口速率的好办法,我们只要配合ifconfig,然后再加上定时查询或必要的时候查询就可以了。

总结和思考

那么有没有更高效的办法呢,我通过查看phy驱动代码phy.c看到Link is Up是phy_print_status()这个函数里面打印的

所以其实只要在驱动打印这个的时候同时上抛一份到应用层就好,但是我不是做驱动这块的所以暂时还不知道怎么处理。

有知道怎么做的小伙伴欢迎在评论区留言。

那么嵌入式查看网络端口速率的方式是ifconfig查看虚拟网卡名称,再通过ethtool或者dmesg查看具体虚拟网卡的速率。

Linux嵌入式设备怎么确定网络端口的速率的更多相关文章

  1. Linux 查看网卡流量、网络端口

    查看网络流量 # 查看网卡流量 命令:sar -n DEV 1 10 注:每1秒 显示 1次 显示 10次 平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcm ...

  2. libmodbus库linux 嵌入式设备中的使用

    libmodbus库的交叉编译:1]到libmodbus官网https://libmodbus.org/download/下载安装包,内部自带configure文件,官网推荐v3.1.6稳定版.另外注 ...

  3. 嵌入式设备上的 Linux 系统开发

    转载:http://www.ibm.com/developerworks/cn/linux/embed/embdev/index.html   如果您刚接触嵌入式开发,那么大量可用的引导装载程序(bo ...

  4. Linux网络端口命名规则,一致性网络设备命名

    参考文档: https://www.cnblogs.com/pipci/p/9229571.html 一致性网络设备命名,即Consistent Network Device Naming. 一.服务 ...

  5. Linux查看网络端口

    简单的总结一下前段时间学习Linux的成果 查看 TCP 22 端口是否打开1.列出所有端口:[root@Demon proc]# netstat -ntlpActive Internet conne ...

  6. LINUX开启允许对外访问的网络端口

    LINUX开启允许对外访问的网络端口  LINUX通过下面的命令可以开启允许对外访问的网络端口: /sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCE ...

  7. 在Linux下用netstat查看网络状态、端口状态

    在Linux下用netstat查看网络状态.端口状态 在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实 ...

  8. Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?

    前言:今天他给大家带来一篇发表在CVPR 2017上的文章. 原文:LBCNN 原文代码:https://github.com/juefeix/lbcnn.torch 本文主要内容:把局部二值与卷积神 ...

  9. kali linux学习笔记(四) : 网络端口大全介绍

    端口大全介绍 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口:丢弃 11端口:在线用户 13端口:时间 17端口:每日引用 18端口:消息发送协议 19端口:字符发 ...

  10. 在Linux上使用iptables命令开启对外访问的网络端口

    如果linux下没有开启对某端口访问权限,你可以通过下面的命令可以开启允许对外访问的网络端口,示例如下: [root@asg76 sysconfig]# iptables -I INPUT -p tc ...

随机推荐

  1. Konva.js

    1.前言 简介:Konva.js - 适用于桌面/移动端应用的 HTML5 2d canvas 库 个人体验:原生的canvas只支持绘制基本的直线,矩形,文字,图片,扇形等,如果要支持更复杂的功能, ...

  2. HarmonyOS Next 入门实战 - 基础组件、页面实现

    基础组件 常用组件 Text:显示文本内容 Image:显示图片 Button:显示一个按钮 Column: 纵向布局 Row:横向布局 List:列表 各组件的用法 Text("文本组件& ...

  3. Reviewbot 开源 | 这些写 Go 代码的小技巧,你都知道吗?

    Reviewbot 是七牛云开源的一个项目,旨在提供一个自托管的代码审查服务, 方便做 code review/静态检查, 以及自定义工程规范的落地. 自从上了 Reviewbot 之后,我发现有些 ...

  4. 圆梦:借助云开发 CloudBase实现你的游戏开发梦想

    最近我发现AI产品在不断涌现新动向,尤其是一些技术巨头推出的创新产品.例如,今天我们要探讨的是腾讯云开发的云开发 CloudBase,如果你之前没有听说过这个名字,那可能还记得腾讯云推出的另一个产品- ...

  5. vue cli2.x升级到3.x

    一.升级脚手架的方式 安装最新的cli,如果电脑有以前2.x版本的cli,不能直接更新,先要卸载. 1. 卸载之前vue-cli版本 npm uninstall -g vue-cli 2. 安装新版本 ...

  6. 04. PART 2 IdentityServer4 ASP.NET Core Identity .NET Core 3.1

    04. PART 2 IdentityServer4 ASP.NET Core Identity .NET Core 3.1 如果您已经来到这里,那么祝贺你的坚持,最难的部分已经完成了.我们仅仅需要的 ...

  7. IDEA和GIT关于文件中LF和CRLF问题

    问题描述:项目软件安装shell脚本上git仓库管理,但拉取后,上linux运行报错. 问题思考:根据描述信息可以查看到\r字样,初步判别为换行符导致 1.将脚本文件移动至notepad++中,通过视 ...

  8. Spring注解之-@ConditionalOnExpression表达式

    @ConditionalOnExpression("'true") 当括号中的内容为true时,使用该注解的类被实例化,支持语法如下: @ConditionalOnExpressi ...

  9. Kerberos认证代码分析Can't get Kerberos realm

    1. Can't get Kerberos realm 原因分析: 原始代码为: 1 2 org.apache.hadoop.security.UserGroupInformation.setConf ...

  10. OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054

    OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054,vagrant box add laravel/homestead,安装 Homestead Vagr ...