关于IP协议还需要一些其他的协议来辅助,比如我们在访问网站的时候并不会使用IP地址来访问,而是通过一串字符串,也就是我们说的域名来访问。但是网络访问的协议是需要IP地址的,那这是怎么实现的呢?用的就是我们的DNS服务。 DNS服务就是将字符串转换成具体的IP地址,因为IP地址对于我们来说十分不便于记忆。TCP/IP协议自一开始就有了一个叫做主机识别码的东西,这种识别方式是给每一台计算机赋予了一个唯一的主机名,在进行网络通信的时候可以直接使用主机名,而不用输入一大长串的IP地址,但是实际上是系统会自动把主机名转换成具体的IP地址,为了实现这样的功能,主机往往会保存一个叫做hosts的数据库文件。当用户输入主机名之后,系统回去hosts文件里边找到对应的IP地址,然后通过IP去访问那一台电脑。在互联网最初的时候,由互联网中心管理者这样一份文件,每新增一台计算机或者有某台计算机要进行IP变更的时候,这个文件就得更新。别的计算机也不得不定期下载最新的hosts文件保证正常使用网络,但是随着网络规模的不断多大, 这种方式就不可行了,就有了DNS服务。 DNAS系统就是一个可以有效管理主机名和IP地址之间对应关系的系统,他可以维护一个用来表示组织内部主机名和IP地址之间对应关系的数据库。在理解DNS之前要了解什么是域名,域名就是为了识别主机名称和组织机构名称的一种具有分层的名称,百度的域名就是www.baidu.com,域名也是有分级的因为在同一级别下不允许有相同的域名。顶级域名下边有uk、cn等代表国家的域名,也有edu代表教育、com代表企业等特定域名。每一级域名都有各自的域名服务器。根部的DNS叫做根域名服务器,他对DNS的检索数据功能骑着至关重要的作用。 当我们输入域名然后进行DNS查询的时候,当收到请求的时候解析器为了查询IP地址,会对域名服务器进行查询处理,接受这个查询请求的域名服务器首先会在自己的数据库里边查找,如果有该域名所对应的IP地址就返回,如果没有就会向更上以及域名服务器进行查询,依次直到根域名服务器。解析器和域名服务器将最新了解到的信息暂时保存在自己的缓存里,这样下次再访问这个数据的时候就能减少性能消耗。 当我们在浏览器输入一个域名之后,浏览器会先在自己的缓存里边查找对应的IP地址,如果有就直接使用如果没有就需要发送请求到本地的DNS服务器,DNS服务器一般来说都是由网络接入商提供,比如中国电信,当本地的DNS服务器收到这个请求之后,会先再自己的缓存里边查询,如果有就返回,如果没有的话,就需要再继续查询,这时候查询的方式有两种一种是递归查询一种是迭代查询。 递归查询是当它发现自己这边没有客户想要的数据的时候就会向根服务器发送请求,然后根DNS服务器就会去帮去找对应的域服务器直到直到之后再一层一层的返回。迭代查询主要是由DNS客户端来查询,当没有信息的时候他会向根服务器发起请求,这时候根服务器会告诉他,这个域名的IP在哪个域服务器,并且把域服务器的地址告诉他,然后本地服务器再去查询。 并且DNS服务还有负载均衡的作用,现在大部分网站都有多个服务器,也就是说同一个域名下边可能对应有多个IP地址,如果所有请求都放在同一个服务器上,那这个服务器是承受不住这些负载的,这时候DNS就起到了作用,DNS会根据每台机器的负载情况或者距离用户的地理位置等条件来把不同的访问引导到不同的服务器上而达到负载均衡的目的。 第二个辅助协议ICMP 当我们在搭建网络的时候确认网络是否正常是很重要的,并且当遇到问题的时候我们要对产生的问题进行诊断。ICMP就是一个提供这类功能的协议。ICMP的主要功能包括确认IP包是不是成功送达了,通知在发送过程中IP包被丢弃的具体原因,改善玩够哦设置等,有了这些功能,就可以获得网络是否正常,设置是否有误以及设备有何异常等信息。 如上图,当主机A给主机B发送数据包的时候,由于某种原因路由器2并没有发现你主机B的存在,这时候路由器2就会主动向主机A发送一个ICMP包,说明发给主机B的包并没有发送成功。ICMP的这种消息会使用IP进行发送,因此路由器2返回的ICMP包会按照往常的路由先经过路由器1再发送给主机A,收到该ICMP包的A,分解ICMP的首部和数据以后就可以得知错误发送的具体原因。 ICMP消息大致可以分成两类,一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。 目标不可达中可能有路由表中没有该主机的信息,或者该主机没有链接到网络, ICMP还能发送重定向消息,当路由器发现发送端主机使用了次优的路径发送数据的时候,它就会返回一个ICMP重定向消息给这个主机,这个消息中包含了最合适的路由消息和源数据 对于11的超时是IP包中有一个叫做TTL的生存时间,它的值没经过一个路由器就会减少1,直到0就会丢弃该包,这时候路由器就会发送一个ICMP超时消息给发送端主机,通知该包已经被丢弃。设置IP包生存周期的主要目的是为了在路由控制遇到问题发生循环的状况,避免IP包无休止的在网络进行转发。并且可以用TTL来控制包的到达范围。 对于0,8两个回送类型可能并不熟悉,但是他能实现的一个功能确是很熟悉的,我们常用的ping命令就是通过这个消息来实现,他是用来判断数据包是不是已经成功到达对端的一种消息,可以向对端主机发送类型8的回送请求,然后接受对端发来的类型0回送应答