解读 ip addr 输出的网络连接信息含义

849 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

本文收录于专栏:《丘山子聊网络协议》。和大家一起聊聊网络协议那些事儿~

解读 ip addr 的输出的网络连接信息含义

一、ifconfig 与 ip addr

用过Linux的读者都知道,在Linux查看ip可以使用ifconfig,当然这个ifconfig属于net-tools 工具集,其来源于BSD,Linux从2001年就不对其进行维护了。那我们应该用什么呢?还有iproute2 工具集,其功能更强大,我们今天就来讲讲该工具集的ip addr命令。

而运行ip addr命令,会出现类似下面的的内容:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:62:3c:62:a1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.108.19/24 brd 192.168.108.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::5df:3b5f:e5fe:ddc2/64 scope link
       valid_lft forever preferred_lft forever

二、IP

该命令会显示机器上的所有网卡,其中的192.168.108.19/24便是IPv4的地址,这个地址由4个部分组成,每个部分8个bit,因此整个地址空间有 4 294 967 296(232232)个地址,也就是近43亿个地址。 地球上的人口都比这个多,何况我们很多人都不止使用一个IP地址吧?何况还有一些地址是作为特殊用途而保留的,如局域网专用地址(约1800万个地址)和组播地址(约2700万个地址) 。这样IPv4能够使用的地址就更少了,所有我们有了IPv6,IPv6有128位,其地址空间有340282366920938463463374607431768211456个地址,我觉得暂时是够了。128位有点长,于是采用16进制来描述IPv6地址,所有看起来IPv6的地址只有32位。

See the source image

如上图,IPv4地址被分为5类,前面的1或0是固定位数,Network是网络号,后面的Host是主机号,就和我们假如是三年二班李子明,三年二班就是网络号,李子明就是主机号,别的班也有可能叫李子明的。

再来看看划分的这几类网络,C类网络只能容纳254台主机,很多情况下都不够,而选择B类又太多了,很多情况下都多很多,那怎么办呢?

于是产生了CIDR,Classless Inter-Domain Routing,无类域间路由选择

二、CIDR

那么IPv4后面斜杠/以及后面的数字代表什么意思呢?这就和CIDR又关系了,192.168.108.19/24说明前24位是网络号,后8位是主机号。通过这种方式,它根据用户的要求根据某些规则动态分配IP地址。

还有一种叫做子网掩码的东西,将子网掩码与IP地址做与运算,就能得到网络号。

CIDR使IP地址从三级编址(使用子网掩码),又回到了两级编址,但这已是无分类的两级编址。

三、MAC地址

在命令输出结果中link/ether 00:0c:62:3c:62:a1 brd ff:ff:ff:ff:ff:ff代表MAC地址,是网卡的物理地址,这个MAC地址是网卡出厂就确定了的,具有唯一性。

但是具有唯一性,不代表我们就干脆用它来进行通信,可以这样类比:MAC地址是我们的身份证号,而IP地址是我们身份证上的地址。

你要找一个远方的朋友进行联系,你用这个身份证号去问别人,是不是没人知道,而用家庭地址一步一步去找,是不是肯定能找到。

那么MAC地址是不是就没用了呢,不是!其具有通信作用,你想想,你去问朋友的家人,这个身份证号是谁,他是不是能够知道。MAC地址的通信范围只能在一个子网中,只要跨子网,MAC地址就没有作用了。

四、其他

4.1 scope

inet 192.168.108.19/24 brd 192.168.108.255 scope global ens33这里面scope代表作用范围,ens33这张网卡这里查询是global,说明可以接受全局的包,哪里的包都接受。而lo网卡查询的scope是host,说明该网卡只能在本机通信。

4.2 lo

lo代表loopback,是虚拟接口,是一种纯软件性质的虚拟接口。任何送到该接口的网络数据报文都会被认为是送往设备自身的。

4.3 <BROADCAST,MULTICAST,UP,LOWER_UP>
<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

<BROADCAST,MULTICAST,UP,LOWER_UP>这个东西是net_device flags网络设备的状态标识

BROADCAST   该接口支持广播
MULTICAST   该接口支持多播
UP          网络接口已启用
LOWER_UP    网络电缆已插入,设备已连接至网络
4.4 MTU

至于mtu 1500是指最大传输单元MTU(Maximum Transmission Unit,MTU),表示网络可以传输的最大数据包大小,以字节为单位。

MTU的大小决定了发送端一次能够发送报文的最大字节数。如果MTU超过了接收端所能够承受的最大值,或者是超过了发送路径上途经的某台设备所能够承受的最大值,就会造成报文分片甚至丢弃,加重网络传输的负担。如果太小,那实际传送的数据量就会过小,影响传输效率。

4.5 QDisk

qdisc pfifo_fast中,QDisk是queueing discipline的简写,即排队规则。

这篇文章对排队规则介绍得非常好:[译] 《Linux 高级路由与流量控制手册(2012)》第九章:用 tc qdisc 管理 Linux 网络带宽 (arthurchiao.art)

4.6 statu

state UP表示网络接口已启用。

4.7 Qlen

qlen 1000,Qlen代表传输队列长度,此处为1000。

4.8 valid_lft & preferred_lft

valid_lft forever IPv4/IPv6 地址的有效使用期限

preferred_lft forever IPv4/IPv6 地址的首选生存期