最近在整理网络抓包分析相关的资料,同时又在阅读《网络是怎样链接的》。本篇文章从网络协议对设备连网的过程和发送数据的过程进行探讨。
在对网络进行分析时,会使用wireshark进行抓包分析。缓存
在讨论本篇文章时,假设读者对网络协议有必定的基础,对TCP/IP四层协议有必定的了解,也大体了解网络通信抓包。服务器
在一个局域网内,在网络层,经过IP肯定来肯定数据包发往哪里,在同一个局域网内,IP地址必须惟一。而在数据链路层,则经过MAC地址保证设备的惟一。网络
加入设备刚联网没有设置静态IP时,须要经过DHCP协议向DHCP服务器获取到一个可用的IP地址。code
DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登陆服务器时就能够自动得到服务器分配的IP地址和子网掩码。orm
在一个局域网内能够有一个或多个DHCP服务器。好比平常家里使用路由器上网,路由器内置了DHCP服务,当手机、平板、笔记本等设备联网时就会向路由器获取一个可用的动态IP。在企业的局域网中,则一般须要部署一个DHCP服务器或多个DHCP服务器造成一个DHCP服务集群用于维护局域网内的动态IP。blog
DHCP获取动态IP有四个阶段:发现阶段(DHCP Discover)、提供阶段(DHCP Offer)、选择阶段(DHCP Request)和确认阶段(DHCP ACK)。dns
DHCP Disconver
广播。当DHCP服务器收到该请求时,就会处理请求,非DHCP服务器收到该请求不会处理,直接丢弃。DHCP Discover
网络数据包以下图所示。
路由
此时并无IP地址,因此原始IP地址为0.0.0.0
,客户端的MAC地址是95:57:02:4a:09:01
。每一个DHCP处理阶段都会有一个会话ID,用于标记是哪次的DHCP请求。部署
DHCP Offer
请求返回。因为客户端一个网卡只能设置一个IP。所以即便有多个DHCP服务都返回了响应,客户端也仅会获取第一个收到的IP进行设置。域名
如上图所示,DHCP Offer
向MAC地址为95:57:02:4a:09:01
的客户端返回的IP地址为192.168.137.60
。
DHCP Request
请求进行广播告诉全部人当前客户端选择使用的IP地址。这样若是这个IP地址是当前DHCP服务分配的,该服务器就会返回一个确认包,若是不是当前DHCP服务分配的,它就会忽略该请求。
在之前家用路由器多个路由器进行桥接时,若都提供DHCP服务功能,则分配的IP范围不能重合,不然可能致使分配个多个设备一样的IP,致使设备没法上网。实际路由器应该能够识别将
DHCP Request
的IP也设置为被租赁状态,避免该IP再次被使用。不肯定如今新的路由器设备是否还会有该问题。
在返回确认的同时,还会告知客户端IP可以使用的期限。当到达期限时,这个IP就会被DHCP回收,客户端须要从新向DHCP服务器申请一个新的IP。
最后当设备设置IP时,就会发送一个ARP探针请求的广播,发送该请求时,客户端尚未设置IP,,若局域网已有设备使用这个IP,就会返回MAC地址。
如今咱们的设备已经有了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是域名系统(Domain Name System)的缩写。DNS协议经过DNS请求查询指定域名的地址或别名等信息。DNS服务器若是存在该域名,则返回查询到的信息,不然从上一级DNS服务器获取信息,仍不存在继续向上以及DNS服务器获取,直到到达根域名服务器。当DNS服务器从上一级DNS服务器获取到指定域名的查询信息时,DNS服务器会将其缓存起来。
当经过DNS协议查询到域名对应IP时,请求就能够经过该IP发送到对端。若目标IP不在当前同一子网内,所以会经过路由器或交换机等设备进行转发,本篇文章不对这个过程进行具体的探讨。