摘要
- DNS域名解析
- ARP与RARP协议
- DHCP动态获取IP地址
- NAT网络地址转换
- ICMP互联网控制报文协议
- IGMP因特网组管理协议
DNS域名解析
域名的层级关系
DNS中的域名是用句点分割,比如www.baidu.com,每个句点代表了不同层次之间的界限。
域名中越靠右的位置表示层级越高。
所有域名的层级关系呈现出一个树状结构,根域在最顶层:
- 根DNS服务器
- 顶级域DNS服务器(例如com)
- 权威DNS服务器(例如baidu.com)
根域DNS服务器信息保存在互联网中所有的DNS服务器中,这样任何DNS服务器都可以找到并访问根域DNS服务器。
这样客户端只要找到一台DNS服务器就能找到根域DNS服务器,最终找到包含该域名的一台DNS服务器。
域名解析过程
浏览器首先看自己的缓存里面有没有该域名的缓存,如果没有就检查本机域名解析文件hosts,如果还是没有就会向DNS服务器进行查询,查询过程如下:
- 客户端向本地DNS服务器发起DNS请求,请求www.baidu.com的IP是啥
- 本地域名服务器收到客户端请求,如果能在自己的缓存中找到www.baidu.com,则直接返回IP地址,如果没有就回去查询根域名服务器,根域名服务器不直接用于域名解析,但能够指明道路
- 根域DNS服务器收到DNS请求后,发现它的顶级域是.com,根域服务器会把.com的顶级域DNS服务器地址返回给本地DNS服务器
- 本地DNS服务器收到顶级域DNS服务器地址后,就会向顶级域DNS服务器发起请求
- .com顶级域DNS服务器收到请求后,会返回baidu.com的的权威DNS服务器地址给本地DNS服务器
- 本地DNS服务器收到权威DNS服务器以后,就去找权威DNS服务器询问www.baidu.com的IP地址,之所以是权威是因为到这里,自己的域名就自己做主了。
- 权威DNS服务器进行查询将对应IP地址返回给本地DNS服务器
- 本地DNS将IP返回给客户端,客户端拿到IP后就可以和目标IP建立连接了
ARP和RARP协议
在确定好目标IP时我们可以通过路由表确定数据包的下一跳,但是网络层的下层是数据链路层,因此还需要知道下一跳的MAC地址。
主机的路由表可以获取下一跳的IP地址,ARP协议则是用来获取下一跳的MAC地址。
ARP如何知道MAC地址?
ARP借助ARP请求和ARP响应这两种类型的包确定MAC地址。
- 主机会通过广播发送ARP请求,请求包中包含了想要知道的MAC地址的主机IP地址
- 同个链路上的所有设备收到ARP请求后,会去解析ARP包的内容,如果ARP包中的IP地址与自己的IP地址一直,那么该设备会将自己的MAC地址放入ARP响应中回复给主机
主机的操作系统一般会将该MAC地址进行缓存(缓存有有效期,过期失效清除),以便下次可以直接取用。
什么是RARP协议?
ARP协议是已知IP地址获取MAC地址,RARP则是已知MAC地址获取IP地址。
通常使用RARP我们需要假设一台RARP服务器,在这个服务器上注册设备的MAC地址和IP地址,然后再将这个设备接入网络:
- 该设备会发送一条RARP请求,主要是告诉RARP服务器我的MAC地址,并让服务器返回一个IP
- RARP服务器收到请求后会返回IP信息给这个设备
- 最后设备从收到的RARP响应取出IP,将其设置为自己的IP
RARP一般用于打印机服务器等小型嵌入式设备接入网络。
DHCP动态获取IP地址
DHCP就是用于动态获取IP地址,避免了手动分配IP的繁琐过程。DHCP客户端进程监听的是68端口,DHCP服务端进程监听的是67端口,具体DHCP过程如下:
- 客户端首先发送DHCP发现报文(DHCP DISCOVER)的IP数据包,由于客户端没有IP地址,也不清楚DHCP服务器的地址,所以使用的是UDP广播通信,广播的目的地址是255.255.255.255(端口67),源地址使用0.0.0.0(端口68)。DHCP客户端将该IP数据包传递给链路层,链路层将帧广播到所有的网络中设备。
- DHCP服务器收到DHCP发现报文,会用DHCP提供报文(DHCP OFFER)向客户端做出响应。该报文仍然使用IP广播地址255.255.255.255,该报文信息携带服务器提供可租约的IP地址、子网掩码、默认网关、DNS服务器以及IP地址租用期。
- 客户端收到一个或多个服务器的DHCP提供报文,从中选择一个服务器,并向选中的服务器发送DHCP请求报文(DHCP REQUEST)进行响应,回显配置的参数
- 最后,服务端用DHCP ACK报文对DHCP请求报文进行响应,应答所要求的参数
当租约的DHCP IP地址快到期时,客户端会向服务器发送DHCP请求报文:
- 服务器如果同意客户端继续使用,则用DHCP ACK报文进行应答
- 服务器如果不同意客户端继续使用,则用DHCP NACK报文进行应答,客户端就要停止使用租约的IP地址
DHCP服务器和客户端不在同一网络中如何处理?
DHCP的交互使用的均是广播,假设DHCP服务器和客户端不再一个网络中,路由器又不能转发广播包,那么是否为每一个网络都配置一个DHCP服务器呢?答案是NO。
为了解决上述的问题,出现了DHCP中继代理,通过DHCP中继代理,可以对不同网段的IP地址分配使用同一个DHCP服务器。
- DHCP客户端会向DHCP中继代理发送DHCP请求包,DHCP中继代理在收到这个广播包以后,再以单播的形式发给DHCP服务器
- 服务端收到该包以后再向DHCP中继代理返回应答,并由DHCP中继代理将此包广播给DHCP客户端
NAT网络地址转换
NAT简单来说就是同个公司、家庭、教室的主机对外部通信时,把私有IP地址转换成公有IP地址。
由于绝大多数应用是基于TCP和UDP来传输数据的,因此我们甚至可以把IP地址和端口一起进行转换,这种转换技术称之为网络地址与端口转换NAPT。
从上图可以看出,191.168.1.10和192.168.1.11两台客户端的本地端口是1025,同时与服务器183.232.231.172进行通信,客户端的两个私有IP都被转换为公有IP 120.229.175.121,但是以不同的端口号进行区分。
这种转换表可以在NAT路由器上自动生成。在TCP的情况下,第一次握手的SYN包发出以后就会生成这个表,随着FIN包的确认应答的返回从表中进行删除。
NAT的缺点
- 外部无法主动与NAT内部服务器建立连接,因为NAPT转换表没有转换记录
- 转换表的生成与转换操作都会产生性能开销
- 通信过程中,如果NAT路由器被重启,所有TCP连接都会被重置
NAT产生的问题如何解决?
- 改用IPv6
- NAT穿透技术
什么是NAT穿透技术?
NAT穿透技术中,应用程序处于主动地位,应用程序明确知道NAT设备要修改它发送的数据包,因此他主动配合NAT设备的操作,主动建立好映射条目,然后使用这个条目进行对外通信,就不需要NAT设备来进行转换了。
ICMP互联网控制报文协议
ICMP的主要功能有哪些?
- 确认IP包是否成功送达目标地址
- 报告发送过程中IP包被废弃的原因
- 改善网络设置等
ICMP的类型?
ICPM的类型大体上分为两类:
- 查询报文类型:用于诊断的查询消息
- 差错报文类型:通知出错原因的错误消息
IGMP因特网组管理协议
D类地址用来进行组播,意思是一组特定的主机可以收到数据包,而IGMP就是用来管理哪些主机是在一组的。
IGMP工作在主机(组播成员)和最后一跳路由之间:
- IGMP报文向路由器申请加入和退出组播组,默认情况下路由器不会转发组播包到连接中的主机,除非主机通过IGMP加入到组播组,主机申请加入组播组时,路由器就会记录IGMP路由表,路由器后续就会转发组播包到对应的主机了
- IGMP报文采用IP封装,IP头部的协议号为2,而且TTL字段为1,因为IGMP是工作在主机及与其连接的路由器之间
IGMP如何进行常规查询
- 路由器会周期性的发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)IGMP常规查询报文
- 主机1和3收到查询请求后,会启动报告延迟计时器,每台主机的计时器延迟是随机的,计时器超时后主机就会发送IGMP成员关系报告报文(目的地址就是组播地址)。如果在定时器超时之前,收到同一个组内其他主机发送的成员关系报告报文,自己则不再发送,这样可以减少网络中IGMP报文数量
- 路由器收到主机的成员关系报文后,就会在IGMP路由表中加入该组播组,后续网络中的一旦该组播地址的数据到达路由器,它就会把数据包转发出去
主机离开组播流程有哪些?
- 主机如果要离开组,它会发送离组报文,报文的目的地址是224.0.0.2(表示发送至同网段内的所有路由器)
- 路由器在收到报文后,会连续发送两个IGMP查询报文(中间间隔1s)用来确认组中是否还有其他成员
- 如果组中还有成员,那么组中的成员会立即响应查询报文,这样路由器就知道还有成员
- 如果组中没有成员,则路由器不会收到响应,一段时间后路由器就认为该网段中没有该组的成员了,则会在IGMP路由表中删除该组播组。