跟我学TCP/IP系列4

     由于最近比较忙,一直都没有什么时间写文章,到了周末终于可以继续把TCP/IP系列剩下的文章慢慢写下去了,同时也非常感谢各位小伙伴们的大力支持。今天和大家分享IP协议相关的技术。

    众所周知,IP旨在让最终目标主机收到数据包,但是在这一过程中仅有IP是无法实现通信的,必须还有能够解析主机名称和MAC地址的功能,处理数据包在发送过程中出现异常情况的功能,以及数据包在发送过程中异常情况处理的功能。而实现这些功能靠的是哪些技术呢?这就是我们今天要分享的DNS、ARP、ICMP以及DHCP。


1什么是DNS?

    DNS(Domain Name System)也就是我们常说的域名系统,我们都知道的是TCP/IP网络中要求每一个互连的计算机都具有唯一的IP地址,并基于这个IP地址进行通信。然而直接使用IP地址不便记忆,你知道前辈们是通过怎样的技术来简化记忆的呢?

    为此TCP/IP世界中从一开始就已经有一个叫主机识别码的东西,这种识别方式是指为每台计算机赋以唯一的主机名,在进行网络通信时直接使用主机名称而无需输入一大串的IP地址。但此时系统必须自动将主机名转换为具体的IP地址,主机往往会利用一个叫做hosts的数据库文件来进行保存。但是这存在一个问题,如果新增一台计算机联网或者已有的某台计算机要变更IP地址时,中心的hosts文件就必须更新,而其他计算机则不得不定期下载最新的hosts文件才能正常使用网络。

DNS的产生

    基于上述背景,产生了一个可以有效管理主机名和IP地址之间对对应关系的系统,那就是DNS系统,在这个系统中主机的管理机构可以对数据进行变更和设定,也就是维护了一个用来表示组织内部主机名和IP地址之间对应关系的数据库。在应用中,当用户输入主机名之后,DNS会自动检索那个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址,从而很便捷地解决了上述所遇到的困境。


域名的构成

    域名是指为了识别主机名称和组织机构名称的一种具有分层的名称。例如百度的域名:www.baidu.com域名由几个英文字母用点号连接构成;在使用域名时,可以在每个主机名后面追加上组织机构的域名。在启用域名功能之前,单凭主机名还无法完全管理IP地址,因此在不同的组织结构中不允许有同名的主机,然而当出现了带有层次结构的域名之后,每一个组织机构就可以自由地为主机命名。


    DNS的分层结构采用树型拓扑结构,顶点就是树的根,底下就是各层枝叶。顶层的下一层叫做第一层域名,主要是一些代表国家的域名,教育机构以及企业等特定领域的域名。


域名服务器

    域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息,其所管理的分层叫做ZONE。各个域的分层上都有设有各自的域名服务器;各层域名服务器都了解该层以下分层中所有域名服务器的IP地址,因此他们从根域名服务器开始呈树状结构相互连接。由于所有域名服务器都了解根域名服务器的IP地址,所有若从根开始按照顺序追踪,可以访问世界上所有域名服务器的地址。


    根部所设置的DNS叫做根域名服务器,它对DNS的检索数据功能起着至关重要的作用,根域名服务器中注册着根以下第一层域名服务器的IP地址。类似地,在根域名服务器的下一层域名中注册了再往下一层域名服务器的IP地址。根据每个域名服务器所管理的域名,如果下面再没有其他分层,就可以自由地指定主机名称或子网名称。不过若想修改该分层的域名或重新设置域名服务器的IP地址,还必须得在其上层的域名服务器中进行追加或修改。


    因此,域名和域名服务器需要按照分层进行设置,如果域名服务器宕机,那么针对该域的DNS查询也就无法正常工作,因此常设置两个以上的域名服务器提高容灾能力。


DNS解析器

    解析器为了调查IP地址,向域名服务器中进行查询出来。收到这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回,如果没有,则域名服务器再向上一层根域名服务器进行查询处理。


DNS查询

    解析器为了调查IP地址,向域名服务器中进行查询出来。收到这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回,如果没有,则域名服务器再向上一层根域名服务器进行查询处理。

DNS查询.png

DNS查询


2ARP地址解析协议


ARP概要

    ARP是一种解决地址问题的协议,以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不再同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不能用于IPv6。IPv6中可以用ICMPv6代替ARP发送邻居探索消息。


ARP的工作机制

    ARP通过ARP请求与ARP响应两种类型的包确定MAC地址。假定主机A向同一链路的主机B发送IP包,主机A的IP地址为172.20.1.1,主机B的IP地址为172.20.1.2.

ARP工作机制.png

ARP工作机制

    上图中,主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包,这个包包含了想要了解其MAC地址的主机IP地址,也就是说,ARP请求包中已经包含了主机B的IP地址为172.20.1.2。由于广播的包可以被同一个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同一个链路长所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包中返回给主机A。

    总之,从一个IP地址发送ARP请求包以了解其MAC地址,目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址,由此,可以通过ARP从IP地址获得MAC地址,实现数据链路内的IP通信。


MAC地址缓存

    如果没发送一个IP数据报都将进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量。因此通常的做法是把获取到的MAC地址缓存一段时间,即把第一次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆到一个ARP缓存表中,

    下一次再向这个IP地址发送数据报时不需要再重新发送ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送,每执行一次ARP,其对应的缓存内容都会被清除。不过在清除之前都可以不需要执行ARP就可以获取想要的MAC地址。

    一般来说,发送过一次IP数据报的主机,继续发送多次IP数据报的可能性会比较高,因此这种缓存可有效地减少ARP包的发送,反之,接收ARP请求的那个主机又可以从这个ARP请求包获取发送端主机的IP地址及其MAC地址。不过,MAC地址的缓存时有一定期限的,超过期限时,缓存的内容将被清除,这就会造成MAC地址与IP地址的对应关系即使发生了变化,也依然能够将数据包正确地发送给目标地址。



IP&MAC

IP地址和MAC地址缺一不可吗?

假如,数据链路上知道了接收端的MAC地址,还需不需要它的IP地址呢?也许你会说,只要知道了IP地址,即使不做ARP,只要在数据链路上做一个广播不就是可以发给另一个主机了吗?这样的还为什么又需要IP地址又要MAC地址呢?看完下面这个图你就不会这样说了。

MAC地址与IP地址不同.png

    此外,假如MAC地址就用广播,那么路由器D也会收到广播地址,于是路由器D又将消息转发给路由器C,导致数据包重复发送。

所以在以太网上发送IP包时,下一层要经由哪个路由器发送数据报是很重要的,而这里的下一路由器就是相应的MAC地址。

    若仅通过MAC地址,我们是无法知道这台机器所处的位置的,而且如果全世界的设备都使用MAC地址相连,那么往前在习得之前就得向全世界发送包,可想而知,将会造成多大的网络流量。并且由于没有任何集约机制,网桥就不得不维护一张巨大的表格来维护

所学到的所有MAC地址。一旦这些信息超过了网桥所能承受的极限,那将会导致网桥无法工作。所以说,IP地址和MAC地址是缺一不可的。


RARP

RARP(Reverse Address Resolution Protocol)也就是我们说的反向ARP地址解析,是将ARP反过来,从MAC地址定位IP地址的一种协议。RARP工作过程.png

RARP工作过程

代理ARP是指通常ARP包会被路由器隔离,但是采用代理ARP(Proxy ARP)的路由器可以将ARP请求转发给邻近的网段,由此,两个以上网段的节点之间可以像在同一网段一样进行通信。


3ICMP

    ICMP是一种验证网络设置的有种协议,同时也是为了确保网络能够按照预期正常工作,一旦遇到问题需要立即制止问题蔓延的一种协议。

    ICMP的主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。同时ICMP的这种通知消息会使用IP进行发送,收到ICMP包的主机会分解ICMP的首部和数据与以后得知具体发生的原因。


ICMP消息分类

    ICMP的消息可分为通知出错原因的错误消息和用于诊断的查询消息。ICMP消息的类型如下图所示。

ICMP消息类型.png

ICMP消息类型

但是现在仅分析几种主要的ICMP消息

类型3:ICMP目标不可达消息

 IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达的ICMP消息。并在这个消息中显示不可达的具体原因。而在实际通信过程中常遇到错误代码为1,表示主机不可达,

 它是指路由表中没有改主机信息或者该主机没有联网的意思。

ICMP不可达消息.png

ICMP不可达消息

类型5:ICMP重定向消息

如果路由器发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向消息给这个主机,在这个消息中包含了最合适的路由消息和源数据。这主要发生在路由器持有更好的路由器信息的情况下,路由器会通知这样的ICMP消息给发送端主机一个更适合的发送路由。

ICMP重定向消息.png

ICMP重定向消息


类型11:ICMP超时消息

IP包中有有一个字段叫做TTL,它的值就是每经过一次路由器就会被减1,直到0时该IP包会被丢弃,此时IP路由器将会发送一个ICMP超时的消息给发送端主机,并通过该包已被丢弃。

设置IP包生存周期的主要目的,是为了在路由控制遇到问题发生循环状态时,避免IP包无休止地在网络上被转发。


类型0、8:ICMP回送消息

用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息。可以向对端主机发送回送请求的消息(类型8),也可以接受对端主机发回来的回送应答消息(类型0)。网络上最常用的ping命令,就是利用这个消息实现的。


5DHCP

    DHCP(Dynamic Host Configuration Protocol)DHCP是为了实现自动设置IP地址,同一管理IP地址分配的一种协议。有了DHCP,计算机只要连接了网络就可以进行TCP/IP通信。对比以下两张图就可以知道DHCP带来的便利了。

DHCP1.png

DHCP2.png

可见,在有DHCP时,IP地址的分配更加简单了。

DHCP工作机制

    在使用DHCP之前,首先要架设一台DHCP服务器,然后将DHCP所要分配的IP地址设置到服务器上,此外还需要将相应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。

DHCP工作原理.png

DHCP工作原理

DHCP在分配IP地址时有两种方法,一种是由DHCP服务器再特定的IP地址中自动选出一个进行分配。另一种方法是针对MAC地址分配一个固定的IP地址,而且这两种方法可以并用。

为了检查所要分配的IP地址以及已经分配了的IP地址是否可用,DHCP服务器或DHCP客户端必须具备以下功能:

DHCP服务器:在分配IP地址前发送ICMP回送请求包,确认没有返回应答。

DHCP客户端:针对从DHCP那里获得到的IP地址发送ARP请求包,确认没有返回应答。


DHCP中继代理

为实现DHCP统一管理,同时不同网段的IP地址分配也可以由一个DHCP服务器统一进行管理和运维,而完成这一工作的就是中继代理DHCP。

DHCP中继代理.png

DHCP中继代理

DHCP客户端会想DHCP中继嗲了发送DHCP请求包,而DHCP中继代理在收到这这个广播包以后再以单播的形式发送给DHCP服务器。服务器收到该包以后再向DHCP中继代理返回应答,并由DHCP中继代理将此包转发给DHCP客户端。由此,DHCP服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。


    以上就是今天所要分享的内容了,DNS,ARP,ICMP和DHCP在IP协议中占有极其重要的地位,可以说是IP协议幕后的大佬,没有它们,有这些大佬,IP才能为所欲为。

    由于公众号还未开通留言功能,如果大家有什么问题以及一些建议和意见也可以在后台给我留言。或者你们想看一些什么内容也可以在后台留下你们的悄悄话,我会尽力去满足读者们的需求。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值