APR协议
所谓ARP协议,是通过目的主机的IP地址获得目的主机的MAC地址的一个协议,它利用mac帧来进行操作的,因此ARP协议是一种介于数据链路层和网络层的协议。下面来看一下ARP协议的报头信息。
在这里以太网的首部是MAC帧的报头信息,剩下的28个字节是ARP协议的报头消息。
硬件类型:表示底层是以太网还是令牌环网。
协议类型:表示需要转换的地址类型,0x800表示IP协议。
硬件地址长度和协议地址长度都是固定的。
op为1表示ARP请求,op为0表示ARP应答。
后面四个字段不做解释。
ARP协议的具体工作过程如下,假设发送端的IP地址为ip1,MAC地址为mac1,接收端的IP地址为IP2,MAC地址为mac2.发送端首先发起ARP请求,op为1,目的以太网地址为全1,表示广播。数据通过路由到达对端所在网络之后,由于目的mac地址为广播,所以该网络所有主机接收到该报文,去掉mac层的报头信息,把有效载荷交给上层的ARP协议。ARP协议首先看op操作,发现是ARP请求,再看目的IP地址是否为本主机,如果不是,那么直接丢弃,只有是目的ip地址对应的主机会发出APR响应。设置op为0,并且填充好自己的源mac地址,并且它知道发送端的ip地址和MAC地址,做出ARP响应。发送端接受到MAC响应后,首先看op字段,发现是ARP响应,就直接去除响应报文的发送端以太网地址,就获得了目的主机的MAC地址。
每台主机会缓存一张arp表,表示最近访问过的主机的MAC地址。在linux中我们可以使用arp-a来查看。
DNS协议
DNS,又称域名解析协议,他是一个应用层协议,底层使用UDP协议。如果通过ip地址加上端口号的方式访问服务器,很麻烦,也不方便记忆,因此我们通过字符串的形式,访问服务器。通过DNF讲域名解析成IP地址,然后访问。
至今,我们的主机上面还会保存一张hosts文件。里面表示域名和ip地址的映射关系。
当我们通过域名访问服务器的时候,主机首先会在本机的host文件中查找映射关系,如果查到了,直接访问,如果没查到,就需要询问最近的域名服务器来查找结果,如果没找到,就去上一级的域名服务查找,如果一直找不到,就会找到根域名服务器,根域名服务器一定会给出答案。
ICMP协议
ICMP协议是一个网络层的协议,它往往用来测试一个网络是否畅通,因为IP协议是无连接不可靠的协议,因此如果发送丢包,他无法告知上层是否丢包和丢包原因。因此,ICMP协议就是具有这些功能的。
- 确认IP包是否到达目的地址。
- 通知丢包的原因。
- 它是基于IP协议的,但是不是传输层的协议,因此我们归结于网络层。
而ping命令就是一个典型的基于ICMP协议的命令。通过我们就使用ping命令来查看网络的流畅度,注意,ping命令是基于ICMP协议的,是一个网络层协议,因此没有端口号。这是个坑。
至此,计算机网络中的大部分协议我们以及学习过了,那么就可以结合我们所学习的内容,回答下面这样一个问题,当我们在浏览器中输入一个rul之后,按下回车,会发生什么事。
1.当我们输入url访问服务器的时候,肯定是通过DNS讲域名解析成ip地址。
2.有了ip地址,就可以进行通信了,由于http搭载tcp协议,首先建立连接。三次握手。
3.然后发送端发起http请求。
4.得到http响应。
5.浏览器进行html解析。
6.浏览器进行布局渲染。
7.断开连接,tcp四次挥手。
NET技术
前面我们讲过了,为了解决IP资源枯竭的问题,有这,几种解决方式:
- 使用ipv6协议
- NET技术
- 网段划分
当我们通过构建子网来解决IP地址短缺的问题的时候,局域网中的主机想要访问广域网中的主机的时候,就要把自己的源ip地址,逐级替换,直到替换成公有IP地址才可以访问广域网中的服务器,那么服务器如果向给这台客户端主机发送数据,它是怎么找到这台主机呢。
我们知道在私有局域网中ip地址一定是不一样的,而端口号可能一样。但是通过替换技术替换成路由器的ip地址之后,ip地址是一样的,但是每一台主机的端口号肯定不一样,因此我们通过这样的一个四元组的映射关系,来保存主机到路由器的映射关系。
这种关系也是有路由器自动维护的,在建立连接的时候,就会产生这个表项,在断开连接时,删除这个表项。
注意:这个表项是从内往外的时候建立起来的,因此想从外部直接访问内部是不可以的 。