写文章的时间是理解这个知识点时间的n倍,但是通过文章,我们可以理清自己的逻辑,进一步加深理解
我们在上网时,通常使用的都是域名来访问网站,因为域名更容易记住,总不可能记住一串ip地址吧。
那么网络如何将域名转换成对应的ip地址呢?这就需要我们的DNS域名解析协议了
DNS中的域名都是靠句点来进行分割的,越靠右的层级越高,因为外国人的思维都是跟中国人相反的。
根域在最顶层,它的下一层就是.com顶级域,如图所示:
根域的DNS服务器信息保存在互联网中所有DNS服务器中,所以任何DNS服务器都可以访问根域DNS服务器了。
因此,客户端只要找到任何一台DNS服务器,就能够找到根域服务器,从而找到该域名对应的DNS服务器。
浏览器首先查看自己浏览器的缓存里有没有,没有就查看操作系统的缓存里,还没有的话,就检查本机域名解析文件hosts,最后没有就访问本地的DNS服务器进行查询:
因为存在网络层地址(IP地址)和链路层地址(MAC地址),我们需要对它们进行转换,这便是地址解析协议ARP的作用
我想看到这个问题,很多人都一直以为是属于网络层的协议,但其实并不完全正确。我在了解ARP协议时,也一直保持困惑:我们的MAC地址不是加在帧头中的吗?那为什么好多的资料都说是属于网络层的协议呢?找了网上一些资料,但各有各的说法!!我也只能保持中立,因为并没有一种解释能够说服我!!直到我翻看《计算机网络自顶向下》时,这个解释让我臣服。
那我们来解释一下,它到底属于哪一层呢?
一个ARP分组是封装在链路层帧中的(ARP模块构造分组,一个ARP分组有几个字段,包括发送和接 收IP地址及MAC地址。ARP查询分组和响应分组都具有相同的格式。然后将ARP分组交给链路层封装
),因而在体系结构上是位于链路层之上的。
然而一个ARP分组包含链路层的地址字段,因而可以认为是链路层的。再然而它也包含了网络层的地址字段,因而也可以认为是网络层的协议。所以:我们最好把ARP协议看成是位于网络层和链路层中间的协议。但有些同学认为这样不就不符合我们分层的思想了吗??只能说:现实中的网络协议就是这么复杂
DNS协议是将一个域名解析为IP地址,而ARP协议则是将IP地址解析为MAC地址。他们之间其实是很相似的。
他们之间有个重要区别就是:DNS可以为世界上任何一个地方的域名进行解析,但ARP只能为同一个子网的主机或者路由器接口解析IP地址
现在假设我们的ip地址为220的要向ip地址为222发送数据包,发送方需要给定IP地址的目的主机的MAC地址。如果在发送方的ARP表中有该表项,则直接封装就ok。如果没有该表项呢?那么发送方会构造一个ARP分组,一个ARP分组有发送方IP和接受方IP以及发送方的MAC地址。ARP查询分组的目的是询问子网上所有主机和路由器,确定其MAC地址
。
之后我们的220主机向它的适配器传递一个ARP分组,并指示适配器应该用MAC广播地址来进行发送,这样一个子网中所有主机都可以收到。
每个主机收到后,ARP模块都会查看该ARP的目的IP和本机IP是否一致,一致的话则响应自身的MAC地址给发送方。
发送方收到后,则更新自己的ARP表,得到了接受方的MAC地址,便可以发送数据包啦!!!
这里其中有一个有趣的事情:
- 发送方发送ARP分组时通过广播帧中发送,而响应时则是在一个标准帧中发送。为什么是这样呢??其实很好理解,因为一开始发送方并不知道它到底应该发送给谁,所以只能广播,而响应则知道这个ARP包是谁发的,就响应给谁就好了
- ARP是即插即用的,并不需要管理员配置,表可以自动维护
假设我们现在主机111.111.111.111要向主机222.222.222.222发送数据包
我们主机111要向主机222发送数据,那么肯定要先转发到路由器接口为111.111.111.110上,那么此时ARP的目的ip则是这个路由器接口的IP,最终获取的是这个接口的MAC地址。(注意这里的目的IP是数据包下一跳的IP地址,并不是真正数据包要到达最终的主机IP)
终于!终于!数据包达到了路由器,路由器通过路由表,来确定转发的接口,转发后,此时数据包终于到达了另一个子网,那么此时又需要ARP协议来获取MAC地址了。最终到达目的主机,结束任务!
ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址
。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到,因为他们内部没有地方可以存放自己的IP地址,只有一个MAC地址,故而需要外部提供自己的IP地址
要实现这种协议:通常需要架构一台RARP服务器,保存对应的MAC地址和IP地址
在日常中,有了DHCP,使我们省去了配置IP的繁琐步骤,DHCP直接动态帮我们获取IP
DHCP客户端监听的是68号端口,DHCP服务端监听的是67号端口
DHCP一个可以分为4个步骤:
UDP广播通信
。广播地址是255.255.255.255,端口是67.源ip地址是0.0.0.0,源端口是68。DHCP客户端生成包含DHCP发现报文的IP数据包,发送给数据链路层,从而转发给所有网络中的设备如果IP租约到期了,则会向服务器发送DHCP请求报文,如果同意继续租用,则回答ACK报文,如果不同意,则回答NACK报文
在DHCP交互中,都是使用UDP广播进行通信的
由于路由器并不会转发广播包,那么如果一个子网没有DHCP服务器怎么办呢??
中继代理便可以解决这个问题,所以一个DHCP服务器可以管理多个子网
工作流程:
- DHCP客户端广播DHCP服务发现包时,DHCP中继接收到这个包,则会以单播的形式传给DHCP服务器
- DHCP服务器处理后,又会给DHCP中继发送,DHCP中继又广播给DHCP客户端
ipv4是32位的,大约总共可以容纳40多亿左右,但我们的人口就已经70多亿了,每台主机可能还不止一个ip地址,那为什么我们现在还可以使用呢??其实就是用到了我们的NAT网络地址转换协议,当我们同一个公司,教室对外通信时,把私有ip转换为公有ip地址
。这样就可以很大程度缓解我们ip地址不够的问题了。当然使用我们128位的ipv6也是可以解决ip地址不够的问题的,只不过ipv6的普及还需要一段时间
简单来说,就是把一个私有ip转换为一个共有ip。说实话,这样没有什么用,一个私有ip对应一个共有ip,那还要它干啥呢???
由于我们传输层大多数都是使用的TCP或者UDP协议,所以我们可以把网络地址加端口一起转换了,这样多个私有ip就可以共用一个公有ip了。这种技术就叫做网络地址与端口转换协议NAPT
当我们的IP包在网络中没有达到主机时,就会通过ICMP报文负责通知。
ICMP主要作用就是:确认ip包是否送达,报告发送过程中遇到的故障
组播地址,也就是D类地址。也就是发送一个消息,只有一个组的可以收到,其他组的收不到。那么久如何管理是否是一组的呢??这就是我们的IGMP组管理协议
了。
IGMP报文封装在IP数据报里,协议字段对应的值为2,TTL值为1,因为IGMP是工作在主机和连接的路由器之间的。
查询与响应机制
1) 路由器会周期性的发送ICMP常规查询报文,目的地址是同一网段的所有主机和路由器
2)组成员收到常规查询报文后,会启动一个延时计时器,计时器超时后就会发送ICMP组成员关系报告,目的地址是组播地址。如果没有超时就收到了ICMP组成员关系报文,那么就不发送了,减少网络中ICMP包的数量。
3)路由器收到后,就会在ICMP表中加入该组播组,下次有数据包来时,就转发给该组播组
离开组播组流程
1)如果一个主机1要离开组播组了,就发送ICMP离组报文,目的地址是网段中所有主机路由器
2)IGMP路由器收到后,间隔1s发送一个特定组的查询,一共发送两个,用来检测该网段中是否还有该组播组中的主机
3)如果网段中没有主机属于该组播组,则两个数据包都没有主机响应,那么路由器以后便不会往这里转发该组的组播包了;如果网段中还有主机输入该组播组,那么该主机收到路由器的查询报文后,就会响应这个查询,表示该网段中还有主机属于该组播组。
相信各位都一定知道什么是Ping,也一定都使用过ping,一般都用来看这个网络是不是畅通的
比如上面这个,我ping了一下我网站的地址,它返回了四个回复,表示可以连通。虽然我们经常用ping命令,但你知道ping的原理是什么吗??它是如何工作的呢??下面就带你来了解一下:
Ping命令是基于ICMP协议工作的,前面我们提到了一点ICMP的内容。它是封装在IP数据包里的,工作在网络层,是IP协议的助手
可以看出ping这个命令使用了ICMP的为8和0的两种查询报文类型
作用: