仅凭IP无法完成通信:在实际应用中,人们一般不会使用十进制数字组成的某个IP地址,而是直接输入Web网站的地址或者电子邮件地址,这些由应用层提供的地址。因此从上往下的角度,就有必要实现将应用中使用的地址映射为IP地址。此外,数据链路层使用的是mac地址而不是ip地址,并且在实际中,将众多ip数据包在网络上进行传输的就是数据链路本身,因此就有必要了解发送端mac地址。
下面主要包含了:DNS、ARP、ICMP、ICMPv6、DHCP、NAT等协议,还包括IP隧道、IP多播、IP任播、质量控制(QoS)以及以太网拥塞的显式通知和Mobile IP技术。
目录
DNS
协议背景:TCP/IP 网络中要求每一个互连的计算机都具有其唯一的IP 地址,并基于这个IP 地址进行通信。但是IP 地址是由一串数据序列组成,并不好记。因此直接使用IP 地址有很多不便之处。
早先形态(主机识别码时期):
hosts数据库文件中记录了主机名和IP地址一一映射的关系,由互联网信息中心更新和管理。如果新增一台计算机接人到ARPANET 网或者巳有的某台计算机要进行IP 地址变更,中心的这个hosts 文件就得更新,而其他计算机则不得不定期下载最新的hosts 文件才能正常使用网络。因此随着互联网的迅猛发展,该方式的可行性逐渐降低。
1.DNS定义
是一个分布式的客户机/服务器网络数据库,TCP/IP应用程序使用它来完成主机名称和IP地址之间的映射(反之亦然),提供电子邮件路由信息、服务命名和其他服务。DNS提供了允许客户机和服务器相互通信的协议,也提供了服务器之间交互信息的协议。
上面分布式的含义:互联网中没有单独的一个站点能知道所有信息。每一个站点维护自己的信息数据库,并运行一个服务器程序供互联网上其他系统查询。
优点:充分解决了ARPANET初期遇到的问题。无论网络规模变得多么庞大,都能在一天个较小范围内通过DNS进行管理。
2.域名
域名是为了识别主机名称和机构名称的一种具有分层的名称。域名在以前都用ASCII码表示,现在可以使用中文等众多国家的名字表示。
域名结构:包含:根域、顶级域、二级域、子域、主机。域名包含一系列的由点分开的标签,标签代表名称层级中的一个位置,句点是层次结构分隔符,并且名称中自右向左的顺序沿树下降。
根域
位于域名空间最顶层,一般用一个 “.” 表示顶级域
一般代表一种类型的组织机构或国家地区,如 net、com、org、edu、gov、mil、cn、jp、hk二级域
用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,如 .cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn …子域
二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名主机
主机位于域名空间最下层,就是一台具体的计算机,如 www、mail、都是具体的计算机名字,可用www.sina.com.cn.、mail.sina.com.cn. 来表示,这种表示方式称为 FQDN (完全合格域名),也是这台主机在域名中的全名平时上网输入的网址都是 FQDN 名,如 www.sina.com.cn,其实表示我们要访问 “sina.com.cn” 域中一台名为 “www” 的计算机
3.DNS的域名和IP的关系
在DNS系统中有一个比较重要的的资源类型叫做主机记录也称为A记录,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
(1)一个域名对应一个IP集群:多见于有一定访问规模的网站,常见的使用技术是负载均衡。广义上的负载均衡器大概可以分为 3 类,包括:DNS 方式实现负载均衡、硬件负载均衡、软件负载均衡。其中DNS方式实现负载均衡时,每次域名解析请求都会根据对应的负载均衡算法计算出一个不同的IP地址并返回,这样A记录中配置多个服务器就可以构成一个集群,并可以实现负载均衡。
(2)多个域名解析到一个IP地址:多见于小流量网站。
一个IP绑定多个域名是很常见的事情,租用的虚拟主机大多数都是多个主机共享同一个IP,区分具体访问的是哪个主机要从两个方面实现:
1.客户端如何区别不同的网站。
客户端在请求时,会在HTTP请求的时候包含要请求的具体主机名称,比如访问Google的请求通过抓包分析内容是这样的:
GET / HTTP/1.1 Host: www.google.com
整个请求会被发送到服务器上,其中有Host字段标识你要请求的网站域名是什么。因此即使访问的是同一个IP地址,由于Host字段不同,服务器软件有办法区分具体访问的是哪个网站。
2.服务器端如何配置
虚拟主机:web服务器程序可以根据请求头的中的域名返回对应目录资源,这称作web服务器的“虚拟主机”功能。但是不过多数人所知道的虚拟主机一般是使用虚拟化技术(虚拟机软件)将物理服务器虚拟化为多个虚拟主机,常见的虚拟机软件有VMwareWorkstation、VirtualBox,不过这里说的web服务器的虚拟主机和虚拟化技术的虚拟主机是两回事。以最常用的Apache服务器软件为例,要实现虚拟主机功能,只需要做一些虚拟主机的配置即可。
服务器使用Apache,那么在Apache的配置文件中加入VirtualHost即可新增虚拟主机:一对VirtualHost标签就是一个虚拟主机(一个域名)的配置。
<VirtualHost 10.0.0.1> ServerAdmin admin@admin DocumentRoot "D:/website1" ServerName http://myhost1.com DirectoryIndex index.php </VirtualHost> <VirtualHost 10.0.0.1> ServerAdmin admin@admin DocumentRoot "D:/website2" ServerName http://myhost2.com DirectoryIndex index.php </VirtualHost>
以上就定义了两个域名http://myhost1.com和http://myhost2.com,分别在不同的根目录,通过这样的配置Apache如果收到http://myhost1.com的请求,那么就到d:/website1里寻找对应的页面,如果是http://myhost2.com的请求,那么就到d:/website2里寻找对应的页面。通常Apache还有一个默认网站,这个网站是可以使用IP地址访问的,如果将这个网站设置为无效,那么这个主机就无法通过IP地址直接访问HTTP资源。、
如果服务器采用IIS(不是服务器的主流,可参考IIS搭建简单网站),IIS能使用同一个IP绑定多个站点,在默认网站->属性->网站->高级中,添加不同的域名即可。高版本的IIS中,可以配置多个网站,每个网站绑定不同的域名,即可实现访问时的区分。
如果服务器没设置默认网站,那么IP地址也无法直接访问主机。
所以,如果你直接通过IP地址访问网站,会遇到两种情况:
1、服务器设置了默认网站,或者使用IP作为主机名去匹配请求的Host字段,那么你通过IP访问的就是这个网站;
2、服务器没有设置默认网站,或者默认网站被禁止,那么你通过IP无法打开任何东,通常遇到的是404错误(找不到页面),在我使用过的几个虚拟主机服务商那,遇到的都是类似的错误。另外,不管是IIS或者Apache或者其它类型的网站服务器软件,不仅仅支持多域名,也支持多IP,也就是一个服务器同时有多个域名和多个IP,互相之间是互不干扰的。
4.域名服务的特点以及图示说明
5.DNS查询流程举例图
pepper主机(所在域名服务器为kusa.co.jp)查询www.ietf.org网站的流程
ARP
定义:地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。
只用在和存在于IPv4中。
工作流程:
假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:
(1) 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
(2) 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3) 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4) 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
1.ARP报文格式:
先要清楚,一般说以太网地址就是指MAC地址。
字段1是ARP请求的目的以太网地址,全1时代表广播地址。
字段2是发送ARP请求的以太网地址。
字段3以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。
字段4表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。
字段5表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。
字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。
字段8是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
字段9是发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。
字段10是发送ARP请求或应答的IP地址。
字段11和12是目的端的硬件地址和协议地址。
2.ARP高速缓存
定义:ARP缓存是一个缓冲区,用来储存IP地址和MAC地址,本质就是<IP地址,MAC地址>的对应表。表中一个条目记录了网络上一个主机的IP地址和其对应的MAC地址。
当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
ARP缓存表项的生存时间TTL:ARP缓存包含动态和静态项目。
(1)动态项目:随时间推移自动添加和删除,每个动态ARP缓存项都有都设置了TTL(生存时间),TTL为0时此项目就从表中删除,Windows下TTL一般不超过10分钟。
(2)静态项目:静态 ARP 缓存条目是永久性的,可以使用 TCP/IP 工具手动添加和删除。静态 ARP 缓存条目用来禁止节点发送对常用的本地IPv4地址(例如路由器和服务器的 IPv4 地址)的ARP请求。
ARP高速缓存的使用:当主机发送一个ARP请求时,先查看ARP高速缓存表,如果存在对应条目,则直接返回MAC地址,否则向局域网发送ARP请求广播。
ARP高速缓存的优缺点:
优点:从ARP高速缓存的使用中可以看到,ARP高速缓存可以减小广播量,进而减小网络通信量,提高计算机之间的通信效率。
缺点:造成安全隐患(参考下面免费ARP的作用)。
3.免费ARP(FARP)
定义:免费ARP指主机发送ARP查找自己的IP地址,通常发生在系统引导期间进行接口配置时。与标准ARP的区别就是免费ARP分组的目的IP地址字段封装的是自己的IP地址,即向所在网络请求自己的MAC地址。
免费ARP的作用有:
1) 一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址。正常情况下发送免费ARP请求不会收到ARP应答,如果收到了一个ARP应答,则说明网络中存在与本机相同的IP地址的主机,发生了地址冲突。
2)更新其他主机的高速缓存中旧的硬件地址进行。如果发送免费ARP的主机正好改变了硬件地址,如更换了接口卡。其他主机接收到这个ARP请求的时候,发现自己的ARP高速缓存表中存在对应的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP请求来更新本地的ARP高速缓存表表项。
3)网关利用免费ARP防止ARP攻击。有些网关设备在一定的时间间隔内向网络主动发送免费ARP报文,让网络内的其他主机更新ARP表项中的网关MAC地址信息,以达到防止或缓解ARP攻击的效果。
4)利用免费ARP进行ARP攻击。ARP协议并不只在发送了ARP请求才接收ARP应答,计算机只要接收到ARP应答数据包,就会使用应答中的IP和MAC地址对本地的ARP缓存进行更新。主机可以构造虚假的免费ARP应答,将ARP的源MAC地址设为错误的MAC地址,并把这个虚假的免费ARP应答发送到网络中,那么所有接收到这个免费ARP应答的主机都会更新本地ARP表项中相应IP地址对应的MAC地址。更新成功后,这些主机的数据报文就会被转发到错误的MAC地址,从而实现了ARP欺骗的攻击。
4.代理APR(proxy ARP)
背景: 先要了解,路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。ARP请求是个广播包,它询问的对象如果在同一个局域网内,就会收到应答。但是如果询问的对象不在同一个局域网就会被路由器隔离,该如何处理?路由器就提供的代理ARP为这个问题提供了解决方案。
定义:代理ARP使一个系统(通常是一台专门配置的路由器)可回答不同主机的ARP请求。它使请求的发送者认为做出响应的系统就是目的主机,但实际上目的主机可能在其他地方(或不存在)。
工作过程:
ARP代理并不常见,通常应该尽量避免使用它。
代理ARP也称为混杂ARP或ARP黑客。名称来源于历史用途:两个物理网络相互隐蔽自己。在这种情况下,两个物理网络可以使用相同的IP前缀,只要将中间的路由器配置为一个代理ARP,在一个网络中由代理响应对其他网络中的ARP请求。这种技术可用于向一组主机隐藏另一组主机。从前,这样做的原因有两个:(1)有些系统无法进行子网划分,(2)有些系统使用比较久的广播地址。
ICMP
背景:
在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP 报文。在IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息而被制造出来的。
网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。
定义:ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。
IPv4中ICMP仅作为一个辅助作用支持IPv4.也就是说,在IPv4时期,即使没有ICMP,任然可以实现IP通信。
1.报文类型或者用途
在RFC,将ICMP 大致分成两种功能:差错通知和信息查询。
(1)给送信者的错误通知。在 IP 数据包被对方的计算机处理的过程中,发生了什么错误时被使用。不仅传送发生了错误这个事实,也传送错误原因等消息。
(2)送信者的信息查询。信息询问是在送信方的计算机向对方计算机询问信息时被使用。被询问内容的种类非常丰富,他们有目标IP 地址的机器是否存在这种基本确认,调查自己网络的子网掩码,取得对方机器的时间信息等。
2.ICMP作为IP的上层协议在工作
ICMP 的内容是放在IP 数据包的数据部分里来互相交流的。也就是,从ICMP的报文格式来说,ICMP 是IP 的上层协议。但是,正如RFC 所记载的,ICMP 是分担了IP 的一部分功能。所以,被认为是与IP 同层的协议。
RFC 规定的数据包格式和报文内容:
上图中的IP数据包中,用来传送ICMP 报文的IP 数据包上实际上有不少字段。但是实际上与ICMP 协议相关的只有7 个子段。
1)协议;2)源IP 地址;3)目的IP 地址;4)生存时间;这四个包含在IP 首部的字段。
5)类型;6)代码;7)选项数据;这三个包含在ICMP数据部分的字段。
这里面,1)协议字段值是1。2)和3)是用来交流ICMP 报文的地址信息,没有特殊意义。对于理解ICMP 本身,重要的是5),6),7)三个字段。这里面的可以称为核心的重要字段是5)类型,6)代码这两个字段。所有ICMP 用来交流错误通知和信息询问的报文,都是由类型和代码的组合来表示的。RFC 定义了15种类型。“报文不可到达”这样的错误通知和“回送请求”这样的信息查询是由类型字段来区分的。ICMP报文由类型来表达它的大概意义,需要传递细小的信息时由代码来分类。进一步,需要向对方传送数据的时候,用7)选项数据字段来放置。
3.利用ICMP实现的功能
(1)ICMP实现之改变路由;(2)ICMP实现之ping命令;(3)ICMP实现之traceroute命令;(4)ICMP实现之端口扫描
4.ICMP和安全的关系
为什么有停止ICMP 使用的设定项目呢?理由只有一个,那就是确保安全。虽然ICMP 是非常便利的协议,但黑客在尝试非法访问的时候会被恶意利用。由于ICMP 被恶意使用而遭受损害的用户正在不断增加之中,因此有了限制ICMP 使用的意见。从安全的方面来说,ICMP 是有百害而无一利的。
ICMPv6
在IPv6中,ICMP的作用被扩大,如果没有ICMPv6,IPv6就无法进行正常通信。
定义:基于ipv6的ICMPv6(Internet control message protocol for IPv6)是 IPv6 下的 Internet 控制报文协议;在 IPv6 中,ICMPv6 整合实现了 IPv4 中的 ICMP(ping命令)、ARP 以及 IGMP 的所有功能,主要包括错误报告、网络诊断(ping6命令)、邻居发现、多播实现和重定向等。
1.ICMPv6的报文格式
ICMPv6报文封装在IPv6中,回顾下IPv6的首部报文格式:
ICMPv6的协议号为58,也就是在IPv6报文中的Next Header的值为58。ICMPv6的报文格式如下:
类型字段用于确定特定的报文,ICMPv4和ICMPv6的该字段值并不相同;代码字段进一步肯定报文的含义,ICMPv4和ICMPv6的该字段值并不相同;校验和字段用于确定报文信息的正确性。
(1)Type:表示 ICMPv6 报文的类型,当取值介于 0 到 127 之间时,表示该报文为差错报文(如目的不可达、超时等),当取值在 128 到 255 之间时,则表示该报文为信息报文。
(2)Code:表示此消息类型(Type)细分的类型,具体区分每种消息类型的错误信息,如目的不可达可能是防火墙导致的,也可能是路由错误导致的。
(3)Checksum:校验和,校验的部分包括了 IPv6 伪首部和ICMPv6报文。IPV6伪首部包含4个部分:16字节的sourse address, 16字节的destination addrss,2字节的 payload length, 1字节的next header。
2.邻居发现协议NDP相关知识
定义:邻居发现协议(Neighbor Discovery Protocol,NDP)就是使用以下的功能实现即插即用特性的协议:
- 路由器发现:当一个节点连接到一个IPV6的链路时,它能够发现本地的路由器,不必借助DHCP。
- 前缀发现:当一个节点连接到一个IPV6的链路时,它能够发现分配给该链路的前缀。
- 参数发现:节点能够发现它所相连的链路的参数(链路的MTU和跳数限制等)。
- 地址自动配置:节点能够确定他的完整性,不需要DHCP。
- 地址解析 :节点不需要借助ARP就能够发现所连接链路上其他节点的链路层地址。
- 下一跳确定:一条链路上的节点能够确定到达目的节点的下一跳链路层节点。
- 邻居不可达检测 :节点能检测到链路上的邻居(主机或路由器)何时不再可达。
- 地址冲突检测:节点能检测到他所要使用的地址是否已经被链路上的其他节点所占用。
- 重定向:对于非连接的目的节点,路由器能够通过重定向消息通知主机存在比它自己更好的下一跳路由。
NDP定义了5种ICMPv6报文类型:ICMPv6消息类型中有5种是为了支持邻居发现协议而定义的。
-
类型133 路由器请求(Router Solicitation Message,RS):由主机发起,用来请求一个路由器发送一个RA
-
类型134 路由器通告(Router Advertisement Message,RA):由路由器发起,通告路由器的存在和链路的细节参数(链路前缀,MTU,跳数限制等),周期性发送,也用于答RS。
-
类型135 邻居请求(Neighbor Solicitation Message,NS):由节点主机发起,用来请求另一台主机的链路层地址,或实现地址冲突检测、邻居不可达检测。
-
类型136 邻居通告(Neighbor Advertisement Message,NA):有节点发起用来响应NS,如果一个节点改变了他的链路层地址,那么它能够主动发送一个NA来通告这个新地址。
-
类型137 重定向(Redirect)
NDP消息通常在链路本地的范围内收发。
为了进一步增强安全性,承载所有NDP消息的IPV6数据包的跳数限制为255,如果收到的数据包跳数小于255的,说明该数据包最少已经经过一台路由器,因此该数据包应该被丢弃。这样可以防止NDP受到来自不与本地链路相连的源节点的攻击或欺骗。
1.路由器发现
定义:路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
RA报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,最小缺省周期为200S,RA报文中会带有网络前缀信息,及其他一些标志位信息。未经请求的RA源地址是路由器接口的链路地址,目的地址是所有节点的多播地址(FE02::1)。
RS报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS的源地址可以是未指定的地址(::),也可以是该主机的链路本地地址,目的地址则始终是所有路由器的多播地址(FE02::2)。
当一台主机收到一条RA时,它就会将这台路由器添加到他的缺省路由器列表中,如果存在多台路由器条目时,要么在列表中依次轮询,要么选择保持单台路由器作为缺省路由。
2.地址自动配置
定义:当一台IPV6的主机第一次连接到链路上时,他能够自我配置自己接口的链路地址:在自己接口的48位的MAC地址中间插入一个保留的16位数值0xFFFE,并把它的U/L位(第七位)翻转,这样就得到了一个64位接口ID。在接口ID前面加上链路本地前缀FE80::/10,就得到了链路本地地址。
如果主机只需要和所在链路上的设备通信时,自动配置的地址已经足够,但是要和链路以外的主机通讯时,就需要更大的范围地址,通常使用以下两种方法获取地址:
- 有状态:借助DHCPV6获取地址。
- 无状态:主机将RA发来的链路前缀加上自己确定的接口ID,这样就得到了一个全球唯一的IPV6地址
3.邻居地址解析(类ARP)
Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文(利用IPv6的多播地址实现传输),其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。
当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。
还可参考TCP/IP中的图:
4.邻居不可达检测
背景:通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
邻居状态:RFC2461中定义了5种邻居状态,分别为
- 未完成(Incomplete):表示正在解析地址,但邻居链路层地址尚未确定。
- 可达(Reachable):表示地址解析成功,该邻居可达。
- 陈旧(Stale):表示可达时间耗尽,未确定邻居是否可达。
- 延迟(Delay):邻居可达性未知。Delay状态不是一个稳定的状态,而是一个延时等待状态。
- 探查(Probe):邻居可达性未知,正在发送邻居请求探针以确认可达性.
居状态的具体迁移过程如下图所示:
下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。
- A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
- 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
- 经过邻居可达时间,邻居状态由Reachable(默认30s)变为Stale,即未知是否可达。
- 如果在Reachable状态,A收到B的非请求NA报文(MAC地址修改),且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
- 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
- 在经过一段固定时间后,邻居状态由Delay(默认5s)变为Probe(每隔1s发送一次NS报文,连续发送3次),其间若有NA应答,则邻居状态由Delay变为Reachable。
- 在Probe状态,A每隔一定时间间隔z(1s)发送单播NS,发送固定次数(3)后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。
5.重复地址检测 Duplicate Address Detect,DAD(类FARP)
基本概念:
在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。
一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。
地重复地址检测过程:
PC A的IPv6地址2000::1为新配置地址,即2000::1为PC A的试验地址。PC A向2000::1的Solicited-Node组播地址FF02::1:FF00:1发送一个以2000::1为请求的目标地址的NS报文进行重复地址检测,由于2000::1并未正式指定,所以NS报文的源地址为未指定地址。当PC B收到该NS报文后,有两种处理方法:
- 如果PC B发现2000::1是自身的一个试验地址,则PC B放弃使用这个地址作为接口地址,并且不会发送NA报文。
- 如果PC B发现2000::1是一个已经正常使用的地址,PC B会向FF02::1发送一个NA报文,该消息中会包含2000::1。这样,PC A收到这个消息后就会发现自身的试验地址是重复的,从而弃用该地址。
DHCP
背景:
定义:DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
优点:
1. 减少管理员的工作量。
2. 减少输入错误的可能。
3. 避免IP冲突。
4. 当网络更改IP地址段时,不需要重新配置每台计算机的IP地址。
5. 计算机移动不必重新配置IP地址。
6. 提高了IP地址的利用率。
DHCP中继代理
背景:在家庭网络中大多都只有一个以太网(无线LAN) 的网段,与其连接的主机台数也不会太多。因此,只要有一台DHCP 服务器就足以应对IP 地址分配的需求,而大多数情况下都由宽带路由器充当这个DHCP 的角色。但是,,一个企业或学校等较大规模组织机构的网络环境当中,一般会有多个以太网(无线LAN) 网段。。在这种情况下,若要针对每个网段都设置DHCP服务器将会是个庞大的工程。也就是说将DHCP 服务器分设到各个路由器上,于管理和运维都不是件有益的事。
解决:在这类网络环境中,往往需要将DHCP 统一管理。具体方法可以使用DHCP 中继代理来实现。有了DHCP 中继代理以后,对不同网段的IP 地址分配也可以由一个DHCP 服务器统一进行管理和运维。
NAT
背景:解决面临地址枯竭的IPv4问题而开发的技术,在IPv6 中为了提高网络安全也在使用NAT, 在IPv4 和IPv6 之间的相互通信当中常常使用NAT-PT。
定义:NAT (Network Address Translator) 是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP 地址的技术。。除转换IP 地址外,还出现了可以转换TCP 、UDP 端口号的NAPT (Network Address Ports Translator) 技术,由此可以实现用一个全局IP 地址与多个主机的通信。(通常人们提到的NAT, 多半是指NAPT。NAPT 也叫做IP伪装或Multi NAT 。)
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 以后再被转发。
NAPT工作原理:
主机163. 221. 120. 9 的端口号是80, LAN 中有两个客户端10. 0. 0. IO 和10. 0. 0. 11 同时进行通信,并且这两个客户端的本地端口都是1025 。此时,仅仅转换IP 地址为某个全局地址202.244. 174.37, 会令转换后的所有数字完全一致。为此,只要将10. 0. 0. 11 的端口号转换为1026 就可以解决问题。如上所示,生成一个NAPT 路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端A 、B 能同时与服务器之间进行通信。
NAT和NAPT比较:
- 相同:在NAT (NAPT) 路由器的内部,有一张自动生成的用来转换地址的表。当10. 0. 0.10 向163. 221. 120. 9 发送第一个包时生成这张表,并按照表中的映射关系进行处理。
- 应用场景不同:当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换IP 地址,人们不免担心全局IP 地址是否不够用。这时采用如图5.20 所示的包含端口号一起转换的方式(NAPT) 可以解决这个问题。
以下说的NAT实际上都是指的NAPT,后面不再赘述。
NAT-PT
背景:现在很多互联网服务都基于1Pv4 。如果这些服务不能做到在1Pv6 中也能正常使用的话,搭建1Pv6 网络环境的优势也就无从谈起了。
定义:NAT-PT 是将IPv6 的首部转换为IPv4 的首部的一种技术。有了这种技术,那些只有IPv6 地址的主机也就能够与IPv4 地址的其他主机进行通信了。
工作原理:
NAT-PT 的其他形式:DNS-ALG,结合了DNS 和IP 首部。
以上所以的NAT的潜在问题
由于NAT (NAPT) 都依赖于自己的转换表,因此会有如下几点限制:
- 无法从NAT 的外部向内部服务器建立连接。
- 转换表的生成与转换操作都会产生一定的开销。
- 通信过程中一旦NAT 遇到异常需重新启动时,所有的TCP 连接都将被重置。
- 即使备置两台NAT 做容灾备份, TCP 连接还是会被断开。
解决潜在问题的方法:
- 第一种方法就是改用1Pv6 。在1Pv6 环境下可用的IP 地址范围有了极大的扩展,以至于公司或家庭当中所有设备都可以配置一个全局IP 地址。因为如果地址枯竭的问题得到解决,那么也就没必要再使用NAT 了。然而, IPv6 的普及到现在为止都远不及人们的预期,前景不容乐观。
- 另一种方法是“NAT 穿越”。可以使得NAT 外侧与内侧可以进行通信。这种方法与已有的1Pv4 环境的兼容性非常好,即使不迁移到1Pv6 也能通信自如。原理:在NAT 内侧(私有IP 地址的一边)主机上运行的应用为了生成NAT 转换表,需要先发送一个虚拟的网络包给NAT 的外侧。而NAT 并不知道这个虚拟的包究竟是什么,还是会照样读取包首部中的内容并自动生成一个转换表。这时,如果转换表构造合理,那么还能实现NAT 外侧的主机与内侧的主机建立连接进行通信。有了这个方法,就可以让那些处在不同NAT 内侧的主机之间也能够进行相互通信。此外,应用还可以与NAT 路由器进行忑兰忠赞?$芦P。通信生成NAT 表,并通过一定的方法将NAT 路由器上附属的全局IP 地址传给应用。
IP隧道
背景:网络A 、B 使用IPv6, 如果处于中间位置的网络C 支持使用IPv4 的话,网络A 与网络B 之间将无法直接进行通信。为了让它们之间正常通信,这时必须得采用IP 隧道的功能。
定义:种在网络层的首部后面继续追加网络层首部的通信方法就叫做“IP 隧道”。因为一般情况下,紧接着IP 首部的是TCP 或UDP 的首部。
作用:
- 构造一个既支待1Pv4 又支持IPv6 的网络是一项极其庞大的工程。骨干网上通常使用IPv6 或IPv4 进行传输。因此,那些不支持的路由器就可以采用IP 隧道的技术转发数据包,而对应的IP 地址也可以在一旁进行统一管理。这在一定程度上减轻了管理员的部分工作。此外,由于骨干网的设备上仅在一旁应对IP 隧道即可,这也可以大量地减少投资成本。
- 可以建立多播隧道。如下图