DHCP的工作原理

  • 要配置好一个网络环境,使计算机顺利可以顺利Internet,那么计算机里一定要有IP、netmask、network、broadcast、getway、DNS IP等网络参数才行。

其中 IP、network、netmask、broadcast、gateway、都可以在/etc/sysconfig/netmask-scrips/ifcfg-eth[0-n]这个文件中定义。
DNS服务器的地址则可以在/etc/resolv.conf文件中定义。

那么如果有很多台电脑都需要配置一个网络环境,每台电脑都需要手动如上述配置是否会累死人呢?
我觉得大概不会吧。但是吧,很多很多就不一定了,毕竟懒人推动世界。不胡扯了,开始正文。

DHCP(Dynamic Host Configuration Protocol)服务器配置。
服务器主要的作用,就是实现自动地将网络参数正确的分配给网络中的每台计算机
,让客户端的计算机可以在开机时就立即自动分配好网络的参数值,这些参数可以是如上网络参数。

DHCP协议的工作方式

其实,DHCP通常是用于局域网内的一个通信协议它主要是通过客户端发送广播数据包给整个物理网段的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP数据包的参数要求。
所以DHCP服务器应该和客户端在同一个物理网段内

DHCP的工作原理_第1张图片
注:port67监听客户端请求,port68客户端向服务端发送请求。

通过如上图可以看出,客户端取得IP参数的程序可以简化如下:

(1)客户端:利用广播数据包发送搜索DHCP服务器的数据包。

若客户端网络设置使用DHCP取得IP,则当客户端开机或是重新启动网卡时,客户端主机会发送出查找DHCP服务器的UDP数据包给物理网段内的所有计算机。
注:此数据包的目标IP会是255.255.255.255,所以一般主机接收到这个数据包后会直接予以丢弃,但若局域网内有DHCP服务器时,则会开始后续行为。

(2)服务器端:提供客户端网络相关的租约以供选择。

DHCP服务器在接收到客户端的要求后,会针对这个客户端的硬件地址(MAC)。
与本身的设置数据来进行下列工作:

  • 到服务器的日志文件中查找该用户之前是否租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端。
  • 若配置文件针对该MAC地址提供特定的固定IP(static IP)时,则提供该固定IP给客户端。
  • 若不符合上述两个条件,则随机选取当前没有使用过的IP参数给客户端,并记录下来。

总而言之,服务器端会针对客户端的要求提供一组网络参数租约给客户端选择。
注:由于此时客户端尚未有IP,所以在服务器端响应的数据包信息中,主要是针对客户端的MAC来给予回应的。
此时服务器会保留这个租约然后开始等待客户端的回应。

(3)客户端:决定选择DHCP服务器提供的网络参数租约并向服务器确认。

由于局域网内可能并非有一台DHCP服务器,但是客户端仅能接受一组网络参数租约。因此客户端需要选择。
当决定好使用此服务器的网络参数租约后,客户端便开始使用这组网络参数来配置自己的网络环境。因此,客户端也会发送一个广播数据包给所有在此物理段内的主机。告知已经接受该服务器的租约,其他的没有被接受的DHCP服务器就会收回该IP租约。
被接受的DHCP服务器会继续进行以下动作。

(4)服务端:记录该次租约行为,并向客户端发送响应数据包信息以确认客户端的使用。

当服务端接收到客户端的确认选择后,服务器会回送确认的相应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。

关于租约所造成的问题与租约期限

首先我们会有疑问:为什么要设置一个这样的期限呢?
答:最大的好处是可以避免IP被某些客户端一直占用着,但是该客户端却是idle(闲置)的状态。
举个栗子:有150个IP,但是偏偏有200个用户,假如今天刚好要选课,我们每个人都急匆匆想要上网去选择自己喜欢的课,那么在高峰期时间,这200个人同时要来使用这150个IP,可能吗?
显然是不可能的,当然会有后50个人无法连接。就会有“系统正忙”了。

但是如果在非高峰期,200个人却也可以共同共享这150个IP,比如早晚等时间错开。
那么如何结果高峰问题呢? 这时候租约到期的方式的作用就凸显出来了。那些已经连接很久的人,就会因为租约到期而被迫离线,这时候该IP就会被释放出来,无法进行连接,进行DHCP请求的那50个人就会有机会获得IP。

既然有租约到期,那么是否代表DHCP取得的IP就一定要手动在某个时间去重新获取新的IP呢? 不需要。因为目前的DHCP客户端程序大多数会主动依据租约时间去重新申请IP(renew)。也就是说,在租约到期前的DHCP客户端程序又重新申请
跟新租约时间了。所以除非DHCP主机宕机,否则你取得的IP应该是可以一直使用下去的。

更新:

Linux下来配置IP地址

Linux下通过命令nmcli 来配置ip。

1.显示所有连接列表
nmcli con show
2.指定连接ID(名称)
nmcli con show “static-eth0”
3.显示设备状态和详细信息
nmcli dev status
4.定义一个名为"default"的新连接,它将使用DHCP通过eth0设备的以太网自动连接
nmcli con add con-name “default” type ethernet ifname eth0
5.新建一个名为"static"的连接,并且指定IP地址和网关。不要自动连接
nmcli con add con-name “static” ifname eth0 autoconnect no type ethernet ip4 172.25.2.10/24 gw4 172.25.2.254
6.系统将在启动时通过DHCP连接进行自动连接。更改为静态连接
nmcli con up “static”
7.改回到DHCP连接
nmcli con up “default”

或者是 修改文件vim /etc/sysconfig/network-scripts/ifcfg-eth0,将BOOTPROTO改为dhcpBOOTPROTO = dhcp自动获取ip地址,或者将BOOTPROTO = none手动添加以下参数来配置IP地址。

IPADDR0=172.25.X.10(主机地址)
PERINX0=24(前缀码) ONBOOT=yes
GETWAY0=172.25.X.254(网关)
DEFROUTE=yes(将该接口设置为默认路由)
DNS1=172.25.254.254(指定dns服务器)

再或者…点击鼠标 — 找到配置中心 — 找到网络 — 点击你所连接到的网络 — 进入详情 —即可手动配置你的ip地址及其他网络参数啦(不到紧急情况万不得已不推荐…这种方法当然很快,但是在linux下当然要体现文件系统及命令行的酷炫作用啦~)

你可能感兴趣的:(Linux,服务器配置)