IP协议相关技术

DNS

我们平常在访问某个网站时不使用IP地址,而是用一串由几个英文字母用点号连接构成的域名。在这种情况下,产生了一个可以有效管理域名和IP地址之间对应关系的系统,那就是DNS系统。

在应用中,当用户输入域名时,DNS会自动检索那个注册了域名和IP地址的数据库,并迅速定位对应的IP地址。而且。如果主机名和IP地址需要进行变更时,也只需要在组织机构内部进行处理即可。

DNS系统是一个分布式数据库,它的结构如下图:

DNS查询过程

  1. 例如当在浏览器输入www.qq.com域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址,如果有,就先调用这个IP地址映射,完成域名解析。
  2. 如果浏览器中没有缓存,则操作系统会先检查自己本地的hosts文件中是否有这个网址的映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  3. 如果hosts中没有这个域名的映射,则查找本地的DNS解析器缓存,是否有这个网址的映射,如果有则直接返回,完成解析。
  4. 如果hosts文件与本地DNS解析器缓存都没有对应的网址映射关系,首先会找这个TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果本地配置资源中包含要查找到域名的映射关系,则返回解析结果给客户端,完成域名解析,此解析具有权威性。
  5. 如果要查询的域名不由本地DNS服务器区域解析,但是该服务器已缓存了此网址的映射,则调用这个映射结果,完成域名解析,此解析不具有权威性。
  6. 如果本地DNS服务器的本地区域文件和缓存都解析失败的话,则根据本地DNS服务器端设置进行查询。如果未用转发模式,本地DNS服务器就会把请求发送至13台根DNS服务器,根DNS服务器收到请求后会判断这个域名是谁来授权管理,并会返回一个负责该顶级DNS服务器的IP地址。本地DNS服务器收到IP信息后,将会联系这台顶级DNS服务器。这台顶级DNS服务器收到请求后,如果自己无法解析,他会找一个自己的下一级DNS服务器,也就是权威DNS服务器,给本地DNS服务器。当本地DNS服务器收到返回的权威DNS服务器IP时,重复上面的动作进行查询,直到找到www.qq.com的IP地址。
  7. 如果用的是转发模式,次DNS服务器会把请求转发至上一级DNS服务器,由上一级进行解析,上一级如果不能解析,或找根DNS服务器或把请求转发至上上级,以此循环,直到找到www.qq.com的IP地址。

ARP

只要确定了IP地址,就可以向这个目标地址发送IP数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个IP地址所对应的MAC地址。ARP是一种解决地址问题的协议,以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。

ARP工作机制

简单地说,ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。假设主机A向同一链路上的主机B发送IP包,主机A的IP地址为172.20.1.1,主机B的IP地址为172.20.1.2,它们互不知道对方的MAC地址。

主机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通信。

如果没法送一个IP数据包都要进行一次ARP请求将会造成不必要的网络流量,因此,通常的做法就是把获取到的MAC地址缓存一段时间。

RARP

RARP是将ARP反过来,从MAC地址定位IP地址的一种协议。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

平常我们个人电脑设置IP地址,也可以通过DHCP自动分配获取IP地址。然而对于嵌入式设备,会遇到没有任何输入接口或无法通过DHCP动态获取IP地址的情况。在类似情况下,就可以使用RARP。

为此,需要架设一台RARP服务器,从而在这个服务器上注册设备的MAC地址已经IP地址,然后再将这个设备连接到网络,插电启动时,该设备会发送一条“我的MAC地址是***,请告诉我我的IP地址应该是什么”的请求信息。RARP服务器接受到这个请求后,返回类似于“MAC地址为***,IP地址为***”的信息给这个设备。而设备就根据从RARP服务器所收到的应答信息,从而设置自己的IP地址。

代理ARP

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

ARP攻击和防护

ARP会引起的攻击有以下几种:

  • ARP泛洪攻击通过向网关发送大量ARP报文,导致网关无法正常响应。首先发送大量的ARP请求报文,然后又发送大量虚假的ARP响应报文,从而造成网关部分的CPU利用率上升难以响应正常服务请求,而且网关还会被错误的ARP表充满导致无法更新维护正常ARP表,消耗网络带宽资源。
  • ARP欺骗主机的攻击:ARP欺骗主机的攻击也是ARP众多攻击类型中很常见的一种。攻击者通过ARP欺骗使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。主机刷新自己的ARP使得在自己的ARP缓存表中对应的MAC为攻击者的MAC,这样一来其他用户要通过网关发送出去的数据流就会发往主机这里,这样就会造成用户的数据外泄。
  • 欺骗网关的攻击:欺骗网关就是把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户韵数据.造成数据的泄露,同时用户电脑中病毒的概率也会提升。
  • 中间人攻击:中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。
  • IP地址冲突攻击:通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的MAC地址,然后根据物理主机的MAC进行攻击,导致局域网内的主机产生IP地址冲突,影响用户的网络正常使用。

相对应的攻击防护方法有以下几种:

  1. 不要把网络信任关系单纯地建立在IP基础上或MAC基础上(RARP同样存在欺骗的问题),应在网络中架设DHCP服务器,绑定网关与客户端IP+MAC,该做法需要注意的是要保证网络中的dhcp服务器相互之间不冲突。
  2. 添加静态的ARP映射表,不让主机刷新设定好的映射表,该做法适用于网络中主机位置稳定,不适用在主机更换频繁的局域网中。
  3. 停止使用ARP,将ARP作为永久条目保存在映射表中。
  4. 架设ARP服务器。通过该服务器查找自己的ARP映射表来响应其他机器的ARP广播。
  5. IP的传输使用“proxy”代理。
  6. 使用防火墙等连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。

ICMP

架构IP网络时需要特别注意两点:确认网络是否正常工作,以及遇到异常时进行问题诊断。ICMP正式提供这类功能的一种协议。

ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。有了这些功能,就可以获得网络是否正常,设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。不过ICMP时基于尽力而为的IP进行工作的,因此无法保证服务质量,而且在网络安全优先于便利性的环境中往往无法使用ICMP,因此不宜过分依赖于ICMP。

在IP通信中如果主机A向主机B发送了数据包,由于某种原因,途中的路由器2未能发现主机B的存在,这是,路由器2就会像主机A发送一个ICMP包,说明发往主机B的包未能成功。

ICMP的这种通知消息会使用IP进行发送,在ICMP中,包以明文的形式像TCP/UDP一样通过IP进行传输。然而ICMP所承担大二功能并非传输层的补充,而应该把它考虑为IP的一部分。因此,从路由器2返回的ICMP包会按照往常的路由控制先经过路由器1再转发给主机A。收到该ICMP包的主机A则分解ICMP的首部和数据域以后得知具体发生问题的原因。

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

主要的ICMP消息

  • ICMP目标不可达消息(类型3):IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达的ICMP消息,并在这个消息中显示不可达的具体原因。在实际通信中常会遇到错误代码1,表示主机不可达,它是指路由表中没有该主机的信息,或者该主机没有连接到网络的意思;此外错误代码4则用于前面介绍过的MTU探索。
  • TCMP重定向消息(类型5):如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向的消息给这个主机。在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。
  • ICMP超时消息(类型11):IP包中有一个字段叫做TTL,当它的值减到0时该IP包会被丢弃。此时IP路由器将会发送一个ICMP超时的消息(错误号0)给发送端主机,并通知该包已被丢弃。设置IP包生存周期的目的是为了,在路由控制遇到问题发生循环状况时,避免IP包无休止的在网络上被转发。同时也可以控制包的到达范围。
  • ICMP回送消息(类型0、8):用于进行通信主机或路由器之间,判断所发送的数据包是否以及成功到达对端的一种消息。可以向对端主机发送回送请求的消息(类型8),也可以接收对端主机发回来的回送应答消息(类型0)。网络上最常用的ping命令就是利用这个消息实现的。
  • ICMP原点抑制消息(类型4):在使用低速广域线路的情况下,连接WAN的路由器可能会遇到网络拥堵的问题,ICMP原点抑制消息的目的就是为了缓和这种拥堵情况。
  • ICMP路由器探索消息(类型9、10):主要用于发现与自己相连网络中的路由器。
  • ICMP地址掩码消息(类型17、18):主要用于主机或路由器想要了解子网掩码的情况。

ICMPv6

IPv4中ICMP仅作为一个辅助作用支持IPv4,然而在IPV6中,ICMP作用被扩大,如果没有ICMPv6,IPv6就无法进行正常通信。

在IPv6中,从IP地址定位MAC地址的协议,从ARP转为ICMP的邻居探索消息。这种邻居探索消息融合了IPv4的ARP、TCMP重定向以及ICMP路由器选择消息等功能于一体,甚至还提供自动设置IP地址的功能。

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

ICMP中从类型133至类型137的消息叫做邻居探索消息。邻居请求消息用于查询IPv6的地址与MAC地址的对应关系,并由邻居宣告消息得知MAC地址。

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

DHCP

为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。

DHCP工作机制

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

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

DHCP中继代理

在一个企业或者学校等大规模组织机构的网络环境中,一般会有多个以太网网段,在这种情况下,若要针对每个网段都设置DHCP服务器将会是个庞大的工程。

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

这种方法使得在每个网段架设一个DHCP服务器被取代,只需在每个网段设置一个DHCP中继代理即可。它可以设置DHCP服务器的IP地址,从而可以在DHCP服务器上为每个网段注册IP地址的分配范围。

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

NAT

NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT技术。NAT(NATP)实际上是为了应对正在面临地址枯竭的IPv4而开发的技术。

NAT工作机制

如图以10.0.0.10的主机与163.221.120.9的主机进行通信为例。利用NAT,图中的NAT路由器将发送源地址从10.0.0.10转换为全局的IP地址(202.244.174.37)再发送数据。反之,当包从地址163.221.120.9发过来时,目标地址(202.244.174.37)先被转换成私有IP地址10.0.0.10以后再被转发。
在NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址的表。当10.0.0.10向163.221.120.9发送第一个包时生成这张表,并按照表中的映射关系进行处理。

NAT-PT(NAPT-PT)

为了解决NAT在IPv6中也能正常使用的问题,就产生了NAT-PT(NAPT-PT)规范。NAT-PT(NAPT-PT)是将IPv6的首部转换为IPv4的首部的一种技术。有了这种技术,那些只有IPv6地址的主机也能够与IPv4地址的其他主机进行通信了。

NAT的问题与解决方法

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

  • 无法从NAT的外部向内部服务器建立连接。
  • 转换表的生成与转换操作都会产生一定的开销。
  • 通信过程中一旦NAT遇到异常需重新启动时,所有的TCP连接都将被重置。
  • 即使备置两台NAT做容灾备份,TCP连接还是会断开。

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

  • 改用IPv6。
  • 即使是在一个没有NAT的环境里,根据所制作的应用,用户可以完全忽略NAT的存在而进行通信。

IP隧道

在如图所示的网络环境里,网络A、B使用IPv6,如果处于中间的网络C支持使用IPv4的话,网络A与网络B之间将无法直接进行通信。为了让他它们之间正常通信,这时就必须采用IP隧道的功能。

IP隧道中可以将那些从网络A发过来的IPv6的包统和为一个数据,在为之追加一个IPv4的首部以后转发给网络C。这种在网络层的首部后面继续追加网络层首部的通信方法就叫做“IP隧道”。