- 前言
- 设备联网
- DHCP
- 发送数据
- ARP
- DNS
- 参考文献
前言
最近在整理网络抓包分析相关的资料,同时又在阅读《网络是怎样连接的》。本篇文章从网络协议对设备连网的过程和发送数据的过程进行探讨。
在对网络进行分析时,会使用wireshark进行抓包分析。
在讨论本篇文章时,假设读者对网络协议有一定的基础,对TCP/IP四层协议有一定的了解,也大致了解网络通讯抓包。
设备联网
在一个局域网内,在网络层,通过IP确定来确定数据包发往哪里,在同一个局域网内,IP地址必须唯一。而在数据链路层,则通过MAC地址保证设备的唯一。
DHCP
加入设备刚联网没有设置静态IP时,需要通过DHCP协议向DHCP服务器获取到一个可用的IP地址。
DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
在一个局域网内可以有一个或多个DHCP服务器。比如日常家里使用路由器上网,路由器内置了DHCP服务,当手机、平板、笔记本等设备联网时就会向路由器获取一个可用的动态IP。在企业的局域网中,则通常需要部署一个DHCP服务器或多个DHCP服务器形成一个DHCP服务集群用于维护局域网内的动态IP。
DHCP获取动态IP有四个阶段:发现阶段(DHCP Discover)、提供阶段(DHCP Offer)、选择阶段(DHCP Request)和确认阶段(DHCP ACK)。
- 由于客户端首次连接互联网,并不知道DHCP服务器的地址,因此客户端首先需要向局域网内发送一条
DHCP Disconver
广播。
当DHCP服务器收到该请求时,就会处理请求,非DHCP服务器收到该请求不会处理,直接丢弃。DHCP Discover
网络数据包如下图所示。
此时并没有IP地址,所以原始IP地址为0.0.0.0
,客户端的MAC地址是95:57:02:4a:09:01
。每个DHCP处理阶段都会有一个会话ID,用于标记是哪次的DHCP请求。
- 当DHCP服务器收到请求时,会从可用的IP池中获取一个IP,通过
DHCP Offer
请求返回。
由于客户端一个网卡只能设置一个IP。因此即使有多个DHCP服务都返回了响应,客户端也仅会获取第一个收到的IP进行设置。
如上图所示,DHCP Offer
向MAC地址为95:57:02:4a:09:01
的客户端返回的IP地址为192.168.137.60
。
- 由于同一个局域网内可能有多个DHCP服务器,因此,为了告诉其他的DHCP服务器,被使用的新的IP,客户端会通过
DHCP Request
请求进行广播告诉所有人当前客户端选择使用的IP地址。
这样如果这个IP地址是当前DHCP服务分配的,该服务器就会返回一个确认包,如果不是当前DHCP服务分配的,它就会忽略该请求。
在以前家用路由器多个路由器进行桥接时,若都提供DHCP服务功能,则分配的IP范围不能重合,否则可能导致分配个多个设备同样的IP,导致设备无法上网。实际路由器应该可以识别将
DHCP Request
的IP也设置为被租赁状态,避免该IP再次被使用。不确定现在新的路由器设备是否还会有该问题。
- DHCP服务确认返回
在返回确认的同时,还会告知客户端IP可使用的期限。当到达期限时,这个IP就会被DHCP回收,客户端需要重新向DHCP服务器申请一个新的IP。
最后当设备设置IP时,就会发送一个ARP探针请求的广播,发送该请求时,客户端还没有设置IP,,若局域网已有设备使用这个IP,就会返回MAC地址。
发送数据
ARP
现在我们的设备已经有了IP地址,可以访问局域网了,只要路由器有连外网,就可以将设备的请求转发到互联网,也就是说我们的设备已经可以连接互联网了。
当我们需要访问互联网时,比如要访问connectivitycheck.platform.hicloud.com
,我们首先要获取到该地址的IP。通过DNS协议可以将域名转换为实际IP。但是在讲解DNS之前,设备必须限访问DNS服务器,而此时设备刚联网获取到IP,并不知道DNS服务器的地址,解析来ARP协议就发挥作用了。
ARP协议是根据IP获取MAC地址的一个TCP/IP协议。有些人可能会奇怪,为什么我们有了IP地址,还需要MAC地址呢?因为在通常情况下我们发送数据到目标IP时,IP是确定的(除非NAT地址转换),但是我们通过路由器需要转发到下个路由器时,则需要通过修改MAC地址为下一跳的路由器的MAC地址实现数据转发。因此在网络通讯的时候光有IP地址还不够,我们需要获取到设备的MAC地址才行。
通过ARP协议发送广播询问对应IP的MAC地址,所有设备收到会校验当前的IP,若与ARP请求的IP一致,则会将自己的MAC地址响应给对端。若不一致就会丢弃请求。当请求者获取到ARP响应后就会把对应的IP和MAC地址保存到自己的ARP缓存种,下次请求IP时就不需要再查询MAC地址,直接可以从缓存中获取。
当客户端获取到了DNS的MAC地址时,就可以向DNS发送请求查询域名对应的IP了。
DNS
DNS是域名系统(Domain Name System)的缩写。DNS协议通过DNS请求查询指定域名的地址或别名等信息。DNS服务器如果存在该域名,则返回查询到的信息,否则从上一级DNS服务器获取信息,仍不存在继续向上以及DNS服务器获取,直到到达根域名服务器。当DNS服务器从上一级DNS服务器获取到指定域名的查询信息时,DNS服务器会将其缓存起来。
当通过DNS协议查询到域名对应IP时,请求就可以通过该IP发送到对端。若目标IP不在当前同一子网内,因此会通过路由器或交换机等设备进行转发,本篇文章不对这个过程进行具体的探讨。
参考文献
- 《网络是怎样连接的》
- 《Wireshark数据包分析实战详解》
微信扫一扫二维码关注订阅号杰哥技术分享
出处:https://www.cnblogs.com/Jack-Blog/p/13423355.html
作者:杰哥很忙
本文使用「CC BY 4.0」创作共享协议。欢迎转载,请在明显位置给出出处及链接。