惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Securelist
Simon Willison's Weblog
Simon Willison's Weblog
Security Latest
Security Latest
博客园 - 司徒正美
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
Check Point Blog
Jina AI
Jina AI
H
Heimdal Security Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
B
Blog
美团技术团队
W
WeLiveSecurity
G
Google Developers Blog
K
Kaspersky official blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
V
Visual Studio Blog
T
Threatpost
酷 壳 – CoolShell
酷 壳 – CoolShell
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
腾讯CDC
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cyberwarzone
Cyberwarzone
Apple Machine Learning Research
Apple Machine Learning Research
P
Privacy & Cybersecurity Law Blog
H
Hacker News: Front Page
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
AI
AI
MongoDB | Blog
MongoDB | Blog
Project Zero
Project Zero
Hacker News: Ask HN
Hacker News: Ask HN
量子位
A
Arctic Wolf
GbyAI
GbyAI
Recorded Future
Recorded Future
SecWiki News
SecWiki News
小众软件
小众软件
Martin Fowler
Martin Fowler

蛮荆

如何获取更多的免费服务器 Kubernetes 调度器队列 - 设计与实现 Kubernetes 调度器 - 核心流程 Kubernetes Networking Model & CNI Kubernetes 控制器管理总结 Kubernetes CronJob 设计与实现 Kubernetes Job 设计与实现 Kubernetes HPA 设计与实现 Kubernetes Deployment 滚动更新实现原理 Kubernetes GC 设计与实现 Kubernetes Pod 驱逐 - 设计与实现 Kubernetes Daemonset 设计与实现 Kubernetes ReplicaSet 设计与实现 Kubernetes EndPoint 设计与实现 Kubernetes Informer 设计与实现 降本增效之应用优化 (三) 日志存储与检索 Kubernetes Pod 设计与实现 - 创建流程 Kubernetes 探针设计与实现 Unix 编程艺术名句摘录 Kubernetes - CRI 概述 Golang 编译速度为什么这么快? Kubernetes Pod 设计与实现 - Pause 容器 Kubernetes - kube-proxy 代理模式工程优化 Kubernetes 应用最佳实践 - 优雅关闭长连接 Kubernetes Service 类型和会话亲和性 Kubernetes 为什么需要 Ingress Kubernetes 架构 - 控制平面和数据平面 降本增效之应用优化 (二) 大报表 Go 语言如何获取 CPU 利用率 降本增效之应用优化 (一) Redis 业务规则引擎演变过程简述 微服务中的熔断算法 漏桶算法和令牌桶算法 jsonparser 为什么比标准库的 encoding/json 快 10 倍 ? zap 高性能设计与实现 HTTP Router 算法演进 fastcache 高性能设计与实现 Web 常见的三个安全问题 ants Code Reading Go 线程安全 map 方案选型 布隆过滤器 死锁、活锁、饥饿、自旋锁 sync.Pool Code Reading Go 内存管理概述 Go netpoll Code Reading goroutine 泄漏与检测 time/Timer Code Reading GMP Scheduler Code Reading Go channel 的 15 条规则和底层实现 为什么 Linux “一切皆文件” context.Context Code Reading runtime/HACKING.md Goland 最佳实践 互联网开发与金庸武学 为什么 Redis 6.0 引入多线程模型? Kubernetes 应用最佳实践 - 金丝雀发布 容器中如何正确配置 GOMAXPROCS ? singleflight Code Reading sync.Map Code Reading sync.Cond Code Reading sync.WaitGroup Code Reading sync.RWMutex Code Reading sync.Mutex Code Reading sync.Once Code Reading Go 无锁编程 sync/atomic Code Reading goroutine 交替打印奇偶数 GODEBUG Go 并发模式 Go 汇编 UUID 通用技术选型 Kubernetes 应用最佳实践 - 水平自动伸缩 Go 高性能 Tips fasthttp 为什么比标准库 net/http 快 10 倍 ? 技术文章配图指南 ChatGPT 初体验 Docker 网络原理概览 iptables 的五表五链 Kubernetes 应用最佳实践 - 亲和性和污点容忍度 Go 的反射与三大定律 Docker 官方提供的最佳实践 Go 语言内置的设计模式 HTTP1 到 HTTP3 的工程优化 Kubernetes 应用最佳实践 - Sidecar 模式 Kubernetes 应用最佳实践 - init 容器和钩子函数 为什么 recover 必须在 defer 中调用? 为什么 defer 的执行顺序和注册顺序不同? Go map 设计与实现 Go 切片扩容底层实现 Go 语言中的零拷贝 Go Delve 云原生和边缘计算简介 Kubernetes Pod 服务质量等级 Kubernetes 应用最佳实践 - 探针 Kubernetes 应用最佳实践 - 资源请求和限制 CDN 原理 Kubernetes 应用最佳实践 - 开篇 缓存策略和模式 Go 内存模型 Kubernetes 核心概念
ifconfig 命令
2017-01-22 · via 蛮荆

2017-01-22 计算机网络 Linux 命令

  • ifconfig 命令作用
  • ifconfig 输出说明
    • 字段说明
    • 关键指标
    • 指定接口
  • 常用操作
    • 设置接口网络信息
    • 启用/禁用接口
    • 设置 MAC 地址
    • 添加接口别名
    • 添加网络接口 (网卡)
      • 题外话
  • 扩展阅读

ifconfig 命令作用

ifconfig 命令是一个用于配置网络接口的工具,可以查看和设置网络接口的状态和参数,包括 IP 地址、子网掩码、广播地址、MAC 地址等。

虽然在现代 Linux 系统中,ifconfig 已经被 ip 命令替代,但是 ifconfig 依然时兼容性最好的,例如在 Linux, MacOS, Windows 中都默认内置了 ifconfig 命令 (在 Windows 中对应的命令为 ipconfig),本文主要讲一些 ifconfig 命令的常用操作。


ifconfig 输出说明

$ ifconfig

# 输出如下
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:08:03:41:1f  txqueuelen 0  (Ethernet)
        RX packets 142619849  bytes 81211019222 (75.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 142040276  bytes 64909981889 (60.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.5.134  netmask 255.255.255.0  broadcast 10.0.5.255
        inet6 fe80::f816:3eff:fe20:57c3  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:57:c3:12 txqueuelen 1000  (Ethernet)
        RX packets 162042385  bytes 34008541260 (31.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 134343636  bytes 184733360569 (172.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 32975502  bytes 50914349583 (47.4 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32975502  bytes 50914349583 (47.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

首先来看输出结果中比较大的数据块,每两个数据块中间使用一个空行进行分隔,每个数据块表示一个单独的网络接口 (包括 物理/虚拟/环回接口)。

下面以网络接口 eth0 为例进行说明,其他接口以此类推即可。

字段说明

接口名称:

eth0: 网络接口的名称,通常表示以太网接口。其他可能的名称包括 wlan0(无线接口)、lo(环回接口)等。

标志位:

  • flags=4163<UP,BROADCAST,RUNNING,MULTICAST>: 标志表示接口的当前状态。
  • UP: 接口已启动
  • BROADCAST: 支持广播
  • RUNNING: 接口正在运行 (网卡已经连接到交换机或者路由器)
  • MULTICAST: 支持多播

MTU (Maximum Transmission Unit):

mtu 1500: 接口的最大传输单元,关于 MTU, 可以参考 这篇文章

IPv4 地址

  • inet 10.0.5.134: 接口的 IPv4 地址
  • netmask 255.255.255.0: 子网掩码
  • broadcast 10.0.5.255: 广播地址

IPv6 地址

  • inet6 fe80::f816:3eff:fe20:57c3: 接口的 IPv6 地址
  • prefixlen 64: 子网前缀长度
  • scopeid 0x20: 地址的作用域(link-local 地址)

硬件地址 (MAC 地址)

  • ether 08:00:27:57:c3:12: 接口的 MAC 地址

传输队列长度:

  • txqueuelen 1000: 传输队列的长度

接口类型

  • (Ethernet): 接口类型,表示以太网

接收数据 (RX)

  • RX packets 162042385 bytes 34008541260 (31.6 GiB): 接收到的数据包和字节数
  • RX errors 0 dropped 0 overruns 0 frame 0: 接收过程中发生的错误统计
    • errors: 接收错误包数量,比如校验错误、帧同步错误等
    • dropped: 丢弃的包数量,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包
    • overruns: 超限包数量,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理(队列满)而导致的丢包,也就是发送方的速度快于接收方的处理速度
    • frame: 帧错误数量

发送数据 (TX)

  • TX packets 134343636 bytes 184733360569 (172.0 GiB): 发送的数据包和字节数
  • TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0: 发送过程中发生的错误统计
    • errors: 发送错误包数量,同上
    • dropped: 丢弃的包数量,同上
    • overruns: 超限包数量,同上
    • carrier: 载波错误数量,表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等
    • collisions: 碰撞包数量,表示碰撞数据包数

关键指标

💡 TX 和 RX 输出部分的 errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,通常表示网络出现了问题。

指定接口

如果不想查看所有接口的信息,而是要查看某个接口的信息,直接将 接口名称 作为 ifconfig 命令的第二个参数即可。


常用操作

设置接口网络信息

设置某个网络接口的 IP 地址、子网掩码等。

eth0 接口的 IP 地址设置为 192.168.1.100,子网掩码设置为 255.255.255.0, 广播地址设置为 192.168.1.255

$ ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

启用/禁用接口

# 启用 eth0
$ ifconfig eth0 up

# 禁用 eth0
$ ifconfig eth0 down

分别启用和禁用 eth0 接口。

设置 MAC 地址

eth0 接口的 MAC 地址设置为 00:11:22:33:44:55

$ ifconfig eth0 hw ether 00:11:22:33:44:55

添加接口别名

eth0 接口添加别名 eth0:0,并设置其 IP 地址为 192.168.1.101

$ ifconfig eth0:0 192.168.1.101

添加网络接口 (网卡)

具体脚本参考: https://github.com/yanfeizhang/coder-kung-fu/blob/main/tests/network/test02/php/tool.sh

# 命令格式
# 和 设置接口网络信息 命令类似
$ ifconfig [interface_name] [ip_address] netmask [netmask] up
  • interface_name: 分配给新网卡的接口名
  • ip_address: 分配给新网卡的 IP 地址
  • netmask: 分配给新网卡的子网掩码
  • up: 固定参数,表示启用网卡

需要注意的是,如果没有实际的网卡,也可以通过 网卡别名 的方式添加 虚拟网卡,典型的使用场景就是,使用网卡别名在单一物理网卡上配置多个 IP 地址,对于需要测试多个 IP 地址的服务器或需要不同网络配置时非常有用。

# 例如
$ ifconfig eth0:100 10.88.0.6 netmask 255.255.0.0 up

# 添加之后查看结果
$ ifconfig 

...

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.88.0.5  netmask 255.255.0.0  broadcast 10.88.255.255
        ether da:46:fd:11:99:3e  txqueuelen 0  (Ethernet)
        RX packets 7775  bytes 21486449 (21.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5426  bytes 18395033 (18.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:100: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.88.0.6  netmask 255.255.0.0  broadcast 10.88.255.255
        ether da:46:fd:11:99:3e  txqueuelen 0  (Ethernet)

...

从输出的结果中可以看到,基于 eth0 扩展的新网卡 eth0:100eth0 的 MAC 地址是一样的,其中:

  • eth0 是实际的物理网卡,负责处理实际的网络数据包
  • eth0:100 是 eth0 的一个别名,别名网卡并不是一个独立的物理网卡,而是 eth0 上的一个虚拟接口。别名网卡可以配置一个独立的 IP 地址和网络设置,与 eth0 一样可以进行网络通信

通过 网卡别名 可以在一个物理接口上运行多个虚拟网络接口,每个虚拟接口都有自己独立的 IP 配置,但它们共用同一个物理网络连接。

题外话

❓ 思考: 使用 ifconfig 添加网络接口 (网卡) 的时候,会 (通知其他主机) 发起 ARP 广播吗?


扩展阅读