趣谈网络协议03ifconfig

你知道怎么查看 IP 地址吗?

在 Windows 上是 ipconfig,在 Linux 上是 ifconfig。

你知道在 Linux 上还有什么其他命令可以查看 IP 地址吗?

ip addr

没有ifconfig和ip addr的linux系统

安装net-tools 和 iproute2 这两个工具。

ip addr

显示了这台机器上所有的网卡。

ip addr 与 ifconfig的区别

要了解这两个命令的区别,需要先看看它们的历史起源:

ifconfig 命令归属于 net-tools 工具集。net-tools 起源于 BSD,自 2001 年起,Linux 社区已经停止对其进行维护。

而 ip 命令归属于 iproute2 工具集,iproute2 旨在取代 net-tools,并提供了一些新功能。

一些 Linux 发行版已经停止支持 net-tools,只支持 iproute2,在这些 Linux 版本中,只能使用 ip addr 命令查看 IP 地址,使用 ifconfig 会提示命名不存在。

net-tools 通过 procfs(/proc) 和 ioctl 系统调用去访问和改变内核网络配置,而 iproute2 则通过 netlink 套接字接口与内核通讯。

net-tools 中工具的名字比较杂乱,而 iproute2 则相对整齐和直观,基本是 ip 命令加后面的子命令。

IP地址

IP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。

IPV4 32位

IPV8 128位

IP地址分类

A类:0 + 7位网络号 + 24位主机号

B类:10 + 14位网络号 + 16位主机号

C类:110 + 21位网络号 + 8 位主机号

D类:1110 + 28位多播组号

E类:11110 + 27位留待后用

类别 IP地址范围 最大主机数 私有IP地址范围
A 0.0.0.1 - 127.255.255.254 16777214 10.0.0.0 - 255.255.255.255
B 128.0.0.1 - 191.255.255.254 65534 172.16.0.0 - 172.31.255.255
C 192.0.0.1 - 223.255.255.254 254 192.168.0.0 - 192.168.255.255

当含有多台主机和路由的某个机关、单位、公司、机构、组织等申请一个IP地址时:

1.首先获得(实现上)是一个网络号。根据不同网络的性质,可能是获得A、B、C类地址中的某个网络号;

2.然后再由本单位根据自身情况自行分配具体的主机号;

D类是组播地址,使用这一类地址,属于某个组的机器都能收到。

E类为保留地址,做为研究使用。

无类型域间选路(CIDR)

因为分类的IP化分,C类包含最大主机数量实在太少,B类最大主机数量又太多了。

所以出现了CIDR,将32位的IP地址一分为二,前面是网络号,后面是主机号。

10.100.122.2/24,这个 IP 地址中有一个斜杠,斜杠后面有个数字 24。这种地址表示形式,就是 CIDR。后面 24 的意思是,32 位中,前 24 位是网络号,后 8 位是主机号。

伴随着 CIDR 存在的,一个是广播地址,10.100.122.255。如果发送这个地址,所有 10.100.122 网络里面的机器都可以收到。

另一个是子网掩码,255.255.255.0。将子网掩码和 IP 地址进行 AND 计算。得出10.100.122.0,这就是网络号,将子网掩码和IP地址按位计算AND,就可以得到网络号。

公有 IP 地址和私有 IP 地址

在日常的工作中,几乎不用划分 A 类、B 类或者 C 类,所以时间长了,很多人就忘记了这个分类,而只记得 CIDR。但是有一点还是要注意的,就是公有 IP 地址和私有 IP 地址。

平时我们看到的数据中心里,办公室、家里或学校的 IP 地址,一般都是私有 IP 地址段。这些地址是配置与管理,不同组织可以重复。

两个小区都有第6栋。

一般家里的上网设备不会超过256个,所以/24基本就够了。也可以用/16的CIDR。

/16的网络号是192.168.0。而整个网络里面的第一个地址192.168.0.1,往往是私有网络的出口地址。

例如:

家里电脑连接WIFI,WIFI路由器的地址就是192.168.0.1,而192.168.0.1,往往是私有网络的出口地址。

举例:一个容易“犯错”的CIDR

16.158.165.91/22 这个CIDR。求第一个地址、子网掩码和广播地址。

16.158.165.1并不是第一个地址。

第一个地址是16.158.164.1。子网掩码是255.255.252.0。广播地址为 16.158.167.255。

ip addr解析

1
2
3
4
5
6
7
8
9
10
11
12
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:10:7c:b9 brd ff:ff:ff:ff:ff:ff
inet 172.27.72.192/20 brd 172.27.79.255 scope global dynamic eth0
valid_lft 312864437sec preferred_lft 312864437sec
inet6 fe80::216:3eff:fe10:7cb9/64 scope link
valid_lft forever preferred_lft forever

网卡信息中 IP 地址的后面有个 scope,对于 eth0 这张网卡来讲,是 global,说明这张网卡是可以对外的,可以接收来自各个地方的包。对于 lo 来讲,是 host,说明这张网卡仅仅可以供本机相互通信。

MAC地址

1
link/ether 00:16:3e:10:7c:b9 brd ff:ff:ff:ff:ff:ff

这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。

一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。

mac地址就是门牌号,IP就是哪个省市区楼栋。

MAC 地址更像是身份证,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识。

MAC 地址的通信范围比较小,局限在一个子网里面。

网络设备的状态标识

1
<BROADCAST,MULTICAST,UP,LOWER_UP>

这个叫做 net_device flags,网络设备的状态标识。

UP 表示网卡处于启动的状态;

BROADCAST 表示这个网卡有广播地址,可以发送广播包;

MULTICAST 表示网卡可以发送多播包;

LOWER_UP 表示 L1 是启动的,也即网线插着呢。

mtu 1500 最大传输单元 MTU 为 1500,这是以太网的默认值。

MTU 是二层 MAC 层的概念。MAC 层有 MAC 的头,以太网规定正文部分不允许超过 1500 个字节。正文里面有 IP 的头、TCP 的头、HTTP 的头。如果放不下,就需要分片来传输。

qdisc 全称是 queueing discipline, 中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc(排队规则)把数据包加入队列。

qdisc 规则: pfifo 和 pfifo_fast

pfifo:

​ 它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。

pfifo:

​ 它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。

​ 三个波段(band)的优先级也不相同。band 0 的优先级最高,band 2 的最低。如果 band 0 里面有数据包,系统就不会处理 band 1 里面的数据包,band 1 和 band 2 之间也是一样。

​ 数据包是按照服务类型(Type of Service,TOS)被分配到三个波段(band)里面的。TOS 是 IP 头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。


趣谈网络协议03ifconfig
http://hanqichuan.com/2023/06/25/网络协议/趣谈网络协议03ifconfig/
作者
韩启川
发布于
2023年6月25日
许可协议