访问互联网时发生了什么?

前言

最近在整理网络抓包分析相关的资料,同时又在阅读《网络是怎样连接的》。本篇文章从网络协议对设备连网的过程和发送数据的过程进行探讨。
在对网络进行分析时,会使用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)。

20200802152256.png

  1. 由于客户端首次连接互联网,并不知道DHCP服务器的地址,因此客户端首先需要向局域网内发送一条DHCP Disconver广播。

20200802152338.png

当DHCP服务器收到该请求时,就会处理请求,非DHCP服务器收到该请求不会处理,直接丢弃。DHCP Discover网络数据包如下图所示。
20200802152607.png

此时并没有IP地址,所以原始IP地址为0.0.0.0,客户端的MAC地址是95:57:02:4a:09:01。每个DHCP处理阶段都会有一个会话ID,用于标记是哪次的DHCP请求。

  1. 当DHCP服务器收到请求时,会从可用的IP池中获取一个IP,通过DHCP Offer请求返回。

20200802153019.png

由于客户端一个网卡只能设置一个IP。因此即使有多个DHCP服务都返回了响应,客户端也仅会获取第一个收到的IP进行设置。

20200802153209.png

如上图所示,DHCP Offer向MAC地址为95:57:02:4a:09:01的客户端返回的IP地址为192.168.137.60

  1. 由于同一个局域网内可能有多个DHCP服务器,因此,为了告诉其他的DHCP服务器,被使用的新的IP,客户端会通过DHCP Request请求进行广播告诉所有人当前客户端选择使用的IP地址。

20200802153523.png

这样如果这个IP地址是当前DHCP服务分配的,该服务器就会返回一个确认包,如果不是当前DHCP服务分配的,它就会忽略该请求。

20200802154046.png

在以前家用路由器多个路由器进行桥接时,若都提供DHCP服务功能,则分配的IP范围不能重合,否则可能导致分配个多个设备同样的IP,导致设备无法上网。实际路由器应该可以识别将DHCP Request的IP也设置为被租赁状态,避免该IP再次被使用。不确定现在新的路由器设备是否还会有该问题。

  1. DHCP服务确认返回

20200802154312.png

在返回确认的同时,还会告知客户端IP可使用的期限。当到达期限时,这个IP就会被DHCP回收,客户端需要重新向DHCP服务器申请一个新的IP。

20200802154255.png

最后当设备设置IP时,就会发送一个ARP探针请求的广播,发送该请求时,客户端还没有设置IP,,若局域网已有设备使用这个IP,就会返回MAC地址。
20200802164048.png

发送数据

ARP

现在我们的设备已经有了IP地址,可以访问局域网了,只要路由器有连外网,就可以将设备的请求转发到互联网,也就是说我们的设备已经可以连接互联网了。

当我们需要访问互联网时,比如要访问connectivitycheck.platform.hicloud.com,我们首先要获取到该地址的IP。通过DNS协议可以将域名转换为实际IP。但是在讲解DNS之前,设备必须知道DNS服务器的MAC地址,DNS服务器可以在每个计算机上面进行配置,如果没有配置,则会使用网段默认的XXX.XXXX.XXXX.1当作DNS的IP,接下来ARP协议就发挥作用了。

ARP协议是根据IP获取MAC地址的一个TCP/IP协议。有些人可能会奇怪,为什么我们有了IP地址,还需要MAC地址呢?因为在通常情况下我们发送数据到目标IP时,IP是确定的(除非NAT地址转换),但是我们通过路由器需要转发到下个路由器时,则需要通过修改MAC地址为下一跳的路由器的MAC地址实现数据转发。因此在网络通讯的时候光有IP地址还不够,我们需要获取到设备的MAC地址才行。

20200802165007.png

通过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服务器会将其缓存起来。

20200802205628.png

当通过DNS协议查询到域名对应IP时,请求就可以通过该IP发送到对端。若目标IP不在当前同一子网内,因此会通过路由器或交换机等设备进行转发,本篇文章不对这个过程进行具体的探讨。

参考文献

  1. 《网络是怎样连接的》
  2. 《Wireshark数据包分析实战详解》

20191127212134.png
微信扫一扫二维码关注订阅号杰哥技术分享
出处:https://www.cnblogs.com/Jack-Blog/p/13423355.html
作者:杰哥很忙
本文使用「CC BY 4.0」创作共享协议。欢迎转载,请在明显位置给出出处及链接。

posted @ 2020-08-02 21:51  杰哥很忙  阅读(4531)  评论(3编辑  收藏  举报