14.常见网络协议
ARP/RARP协议
广播发送请求,单播回复
ARP协议
(Address Resolution Protocol)地址解析协议,是根据IP地址获取物理地址的一个以太网层协议。
主机必须知道目标IP的物理地址(MAC地址)才能完成数据包的封装,向它发送数据
网段上每台主机保存ARP表或ARP缓存的表格,其中包含了网段上其他主机的IP地址与物理地址的对应关系。
ARP协议工作流程
二层的ARP
1、当主机向网段上的其他主机发送数据时,先在主机上的ARP缓存中查找物理地址。ARP缓存是动态变化的
2、不在ARP缓存中,主机发送一个ARP请求帧的广播包。
源mac:为当前主机mac,目标mac为(ff:ff:ff:ff:ff:ff)全f的广播包。
携带信息:源mac,源ip,目标ip,目标mac(ff:ff:ff:ff:ff:ff)
3、拥有这个未解析IP地址的主机收到请求,向发出请求的主机发送自己的物理地址。
源mac:为目标主机mac,目标mac为当前主机
携带信息:源mac,源ip,目标ip,目标mac
当前主机接收到后,这个IP地址与物理地址的对应关系就会添加到请求主机的ARP缓存中。
经过三层的ARP(arp代理)
-
如果目标ip和当前主机不在同一个网段,会先将数据包的mac封装为网关的mac,将数据丢给网关去处理。
-
网关根据路由将数据包一节一节的丢给下一跳。
-
直到找到目标ip网段所在接口后,在这个接口上发送arp报文获取目标ip的mac,之后完成数据最后一步封装发送。
网关不会将ARP从所有接口广播出去,网关是隔离广播的。
免费arp
可以用来测试ip地址是或否已经使用(冲突),配置好IP后,发送一个广播探测帧,目的mac:ff-ff-ff-ff-ff-ff
RARP协议
逆地址解析协议,在知道物理地址而不知道IP地址时,使用RARP。
RARP协议工作流程:
1、给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
2、本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址
DHCP协议
DHCP(Dynamic Host Configuration Protocol 动态主机配置协议)来动态的分配IP地址等网络参数,可以减少管理员的工作量,避免用户手工配置网络参数时造成的地址冲突。
电脑mac
物理地址. . . . . . . . . . . . . : C8-E2-65-40-FA-C9
wireshark抓包工具过滤器
((eth.dst == 58:41:20:cb:1d:11 and eth.src == c8:e2:65:40:fa:c9)
or
(eth.dst == c8:e2:65:40:fa:c9 and eth.src == 58:41:20:cb:1d:11)
or
(eth.dst == ff:ff:ff:ff:ff:ff and eth.src == c8:e2:65:40:fa:c9)
or
(eth.dst == ff:ff:ff:ff:ff:ff and eth.src == 58:41:20:cb:1d:11))
and
(arp or dhcp)
DHCP Release 释放IP
主机使用cmd命令发送DHCP Release报文释放IP
ipconfig /release WLAN
(1) DHCP-DISCOVER报文
主机以广播的方式发送DHCP-DISCOVER报文,请求DHCP 服务器分配一个地址。
DHCP 服务器:谁收到请求,谁响应。
dhcp discover广播包 报文封装:
源mac:为当前主机mac,目标mac为全f(ff:ff:ff:ff:ff:ff)
源IP:0.0.0.0,目的IP:不知道255.255.255.255
UDP,端口号 68,67
携带信息:源mac,源ip,**目标ip**,目标mac(ff:ff:ff:ff:ff:ff)
有些情况下,会携带上次分配的IP地址给DHCP服务器以供选择。如果这个地址没有分配出去,会将这个地址重新分配给主机,如果已经分配出去了,那么会从ip地址池中重新选一个地址分配给主机。
免费ARP
在IP地址分配过程中可能涉及到免费ARP(也称为 gratuitous ARP)的发送,以广播的方式发送ARP报文,探测是否有主机使用这个 IP 地址,如果在规定的时间内没有收到回应,客户端才使用此地址。
通常,这种行为是为了确保网络中的其他主机能够知道新分配的IP地址,以避免IP地址冲突。
免费ARP的触发时机有以下两个时机:① 在DHCP-Offer之前、② 在DHCP-ACK之后
(2) DHCP Offer报文
DHCP 服务器接收到客户端的DHCP-DISCOVER 报文后,根据 IP 地址分配的优先次序选出一个 IP 地址,与其他参数一起通过 DHCP-OFFER 报文发送给客户端。
DHCP Offer报文封装
源mac:DHCP服务器mac,目标mac:主机mac
源IP:DHCP服务器的ip,目的IP:预给主机分配的ip
UDP,端口号 68,67
携带信息:
DHCP-OFFER 报文的发送方式由 DHCP-DISCOVER 报文中的flag 字段决定
(3) DHCP-request阶段
主机发送DHCP-request报文给HDCP服务器确认使用这个ip地址。
DHCP Offer报文封装
源mac:为当前主机mac,目标mac为全f(ff:ff:ff:ff:ff:ff)
源IP:0.0.0.0,目的IP:不知道255.255.255.255
UDP,端口号 68,67
携带信息:
如果有多台 DHCP 服务器向该客户端发来 DHCP-OFFER 报文, 客户端只接受第一个收到的 DHCP-OFFER 报文,然后以广播方式发送 DHCP-REQUEST 报文,该报文中包含 DHCP 服务器在 DHCP-OFFER 报文中分配的 IP 地址。
(4) DHCP-ACK报文
DHCP 服务器对DHCP-request进行响应,确认这个地址分配给他。
DHCP 服务器如果确认将地址分配给该客户端,则返回 DHCP-ACK 报文;否则返回 DHCP-NAK 报文,表明地址不能分配给该客户端。
IP地址的租约更新与释放
目的是合理有效的使用ip地址
分配给客户端的ip地址都是有租期的,当到达租期一半时间的时候,DHCP 客户端会向为它分配 IP 地址的 DHCP 服务器单播发续租消息(dhcp request报文),以进行 IP 租约的更新。如果客户端可以继续使用此 IP 地址,则 DHCP 服务器回应 DHCP-ACK 报文,通知 DHCP 客户端已经获得新IP 租约;如果此 IP 地址不可以再分配给该客户端,则 DHCP 服务器回应 DHCP-NAK 报文,通知 DHCP 客户端不能获得新的租约。
假设 dhcp 租期是24小时
254这个地址分给了A用户
当租期到了一半,12个小时的时候,A用户会自动发送续租请求,告诉DHCP服务器,这个地址不要收回不要分配给别人,并将租期时间重置为24小时
IP租约期限到了87.5%时,还没有收到服务器相应,则会申请重新绑定IP。
DHCP IP地址释放
1、如果IP租约到期前没有收到DHCP服务器响应,客户端会停止使用此IP地址
2、如果DHCP客户端不在使用分配的IP地址,可以主动向DHCP服务器发送DHCP release报文,释放该地址
下次再接入这个网络的时候,DHCP服务器分地址时,会优先分配这个地址,除非这个地址已经被人占用
DHCP报文
DHCP DISCOVER
客户端用来寻找DHCP服务器.
DHCP OFFER
DHCP服务器用来响应DHCP DISCOVER报文,此报文带了各种配置信息
DHCP REQUEST
客户端请求配置确认(目的是用来通知其他服务器是否使用服务器分配的ip地址),或者续借租期.
DHCP ACK
服务器对REQUEST 文的确认响应.
DHCP NAK
服务器对REQUEST报文的拒绝响应。由服务器发送给客户端来表明客户端的地址请求不正确或者租期已过期。
DHCP RELEASE
客户端要释放地址时用来通知服务器.
DHCP INFORM
DHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息
DHCP DECLENE
当客户端发现服务器分配给它的IP地址发生冲突时会通过DECLENE报文通知服务器,重新向服务器申请地址。
DNS协议
域名与DNS
IP地址往往难以记忆,所以我们一般使用域名进行管理
每个域名代表 一个IP,而DNS服务器就是用来在IP与域名之间进行转换的
www.LinuxCast.net 61.1.1.1
DNS域名解析顺序
DNS 可以将域名解析为IP地址,还可以执行其他功能,如反向解析(将IP地址解析为域名)、邮件交换服务器查找(查找邮件服务器的IP地址)等。
在请求一个域名时,需要先将域名解析为对应的ip地址,系统会按照以下顺序进行域名解析:
-
在本机的DNS缓存中查找:首先,系统会检查本地DNS缓存中是否已经保存了该域名对应的IP地址。如果有缓存,系统会直接使用缓存中的IP地址进行访问,跳过后续步骤。
-
在本机的host文件中查找:如果在本地DNS缓存中没有找到对应的IP地址,系统会继续查找本地的host文件。host文件是一个文本文件,其中包含了一些手动配置的域名和对应的IP地址。如果在host文件中找到了匹配的域名,系统会使用host文件中指定的IP地址进行访问。
-
在DNS服务器上查找:如果在本地DNS缓存和host文件中都没有找到对应的IP地址,系统会向配置的DNS服务器发送查询请求。
DNS服务器是专门负责域名解析的服务器,它会根据域名的层级结构进行递归查询,直到找到对应的IP地址。一旦DNS服务器找到了IP地址,它会将结果返回给系统,系统将使用该IP地址进行访问,并将结果缓存到本地DNS缓存中,以便下次快速访问。
DNS报文
DNS请求
DNS响应
ICMP协议-ping和Traceroute
ICMP(Internet Control Message Protocol)是一种在网络层(第三层)上工作的协议,ICMP消息被封装在IP数据包中进行传输,用于在IP网络中传输控制消息和错误报告。
ICMP协议的主要功能是提供网络中的错误报告和诊断功能。它可以用于发送各种类型的消息,包括错误报告、网络可达性检测、路由器通告等。其中,最常见的用途是进行网络可达性检测和故障排除。
ICMP的应用--ping
ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:
C:\Users\zbf>ping baidu.com
正在 Ping baidu.com [39.156.66.10] 具有 32 字节的数据:
来自 39.156.66.10 的回复: 字节=32 时间=36ms TTL=48
来自 39.156.66.10 的回复: 字节=32 时间=31ms TTL=48
来自 39.156.66.10 的回复: 字节=32 时间=29ms TTL=48
来自 39.156.66.10 的回复: 字节=32 时间=27ms TTL=48
39.156.66.10 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 27ms,最长 = 36ms,平均 = 30ms
C:\Users\zbf>
Ping是一种基于ICMP协议的工具,用于测试网络中两个节点之间的连通性。
当我们在命令行中执行ping命令时,实际上是发送类型码为8的ICMP Echo Request消息到目标节点,接收到请求的主机会回复一个类型码为0的ICMP Echo Reply消息。通过观察是否收到回复消息以及回复消息的延迟时间,我们可以判断目标节点是否可达以及网络的延迟情况。
ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。
Ping命令通常不支持直接ping广播地址或组播地址
广播地址是一个特殊的IP地址,用于将数据包发送到同一网络中的所有主机。由于广播地址是发送给所有主机的,因此ping广播地址可能会导致网络中的所有主机都响应,这可能会对网络造成不必要的负载和干扰。因此,大多数操作系统和网络设备会禁止ping广播地址。
组播地址是一种用于将数据包发送到特定组的一组主机的IP地址。与广播地址类似,ping组播地址也可能导致网络中的多个主机响应。然而,与广播地址不同,ping组播地址通常是不支持的,因为ping命令通常只用于测试与单个主机的连通性。
ICMP的应用-traceroute
Traceroute(或称为tracert)也是基于ICMP协议的工具,用于跟踪数据包在网络中的路径。
前面说到,尽管ping工具也可以进行侦测,但不能记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。
当执行Traceroute命令时,它会发送一系列的ICMP Echo (ping) request消息,每个消息的TTL(Time to Live)值逐渐增加。TTL值表示数据包在网络中可以经过的最大路由器跳数。
当一个路由器收到一个TTL值为1的消息时,它会将该消息丢弃并发送一个ICMP Time-to-live exceeded消息回到源节点,告知源节点该消息已经过期。
Traceroute收到目的主机的IP后,首先给目的主机发送一个TTL=1的ICMP Echo (ping) request 消息,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生一个ICMP Time-to-live exceeded消息报给主机。
主机收到这个数据报以后再发一个TTL=2的ICMP Echo (ping) request 消息报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。
通过观察每个节点返回的ICMP Time-to-live exceeded消息,Traceroute可以确定数据包在网络中经过的路径。每个返回的消息包含了发送该消息的路由器的IP地址。Traceroute将这些IP地址记录下来,并计算每个节点的往返时间(Round-Trip Time,RTT)。
Traceroute会发送多个数据包,并对每个节点进行多次测量,以获得更准确的结果。最终,Traceroute将收集到的路径和RTT信息显示给用户,以展示数据包在网络中的传输路径和每个节点的延迟情况。
需要注意的是,由于网络中的路由器可能会对ICMP消息进行限制或过滤,Traceroute可能无法完整地显示整个路径。有些路由器可能会屏蔽ICMP消息或不返回Time Exceeded消息,这会导致Traceroute在该节点之后无法继续跟踪。
总结起来,Traceroute利用ICMP协议的Time Exceeded消息和TTL字段的特性,通过发送一系列的数据包并观察返回的消息,来跟踪数据包在网络中的路径和测量每个节点的延迟。这使得Traceroute成为网络故障排除和网络性能分析的有用工具。
拓扑
抓包