TCP/IP 5 IP协议相关技术

IP旨在让最终目标主机收到数据包,但是这一过程中仅仅有IP是无法实现通信的。必须还有能够解析主机名称和MAC地址的功能,以及数据包在发送过程中异常情况处理的功能。

本章主要介绍作为IP的辅助和扩展规范的DNS、ARP、ICMP以及DHCP等协议。NAT。

5.1 仅靠IP无法完成通信

5.2 DNS

平常在访问某个网站时不使用IP地址,而是用一串由罗马字和点号组成的字符串。一般在TCP/IP进行通信时也不使用IP地址。能够这样做是因为有了DNS(Domain Name System)功能的支持。DNS可以将那些字符串自动转换为具体的IP地址。

DNS适用于IPv4和IPv6。

5.2.1 IP地址不便于记忆。

TCP/IP中有一个叫做主机识别码的东西。这种识别方式是指为每台计算机赋以唯一的主机名,在进行网络通信时可以直接使用主机名称而非一串IP地址。并且,系统必须自动将主机名转换为具体的IP地址。为了实现这样的功能,主机往往会利用一个叫做hosts的数据库文件。

5.2.2 DNS的产生

DNS系统,可以有效管理主机名和IP地址之间对应关系。在这个系统中主机的管理机构可以对数据进行变更和设定。它可以维护一个用来表示组织内部主机名和IP地址之间对应关系的数据库。

5.2.3 域名的构成

域名是指为了识别主机名称和组织机构名称的一种具有分层的名称。

域名由几个英文字母(或英文字符序列)用点号连接构成。

在使用域名时,可以在每个主机名后追加上组织机构的域名。如:pepper.kusa.ac.jp   piyo.kusa.ac.jp

由于DNS的分层,可以有相同主机名的存在,只要其所属域名不冲突。

域名服务器:是指管理域名的主机和相应的软件,他可以管理所在分层的域的相关信息。其所管理的分层叫做ZONE。每层都设有一个域名服务器。

各层域名服务器都了解该层以下分层中所有域名服务器的IP地址。因此,它们从根域名服务器开始呈树状结构相互连接。

由于所有域名服务器都了解根域名服务器的IP地址,所以若从根开始按照顺序追踪,可以访问世界上所有域名服务器的地址。

(迭代查询和递归查询)

解析器:进行DNS查询的主机和软件叫做DNS解析器。用户所使用的工作站或个人电脑都属于解析器。一个解析器至少要注册一个以上域名服务器的IP地址。通常它至少包含组织内部的域名服务器的IP地址。

5.2.4 DNS查询

解析器为了调查IP地址,向域名服务器进行查询处理。接受这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回。如果没有,则域名服务器再向上一层根域名服务器进行查询处理。(递归查询是指每次从上级域名服务器获取的信息都返回该域名服务器,迭代查询是指该域名服务器请求根域名服务器,根域名服务器查找本地,没有则将请求传给下层的顶级域名服务器,依次往下,直到找到后将数据传给解析器的域名服务器)

一般域名服务器可以包含顶级域名服务器从而可以跳出对根域名服务器的访问。

解析器和域名服务器将最新了解到的信息暂时保存在缓存里。这样,可以减少每次查询时的性能消耗。

5.2.5 DNS如同互联网中的分布式数据库

5.3 ARP

5.3.1 ARP概要

ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应得MAC地址如果目标主机不在同一个链路中时,可以通过ARP查找下一跳路由器的MAC地址

ARP只适用于IPv4,不能用于IPv6。IPv6中可以用ICMPv6替代ARP发送邻居探索消息。

5.3.2 ARP的工作机制

ARP借助ARP请求和ARP响应两种类型的包确定MAC地址。

通常通过广播获得主机的MAC地址。广播的包可以被同一个链路上所有的主机或路由器接收,因此ARP请求包也就会被这同一个链路上所有的主机或路由器接收与解析。如果ARP请求包中的目标IP地址也与自己的IP地址一致,那这个节点就将自己的MAC地址塞入ARP响应包返回给主机A。

目标地址将自己的MAC地址填入其中的ARP响应返回到IP地址。通过ARP从IP地址获得MAC地址,实现链路内的IP通信。

根据ARP可以动态地进行地址解析,因此,在TCP/IP的网络构造和网络通信中无需事先知道MAC地址究竟是什么,只要有IP地址即可。

如果每发送一个IP数据报都要进行依次ARP请求确定MAC地址的话,那将会造成不必要的网络流量。因此,通常把获取到的MAC地址缓存一段时间。ARP缓存表存储缓存的IP及对应的MAC地址,下一次再向这个IP地址发送数据时不需再重新发送ARP请求,而是直接使用缓存表内容。每执行一次ARP,其对应的缓存内容都会被清除。ARP缓存表防止ARP请求响应消息在链路层过多发送。

MAC地址的缓存超时后将从缓存表清除。

-------------------------------------------------------

16位硬件类型                 |    16位上层协议

8位HLEN | 8位PLEN      |     16位操作码

32位发送端MAC地址

16位发送端MAC地址(续)| 16位发送端IP地址

发送端IP地址(续)        |   16位接收端MAC地址

32位接收端MAC地址(续)

32位接收端IP地址

-----------------------------------------------------------------

在ARP请求和响应包中IP地址会互换。

5.3.3 IP地址和MAC地址缺一不可。

在以太网上发送IP包时,“下一跳路由器”就是通过MAC地址指向。

同一链路中ARP请求广播没找到时,会通过ARP查找下一跳的路由器的MAC地址。(即不在同一链路时会通过ARP查找找到IP地址对应的下一跳路由器或网关路由器)

5.3.4 RARP

RARP是将ARP反过来,从MAC地址定位IP地址的一种协议。

例如将打印机服务器等小型嵌入式设备接入到网络时经常会用到。

平常我们可以通过个人电脑设置IP地址,也可以通过DHCP自动分配获取的IP地址。然而,对于使用嵌入式设备时,会遇到没有任何输入接口或无法通过DHCP动态获取IP地址的情况。这时就要使用RARP。架设一台RARP服务器,在这个服务器上注册设备的MAC地址及其IP地址。然后再将该设备接入网络,插电启动设备时,该设备会发送一条“我的MAC地址是***,请告诉我我的IP地址应该是什么”的请求信息。RARP服务器接到这个消息后会回应设置的IP地址。

5.3.5 代理RARP

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

5.4 ICMP

5.4.1 辅助IP的ICMP

在刚搭建好网络,需要验证该网络的设置是否正确。此外,为了确保网络能够按照预期正常工作,一旦遇到什么问题需要立即制止问题的蔓延。

ICMP是提供了上述功能的一种协议。

ICMP的主要功能:确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。

有了这些功能就可以获得网络是否正常、设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。

在IP通信中如果某个IP包因为某种原因未能到达目标地址,那么这个具体的原因将由ICMP负责通知。

ICMP的这种通知消息会使用IP进行发送。(ICMP包也通过网络层进行路由转发,使用到了IP地址)

ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。

5.4.2 主要的ICMP消息

1)ICMP目标不可达消息(类型值为3)

IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达的ICMP消息,并在这个消息中显示不可达的具体原因。

通常不可达原因有主机不可达(路由表中没有该主机的信息,或主机没有连接到网络的意思);MTU探索(之前提到的为了避免多次进行分片,发送端在发送之前会探索该通路中的所有数据链路中的最小MTU)。

2)ICMP重定向消息(类型值5)

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

不过多数情况下这种重定向消息成为引发问题的原因,所以往往不进行这种设置。

3)ICMP超时消息(类型11)

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

设置IP包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免IP包无休止地在网络上被转发。此外,有时可以用TTL控制包的到达范围,如设置一个较小的TTL。

4)ICMP回送消息(类型0、8)

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

5.4.3 其它ICMP消息

ICMP原点抑制消息(4)、ICMP路由器探索消息(9、10):用于发现与自己相连网络中的路由器、ICMP地址掩码消息(17、18):主要用于主机或路由器想要了解子网掩码的情况。

5.4.4 ICMPv6

IPv4中ICMP仅作为一个辅助作用支持IPv4。也就是说,在IPv4时期,即使没有ICMP,仍然可以实现IP通信。然而,在IPv6中,ICMP的作用被扩大。如果没有ICMPv6,IPv6就无法进行正常通信。

在IPv6中,从IP地址定位MAC地址的协议是ICMP的邻居探索消息(而不是ARP)。

ICMPv6中将ICMP大致分为两类:错误消息,信息消息。

1)邻居探索

ICMPv6中从类型133至类型137的消息叫做邻居探索消息。这种邻居探索消息对于IPv6通信起着重要作用。邻居请求消息用于查询IPv6的地址与MAC地址的对应关系,并由邻居宣告消息得知MAC地址。邻居请求消息利用IPv6的多播地址实现传输。

此外,由于IPv6中实现了即插即用的功能,所以在没有DHCP服务器的环境下也能实现IP地址的自动获取。如果是一个没有路由器的网络,就使用MAC地址作为链路本地单播地址。而在一个有路由器的网络环境中,可以从路由器获得IPv6地址的前面部分,后面部分则由MAC地址进行设置。此时可以利用路由器请求消息和路由器宣告消息进行设置。

5.5 DHCP

5.5.1 DHCP实现即插即用

为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP协议(动态主机配置协议)。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。DHCP在IPv4和IPv6中都可以使用。(没有DHCP时,需要管理员为新接入的主机设置IP地址、子网掩码、默认路由和DNS服务器等)。

5.5.2 DHCP的工作机制

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

从DHCP中获取IP地址的流程,有两个阶段:DHCP客户端广播DHCP发现包要求设置IP地址和子网掩码,DHCP服务器发送DHCP提供包通知客户端可以使用的网络设置;DHCP客户端发送请求包通知想要使用上一步接收到的DHCP提供包中的设置,DHCP服务器再次发送DHCP提供包通知允许这样的设置。

使用DHCP时,如果DHCP服务器故障,将无法自动分配IP地址,从而导致网段内所有主机之间无法进行TCP/IP通信。为了避免此类问题,通常假设两台或以上的DHCP服务器。启动多个DHCP服务器时,由于每个服务器内部都记录着IP地址分配情况的信息,因此可能会导致几处分配的IP地址相互冲突。

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

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

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

这两步会消耗一些时间,但是安全。可以验证所分配的地址是否已经存在。

5.5.3 DHCP中继代理

家庭网络大都只有一个以太网的网段,与其连接的主机台数不会太多。因此,只要有一台DHCP服务器就足以应对IP地址分配的需求。大多数情况下都由宽带路由器充当这个DHCP的角色。

而一个企业或学校等较大规模组织机构的网络环境中,一般会有多个以太网网段。在这种情况下,针对每个网段都设置DHCP服务器将会是庞大的工程。即使路由器可以分担DHCP的功能,如果网络中路由器过多时,就要为所有路由器设置它们各自可分配IP地址的范围并对这些范围进行后续的变更维护,这很耗时。

因此,在这类网络环境中,往往需要将DHCP统一管理。可以使用DHCP中继代理来实现。有了DHCP中继代理以后,对不同网段的IP地址分配也可以由一个DHCP服务器统一进行管理和运维。

在每个网段设置一个DHCP中继代理。它可以设置DHCP服务器的IP地址,从而可以在DHCP服务器上为每个网段注册IP地址的分配范围。

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

5.6 NAT

5.6.1 NAT定义

NAT(网络地址转换器)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除了转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(网络地址端口转换器)技术,由此可以实现用一个全局IP地址与多个主机的通信。

NAT(NAPT)是为了正在面临地址枯竭的IPv4而开发的技术。不过在IPv6中为了提高网络安全也在使用NAT,在IPv4和IPv6之间的相互通信当中常常使用NAT-PT。

5.6.2 NAT的工作机制

一个私有网段内的客户端发送给公网服务器数据包时,经过路由器上进行NAT转换,原包中的IP地址转换成路由器提供的公网IP,然后再将数据包发送给服务器。服务器回传数据包时也是发给路由器上的IP,再经过NAT转换转换成网段内的IP地址。

在NAT(NAPT)路由器内部,有一张自动生成的用来转换地址的表。当私有网段内主机IP发送第一个包给公网服务器时生成这张表,并按照表中的映射关系进行处理。

当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换IP地址,人们不免担心全局IP地址是否不够用。这时就采用包含端口号一起转换的方式NAPT进行解决。

这种转换表在NAT路由器上自动生成。例如,在TCP的情况下,建立TCP连接首次握手时的SYN包一经发出,就会生成这个表。然后随着收到关闭连接时发出FIN包的确认应答从表中被删除。

5.6.3 NAT-PT(NAPT-PT)

NAT-PT(NAPT-PT)规范。NAT-PT是将IPv6的首部转换为IPv4的首部的一种技术。有了这种技术,那些只有IPv6地址的主机也就能够与IPv4地址的其它主机进行通信了。

NAT-PT有很多形式,其中最让人期待的当属结合DNS和IP首部替换的DNS-ALG。

5.6.4 NAT的潜在问题

由于NAT(NAPT)都依赖于自己的转换表,因此会有如下几点限制:

1)无法从NAT的外部向内部服务器建立连接。

2)转换表的生成与转换操作都会产生一定的开销。

3)通信过程中一旦NAT遇到异常需要重新启动时,所有的TCP连接都将被重置。

4)即使备置两台NAT做容灾备份,TCP连接还是会被断开。

5.6.5 解决NAT的潜在问题与NAT穿越

解决NAT上述潜在问题有两种方法:

1)改用IPv6。在IPv6环境下可用的IP地址范围有了极大地扩展。此时NAT不是必须使用的了。

2)即使在一个没有NAT的环境里,根据所制作的应用,用户可以完全忽略NAT的存在而进行通信。在NAT内侧(私有IP地址的一边)主机上运行的应用为了生成NAT转换表,需要先发送一个虚拟的网络包给NAT的外侧。而NAT并不知道这个虚拟的包究竟是什么,还是会照样读取包首部中的内容并自动生成一个转换表。这时,如果转换表构造合理,那么还能实现NAT外侧的主机与内侧的主机建立连接进行通信。

5.7 IP通道

|  IPv6网络A  |  IPv4网络C  |  IPv6网络B  |

网络A与网络B之间无法直接进行通信。为了让它们之间正常通信,这时必须采用IP隧道的功能。

IP隧道中可以将那些从网络A发过来的IPv6的包统和为一个数据,再为之追加一个IPv4的首部以后转发给网络C。

一般情况下,紧接着IP首部的是TCP或UDP的首部。然而,现在的应用当中“IP首部的后面还是IP首部”或者“IP首部的后面是IPv6的首部”等情况与日俱增。这种在网络层的首部后面继续追加网络层首部的通信方法就叫做“IP隧道”

IP包首部中有指示下一层协议类型的字段,一般可以是TCP或UDP,但也可以是另一种IP协议)。

利用IP隧道转发多播消息的例子:Mobile IP、多播包的转播、IPv4网络中传送IPv6的包、IPv6网络中传送IPv4的包、数据链路帧通过IP包发送(L2TP)。

5.8 其它IP相关技术

5.8.1 IP多播相关技术

IGMP

5.8.2 IP任播

IP任播用于报警电话和消防电话系统。当人们拨打消防电话时,其接收电话并不是只有一个,而是可以拨打到哟个区域管辖范围内的所有消防部门。

这种机制的实现,在互联网上就是IP任播。

IP任播是指为那些提供同一种服务的服务器配置同一个IP地址,并与最近的服务器进行通信的一种方法。适用于IPv4和IPv6。

如DNS根域名服务器。

 5.8.5 Mobile IP

原文地址:https://www.cnblogs.com/cjj-ggboy/p/12459838.html