首页 > 系统相关 >【Linux入门】DHCP与FTP原理及其配置实例

【Linux入门】DHCP与FTP原理及其配置实例

时间:2024-08-19 10:53:46浏览次数:15  
标签:FTP DHCP Linux vsftpd IP地址 服务器 客户端

文章目录

DHCP原理

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,用于自动为TCP/IP网络中的计算机分配IP地址、子网掩码、默认网关、DNS服务器地址等配置信息。它的设计初衷是简化网络管理,降低手动配置IP地址的复杂性和错误率。

一、DHCP概述

  • 起源与发展:DHCP的前身是BOOTP协议(Bootstrap Protocol),BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代。DHCP由Internet工作任务小组设计开发,是一个应用层协议,使用UDP的67(DHCP Server)和68(DHCP Client)端口进行通信。
  • 主要功能:DHCP主要分配的参数包括IP地址、子网掩码、广播地址、默认的网关地址、DNS服务器地址等,还可以提供PXE引导设置(如TFTP服务器地址、引导文件名)。

二、DHCP的工作原理

DHCP采用C/S(客户端/服务器)模式,其工作原理主要包括以下几个步骤:

  1. DHCP Discover(发现)
    • 当DHCP客户机启动时,如果还没有配置IP地址,它会以广播方式发送一个DHCP Discover报文,请求DHCP服务器分配IP地址。
  2. DHCP Offer(提供)
    • 当DHCP服务器接收到DHCP Discover报文后,它会在自己的IP地址池中查找是否有合法的IP地址可以提供给客户机。如果有,DHCP服务器会向客户机发送一个包含IP地址及其他相关配置信息的DHCP Offer报文。
  3. DHCP Request(请求)
    • 客户机从接收到的多个DHCP Offer报文中选择一个(通常是第一个),并向该DHCP服务器发送DHCP Request报文,请求正式分配该IP地址。
  4. DHCP ACK(确认)
    • DHCP服务器在收到DHCP Request报文后,会发送一个DHCP ACK报文给客户机,确认IP地址的分配。客户机在收到DHCP ACK报文后,会配置自己的IP地址及其他相关参数,完成TCP/IP的初始化。
  • 总结:
    • 发现阶段(DHCP Discover):客户端广播DHCP Discover报文,请求IP地址配置。
    • 提供阶段(DHCP Offer):DHCP服务器收到请求后,通过DHCP Offer报文分配一个IP地址给客户端。
    • 请求阶段(DHCP Request):客户端选择接受DHCP Offer中的IP地址,并发送DHCP Request报文确认。
    • 确认阶段(DHCP Acknowledge):DHCP服务器发送DHCP Ack报文,确认客户端已获得分配的IP地址和配置信息。

三、DHCP的分配方式

DHCP支持三种IP地址分配方式:

  1. 自动分配:DHCP服务器为客户机分配一个永久的IP地址,直到客户机被显式释放或租约到期。
  2. 手动分配:由DHCP服务器管理员专门指定IP地址给客户机。
  3. 动态分配:DHCP服务器在一定期限内将IP地址租给客户机使用,租期结束后客户机必须续租或停用该地址。

四、DHCP的租约

DHCP通过租约机制来实现IP地址的动态分配和回收。客户机在获得IP地址后,会进入一个租约期。在租约期内,客户机可以正常使用该IP地址。当租约期达到50%(T1)时,客户机会自动向DHCP服务器发送续租请求。如果租约期达到87.5%(T2)时 仍未收到服务器的响应,客户机会再次发送续租请求。如果最终租约期结束且未成功续租,客户机将释放IP地址,并可能重新执行DHCP发现过程以获取新的IP地址。

五、DHCP的应用场景

DHCP服务器在网络中扮演着重要角色,广泛应用于各种网络环境,包括家庭网络、办公网络、公共场所网络以及租赁公司网络等。使用DHCP服务器可以极大地简化网络管理工作,提高网络配置的效率和准确性。
综上所述,DHCP通过自动分配和回收IP地址等配置信息,简化了网络管理的复杂性,提高了网络的灵活性和可扩展性。

FTP原理

FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上进行文件传输的标准协议。其原理主要基于客户端/服务器(C/S)模型,通过TCP(传输控制协议)连接实现数据的可靠传输。

一、FTP概述

  • 定义:FTP是一种用于在计算机网络上传输文件的协议,它允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。
  • 工作层次FTP工作在OSI模型的第七层(应用层),TCP模型的第四层,使用TCP传输而不是UDP,确保数据传输的可靠性和面向连接性。

二、FTP的工作原理

  1. 连接建立
    • 客户端向FTP服务器发出连接请求,同时客户端系统动态打开一个大于1024的端口(如1031)等候服务器连接。
    • FTP服务器在端口21侦听到该请求后,会在客户端的1031端口和服务器的21端口之间建立起一个FTP会话连接(控制连接)。
  2. 数据传输
    • 当需要传输数据时,FTP客户端再动态打开一个大于1024的端口(如1032)连接到服务器的20端口,并在这两个端口之间进行数据的传输(数据连接)。
    • 数据传输完毕后,FTP客户端将断开与FTP服务器的连接,客户端上动态分配的端口将自动释放掉。
  3. 命令与响应
    • FTP采用两条TCP连接的方式工作:一条是控制连接,用于传送控制信息(命令和响应);另一条是数据连接,用于数据传送。这种将命令和数据分开传送的思想大大提高了FTP的效率。
  4. 用户交互
    • 用户通过FTP客户端软件与FTP服务器进行交互,可以执行文件的上传、下载、删除、重命名等操作。
    • 用户并不真正登录到自己想要存取的计算机上成为完全用户,而是通过FTP程序访问远程资源。

三、FTP的连接模式

FTP支持两种连接模式:主动模式(Active FTP)和被动模式(Passive FTP)。

  • 主动模式FTP服务器主动连接客户端的数据端口。在这种模式下,FTP服务器使用其TCP 20端口向客户端的随机端口(大于1024)发送数据。由于大多数防火墙不允许外部发起的连接,因此主动模式在通过防火墙时可能会受到限制。
  • 被动模式客户端主动连接FTP服务器的数据端口。在这种模式下,FTP服务器会打开一个大于1024的端口进行监听,并通知客户端该端口号。客户端随后连接到该端口以接收数据。被动模式通常用于防火墙后的FTP客户访问外界FTP服务器。

四、FTP的应用

FTP广泛应用于各种网络环境,包括企业内网、互联网等。它允许用户在不同计算机之间高效地传输文件,支持断点续传、目录管理等功能。同时,FTP也是许多网站和服务器用于提供文件下载服务的主要方式之一。
综上所述,FTP通过其独特的客户端/服务器模型和两条TCP连接的方式,实现了文件在网络上的高效、可靠传输。

配置实例

DHCP配置实例

以下是整理完整DHCP配置实例过程,适用于CentOS 7作为DHCP服务器,以及CentOS 7和Windows 10作为DHCP客户端的场景。

DHCP服务器配置(CentOS 7)

1. 环境准备
  • 确保所有虚拟机使用VMware的“仅主机模式”(Vmnet2)网络。
  • 关闭VMware的虚拟网络编辑器中的DHCP服务。
  • 确定Vmnet2的IP地址范围(例如:192.168.65.0/24)。
  • 关闭CentOS 7服务器的防火墙和SELinux。
systemctl stop firewalld
setenforce 0
2. 安装DHCP服务
yum install -y dhcp
3. 配置网络接口

确保DHCP服务器的网络接口(如ens33)配置为静态IP,但不需要设置网关(因为DHCP服务器将作为网关)。

vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 示例配置
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.65.2
NETMASK=255.255.255.0
DEVICE=ens33

重启网络服务以应用更改。

systemctl restart network
4. 配置DHCP服务

编辑DHCP配置文件。

cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf

在配置文件中,设置子网和地址池。

subnet 192.168.65.0 netmask 255.255.255.0 {
  range 192.168.65.10 192.168.65.50;
  option routers 192.168.65.2;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
  default-lease-time 600;
  max-lease-time 7200;
}
5. 启动DHCP服务
systemctl start dhcpd
systemctl enable dhcpd
systemctl status dhcpd

DHCP客户端配置

CentOS 7 客户端
  • 将网络接口配置为DHCP。
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改为
BOOTPROTO=dhcp
ONBOOT=yes
DEVICE=ens33

重启网络服务。

systemctl restart network
ifconfig ens33
Windows 10 客户端
  • 在Windows 10上,通常网络接口默认配置为自动获取IP地址(DHCP)。
  • 如果不是,可以在“网络和Internet”设置中找到网络适配器,并设置为“自动获取IP地址”。

验证

  • 在DHCP客户端上,使用ipconfig(Windows)或ifconfig(Linux)命令查看分配的IP地址。
  • 在DHCP服务器上,查看/var/lib/dhcpd/dhcpd.leases文件以确认租约信息。

FTP应用实例

vsftpd 安装

# 检查vsftpd安装包是否存在
rpm -qc vsftpd

# 如果不存在,则通过yum安装vsftpd
yum install -y vsftpd

# 切换到vsftpd配置文件目录
cd /etc/vsftpd
ls

# 备份vsftpd配置文件
cp vsftpd.conf vsftpd.conf.bak

vsftpd 配置

初始全局配置

编辑vsftpd.conf文件以进行基本配置。

vim /etc/vsftpd/vsftpd.conf

在文件中设置以下参数(如果它们已被注释,可以取消注释并修改):

anonymous_enable=YES            # 允许匿名用户访问
local_enable=YES                # 允许系统用户访问
write_enable=YES                # 允许文件写入(上传)
anon_umask=022                  # 匿名用户上传文件的umask值
匿名用户高级配置

为匿名用户提供更多权限。

anon_upload_enable=YES          # 允许匿名用户上传文件
anon_mkdir_write_enable=YES     # 允许匿名用户创建目录
anon_other_write_enable=YES     # 允许匿名用户删除、重命名文件

注意: 这些设置提供了较高的匿名用户权限,可能带来安全风险。

重启vsftpd服务
systemctl restart vsftpd
关闭防火墙和SELinux(可选,出于安全考虑,在生产环境中还请遵照具体情况决定)
systemctl stop firewalld
setenforce 0
设置匿名用户根目录权限
chmod 777 /var/ftp/pub/
echo 'hello world!' > /var/ftp/pub/test.txt

匿名访问测试

使用Windows的FTP客户端连接到FTP服务器,并进行测试。

本地用户验证访问配置

禁用匿名访问并启用本地用户访问
# 添加本地用户
useradd zhangsan
echo '123' | passwd --stdin zhangsan
useradd lisi
echo '123' | passwd --stdin lisi

# 修改vsftpd.conf
vim /etc/vsftpd/vsftpd.conf

local_enable=YES
anonymous_enable=NO
write_enable=YES
local_umask=077
限制本地用户访问目录
chroot_local_user=YES
allow_writeable_chroot=YES
修改本地用户和匿名用户的默认根目录
# 对于匿名用户
anon_root=/var/www/tml
# 对于本地用户
local_root=/var/www/html

黑名单和白名单

黑名单
userlist_enable=YES
userlist_deny=YES

/etc/vsftpd/user_list文件中添加要禁止的用户名。

白名单
userlist_enable=YES
userlist_deny=NO

/etc/vsftpd/user_list文件中添加允许访问的用户名。

允许root用户访问(如果需要)

编辑/etc/vsftpd/ftpusers文件,注释掉root行(或删除该行)。

验证配置

重启vsftpd服务,并再次使用FTP客户端测试所有配置是否按预期工作。

systemctl restart vsftpd

其他安全性考虑

  • 不要在生产环境中给予匿名用户过多权限。
  • 定期检查FTP日志以识别任何可疑活动。
  • 考虑使用更安全的认证机制,如SFTP(通过SSH)。

标签:FTP,DHCP,Linux,vsftpd,IP地址,服务器,客户端
From: https://blog.csdn.net/Karoku/article/details/141311461

相关文章

  • Linux安装nginx1.26.2
    第一步:去官网下载指定的版本http://nginx.org/en/download.html第二步:解压压缩包:tar-zxvf  ......tar.gz第三步:编译nginx ./configure如果出现报错:./configure:error:theHTTPgzipmodulerequiresthezliblibrary.Youcaneitherdisablethemodulebyusing--......
  • Linux C++ 开发4 - 入门makefile一篇文章就够了
    1.make和Makefile1.1.什么是make?1.2.什么是Makefile?1.3.make与Makefile的关系2.Makefile的语法2.1.基本语法2.2.变量2.3.伪目标2.4.模式规则2.5.自动变量2.6.条件判断3.示例演示3.1.编译HelloWorld程序3.2.编译多文件项目3.2.1.项目......
  • python subprocess 执行Linux指令
    一、subprocess模块1、概述subprocess模块首先推荐使用的是它的run方法subprocess.run(),更高级的用法可以直接使用Popen接口subprocess.Popen()。2、优点安全性:与os.system相比,subprocess避免了shell注入攻击的风险。灵活性:subprocess可以与子进程的stdin、stdout和std......
  • JetBrains DataSpell 2024.2 (macOS, Linux, Windows) - 专业数据科学家的 IDE
    JetBrainsDataSpell2024.2(macOS,Linux,Windows)-专业数据科学家的IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-dataspell/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsDataSpell-专业数据科学家的IDE......
  • Linux运维学习记录02
    一、总结学过的权限,属性及ACL相关命令及选项,示例。文件的权限主要针对三类对象进行定义:owner属主,ugroup属组,gother其他,o每个文件针对每类访问者都定义了三种权限rReadable4wWritable2xeXcutable1Linux文件系统上的特殊权限SUID作用于二进制可执行文件......
  • Linux运维学习记录03
    磁盘存储术语总结:head,track,sector,sylinder.head:磁盘驱动器中的读/写头,用于读取或写入数据。每个磁盘表面有一个头。track:磁盘表面上的一个圆形数据存储区域,由多个扇区组成。sector:把每个磁道按512bytes大小再进行划分,这就是扇区,每个磁道上的扇区数量是不一样的sylin......
  • 【Linux系列】应急响应 · 备忘录
    这些命令和文件可以帮助你快速定位问题、查找可疑文件、监控进程等。请注意,这些命令可能需要root权限才能执行。查找72小时内新增的文件:find/-ctime-2查找24小时内被修改的JSP文件:find./-mtime0-name"*.jsp"根据确定时间去反推变更的文件:ls-al/tmp|gre......
  • 【嵌入式linux开发】智能家居入门6:最新ONENET,物联网开放平台(QT、微信小程序、MQTT协议
    智能家居入门6:最新ONENET物联网开放平台前言最终现象一、ONENET云平台创建产品与设备二、使用MQTT客户端软件测试2.1测试前的准备2.2测试三、LInuxQT代码四、onenet云端API介绍及微信小程序代码4.1onenetAPI介绍4.2微信小程序代码五、板端运行前言ONENET云......
  • Linux, shell编程备份数据库详解,带你读懂命令行指令
    目录先看最终代码再解释[!-d"${BACKUP}/${DATETIME}"]解析mysqldump-u${DB_USER}-p${DB_PW}--host=${HOST}-q-R--databases${DATABASE}|gzip>${BACKUP}/${DATETIME}/$DATETIME.sql.gz解析 tar-zcvf$DATETIME.tar.gz${DATETIME}解析先看最终代码再解......
  • Linux系统中的进程和端口查看命令
    本章将和大家分享Linux系统中的进程和端口查看命令。一、ps命令Linux中的ps命令是ProcessStatus的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。1、基本......