Linux使用ifconfig、Windows使用ipconfig
所谓见微知著,这两个命令虽然是最简单的 IP 查询工具,可是世间最厉害的就是最简单的用到极致,便勘破一切,大道至简。
闲话少叙,诸位请跟随我走入浩瀚汪洋的网络命令起点,去领略计算机大神们创造的世界。
既然都是有志于我门之人,咱们还是从旁人接触少的 Linux 系统说起。
在 Linux 系统之下,除了刚开始提到的 ifconfig 命令,还有 ip addr 命令也能达到类似效果。这二者的渊源,出自于 net-tools 和 iptoute2 两个软件包,当然这两个软件包的爱恨情仇一时半会儿也说不清楚,以后有机会给大家详解。
当我们登录到 Linux 系统,来敲入 ip addr,输入如下内容:
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
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 pfifo_fast state UP qlen 1000
link/ether 8e:5f:34:c9:ec:90 brd ff:ff:ff:ff:ff:ff
inet 10.6.0.28/24 brd 10.6.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::8c5f:34ff:fec9:ec90/64 scope link
我们首要关注的就是 IP 地址(inet 10.6.0.28/24),IP 地址就是我们现实世界中的地址号码,自然这个地址号码是不能重复的,不然别人根本就找不到你。联想到我们平时网络排障的时候遇到的 IP 地址冲突,导致网络故障。
10.6.0.28 就是一个 IP 地址,点分十进制的方式分成了四个段,每个段为 8 bit,所以 IP 地址总共是 4 * 8 = 32 bit,到了如今已经枯竭了,至于应对方法,大神们早就准备好了,我们以后再说。
IP 地址又被分成了A、B、C、D、E五类,A、B、C 日常使用,D、E 为组播和保留使用。
每个 IP 地址有两个标识 ID ,分别为网络 ID 和 主机 ID。
同一个网络 ID ,即我们常说的同一个网段,在里面的主机 ID 是可以直接通信的。
五类的网络 ID 详情如下:
A 类地址:以 0 开头,第一个字节范围:0~127;
B 类地址:以 10 开头,第一个字节范围:128~191;
C 类地址:以 110 开头,第一个字节范围:192~223;
D 类地址:以 1110 开头,第一个字节范围为 224~239;
E 类地址:以 1111 开头,保留地址
下面这个表格,详细地展示了 A、B、C 三类地址所能包含的主机的数量。
无类型域间选路(CIDR)
我们看到命令输出的是inet 10.6.0.28/24,有一个“/24”的后缀,既然我们刚刚说到网段,那么怎么计算主机 ID 是否在同一个网段内?就是靠这个称为子网掩码的后缀来计算。
子网掩码是子网特征的表现,也是 32 bit,网络位全是 1 ,主机位全是 0 。我们看到命令输出的子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0,有一个广播地址brd 10.6.0.255,如果发送这个地址,所有在10.6.0网段内的主机都能收到。
有了子网掩码,我们就能很容易的判断若干个 IP 地址是否在同一个子网内?
方法将若干个 IP 地址与子网掩码分别进行 AND 运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
公有 IP 地址和私有 IP 地址
以上表格展示的就是我们一般家里面、办公室或者学校里面的 IP 地址,这样的话这些组织内部的 IT 管理人员能够自主管理、分配甚至可以和其他组织内的地址重复。
公有 IP 地址需要和运营商购买,比如说提供对外服务的网站、APP之类的。
咱们继续看命令的输出“scope global eth0”,global 是对外的,可以接收主机以外的包。
“inet 127.0.0.1/8 scope host lo”,lo 是loopback,又称环回接口,往往会被分配到 127.0.0.1 这个地址。这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。
link/ether 8e:5f:34:c9:ec:90 brd ff:ff:ff:ff:ff:ff,这就是 MAC 地址,是十六进制方式表示,共有6 byte。
MAC 地址是同一个网段使用,当然要保证不能冲突,如果要跨网段,还是得依赖 IP 地址。
eth0: <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”表示接着网线,网卡灯状态正常。
mtu 1500 qdisc pfifo_fast state UP qlen 1000
“mtu 1500” 最大传输单元 MTU 为 1500,这是以太网的默认值。
“qdisc”全称是 queueing discipline,中文叫排队规则。
最简单的qdisc是pfifo,不对进入的数据包做处理,采用先入先出的方式。
而我们使用命令输出的是pfifo_fast,它是使用三个波段(band)。在每个波段里面,使用先进先出规则。优先级是band 0最高,band 2次之,band 3再次之。
如果数据包在 band 0里面,那么 band 1的数据包就不会得到处理,band 1 和 band 2 类似之。
这三个波段(band)是由服务类型(Type of Service,TOS)分配的,由它来决定优先级的顺序。