和其他机器通讯,需要给网卡配置通讯地址
如何配置 IP 地址?
使用 ifconfig/ ip addr。将网卡 up 一下ok
使用 net-tools:
$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up
使用 iproute2:
$ sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1
旁边的机器都是 192.168.1.x,配置一个 16.158.23.6,包发不出去, Linux 没你想得那么智能。
网络上跑的包,都是完整的,可以有下层没上层,绝对不可能有上层没下层。
包发不出去,这是因为 MAC 层还没填。只有是一个网段的,发送 ARP 请求,获取 MAC 地址。如果发现不是呢?
Linux 默认的逻辑是,如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关。
配置了网关的话,Linux 会获取网关的 MAC 地址,将包发出去。192.168.1.6 这台机器来讲,目标 IP 是它, MAC 地址不是它的,它的网卡不收包。没有配置网关,包发不出去。
网关配置为 192.168.1.6 呢?不成功,网关要和网卡是同一个网段的,怎么可能 16.158.23.6 的网关是 192.168.1.6 呢?
所以,当你需要手动配置一台机器的网络 IP 时,一定要好好问问你的网络管理员。如果在机房里面,要去网络管理员那里申请,让他给你分配一段正确的 IP 地址。当然,真正配置的时候,一定不是直接用命令配置的,而是放在一个配置文件里面。不同系统的配置文件格式不同,但是无非就是 CIDR、子网掩码、广播地址和网关地址。
动态主机配置协议(DHCP)
一台笔记本电脑在公司里走来走去,或者白天来晚上走,每次使用都要配置 IP 地址,那可怎么办?还有人事、行政等非技术人员,如果公司所有的电脑都需要 IT 人员配置,肯定忙不过来啊。
需要自动配置的协议,也就是称动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP。
共享 IP 地址。每一台新接入的机器都通过 DHCP 协议,来这个共享的 IP 地址里申请,然后自动配置好就可以了。等人走了,或者用完了,还回去,这样其他的机器也能用。
如果是数据中心里面的服务器,IP 一旦配置好,基本不会变,这就相当于买房自己装修。DHCP 的方式就相当于租房。你不用装修,都是帮你配置好的。你暂时用一下,用完退租就可以了。
解析 DHCP 的工作方式
机器新加入网络,只知道自己的 MAC 地址。怎么办?先吼一句,我来啦,有人吗?称为DHCP Discover。
新来的机器使用 IP 地址 0.0.0.0 发送一个广播包,目的 IP 地址为 255.255.255.255。广播包封装了 UDP,UDP 封装了 BOOTP。其实 DHCP 是 BOOTP 的增强版,去抓包的话,看到的名称是 BOOTP 协议。
广播包里面,新人大声喊:我是新来的(Boot request),我的 MAC 地址是这个,我还没有 IP,谁能给租给我个 IP 地址!
如果一个网络管理员在网络里面配置了DHCP Server的话,他就相当于这些 IP 的管理员。他立刻能知道来了一个“新人”。这个时候,我们可以体会 MAC 地址唯一的重要性了。当一台机器带着自己的 MAC 地址加入一个网络的时候,MAC 是它唯一的身份,如果连这个都重复了,就没办法配置了。
只有 MAC 唯一,IP 管理员才能知道这是一个新人,需要租给它一个 IP 地址,这个过程我们称为DHCP Offer。同时,DHCP Server 为此客户保留为它提供的 IP 地址,从而不会为其他 DHCP 客户分配此 IP 地址。
DHCP Offer 的格式就像这样,里面有给新人分配的地址。
DHCP Server 仍然使用广播地址作为目的地址,因为,此时请求分配 IP 的新人还没有自己的 IP。DHCP Server 回复说,我分配了一个可用的 IP 给你,你看如何?除此之外,服务器还发送了子网掩码、网关和 IP 地址租用期等信息。
多个 DHCP Server,会收到多个 IP 地址,选择最先到达的那个,向网络发送一个 DHCP Request 广播数据包,包中包含客户端的 MAC 地址、接受的租约中的 IP 地址、提供此租约的 DHCP 服务器地址等,并告诉所有 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其他 DHCP 服务器,谢谢你们的接纳,并请求撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者。
此时,没有得到 DHCP Server 的最后确认,客户端仍然使用 0.0.0.0 为源 IP 地址、255.255.255.255 为目标地址进行广播。在 BOOTP 里面,接受某个 DHCP Server 的分配的 IP。
当 DHCP Server 接收到客户机的 DHCP request 之后,会广播返回给客户机一个 DHCP ACK 消息包,表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置信息都放入该广播包,发给客户机,欢迎它加入网络大家庭。
最终租约达成的时候,还是需要广播一下,让大家都知道。
IP 地址的收回和续租
租期到了 IP 收回。
DHCP续租,提前说
客户机会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP Server 发送 DHCP request 消息包。客户机接收到该服务器回应的 DHCP ACK 消息包,会根据包中所提供的新的租期以及其他已经更新的 TCP/IP 参数,更新自己的配置。这样,IP 租用更新就完成了。
细节:网络管理员不仅能自动分配 IP 地址,还能帮你自动安装操作系统!
预启动执行环境(PXE)
笔记本电脑自带系统,和数据中心里不一样。自动装好系统之后自动分配 IP 地址,启动,最好了!
启动 BIOS。特别小的小系统,读取硬盘的 MBR 启动扇区,将 GRUB 启动起来;然后将权力交给 GRUB,GRUB 加载内核、加载作为根文件系统的 initramfs 文件;然后将权力交给内核;最后内核启动,初始化整个操作系统。
那我们安装操作系统的过程,只能插在 BIOS 启动之后了。因为没安装系统之前,连启动扇区都没有。因而这个过程叫做预启动执行环境(Pre-boot Execution Environment),简称PXE。
PXE 协议分为客户端和服务器端,没有操作系统,只能先把客户端放在 BIOS 里面。启动时,BIOS 把 PXE 客户端调入内存里面,连接到服务端操作。
首先,PXE 客户端自己也需要有个 IP 地址。因为 PXE 的客户端启动起来,就可以发送一个 DHCP 的请求,让 DHCP Server 给它分配一个地址。怎么知道 PXE 服务器在哪里呢?人告诉他,浏览器要访问的 IP 地址,配置中告诉它;例如,微服务之间的相互调用。
但是 PXE 客户端启动的时候,啥都没有。好在 DHCP Server 除了分配 IP 地址以外,还可以做一些其他的事情。这里有一个 DHCP Server 的一个样例配置:
按照上面的原理,默认的 DHCP Server 是需要配置的,无非是我们配置 IP 的时候所需要的 IP 地址段、子网掩码、网关地址、租期等。如果想使用 PXE,则需要配置 next-server,指向 PXE 服务器的地址,另外要配置初始启动文件 filename。
这样 PXE 客户端启动之后,发送 DHCP 请求之后,除了能得到一个 IP 地址,还可以知道 PXE 服务器在哪里,也可以知道如何从 PXE 服务器上下载某个文件,去初始化操作系统。
解析 PXE 的工作过程
详细 PXE 的工作过程。
首先,启动 PXE 客户端。第一步是通过 DHCP 协议告诉 DHCP Server,我刚来,一穷二白,啥都没有。DHCP Server 便租给它一个 IP 地址,同时也给它 PXE 服务器的地址、启动文件 pxelinux.0。
其次,PXE 客户端知道要去 PXE 服务器下载这个文件后,就可以初始化机器。于是便开始下载,下载的时候使用的是 TFTP 协议。所以 PXE 服务器上,往往还需要有一个 TFTP 服务器。PXE 客户端向 TFTP 服务器请求下载这个文件,TFTP 服务器说好啊,于是就将这个文件传给它。
然后,PXE 客户端收到这个文件后,就开始执行这个文件。这个文件会指示 PXE 客户端,向 TFTP 服务器请求计算机的配置信息 pxelinux.cfg。TFTP 服务器会给 PXE 客户端一个配置文件,里面会说内核在哪里、initramfs 在哪里。PXE 客户端会请求这些文件。
最后,启动 Linux 内核。一旦启动了操作系统,以后就啥都好办了。
小结
好了,这一节就到这里了。我来总结一下今天的内容:
DHCP 协议主要是用来给客户租用 IP 地址,和房产中介很像,要商谈、签约、续租,广播还不能“抢单”;
DHCP 协议能给客户推荐“装修队”PXE,能够安装操作系统,这个在云计算领域大有用处。
思考题:
PXE 协议可以用来安装操作系统,每次重启都安装操作系统。你知道如何使得第一次安装操作系统,后面就正常启动吗?
连上 WIFI, DHCP 分配一个 IP 地址,可上网。
原始的方法自己组过简单的网:20年前大学宿舍里绕了好多同轴电缆的10M以太网,上BBS用IP,玩星际争霸用IPX。那时候没有DHCP,每栋楼有个哥们负责分配IP。
评论1
1. 正确配置IP?
CIDR、子网掩码、广播地址和网关地址。
2. 在跨网段调用中,是如何获取目标IP的mac地址的?
从源IP网关获取所在网关mac,
然后又替换为目标IP所在网段网关的mac,
最后是目标IP的mac地址