【计算机网络实验03】DHCP、netstat命令


本系列博客以计算机网络相关实验为主,包括windows命令实验、wireshark实验、Packet Tracer路由交换实验,也是自己整个学习过程中的一个记录,望不吝赐教。


5 DHCP

5.1命令功能简述

5.1.1 协议理解

DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一个用于 IP 网络的网络协议,位于 OSI 模型的应用层,使用 UDP 协议工作,主要有两个用途:用于内部网或网络服务供应商自动分配 IP 地址给用户;用于内部网管理员对所有电脑作中央管理。
简单的说,DHCP 可以让计算机自动获取/释放网络配置。

5.1.2 分配IP地址的方式

(1)手工配置方式:通过网络管理员手工配置某台客户端特定的IP地址,当客户端请求分配时,DHCP服务器就将手动配置的IP地址分配给客户端。
(2)自动配置方式:当DHCP客户端第一次想服务端租用到第一个IP地址后,就将这个IP地址永久分配给客户端使用。
(3)动态配置方式:服务器暂时分配一个IP地址给客户端,根据租约到期或者续约租期的方式来管理分配的IP地址。

5.2 格式、参数及选项简述

5.2.1 DHCP报文格式

整个报文的封装格式,包括链路层头、IP头、UDP头和DHCP报文,其中DHCP主要的数据都封装在DHCP报文中。
在这里插入图片描述
在这里插入图片描述

5.2.2 DHCP报文格式字段说明

字段说明
Op消息操作代码,1byte,既可以是引导请求,也可以是引导答复,1为请求报文;2为响应报文,具体的报文类型在option字段中标识。
Htype硬件地址类型,1byte,表示client硬件地址的类型,1表示以太网类型。
Hlen硬件地址长度,1byte,以太网的硬件地址长度为6bytes。
Xid处理ID,1byte,由client端产生的随机数,用于匹配请求和应答报文,匹配应答报文是对哪个请求报文做出应答。
Secs从获取到IP地址或者续约过程开始到现在所消耗的时间,2bytes,客户端进入IP地址申请进程的时间或者更新IP地址进程的时间;由客户端软件根据情况设定。目前没有使用,固定为0。
Flags标记,2bytes,16bit中只使用了最高位比特(即最左边的比特),这个个比特是广播响应标识位,用来标识DHCP服务器发出的响应报文是广播还是单播,0是单播,1是广播。其余的比特位保留不用,都为0.
Ciaddr客户机IP地址,4bytes,可以是client自己的IP地址,也可以是server分配给client的IP地址。
Yiaddr客户机IP地址,4bytes,是server分配给client的IP地址。
Siaddr在bootstrap中使用的下一台服务器的IP地址,4bytes,是client端获取IP地址等信息的server端的地址。
Giaddr用于导入的接替代理IP地址,4bytes,是client发出请求报文后经过的第一个中继的IP地址。
Chaddr客户机硬件,16bytes,是client端的硬件地址,在client发出报文时会把自己网卡的硬件地址写进这个字段。
Sname任意服务器主机名称,空终止符,64bytes,是client端获取IP地址等信息的服务器名称。
FileDHCP发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名,
Options可选参数字段。这个字段包含了终端的初始配置信息和网络配置信息,包括报文类型,有效租期,DNS服务器的IP地址等配置信息。

5.3 实验描述

5.3.1 了解 DHCP 工作过程和原理

一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。

我的操作:
使用 ipconfig/release 命令释放自动获取的网络配置,并用 ipconfig/renew 命令重新获取。操作过程如下图所示。
在这里插入图片描述

我的分析:
整个过程在ipconfig中(1.3.1)有过分析。
ipconfig /renew按回车后稍稍等待一会儿,我们的电脑又会重新获取了IP地址,又重新可以上网了。使用renew参数获得的IP地址一般与之前的IP地址是相同,因为只有在这个IP地址被占用的时候,DHCP服务器才会重新为这台电脑分配IP。
一般情况下,这两个参数是一起使用的,ipconfig/release为释放现有的IP地址,ipconfig/renew命令则是向DHCP服务器发出请求,并租用一个IP地址。但是一般情况下使用ipconfig/renew获得的IP地址和之前的地址一样,只有在原有的地址被占用的情况下才会获得一个新的地址。
为了更加详细了解DHCP的工作过程,这里我用wireshark进行操作。

5.3.2 Wireshark对DHCP过程进行抓包

我的操作:
1.在Wireshark中点击start开始抓包,在过滤栏输入bootp,使其只显示DHCP数据包。
2.在cmder中输入ipconfig /release 断开网络连接。(这里不再重复放图)
Wireshark中截获到一个DHCP Release数据包。(即下图第一行所示Release)
3.在cmd中输入ipconfig /renew 请求网络连接。(然而直接上,没等我进行此步操作,电脑自己就又把网络连上去了)
可以看到在Wireshark中新增了4个DHCP数据包:数据包1:DHCP Discover,数据包2:DHCP Offer,数据包3:DHCP Request,数据包4:DHCP ACK。
在这里插入图片描述

4.为了后续分析使用,我们再执行一次ipconfig /renew:
可以看到Wireshark中新增了3个数据包:DHCP ACK;DHCP Request;DHCP ACk;
如果再次使用ipconfig /renew,每执行一次会新增2个数据包:DHCP Request;DHCP ACk。
在这里插入图片描述
我的分析:
ipconfig /renew这条命令产生的4个DHCP数据包,这4个数据包代表了客户机和DHCP服务器的交互过程,也是IP动态分配的过程。
1.Client端使用IP地址0.0.0.0发送了一个广播包,可以看到此时的目的IP为255.255.255.255。Client想通过这个数据包发现可以给它提供服务的DHCP服务器。
从下图可以看出,DHCP属于应用层协议,它在传输层使用UDP协议,目的端口是67。
在这里插入图片描述
2.当DHCP服务器收到一条DHCP Discover数据包时,用一个DHCP Offerr包给予客户端响应。
在这里插入图片描述
DHCP服务器仍然使用广播地址作为目的地址,因为此时请求分配IP的Client并没有自己ip,而可能有多个Client在使用0.0.0.0这个IP作为源IP向DHCP服务器发出IP分配请求,DHCP也不能使用0.0.0.0这个IP作为目的IP地址,于是依然采用广播的方式,告诉正在请求的Client们,这是一台可以使用的DHCP服务器。

DHCP服务器提供了一个可用的IP,在数据包的Your (client) IP Address字段可以看到DHCP服务器提供的可用IP。

除此之外,如图中红色矩形框的内容所示,服务器还发送了子网掩码,路由器,DNS,域名,IP地址租用期等信息。

3.当Client收到了DHCP Offer包以后(如果有多个可用的DHCP服务器,那么可能会收到多个DHCP Offer包),确认有可以和它交互的DHCP服务器存在,于是Client发送Request数据包,请求分配IP。此时的源IP和目的IP依然是0.0.0.0和255.255.255.255。

4.服务器用DHCP ACK包对DHCP请求进行响应。
在这里插入图片描述

在数据包中包含以下信息,表示将这些资源信息分配给Client:
Your(client) IP address:分配给Client的可用IP。

后面有许多项option信息,前两项是DHCP服务器发送的消息类型(ACK)和服务器的身份标识,后面几项是:Subnet Mask:Client端分配到的IP的子网掩码;Router:路由器;Domain Name Server:DNS,域名服务器;Domain Name:域名;IP Address Lease Time:IP租用期。

5.3.3 DHCP工作过程小结

在这里插入图片描述

1、客户端通过广播发送DHCP Disccover报文寻找服务器端
2、服务器通过单播发送DHCP offer报文向客户提供IP地址等信息
3、客户端通过广播发送DHCP Request报文告知服务端本地选择使用哪个IP
4、服务器通过单播发送DHCP Ack报文告知客户端IP地址是合法可用的

5.3.4 在Windows系统下,如果由于某种原因计算机不能获取 DHCP 服务器的配置数据,那么Windows将会根据某种算法自动配置为 169.254.x.x 这样的 IP 地址。显然,这样的 IP 以及相关的配置信息是不能让我们真正接入 Internet 的,为什么?既然不能接入 Internet,那么Winodws系统采用这样的方案有什么意义?

答:这是Windows操作系统为了防止主机脱网,为网卡设置169.254.x.x的保留IP,此时就算由于某种原因计算机不能获取 DHCP 服务器的配置数据时,他们还通过保留地址还可以互相通讯。自动配置的IP地址和信息只是短暂性的解决计算机不能获取 DHCP 服务器的配置数据的问题,要真正的接入Internet还需要本身计算机的正确IP地址。

自动配置的IP地址和信息只是短暂性的解决计算机不能获取 DHCP 服务器的配置数据的问题,要真正的接入Internet还是得本身计算机的正确IP地址。意义:假如某天因 DHCP 服务器问题从而不能获得网络配置,那么我们可以查看隔壁教室计算机的配置信息来手动进行网络配置,从而使该计算机能够接入 Internet。

5.3.5 在一个固定地方的网络配置采用 静态/手动配置,而不是动态 DHCP 来进行。你能想到是什么原因吗?

答:动态IP需要在连接网络时自动获取IP地址以供用户正常上网,而静态IP是ISP在装机时分配给用户的IP地址,可以直接连接上网,不需要获取IP地址,该IP在ISP装机时会划分一个IP地址给你,让计算机在连接网络时不再自动获取网络地址,避免了网络连接上的困扰。

动态IP和静态IP对网速的影响,ISP对每个用户所提供的网速,并不是从IP地址限定的,而是从用户连接到ISP的物理线路上进行限定的。

6 Netstat

6.1 命令功能简述

无论是使用 TCP 还是 UDP,任何一个网络服务都与特定的端口(Port Number)关联在一起。因此,每个端口都对应于某个通信协议/服务。
netstat(Network Statistics)是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况。

6.2 格式、参数及选项简述

6.2.1 语法格式

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]
(使用 netstat -help(netstat -h) 或者netstat -? 可查看netstat的命令信息)

6.2.2 参数说明

参数说明
-a显示所有连接和侦听端口。
-b显示在创建每个连接或侦听端口时涉及的可执行程序。在某些情况下,已知可执行程序承载多个独立的组件,这些情况下,显示创建连接或侦听端口时涉及的组件序列。在此情况下,可执行程序的名称位于底部 [] 中,它调用的组件位于顶部,直至达到 TCP/IP。注意,此选项可能很耗时,并且在你没有足够权限时可能失败。
-e显示以太网统计信息。此选项可以与 -s 选项结合使用。
-f显示外部地址的完全限定域名(FQDN)。
-n以数字形式显示地址和端口号。
-o显示拥有的与每个连接关联的进程 ID。
-pproto 显示 proto 指定的协议的连接;proto可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-q显示所有连接、侦听端口和绑定的非侦听 TCP 端口。绑定的非侦听端口不一定与活动连接相关联。
-r显示路由表。
-s显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项可用于指定默认的子网。
-t显示当前连接卸载状态。
-x显示 NetworkDirect 连接、侦听器和共享终结点。
-y显示所有连接的 TCP 连接模板。无法与其他选项结合使用。
interval重新显示选定的统计信息,各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计信息。如果省略,则 netstat 将打印当前的配置信息一次。

6.3实验描述

6.3.1 Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services 文件中,请查看该文件了解常用的端口号分配

在这里插入图片描述

6.3.2 使用 netstat -an 命令,查看计算机当前的网络连接状况

在这里插入图片描述
Netstat 可以用来获得系统网络连接的信息(使用的端口,在使用的协议等 ),收到和发出的数据,被连接的远程系统的端口,Netstat 在内存中读取所有的网络信息。在Internet RFC标准中,Netstat 的定义是: Netstat 是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

6.3.3 由于开始不明白netstat -an返回的内容,由此介绍网络连接状态的内容

1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN.侦听来自远方TCP端口的连接请求。

2)、SYN_SENT:客户端通过应用程序调用connect进行active
open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT.在发送连接请求后等待匹配的连接请求。
3)、SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN.
之后状态置为SYN_RECV。在收到和发送一个连接请求后等待对连接请求的确认。 4)、ESTABLISHED:
代表一个打开的连接,双方可以进行或已经在数据交互了。代表一个打开的连接,数据可以传送给用户。
5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态.等待远程TCP的连接中断请求,或先前的连接中断请求的确认。
6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.等待从本地用户发来的连接中断请求
7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2 .从远程TCP等待连接中断请求。
8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个FIN,等待对方的ACK.就进入了LAST-ACK ,等待原来发向远程TCP的连接中断请求的确认。
9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态。等待足够的时间以确保远程TCP接收到连接中断请求的确认。 10)、CLOSING:等待远程TCP对连接中断的确认
11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束.
12)、UNKNOWN: 未知的Socket状态。

6.3.4 netstat命令小结

打开的计算机端口,就是向 Internet 打开的一个通道。通过 netstat 命令,我们可以了解当前计算机哪些端口是打开的,从而找出一些恶意后台程序,分析其所作所为,并且可以进一步将相关端口关闭,降低安全风险。


版权声明:本文为qq_46467126原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。