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/sDuplex: 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. 超详细 HarmonyOS 开发教程之开发环境搭建指南

    HarmonyOS开发环境搭建指南:DevEco Studio安装教程 一.系统要求 操作系统:Windows 10 64位或更高版本 RAM:至少8GB,推荐16GB 硬盘空间:至少10GB可用空间 ...

  2. Redis应用—1.在用户数据里的应用

    大纲 1.社区电商的业务闭环 2.Redis缓存架构的典型生产问题 3.用户数据在读多写少场景下的缓存设计 4.热门用户数据的缓存自动延期机制 5.缓存惊群与穿透问题的解决方案 6.缓存和数据库双写不 ...

  3. 11C++循环结构-for循环(1)

    一.for语句 引出问题: 当需要重复执行某一语句时,使用for语句.for语句最常用的格式为: for (循环变量赋初值:循环条件:循环变量增值) 语句: 注: "语句:"就是循 ...

  4. 鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性

    鸿蒙应用开发从入门到入行 第一天 - HarmonyOS介绍 导读:在本篇文章里,您将了解到HarmonyOS是什么,以及有哪些振奋人心的特性.并且猫林老师会在本篇文章里给出结论:鸿蒙必能蚕食安卓份额 ...

  5. git 报错 error: bad signature 0x00000000 fatal: index file corrupt

    index file在 git 里面一般指的是 .git/index 这个文件.这个文件保存的是暂存区的信息(索引信息). 报错说明这个文件已经损坏了 直接删除这个文件,然后执行如下命令 git re ...

  6. T语言开发笔记1

    为什么会有开发语言的想法 在2012年,我准备开发一个给前端切图使用的屏幕取色器. 需求很简单,前端经常需要获取设计稿特定位置的颜色代码.虽然当时 PhotoShop 提供了内部取色器,但操作麻烦,而 ...

  7. Java的HTTP接口测试框架Gatling

    之前讲过的<JHM>是一个java的基准测试框架,一般用于测试jdk里的API.如果要测试http接口,可以使用Gatling. 你可能用过JMeter,也是可以的 原生的Gatling是 ...

  8. Nginx https证书生成

    一.证书和私钥的生成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1.创建服务器证书密钥文件 server.key: ...

  9. CoverageBuilder

    public CoverageBuilder(String gitPath, String newBranchName, String oldBranchName, List<String> ...

  10. Qt编写地图综合应用10-点聚合

    一.前言 点聚合在地图相关应用中比较常用,比如在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症,密密麻麻的一大堆点 ...