乐趣区

重学计算机网络二-曾记否查IP地址

先献上几个梗

  • 1.1.1.1 不是测试用的,原来一直没分配,现在被用来做一个 DNS 了,宣传是比谷歌等公司的 dns 服务

更保护用户隐私。

  • IP 地址 255.255.255.255,代表有限广播,它的目标是网络中的所有主机。
  • IP 地址 0.0.0.0,通常代表未知的源主机。当主机采用 DHCP 动态获取 IP 地址而无法获得合法 IP 地址时,会用 IP 地址 0.0.0.0 来表示源主机 IP 地址未知。
  • NID 不能以数字 127 开头。NID 127 被保留给内部回送函数, 作为本机循环测试使用。

例如,使用命令 ping 127.0.0.1 测试 TCP/IP 协议栈是否正确安装。在路由器中,同样支持循环测试地址的使用。1 查 ip

  • Windows – ipconfig
  • Linux 上 - ifconfig

还有 — ip addr

ifconfig & ip addr 的区别

net-tools 起源于 BSD,自 2001 年起,Linux 社区已经对其停止维护,而 iproute2 旨在取代 net-tools,并提供了一些新功能。一些 Linux 发行版已经停止支持 net-tools,只支持 iproute2。

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

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

虽然取代意图很明显,但是这么多年过去了,net-tool 依然还在被广泛使用,最好还是两套命令都掌握吧。

想象你登录进入一个非常小的 Linux 系统,发现既没有_ifconfig_命令,也没有_ip addr_命令,

是不是感觉这个系统没法用?

可以自行安装 net-tools 和 iproute2 这两个工具

  • 运行 ip addr。不出意外,应该会输出下面的内容

该命令显示这台机器上所有的网卡

大部分的网卡都有一个 IP 地址

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

既然是门牌号,不能大家都一样,不然就会冲突, 快递就找不到地方了

所以,有时候咱们的电脑弹出网络地址冲突,出现上不去网的情况,多半是 IP 地址冲突

如上输出的结果,192.168.10.208 就是一个 IP 地址

地址被点分隔为四个部分,每个部分 8bit,总共 32 位

这样产生的 IP 地址的数量很快就不够用了

于是就有了 IPv6,也就是上面输出结果里面 inet6 fe80::…

这个有 128 位,现在看来是够够的

本来 32 位的 IP 地址就不够,还被分成了 5 类。现在想想,当时分配地址的时候,真是太奢侈了

在网络地址中,至少在当时设计的时候,对于 A、B、C 类主要分两部分

  • 前面一部分是网络号
  • 后面一部分是主机号

这很好理解,大家都是六单元 1001 号

我是小区 A 的六单元 1001 号

而你是小区 B 的六单元 1001 号。

  • 下面这个表格,详细地展示了 A、B、C 三类地址所能包含的主机的数量


这里面有个尴尬的事情,就是 C 类地址能包含的最大主机数量实在太少了,只有 254 个
当时设计的时候恐怕没想到,现在估计一个网吧都不够用吧
而 B 类地址能包含的最大主机数量又太多了。6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。

2 无类型域间选路(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 计算, 就可得到 网络号

  • 前面三个 255,转成二进制都是 1

1 和任何数值取 AND,都是原来数值,因而前三个数不变,为 10.100.122

  • 后面一个 0,转换成二进制是 0

0 和任何数值取 AND,都是 0,因而最后一个数变为 0,合起来就是 10.100.122.0

3 公 / 私有 IP 地址

日常工作,几乎不用划分 A 类、B 类或者 C 类,很多人就忘记了这个分类,只记得 CIDR

但是有一点还是要注意的,就是 公有 IP 地址和私有 IP 地址

上面的表格。表格最右列是私有 IP 地址段

平时看到的数据中心里,办公室 / 家 / 学校的 IP 地址,一般都是私有 IP 地址段

因为这些地址允许组织内部的 IT 人员自己管理、分配,而且可重复

因此,你学校的某个私有 IP 地址段和我学校的可以是一样的。

这就像每个小区有自己的楼编号和门牌号,你们小区可以叫 6 栋,我们小区也叫 6 栋,没有任何问题
但是一旦出了小区,就需要使用公有 IP 地址。就像人民路 888 号,是国家统一分配的,不能两个小区都叫人民路 888 号。

公有 IP 地址有个组织统一分配,你需要去买

如果你搭建一个网站,给你学校的人使用,让你们学校的 IT 人员给你一个 IP 地址就行

但是假如你要做一个类似网易 163 这样的网站,就需要有公有 IP 地址,这样全世界的人才能访问。

表格中的 192.168.0.x 是最常用的私有 IP 地址

你家里有 Wi-Fi,对应就会有一个 IP 地址。一般你家里地上网设备不会超过 256 个,所以 /24 基本就够了

有时候我们也能见到 /16 的 CIDR,这两种是最常见的,也是最容易理解的。

不需要将十进制转换为二进制 32 位,就能明显看出 192.168.0 是网络号,后面是主机号

而整个网络里面的第一个地址 192.168.0.1,往往就是你这个私有网络的出口地址

例如,你家里的电脑连接 Wi-Fi,Wi-Fi 路由器的地址就是 192.168.0.1

而 192.168.0.255 就是广播地址。一旦发送这个地址,整个 192.168.0 网络里面的所有机器都能收到。

但是也不总都是这样的情况。因此,其他情况往往就会很难理解,还容易出错。

4 一个容易“犯错”的 CIDR

我们来看 16.158.165.91/22 这个 CIDR

求一下这个网络的第一个地址、子网掩码和广播地址

你要是上来就写 16.158.165.1,那就大错特错!!!

/22 不是 8 的整数倍,不好办,只能先变成二进制来看

  • 16.158 的部分不会动,它占了前 16 位
  • 中间的 165,变为二进制为‭10100101‬。除了前面的 16 位,还剩 6 位。所以,这 8 位中前 6 位是网络号,16.158.<101001>,而 <01>.91 是机器号。

第一个地址是 16.158.<101001><00>.1,即 16.158.164.1

子网掩码是 255.255.<111111><00>.0,即 255.255.252.0

广播地址为 16.158.<101001><11>.255,即 16.158.167.255。

D 类是 组播地址

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

这有点类似在公司里面大家都加入了一个邮件组。发送邮件,加入这个组的都能收到

在 IP 地址的后面有个 scope

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

lo 全称是 loopback,又称 环回接口 ,往往会被分配到 127.0.0.1 这个地址
这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。

5 MAC 地址

在 IP 地址的上一行是 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff

这个被称为MAC 地址

是一个网卡的物理地址,用十六进制,6 个 byte 表示

MAC 地址号称全局唯一,不会有两个网卡有相同的 MAC 地址,而且网卡自生产出来,就带着这个地址

很多人看到这里就会想,既然这样,整个互联网的通信,全部用 MAC 地址好了,只要知道了对方的 MAC 地址,就可以把信息传过去。

这样当然是不行的

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

而有门牌号码属性的IP 地址,才是有远程定位功能

例如,你去 XX 市 XX 路 XX 号 X 楼 X 层找 XX,你在路上问路,可能被问的人不知道 X 楼是哪个,但是可以给你指网商路怎么去
但是如果你问一个人,你知道这个身份证号的人在哪里吗?可想而知,没有人知道。

MAC 地址更像是身份证,是一个唯一的标识

它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突

从硬件角度,保证不同的网卡有不同的标识。

MAC 地址是有一定定位功能的,只不过范围非常有限

你可以根据 IP 地址,找到 XX 市 XX 路 XX 号 X 楼 X 层,但是依然找不到我,你就可以靠吼了,大声喊身份证 XXXX 的是哪位?我听到了,我就会站起来说,是我啊
但是如果你在上海,到处喊身份证 XXXX 的是哪位,我不在现场,当然不会回答,因为我在杭州不在上海。

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

例如,从 192.168.0.2/24 访问 192.168.0.3/24 是可以用 MAC 地址的

一旦跨子网,即从 192.168.0.2/24 到 192.168.1.2/24,MAC 地址就不行了,需要 IP 地址起作用了

6 网络设备的状态标识

<BROADCAST,MULTICAST,UP,LOWER_UP>net_device flags,网络设备的状态标识

  • UP

网卡处于启动的状态

  • BROADCAST

网卡有广播地址,可以发送广播包

  • MULTICAST

网卡可以发送多播包

  • LOWER_UP

L1 是启动的,也即网线插着呢

  • MTU1500

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

网络包是层层封装的

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

  • qdisc pfifo_fast (queueing discipline,排队规则)

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

最简单的 qdisc 是 pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列

pfifo_fast 稍微复杂一些,它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。

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

数据包是按照 服务类型(Type of Service,TOS) 被分配到三个波段(band)里面的

TOS 是 IP 头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。

队列是个好东西,后面我们讲云计算中的网络的时候,会有很多用户共享一个网络出口的情况,这个时候如何排队,每个队列有多粗,队列处理速度应该怎么提升,我都会详细为你讲解。

7 总结

  • IP 是地址,有定位功能;MAC 是身份证,无定位功能
  • CIDR 可以用来判断是不是本地人
  • IP 分公有的 IP 和私有的 IP

参考

  • 趣谈网络协议
退出移动版