我们可以使用命令行去直接配置一个地址,可以使用ifConfig,也可以使用ip addr,设置好了,up一下,IP就会生效
对应的命令如下
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 |
那么是不是我们配置任何的ip都是可以的呢?
比如网段内ip为 192.168.1.x 我们配一个 16.158.33.6,会怎么样呢?
但是其实是没法发出去的,按照真实的情况来说
对于网络上的包,都是完整的,只能有下层没上层,不能没下层只有上层
我们的源IP地址16.158.23.6,目标IP地址 192.168.1.16,但是包发不出去,是因为没有填入对应的MAC地址
我们虽然知道自己的MAC地址,但是目标的MAC地址无法知道,直接填入192.168.1.6是否可行?
当然不是,Linux会首先去判断,是否是一个网段,只有是一个网段的,才会发送ARP请求,获取MAC地址
Linux的逻辑是,如果是一个跨网段的调用,便不会将包发给网络,而是直接发给网关
如果配置网关,Linxu会获取到网关的MAC地址,然后将包发出去,对于192.168.1.6来说,虽然IP地址是他,但是MAC地址不是,所以不会接受这个包
如果没有配置网关,那么这个包压根就发不出去,如果将网关配置为192.168.1.6呢?那更是无稽之谈,因为Linux需要网关和本机IP在一个网段内,所以根本不可能了
所以如果想要手动的设置一个设备的IP,一定要好好的问下网络管理员,分配一段正确的IP,在配置文件中,写入CIDR 子网掩码,广播地址,网关地址
DHCP
上面虽然能够配置成功IP,但是总不能每个人都是手动去配置Ip吧,那样也太慢了,于是就需要一个自动配置的协议,就是动态主机配置协议,简称DHCP
在DHCP中分配一段共享的IP协议,所有接入的机器都走DHCP协议,来到这个共享Ip池里面去,等用完了,再还回去
这就好比,数据中心的服务器,IP一旦配好了,基本不会变,这就好比自己买房装修,DHCP就好比租房,使用,用完在退租就可以了
DHCP的工作流程
DHCP如何分配一个IP的,或者说如何工作的?
当一个机器新加入一个网络的时候,如何进行自动分配Ip的
在刚加入的时候,肯定啥都不知道,只知道自己的MAC地址,这时候的沟通全靠吼,这一步被称为DHCP Discover
详情就是:
首先新来的机器使用IP地址0.0.0.0发送了一个广播包,目的IP是255.255.255.255,广播包封装了UDP,UDP封装了BOOTP,其实UDP是BOOTP的增强版
在这个广播包,新来的地址主要进行了广播,说明自己是新来的没有IP地址,并把自己的MAC地址带上
格式基本如下
如果管理员已经在网络上设置了DHCP Server的话,他们就相当于这些IP的管理员,知道来了一个新人,这时候,验证了MAC地址,的确是个新人了,需要分配IP,这个时候提供的被称为DHCP Offer,DHCP Server为此客户保留了他所提供的IP,防止被再分配出去
这里提供Offer,可以利用广播,也可以利用新人提供的IP地址,
这时候新来的机器获得到了对应的DHCP Offer,当然可以有多个DHCP Server发来的Offer,其会选择一个,并且会广播一个DHCP Request,其中包含客户端的MAC地址,接受的租约IP,提供次租约的DHCP服务器地址,并且告诉DHCP Server它将接受哪一台服务器提供的IP地址,让其他的DHCP服务器不再锁住要提供的IP
对应着DHCP接收到这个消息后,会广播返回一个DHCP ACK消息包,表明已经接受了客户机的选择,并且欢迎其加入
IP的地址和收回和续租
既然是租房子的,就是可以续租的,租期到了,自然会被收回
为了避免收回,DHCP要进行续租,客户会在租期过去了50%的时候,为期提供IP地址的DHCP Server发送DHCP request 消息包,客户端收到了返回的ACK消息后,会更新TCP/IP参数
对于DHCP,还有着更强大的妙用,可以帮助你安排操作系统
对于大集群的环境配置,如何去安装操作系统是一个问题,如果一个个的安装会很麻烦,所以最好能够直接启动,这时候就说一下PXE这个环境了
在启动操作系统的时候,会首先启动BIOS,这是一个很小的系统,只能干特别小的事情,去读硬盘的MBR启动扇区,将GRUB启动起来,然后将权利交给GRUB,GRUB加载内核,然后加载根文件系统的inittramfs文件,然后将权利交给内核,最后启动这个操作系统
如果没有安装系统,那么就是没有启动扇区,这个过程叫做 预启动执行环境 Pre boot Execution Environment 简称 PXE
那么会出现PXE协议分为了客户端和服务端,BIOS中存了客户端,在启动了,BIOS启动了PXE客户端,然后连接到服务端做工作
因为PXE客户端请求了DHCP Server,所以会得到了IP,这时候会顺带着给与其PXE服务器端的IP
简单的实例如下
ddns-update-style interim;
ignore client-updates; allow booting; allow bootp; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option subnet-mask 255.255.255.0; option time-offset -18000; default-lease-time 21600; max-lease-time 43200; range dynamic-bootp 192.168.1.240 192.168.1.250; filename “pxelinux.0”; next-server 192.168.1.180; } |
然后我们就能知道了PXE服务器IP
然后看下PXE的工作过程
首先启动PXE客户端,然后通过DHCP Server获取到了IP地址
然后知道了 PXE服务器端的地址和启动文件 pxelinux.0
然后连接PXE服务器,获取到这个文件,
下载后执行这个文件,然年后一步步的请求客户端获取内核,initramfs,让其依次拿到
最后,启动Linux内核
那么,最后总结一下,
本章来说,DHCP的整体工作过程
PXE可以帮助我们去安装系统
课后思考
1.如何使用PXE,只有第一次安装操作系统,后面正常启动呢?
2.有没有组过很原始的简单网络呢?
1.一般的电脑都支持PXE启动,PXE Client在网卡ROM里,在计算机引导的时候,都会把PXE clinet调入内存执行,安装完成后,引导计算机,让其从Bios中改为硬盘启动即可
有什么方式,可以批量的开启或者关闭pxe的功能呢?
服务器一般提供了IPMI的接口,通过这个接口启动,重启,设置启动模式等远程访问,批量管理一大批的机器
在DHCP的网络中,手动配置IP地址会冲突吗?
还有一个DHCP的问题
在DHCP网络里面,如果一个机器手动配置了一个IP地址,并且在DHCP管理的网段里面,DHCP服务器会将这个地址分配给其他的机器,一旦分配了ARP会产生两个应答,发生冲突
如果交给客户端来检测冲突,一般是客户端在接收分配IP之前,先发送一个ARP,看看有无冲突,如果有应答,就是已经被分配占用了,于是发送一个DHCPDECLINE,放弃这个地址
如果交给服务端来检测冲突,DHCP会发送ping,看某个IP是否被使用了,如果被使用了,就不再将这个IP分配给其他的客户端了
在Offer和ACK的阶段,为何DHCP的Server给细腻及其的数据包,Mac头里面的是广播地址ff:ff:ff:ff:ff:ff,而不是新机器的MAC地址
DHCP Request究竟使用广播还是单播取决于DHCP Offer包中的Broadcast为的设置值,位置为1的说明使用广播发送,为0的说明是单播发送
一旦有了IP地址,DHCP Server希望通过单播的方式发送OFFER和ACK,但有的客户端支持单播
,这样就可以设置为0,以单播的形式交互
DHCP内网的信任问题
DHCP协议设计师基于内网互信的基础设计,基于UDP协议,但是的确有风险,例如,一个普通的用户恶意安装了一个DHCP,开放一些错误或者冲突的配置
或者恶意的用户发送大量的DHCP的请求,让DHCP的服务器给其分配大量的IP
对于第一种问题,DHCP和二层网络都是网关管理的,可以再交换机配置,只有某个DHCP的包是可信的,非法的DHCP的包拦截到虚拟机或者物理机的出口
对于第二种情况,一方面是监控,对DHCP报文进行限速,并且,只有SDN登记过得IP和MAC,可以进行出口,其他的不能,导致无法模拟大量的客户端