系列文章目录
` 提示:仅用于个人学习,进行查漏补缺使用。
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本章大概内容有:
查看网络配置、修改主机名、ifconfig、route、netstat、ss、lostof、ping命令、nslookup、修改网络配置等
提示:以下是本篇文章正文内容,下面案例可供参考
一、查看网络配置
1.1查看网络接口信息ifconfig
- 查看所有活动的网络接口信息
- 执行ifconfig命令
- 查看指定网络接口信息
ifconfig 网络接口
- ifconfig常用选项
| 选项 | 功能描述 |
| — | — |
|-a
| 显示所有的网络接口,包括正在运行和已关闭的接口。 |
|-s
| 显示接口的统计信息。 |
|-v
| 显示详细的接口信息。 |
|-u
| 更新接口信息,实际作用取决于后续参数。 |
|-l
| 列出所有网络接口。 |
|-p
| 显示接口和进程之间的映射关系。 |
|-h
| 显示帮助信息。 |
ifconfig -a -v ###查看所有网络接口的详细信息
ifconfig 网卡名称【up|down】 ###表示开启或关闭网卡
# 为网络接口配置IP地址和子网掩码
ifconfig 网络接口 ip地址 [netmask 子网掩码]
# 示例:为ens33接口配置IP地址为192.168.1.10,并设置子网掩码为255.255.255.0
ifconfig ens33 192.168.1.10 netmask 255.255.255.0
# 也可以使用CIDR表示法来设置子网掩码
ifconfig 网络接口 ip地址 [/子网掩码长度]
# 示例:为ens33接口配置IP地址为192.168.1.10,并设置子网掩码为/24(等同于255.255.255.0)
ifconfig ens33 192.168.1.10/24
# 创建一个虚拟网卡(别名),并为其配置IP地址
ifconfig 网络接口:0 地址
# 示例:为ens33接口创建一个虚拟接口ens33:0,并配置IP地址为192.168.1.11
ifconfig ens33:0 192.168.1.11
# 关闭虚拟网卡
ifconfig ens33:0 down
# 示例:关闭ens33的虚拟接口ens33:0
ifconfig ens33:0 down
# 开启虚拟网卡
ifconfig ens33:0 up
# 示例:开启之前关闭的ens33的虚拟接口ens33:0
ifconfig ens33:0 down
ifconfig -s ###显示接口的统计信息
**_MTU: _**Maximum Transmission Unit,最大传输单元。指一个网络设备或链路能够传输的最大数据包或帧的大小,不包括链路层的头部和尾部信息
本地MTU值与网络MTU值的关系 | 结果 |
---|---|
本地MTU值 > 网络MTU值 | 需要拆包,导致效率下降 |
本地MTU值 < 网络MTU值 | 未发挥最大传输能力 |
本地MTU值 = 网络MTU值 | 理想状态 |
**PS: **一般以太网MTU都为1500, 所以在以太网中, 往往TCP MSS为1460
- MSS(Maximum Segment Size,最大段大小)
- 对于一个以太网连接,MTU通常是1500字节,IP头部通常是20字节,TCP头部通常是20字节,所以MSS通常是1460字节(1500 - 20 - 20 = 1460)
启用、禁用网络接口配置
命令 | 用途 | 注释 |
---|---|---|
systemctl restart network | 重启所有的网卡 | 这个命令会重启网络服务,从而重启所有配置的网络接口。 |
ifdown ens33 | 关闭某个网卡 | 用于关闭名为ens33的以太网接口。 |
ifup ens33 | 启动某个网卡 | 用于启动名为ens33的以太网接口。 |
ifconfig ens33 down | 临时禁用某个网卡 | 通过将ens33接口的配置设置为down来禁用它。 |
ifconfig ens33 up | 重新激活某个网卡 | 与ifdown 相反,这个命令会将网卡的配置设置为up,使其重新激活,但不会更改IP地址。 |
ifconfig 设备名称 IP地址/子网掩码 [255.255.255.0] | 配置或查看网卡的IP地址和子网掩码 | 如果后面带有IP地址和子网掩码,这个命令将配置网卡的IP地址。如果不带参数,它将显示当前的IP地址和其他网络配置。255.255.255.0是子网掩码的一个示例。 |
hostname | 查看主机名称 | 显示当前系统的主机名。 |
修改主机名
1. **临时修改主机名**:
- 使用`hostname`命令可以临时修改主机名,但机器重新启动后会恢复到原来的名字。
hostname 新主机名
2. **永久性修改主机名**:
- 使用`hostnamectl`命令可以永久性地修改主机名。
hostnamectl set-hostname 新主机名
- 或者,直接编辑`/etc/hostname`文件来永久性地修改主机名。
vi /etc/hostname
reboot ###重启系统以使更改完全生效
1.2查看路由表条目 route
route
route -n ###查看或设置主机中路由表信息
**_route_**
命令的常用选项 :
选项 | 功能描述 |
---|---|
-n | 直接使用数字地址及端口,而不是尝试解析为名称。 |
-v | 显示详细的路由信息。 |
-e | 显示有效的路由条目。 |
-h | 显示帮助信息。 |
示例:
route -v ###显示详细的路由信息
route -e ###显示有效的路由条目
1.3查看网络连接情况 netstat (即端口扫描)
netstat -natp ### 只看TCP协议
netstat -naup ### 只看UDP协议
netstat -antp | grep ###端口号
**_netstat_**
命令常用选项:
选项 | 功能描述 |
---|---|
-a | 显示所有网络连接,包括监听和非监听状态的端口。 |
-n | 以数字形式显示地址和端口号,不进行名称解析。 |
-t | 显示TCP连接信息。 |
-u | 显示UDP协议相关的信息。 |
-p | 显示与网络连接相关联的进程号和进程名称。 |
-l | 显示监听中的服务器套接字。 |
-r | 显示路由信息 |
示例:
netstat -antp ###查看所有活动的TCP网络连接信息,包括监听状态和服务端口
netstat -tcp ###查看TCP连接信息
netstat -udp ###查看UDP协议相关的信息
netstat -ap ###查看与网络连接相关联的进程号和进程名称
netstat -anultp ###除了路由表信息,其他全查询
1.4获取socket(套接字)统计信息 ss
- **_基本语法_**
ss [选项] [参数]
- **_常用选项_**
选项 | 功能描述 |
---|---|
-a | 显示所有套接字,包括监听套接字和非监听套接字。 |
-n | 不解析服务名称,以数字形式显示地址和端口号。 |
-t | 仅显示TCP套接字。 |
-u | 仅显示UDP套接字。 |
-x | 仅显示Unix域套接字。 |
-l | 仅显示监听(listen)套接字。 |
-o | 显示计时器信息。 |
-p | 显示使用套接字的进程号和进程名称。 |
-m | 显示套接字的**内存**使用情况。 |
-r | –resolve , 把 IP 解释为域名,把端口号解释为协议名称 |
-i | 显示内部的TCP信息。 |
-s | 显示套接字使用概况。 |
-D | 将原始TCP套接字信息转储到文件。 |
- **_示例:_**
ss -ta ###查看所有TCP套接字,包括监听和非监听状态
ss -u ###查看UDP套接字的信息
ss -p ###查看与套接字相关的进程信息
ss -nltp ###显示TCP连接的详细信息,包括非监听状态的TCP端口,以及与这些端口相关联的进程ID和进程名称
ss -nltp | grep 22 ###查看tcp的所有包含22的端口
PS:三次握手和四次挥手是TCP(传输控制协议)中用于建立和终止连接的两个重要过程。
三次握手(建立连接)
1. **SYN**:客户端发送一个SYN(同步序列编号)报文到服务器,并进入SYN_SENT状态,等待服务器确认。
2. **SYN-ACK**:服务器收到SYN报文后,会发送一个SYN-ACK(同步和确认)报文作为响应,并将连接状态设置为SYN_RECEIVED。这个报文中既包含SYN也包含ACK(确认字符)。
3. **ACK**:客户端收到服务器的SYN-ACK报文后,会发送一个ACK报文作为响应,并将连接状态设置为ESTABLISHED。服务器在收到这个ACK报文后,也将连接状态设置为ESTABLISHED。
这样,双方都确认了对方的接收能力和同步序列编号,连接就建立了。
四次挥手(终止连接)
四次挥手是TCP连接终止的过程,确保客户端和服务器双方都同意关闭连接。这个过程如下:
1. **FIN**:当连接的一端完成数据发送,它会发送一个FIN(结束)报文到另一端,并进入FIN_WAIT_1状态,等待对方确认。
2. **ACK**:另一端收到FIN报文后,会发送一个ACK报文作为响应,并将连接状态设置为CLOSE_WAIT。发送端收到这个ACK后,进入FIN_WAIT_2状态。
3. **FIN**:在发送了ACK报文并处理完剩余的数据传输后,另一端也发送一个FIN报文,并进入LAST_ACK状态。
4. **ACK**:最初发送FIN报文的一端收到对方的FIN报文后,会发送一个ACK报文作为最后的确认,并进入TIME_WAIT状态。经过一段时间(称为2MSL,即最大报文生存时间的两倍)后,确保对方收到了最后的ACK报文,连接彻底关闭。
这个过程确保了双方都有机会处理结束连接的请求,并且确保所有未发送的数据都被对方接收。
1.5lsof(list open files)列出系统中打开文件的进程信息
- 可以显示当前系统中打开的文件、目录、套接字、管道等资源,以及与它们相关联的进程信息。
- **_常用选项_**
选项 | 功能描述 |
---|---|
-a | 显示所有打开文件或目录的进程,包括文件描述符为0、1、2的进程。 |
-c | 仅显示指定命令名的进程打开的文件。 |
-d | 仅列出指定的文件描述符。 |
-g | 使用NFS网络文件系统组映射显示。 |
-i | 列出指定类型的文件。 |
-n | 显示数字形式的地址和端口号。 |
-p | 仅显示指定进程ID打开的文件。 |
-r | 显示真实文件名,不显示符号连接。 |
-s | 仅显示自上次更新以来打开或关闭的文件。 |
-t | 仅显示终端相关文件。 |
-u | 仅显示指定用户打开的文件。 |
-v | 输出详细信息。 |
-h | 显示帮助信息。 |
- **_示例:_**
命令 | 功能描述 |
---|---|
lsof | 列出指定用户打开的文件和网络连接 |
lsof -u root | 列出指定用户(root)打开的文件和网络连接。 |
lsof -i :22 | 列出指定端口(22)被哪些进程占用。 |
lsof -i -a -p <PID> | 显示指定进程ID(PID)的网络连接信息,并且进行与查询条件的逻辑与操作。 |
lsof -i -s TCP:LISTEN | 以监听模式查看TCP网络连接。 |
lsof -c ssh | 列出运行了指定命令(ssh)的进程打开的文件。 |
- lsof -i -a -p <PID>在命令中,
- -参数表示只显示网络连接信息,
- -a参数表示进行与查询条件的逻辑与操作,
- -p 参数表示指定要查询的进程ID。
- 面试题:工作中一般用哪些命令,维护操作,具体是看什么的?
lsof -i -P -a -p 1026 ###显示特定进程ID(PID)`1026` 打开的文件和网络连接信息包括少量端口号。
-i 参数表示只显示网络连接信息
-p 轻质显示端口号
-a 参数表示进行与查询条件的逻辑与操作
-P 参数表示指定要查询的进程ID
字段 | 说明 |
---|---|
COMMAND | 进程名,即正在运行的命令或进程的名称 |
PID | 进程ID,进程的唯一标识符 |
TID | 线程ID,特定进程中的线程的唯一标识符 |
USER | 进程所属的用户账户 |
FD | 文件描述符,表示与进程相关的文件或资源,如当前工作目录、根目录、文本文件等 |
TYPE | 与文件描述符关联的节点类型,如目录、普通文件、字符设备等 |
DEVICE | 设备编号,用于标识特定的硬件设备或网络资源 |
SIZE/OFF | 文件大小和文件偏移量,用于指示文件的数据位置和大小 |
NODE | 本地文件节点编号,是文件系统中的一个唯一标识 |
NAME | 文件系统挂载点名称,即文件系统挂载的目录名称 |
二、测试网络连接 —ping
选项 | 功能描述 |
---|---|
-c | 指定发送的ICMP数据包数量,默认是4个 |
-i | 指定发送数据包之间的延迟(以秒为单位),默认为1秒 |
-s | 指定发送的数据包大小(以字节为单位),最大为65507字节 |
-t | 持续发送数据包,直到手动中断 |
-a | 将目标地址解析成主机名 |
-n | 以数字形式显示地址和端口号 |
-r | 记录数据包经过的路由器 |
-l | 设置发送数据包的负载大小 |
-D | 启用数据包调试 |
-p | 设置发送的ICMP数据包pattern |
- **_示例:_**
ping -t 192.168.1.1 ###连续发送数据包直到手动中断
ping -s 1472 192.168.1.1 ###发送大尺寸的数据包进行网络测试
三、使用网络配置命令
跟踪数据包的路由路径—traceroute [需下载 yum install traceroute]
- 概述:
- 测试从当前主机到目的主机地址IP,用于追踪数据包从源主机到目标主机的路径。
- 基本用法:
traceroute [选项] [目的地]
-
常用选项:
| 选项 | 作用 |
| — | — |
|-n
| 不解析IP地址为主机名,直接显示IP地址 |
|-q
| 设置发送的数据包数量 |
|-p
| 设置UDP端口号 |
|-s
| 设置源地址 |
|-i
| 指定使用的接口 |
|-w
| 设置等待每个数据包的超时时间 |
|-m
| 设置最大TTL值 【TTL:生命周期】 | -
示例:
traceroute google.com 显示数据包到达Google网站的路径和每一跳的RTT
traceroute -w 1 google.com 查看路由器延迟,等待每个数据包的超时时间为1秒
traceroute -p 80 google.com 追踪特定端口80的连接
traceroute -u google.com 使用UDP协议
traceroute -s 192.168.1.1 google.com 从私有地址192.168.1.1发起追踪,这在测试内网到外网的连接时很有用
traceroute -n google.com 不解析主机名
traceroute -m 30 google.com 设置最大TTL值,数据包会在30个路由器中传播后停止
测试DNS域名解析—nslookup
- **_概述_**
- 用于查询域名系统(DNS)记录的命令行工具。
- 它被用来解析域名并返回其对应的IP地址,或者查询与特定IP地址关联的域名。
- **_基本用法_**
nslookup [选项] [查询类型] [域名或IP地址]
- **_常用选项_**
参数/选项 | 描述 |
---|---|
-silent | 不显示欢迎消息和警告信息 |
-type= | 指定查询的记录类型,如 A(IPv4 地址)、AAAA(IPv6 地址)、MX(邮件交换记录)等 |
-class= | 指定 DNS 查询的类别,通常使用 IN 类别 |
-server= | 指定一个特定的 DNS 服务器来进行查询 |
-recurse | 递归查询,即查询 DNS 服务器的 DNS 服务器 |
-retry= | 设置重试次数 |
-lifetime= | 设置查询的超时时间 |
-ttl | 显示查询结果的 TTL(生存时间)值 |
-debug | 输出详细的调试信息 |
-rootserver | 列出根 DNS 服务器 |
-CNAME | 显示 CNAME(别名)记录 |
- **_示例_**
# 查询域名的IP地址
nslookup example.com
# 使用特定的DNS服务器查询
nslookup -server 8.8.8.8 example.com
# 递归查询域名信息
nslookup -recurse example.com
# 显示域名的A记录和MX记录
nslookup -type=A,MX example.com
# 显示域名的完整DNS记录
nslookup -type=ANY example.com
# 查询IP地址对应的域名
nslookup 8.8.8.8
设置路由记录 route
- 基本用法
route [选项] [命令] [目标] [网络掩码] [接口]
- 常用命令
**_add_**
:添加一个新的路由条目。**_del_**
:删除一个路由条目。**_show_**
:显示路由表。**_delete_**
:删除一个路由条目,与**_del_**
相同。
- 常用选项
**_-n_**
:以数字形式显示地址和端口号。**_-p_**
:将路由条目添加为永久性条目,即使重启也不会丢失。**_-host_**
:指定目标是一个主机地址。**_-net_**
:指定目标是一个网络地址。**_-default_**
:设置默认路由。**_-iface_**
:指定数据包通过哪个网络接口发送。
- 常用案例
- 添加默认路由:
route add default gw 网关地址
- **_删除默认路由:_**
route del default gw 网关地址
- **_添加到特定网络的路由:_**
route add -net 网络地址 子网掩码 gw 网关地址
- **_显示路由表:_**
route -n
- **_示例:_**
(一)、添加到指定网段的路由记录
route add -net 网段地址 gw IP地址 dev ens33
route add -net 192.168.14.0/24 gw 192.168.233.21 dev ens33
#添加一个静态路由,将目标网络地址192.168.14.0/24通过网关192.168.233.21发送到网卡ens33。
这个命令会告诉操作系统在发送到目标网络192.168.14.0/24的数据包时,
应该通过指定的网关192.168.233.21进行中转,并通过网卡ens33进行发送。
(二)、删除到指定网段的路由记录
route del -net 网段地址
route del -net 192.168.14.0/24
(三)、向路由表中添加默认网关记录
route add default gw IP地址
(四)、删除路由表中默认的网关记录
route del default gw IP地址
(五)、永久添加路由(重启network服务生效)
vim /etc/sysconfig/static-routes
any net any gw 192.168.233.21: 将所有网络流量都路由到192.168.233.21网关
any net 192.168.3.0/24 gw 192.168.233.21: 将目的网络为192.168.3.0/24的所有流量路由到192.168.233.21网关
any net 10.0.0.0 netmask 255.0.0.0 gw 192.168.233.21: 将目的网络为10.0.0.0的所有流量,使用掩码255.0.0.0,路由到192.168.233.21网关
any host 192.168.100.100 gw 192.168.233.21: 将目的IP为192.168.100.100的所有流量路由到192.168.233.21网关。
systemctl restart network
- 相关信息
| 字段 | 描述 |
| — | — |
| Destination | 目标网段或者主机,即数据包需要发送到的目的地 |
| Gateway | 网关地址,* 表示目标是本主机所属的网络,不需要路由 |
| Genmask | 网络掩码,用于决定网域的大小 |
| Flags | 标记,表示路由的状态和特性,如 U(活动路由)、H(目标为主机)、G(指向网关)等 |
| Metric | 路由距离,即到达指定网络所需的中转数(在 Linux 内核中已废弃) |
| Ref | 路由引用次数(在 Linux 内核中已废弃) |
| Use | 此路由项被路由软件查找的次数 |
| Iface | 转发的网络设备,即虚拟网卡名称 |
四、修改网络配置文件
配置文件存在位置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet #设置网卡类型,“Ethernet”表示以太网
DEVICE=ens33 #设置网卡的名称
ONBOOT=yes #设置网卡是否在 Linux 操作系统启动时激活
BOOTPROTO=static #设置网卡的配置方式,“static”表示使用静态IP地址,“dhcp”时表示动态获取地址
IPADDR=192.168.80.3 #设置网卡的 IP 地址
NETMASK=255.255.255.0 #设置网卡的子网掩码
GATEWAY=192.168.80.2 #设置网卡的默认网关地址
DNS1=192.168.80.2 #设置DNS服务器的 IP 地
配置DNS域名解析服务器
修改DNS域名解析配置文件:vim /etc/resolv.conf
配置文件解析:
nameserver 192.168.233.21
#nameserver表示DNS服务器名称 8.8.8.8表示DNS解析服务器地址
修改完成后需要重启网卡服务:systemctl restart network
域名解析配置文件**
本地主机映射文件
/etc/resolv.conf
保存的是你DNS服务器的地址
/etc/hosts 文件
保存主机名与IP地址的映射记录
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.
192.168.91.100 www.yun.com
[root@kgc ~]#ping www.yun.com
PING www.yun.com (192.168.91.100) 56(84) bytes of data.
64 bytes from www.yun.com (192.168.91.100): icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from www.yun.com (192.168.91.100): icmp_seq=2 ttl=64 time=0.065 ms
64 bytes from www.yun.com (192.168.91.100): icmp_seq=3 ttl=64 time=0.067 ms
64 bytes from www.yun.com (192.168.91.100): icmp_seq=4 ttl=64 time=0.062 ms
64 bytes from www.yun.com (192.168.91.100): icmp_seq=5 ttl=64 time=0.071 ms
64 bytes from www.yun.com (192.168.91.100): icmp_seq=6 ttl=64 time=0.130
TYPE=Ethernet 网络接口类型,这里为以太网。
DEVICE=ens33 网络接口的设备名,即`ens33`。
ONBOOT=yes 系统启动时是否自动启用此网络接口。
BOOTPROTO=static 网络配置类型,这里为静态配置。
IPADDR=192.168.233.22 接口的IP地址。
NETMASK=255.255.255.0 子网掩码。
GATEWAY=192.168.233.2 默认网关地址。
DNS1=192.168.233.2 首选的DNS服务器地址。
常用接口类型
字段 | 描述 |
---|---|
TYPE | 接口类型,如以太网(Ethernet)或桥接(Bridge) |
PROXY_METHOD | 应用到设备的代理方法,通常不需要用户设置 |
BROWSER_ONLY | 通常不需要用户设置,可能是浏览器代理配置的一部分 |
BOOTPROTO | 启动时使用的地址配置协议,如动态主机配置协议(DHCP)、静态(Static)、无(None)、引导协议(Bootp) |
DEFROUTE | 设置是否使用默认路由,默认启用 |
IPV4_FAILURE_FATAL | 设置IPv4地址解析失败是否致命,默认关闭 |
IPV6INIT | 设置在引导时是否初始化IPv6,默认开启 |
IPV6_AUTOCONF | 设置是否使用IPv6自动配置,默认开启 |
IPV6_DEFROUTE | 设置是否为IPv6流量使用默认路由,默认开启 |
IPV6_FAILURE_FATAL | 设置IPv6地址解析失败是否致命,默认关闭 |
IPV6_ADDR_GEN_MODE | 设置IPv6地址生成模式,默认自动 |
NAME | 设备名称 |
UUID | 设备的唯一标识符 |
DEVICE | 网络设备名称 |
ONBOOT | 设置系统启动时是否自动启用此网络设备 |
IPADDR | 设备的IP地址 |
NETMASK | 设备的子网掩码 |
GATEWAY | 设备的默认网关地址 |
DNS1 | 设备的域名服务器 |
五、小结
1.netstat、ss、lsof功能用法
命令/工具 | 功能描述 |
---|---|
netstat | 显示TCP/UDP网络连接状态,包括监听IP和端口,连接状态,PID/任务名字和command。 |
ss | 显示内存、socket信息,类似于netstat,但在性能和信息详细程度上有所优势。 |
lsof | 显示网络连接情况,打开文件情况,进程占用,可以根据pid查询,查看端口。 |
2.socket、套接字、fd文件描述符 大概是什么东西,是做什么的?
Socket、套接字、文件描述符(fd)是计算机网络编程中的几个基本概念,它们在网络通信中扮演着重要的角色。
- Socket:
- 定义:在计算机网络中,Socket是一种编程接口,用于应用程序之间的网络通信。它是一端或两端通信的端点。
- 功能:Socket允许应用程序通过网络协议(如TCP/IP)与其他程序进行通信。它抽象了底层的网络细节,使得程序员可以更简单地开发网络应用程序。
- 套接字(Socket):
- 定义:套接字是操作系统网络层与应用程序之间的接口,用于发送和接收网络数据。
- 类型:套接字可以分为多种类型,如TCP套接字、UDP套接字等,它们分别对应不同的网络协议。
- 文件描述符(fd):
- 定义:文件描述符(file descriptor,简称fd)是一个非负整数,通常用于指向一个打开的文件或套接字。
- 功能:在操作系统中,文件描述符用于访问打开的文件或套接字。每个打开的文件或套接字都会被分配一个唯一的文件描述符。
- 操作:文件描述符可以用于执行I/O操作,如读取、写入、关闭等。
在网络编程中,当应用程序通过套接字进行通信时,操作系统会为这个套接字分配一个文件描述符。这个文件描述符可以被应用程序用来发送和接收数据。例如,在TCP套接字中,当服务器准备好接收客户端连接时,它会打开一个TCP套接字,并获取一个文件描述符。客户端通过这个文件描述符与服务器进行通信。
总结来说,Socket是一种通信协议,用于网络应用程序之间的数据交换;套接字是操作系统中网络层与应用程序之间的接口;文件描述符是操作系统中用于访问打开文件的标识符,包括套接字。这些概念共同构成了网络编程的基础,使得应用程序能够通过网络进行有效的通信。
3.DHCP申请IP的过程-》几个报文,每个报文干啥的?
DHCP(动态主机配置协议)是用于自动分配IP地址和其他网络配置参数的网络协议。DHCP客户端通常是在启动时自动申请IP地址,这个过程涉及到客户端和服务器之间的一系列报文交互。以下是DHCP客户端申请IP地址的过程:
- DHCP Discover(DHCP发现):
- 当客户端启动时,它会发送一个DHCP发现报文到广播地址(255.255.255.255),这个广播报文包含了客户端的MAC地址和它希望获取IP地址的信息。
- 这个报文会通知网络中的所有DHCP服务器客户端的启动和IP地址请求。
- DHCP Offer(DHCP提供):
- 接收到客户端的DHCP发现报文后,某个DHCP服务器(可能是多个服务器中的一个)会检查其地址池,并选择一个合适的IP地址。
- 然后,这个服务器会发送一个DHCP提供报文给客户端,其中包含了为客户端提供的IP地址、子网掩码、默认网关、DNS服务器等信息。
- DHCP Request(DHCP请求):
- 客户端接收到一个或多个DHCP提供报文后,会发送一个DHCP请求报文给广播地址,这个报文指定了它接受的IP地址。
- 这个DHCP请求报文实际上是向所有DHCP服务器广播的,但是只有为客户端提供IP地址的服务器会响应。
- DHCP Ack(DHCP确认):
- 提供IP地址的DHCP服务器收到客户端的DHCP请求报文后,会向客户端发送一个DHCP确认报文(Ack),确认客户端可以使用提供的IP地址。
- 这个DHCP确认报文包含了客户端请求的IP地址以及其他必要的网络配置信息。
- DHCP NAK(DHCP否认):
- 如果客户端提供的IP地址已经分配给其他设备,DHCP服务器会发送一个DHCP否认报文(Nak)给客户端,告知该IP地址不可用。
- 客户端通常会重新发送DHCP发现报文,以获取一个新的IP地址。
这就是DHCP客户端申请IP地址的完整过程。这个过程中,DHCP服务器和客户端之间的交互保证了IP地址的自动和高效分配,无需手动配置。