10.1.4 Internet协议
本节介绍各种Internet协议的功能和它们的调用关系,以及Internet提供的各种网络服务。Internet的主要协议是TCP和IP所以Internet协议也叫TCP/IP协议族。本书第二章对Internet相关协议做了简单介绍,本节将对该部分知识进行深入学习。
1.IP协议
IP协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧”统一转换成“IP数据报”格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有“开放性”的特点。
数据包也是分组交换的一种形式,就是把所传送的数据分段打成“包”,再传送出去。但是,与传统的“连接型”分组交换不同,它属于“无连接型”,是把打成的每个“包”(分组)都作为一个“独立的报文”传送出去,所以叫做“数据报”。这样,在开始通信之前就不需要先连接好一条电路,各个数据报不一定都通过同一条路径传输,所以叫做“无连接型”。这一特点非常重要,它大大提高了网络的坚固性和安全性。
每个数据报都有报头和报文两个部分,报头中有目的地址等必要内容,使每个数据报不经过同样的路径都能准确地到达目的地。在目的地重新组合还原成原来发送的数据,这就要求IP具有分组打包和集合组装的功能。在实际传送过程中,数据报还要求能根据所经过网络规定的分组大小来改变数据报的长度,IP数据报的最大长度可达65535个字节。
图10-3 IPv4报头格式
IPv4报头格式如图10-3所示。
IP协议运行在网络层上,可实现异构的网络之间的互联互通。它是一种不可靠、无连接的协议。IP定义了在整个TCP/IP互联网上数据传输所用的基本单元(由于采用的是无连接的分组交换,因此也称为数据报),规定了互联网上传输数据的确切格式;IP软件完成路由选择的功能,选择一个数据发送的路径;除了数据格式和路由选择精确而正式的定义之外,还包括一组不可靠分组传送思想的规则。这些规则指明了主机和路由器应用如何处理分组,何时及如何发出错误信息,以及在什么情况下可以放弃分组。IP协议是TCP/IP互联网设计中最基本的部分。对于IP协议而言,需要掌握以下几个关键知识点。
(1)数据报生存期
为了防止因出现网络路由环路,而导致IP数据报在网络中无休止地转发,IP协议在IP报头设置了一个数据报生存期(TTL)位,用来存放数据报生存期(以跳为单位,每经过一个路由器为一跳),每经过一个路由器,计数器加1,超过一定的计数值,就将其丢弃。
(2)分段和重装配
物理网络层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,都要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP层把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
把一份IP数据报分片以后,只有到达目的地才进行重新组装,这里的重新组装与其他网络协议不同,它们要求在下一站就进行重新组装,而不是在最终的目的地。重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层(如TCP和UDP)是透明的,除了某些可能的越级操作外。已经分片过的数据报有可能会再次进行分片(可能不止一次)。
IP首部中包含的数据为分片和重新组装提供了足够的信息,下面的这些字段用于分片过程。
对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中。
标志字段用MF位来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。DF位代表是否允许分片,如果将此比特置1,IP将不对数据报进行分片。相反把数据报丢弃并发送一个ICMP差错报文(“需要进行分片但设置了不分片比特”)给起始端。
片偏移字段指的是该片偏移原始数据报开始处的位置。
另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。
当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。
尽管IP分片过程看起来是透明的,但缺点是即使只丢失一片数据也要重传整个数据报。为什么会发生这种情况呢?因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(TCP有超时和重传机制;但UDP没有,一些UDP应用程序本身也执行超时和重传)。当来自TCP报文段的某一片丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报。没有办法只重传数据报中的一个数据报片。事实上,如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的。因此,经常要避免分片。
(3)IP数据报格式
IP协议的数据报格式如图10-3所示,其中版本号用来说明IP协议的版本(现在是IPv4,今后会过渡到IPv6;IHL是IP头长度(即除了用户数据之外),以32位字计数,最小是5,即20个字节;服务类型用于区分可靠性、优先级、延迟和吞吐率的参数;总长度是包含IP头在内的数据单元总长度;标识符是唯一标识数据报的ID;标志区有三个,一个未启用,DF代表是否允许分段,MF代表是否还有后续分段;协议表示使用的上层协议。
2.IP分配与子网划分
本节将对子网划分、可变长子网掩码VLSM和无类别域间路由CIDR进行介绍。
(1)子网划分
在原先的A、B、C三类地址划分中,经常出现B类太大、C类太小;或者是C类都太大的应用场景,因此就出现了“子网联网”和“可变成子网掩码(VLSM)”两种技术。
子网联网的主要思想就是将IP地址划分成三个部分:网络号、子网号、主机号。也就是说,将原先的IP地址的主机号部分分成子网号和主机号两部分。说到底,也就是利用主机号部分继续划分子网。子网可以用“子网掩码”来识别。例如,我们可以将一个C类地址进行子网划分,如图10-4所示。
图10-4 子网联网示意图
将最后8位(原来的主机号),拿出两位用来表示子网,则可以产生两个子网(01和10,由于00代表网络,11代表广播,不能用来表示具体的网络),每个子网可包含62个主机(000001~111110,同样的,000000代表网络,111111代表广播被保留)。值得一提的是,这个时候,子网掩码就发生了变化,不是255.255.255.0(11111111 11111111 11111111 00000000),而是255.255.255.192(11111111 11111111 11111111 11000000)。
在从C类地址中划分子网的时候,可以参照表10-1来进行。
表10-1 子网划分
(2)VLSM
VLSM是一种产生不同大小子网的网络分配机制。VLSM用直观的方法在IP地址后面加上“/网络及子网编码比特数”来表示。例如192.168.123.0/26就表示前26位表示网络号和子网号,即子网掩码为26位长,主机号6位长。利用VLSM技术,我们可以多次划分子网,即分完子网后,继续根据需要划分子网。
例如,某单位有4个部门,需建立4个子网,其中部门1有50台主机,部门2有25台主机,部门3、4则只有10台主机,有一内部C类地址:192.168.1.0。下面看采用VLSM划分的过程。
首先,找到最大的网络部门1,需要50台主机。25 <50<26 ,因此需要6位主机号,剩下的26位则是网络号、子网号。而最后一个8位段还剩下2位,可以表示00、01、10、11四个子网,但00和11有特殊应用,因此只有01、10两个子网。因此得到192.168.1.64/26和192.168.1.128/26两个子网。
假设将192.168.1.64/26分给部门1,则现在就需要处理部门2、3、4。这三个部门中部门2的网络最大,需要25台主机。24 <25<25 ,因此需要5位主机号,因此可以分成192.168.1.128/27和192.168.1.160/27两个子网。
然后,按这个思路划分下去,可以得到如表10-2所示的结果。
表10-2 结果表
注:网络范围中的前者是网络地址,后者是广播地址。
(3)CIDR
CIDR(无类域间路由)是为了应对VLSM而产生的,它是一种路由技术,也就是说,如果你使用了VLSM技术进行子网划分,那么在互联时使用的路由器就必须能够支持CIDR。因为如果区分各种类别的子网,那么就会使得路由表激增,而CIDR则采用了一种“最大匹配”的原则,可以有效地解决这个问题。
路由汇聚的含义是把一组路由汇聚为一个单个的路由广播。路由汇聚的最终结果和最明显的好处是缩小网络上的路由表的尺寸,这样将减少与每一个路由跳有关的延迟。由于减少了路由登录项数量,查询路由表的平均时间将加快。由于路由登录项广播的数量减少,路由协议的开销也将显著减少。随着整个网络(以及子网的数量)的扩大,路由汇聚将变得更加重要。
下面通过一个例子来讲解路由汇聚算法的实现。
假设有4个路由172.18.129.0/24、172.18.130.0/24、172.18.132.0/24、172.18.133.0/24,如果这4个路由进行路由汇聚,则能覆盖这4个路由的是172.18.128.0/21。具体算法如下。
129的二进制代码是10000001,130的二进制代码是10000010,132的二进制代码是10000100,133的二进制代码是10000101。这4个数的前5位相同,都是10000。所以加上前面的172.18这两部分相同的位数,网络号就是8+8+5=21(最大匹配原则)。而10000000的十进制数是128。所以,路由汇聚的IP地址就是172.18.128.0,最终答案就是172.18.128.0/21。
3.ARP和RARP
ARP协议主要负责将局域网中的32位IP地址转换为对应的48位物理地址,即网卡的MAC地址,比如IP地址为192.168.0.1,网卡的MAC地址为00-03-0F-FD-1D-2B。整个转换过程是一台主机先向目标主机发送包含IP地址信息的广播数据报,即ARP请求,然后目标主机向该主机发送一个含有IP地址和MAC地址的数据报,通过MAC地址,两个主机就可以实现数据传输了。
在安装了以太网网络适配器的计算机中都有专门的ARP缓存,包含一个或多个表,用于保存IP地址以及经过解析的MAC地址。在Windows中要查看或者修改ARP缓存中的信息,可以使用arp命令来完成,比如在WindowsXP的命令提示符窗口中,键入“arp–a”或“arp–g”可以查看ARP缓存中的内容;键入“arp-dIPaddress”表示删除指定的IP地址项(IPaddress表示IP地址)。arp命令的其他用法可以键入“arp/”进行查看。
RARP(反向地址转换协议)允许局域网的物理机器从网关服务器的ARP表或者缓存上请求其IP地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的IP地址。
4.ICMP
ICMP协议是TCP/IP协议集中的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。通过Ping命令可以发送ICMP回应请求消息,并记录收到ICMP回应回复消息,通过这些消息来对网络或主机的故障诊断提供参考依据。
ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。比如,可以利用操作系统规定的ICMP数据包最大不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death”攻击的原理是:如果ICMP数据包的大小超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。禁用ICMP所提供的相应端口,可以限制外来主机的Ping入。
ICMP发送的消息类型主要有如下几种。
(1)未达目的地信息
相应于网关的路由表,如果在目的域中指定的网络不可达,如网络距离为无限远,网关会向发送源数据的主机发送目的不可达消息。而且,在一些网络中,网关有能力决定目的主机是否可达。如果目的地不可达,它将向发送源数据的主机发送不可达信息。
在目的主机,如果IP模块因为指定的协议模块和进程端口不可用而不能提交数据报,目的主机将向发送源数据的主机发送不可达信息。
另外一种情况是当数据报必须被分段传送,而“不可分段”位打开时,在这种情况下,网关必须抛弃此数据报,并向发送源数据的主机发送不可达信息。
(2)超时信息
如果网关在处理数据报时发现生存周期域为零,此数据报必须抛弃,网关同时必须通过超时信息通知源主机。如果主机在组装分段的数据报时因为丢失段未能在规定时间内组装数据,此数据报必须抛弃,网关发送超时信息;如果段零不可用,则不用发送超时信息。
(3)参数问题消息
如果网关或主机在处理数据报时发现报头参数有错误以至不能完成工作,它必须抛弃此数据报。一个潜在的原因可能是变量的错误。网关或主机将通过参数问题消息通知源主机,此消息只有在消息被抛弃时才被发送。指针指向发现错误的报头字节。
(4)源拥塞(抑制)消息
如果没有缓冲容纳,网关会抛弃数据报,如果网关这样做了,它会发送源拥塞消息给发送主机。如果接收的数据报太多无法处理,目的主机也会发送相应的消息给发送主机。此消息要求发送方降低发送速率,网关会给每个抛弃的消息返回源拥塞消息,在接收到此消息后,发送主机应该降低发送速率,直到不再接收到网关发送的源拥塞消息为止。在此之后,源主机可以再提高发送速率,直到接收到目的主机的源拥塞消息为止。网关或主机不会等到已经超过限度后再发送此消息,而是接近自己的处理极限时就发送此消息,这意味着,引发源拥塞消息的数据报仍然可以处理。
(5)重定向消息
网关在下面情况下发送重定向消息。网关(G1)从网关相连的网络上接收到数据报,它检查路由表获得下一个网关(G2)的地址(X)。如果G2和指定的接收主机在同一网络上,重定向消息发出,此消息建议发送主机直接将数据报发向网关G2,因为这更近,同时网关G1向前继续发送此数据报。
因为在数据报中的IP源路由和目的地址域是可选的,所以即使有更好的路由有时也无法发现。
(6)回送或回送响应消息
回送消息中接收到的消息应该在回送响应消息中返回。标识符和序列码由回送发送者使用帮助匹配回送请求的响应。
(7)时间戳和时间戳响应消息
接收到的时间戳附加在响应中返回,时间是以百万分之一秒为单位计算的,并以标准时午夜开始计时。原时间戳是发送方发送前的时间。接收时间戳是回送者接收到的时间,传送时间是回送者发送的时间。
如果时间以百万分之一秒计算无效,或者不能以标准时提供,可以在时间戳的高字节填充数据以表示这不是标准数据。标识符和序列码由发送者匹配请求的响应。
(8)信息请求或信息响应消息
此消息可以在IP报头中以源网络地址发送,但同时目的地址域为0(这表示此网络内)。响应IP模块应该发送完全指定地址的响应。发送此消息是主机寻找到自己所在网络号码的一种方法。标识符和序列码由发送者匹配请求的响应。
5.TCP/UDP协议
TCP/UDP是传输层协议,TCP提供面向连接的可靠数据传输服务,而UDP是无连接服务协议。本节将对UDP和TCP协议做具体介绍。
(1)UDP协议
UDP即用户数据报协议,是一个无连接服务的协议。它提供多路复用和差错检测功能,但不保证数据的正确传送和重复出现。UDP报头包括16位的源和目的端口号,16位的以字节为单位的长度总和(数据和报头的和)标识字段,16位的数据和报头校验和字段。
基于UDP的应用层协议有SNMP、DNS、TFTP、DHCP、RPC等。
(2)TCP协议
1)TCP协议的特点
TCP是传输层的协议,它提供面向连接的可靠数据传输服务。它提供可靠服务的手段和数据链路层、网络层中面向连接服务在原则上是相同的,即给报文编号,收方回送应答,超时重发。但由于连接两端运输层实体的网络比较复杂,且有可能是多个不同网络互连而成,这就使TCP又有自己的特点,如下所述。
·发送窗口、接收窗口尺寸可动态调整。在TCP中,可发送的未应答信息长度是可以调整的。根据收方和网络负载情况,可动态调整窗口大小。例如,当出现网络拥塞时,TCP会自动按照将窗口尺寸减小一半的方法来逐步减小发送流量。
·超时重发间隔。TCP超时间隔的计算较复杂,要使用很多参数,动态进行计算。当发生网络拥塞时,TCP按照逐步加倍超时间隔的方法来适应网络状态。
·编号与确认。TCP把所传送信息看成是一个连续的字节流。一个TCP报文所传送的信息段在该字节流中的位置就是该报文段的编号,收方可据此对报文段进行应答。
TCP中无否认应答NAK,其差错控制由ACK和超时重发完成。但收到错序的报文时应如何处理,TCP未做明确规定,而是让TCP实现者自行决定。因为按字节流编号方便了缓冲区管理,所以通常采用选择ARQ方式。
·按字节流编号方便了收方缓冲区管理。如果收方收到错序报文,可以方便地嵌入接收缓存区中的适当位置。当所缺报文到达时,可以将接收缓冲区中的数据连续地拼接在一起,并提交给上层。这样可以避免对缓冲区进行搜索,避免出现内存碎片,提高了内存利用率和处理速度。
·因为是字节流,TCP只完成字节流的透明传输,不需对字节流进行解释,也无需进行分段和重装。
2)TCP报文的格式
TCP报文的格式如图10-5所示。与IP数据报格式一样,TCP报文的长度是以4Byte为单位的。TCP报文分为首部和数据两个部分。首部的前20字节是固定的,后面的选项是可变长度的。首部固定部分各字段意义如下。
图10-5 TCP报文的格式
·源端口和目的端口:各16bit。可表示64000个不同端口。端口是运输层向上层提供服务的接口,也就是运输服务访问点(TSAP)。不同的端口对应不同的应用层程序。对于一些常用的应用层服务,都有一个对应的端口号码,这种端口号码称为熟知端口(Well-known Port),数值为0~255。例如,FTP使用21号端口,SMTP使用25号端口,SNMP使用161号端口,Telnet使用23号端口,端口和IP地址结合在一起,称为插口或套接字(Socket)。
·发送序号:32bit,可在4GB的数据流中定位。TCP报文不是按报文个数来编号的,而是按它所传数据的第一个字节在数据流中的位置来编号的。
·接收序号:32bit。表示期望收到的下一段数据的第一字节序号。
·数据偏移:表示数据从什么位置开始,也就是首部长度,4bit,可表达的长度范围是0~15,单位是4Byte。首部长度最大可达60Byte。
·URG(Urgent):紧急比特。当收到URG=1的报文时,通知上层应用程序,目前数据流中有紧急数据,应用程序不要按原来的排队顺序接收数据。而要先接收紧急数据。例如,发送方刚刚发送了很长的数据给对方,又有紧急的控制信息要发给对方,就可以用URG=1的方式。这时收方应用程序停止正常的数据接收,待取走控制信息后,再恢复正常数据接收。URG比特要和“紧急指针”配合使用。
·ACK:确认比特。ACK=1时“确认序号”才有意义,ACK=0时“确认序号”无意义。
·PSH(Push):急迫推进比特。PSH=1时应立即将报文发送出去,而不要在缓冲区停留。在上层应用程序和TCP程序之间,有一个缓冲区。上层程序通过向这个缓冲区存入或取出数据,便可使用TCP提供的数据流传送服务。在传送数据时,应用程序使用适合的数据段长度。这样的长度可能小到一个字节。TCP为了提高传送效率,要收集足够的数据,填入一个适当大小的TCP报文中,再通过网络发送出去。为了把数据立即传送给对方,便要使用PSH=1的方式,在发送方,TCP立即将发送缓冲区中数据全都发送出去,不用等到收集到足够的数据;在接收方,上层应用程序立即把数据取走。
·RST(Reset):重建比特。RST=1时表明出现严重差错,必须释放连接,然后重建传输层连接。
·SYN:同步比特。当SYN=1、ACK=0时,表明请求建立连接;当SYN=1、ACK=1时,表明同意建立连接。
·FIN(Final):终止比特。FIN=1时释放连接。
·窗口:16bit,告诉对方在“确认序号”后能够发送的数据量。用于流量控制。当该值为零时,对方要暂时停止发送。
·检验和:16bit,检验的范围包括首部和数据。
·紧急指针:16bit,指出紧急数据的最后一个字节相对于“序号”字段给出位置的偏移。当紧急数据传送结束后,恢复正常的数据传送。紧急数据的开始位置,由第一个紧急报文的“序号”字段给出。
·选项:长度可变,用来说明常规TCP没有的附加特性。常用的选项有“最大报文长度”。利用选项,可增加移动网络需要的特性。
6.NAT
解决IP地址缺乏的另一个尝试是网络地址转换(Network Address Translation,NAT),它是一个IETF标准,允许一个机构以一个地址出现在Internet上。NAT将每个局域网节点的地址转换成一个IP地址,反之亦然。它也可以应用到防火墙技术里,把个别IP地址隐藏起来不被外界发现,使外界无法直接访问内部网络设备。同时,它还帮助网络可以超越地址的限制,合理地安排网络中的公有Internet地址和私有IP地址的使用。
(1)NAT原理
NAT技术能帮助解决IP地址紧缺的问题,而且能使得内外网络隔离,提供一定的网络安全保障。具体方法是:在内部网络中使用内部地址,通过NAT把内部地址翻译成合法的IP地址在Internet上使用,其做法是把IP包内的地址域用合法的IP地址替换。NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。NAT设备维护一个状态表,用来把非法的IP地址映射到合法的IP地址上去,每个包在NAT设备中都被翻译成正确的IP地址,发往下一级,这意味着给处理器带来了一定的负担,但对于一般的网络来说,这种负担是微不足道的。
(2)NAT类型
NAT有静态NAT(Static NAT)、动态NAT(Pooled NAT)和网络地址端口转换(Port-Level NAT,NAPT)3种类型。其中,静态NAT是设置最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。而动态NAT则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上。
根据不同的需要,3种NAT方案各有利弊。动态NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程连接也可以采用动态NAT,当远程用户连接上之后,动态NAT就会分配给它一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。
网络地址端口转换(Network Address Port Translation,NAPT)是常用的一种转换方式。NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。
在Internet中使用NAPT时,所有不同的TCP和UDP信息流看起来好像来源于同一个IP地址。优点是在小型办公室内非常实用,通过从ISP处申请的一个IP地址,将多个连接通过NAPT接入Internet。
(3)NAT的缺陷
在使用NAT时,Internet上的主机从表面上看起来直接与NAT设备通信,而非与专用网络中实际的主机通信。输入的数据包被发送到NAT设备的IP地址上,并且NAT设备将目的报头地址由自己的Internet地址变为真正的目的主机的专用网络地址。而结果是,理论上,一个全球唯一 IP地址后面可以连接几百台、几千台乃至几百万台拥有专用地址的主机。但是,这实际上存在着缺陷。例如,许多Internet协议和应用依赖于真正的端到端网络,在这种网络上,数据包完全不加修改地从源地址发送到目的地址。例如,IP安全架构不能跨NAT设备使用,因为包含原始IP源地址的原始报头采用了数字签名。如果改变源地址,数字签名将不再有效。NAT还提出了管理上的挑战。尽管NAT对于一个缺少足够的全球唯一 Internet地址的组织、分支机构或者部门来说是一种不错的解决方案,但是当重组、合并或收购需要对两个或更多的专用网络进行整合时,它就变成了严重的问题。甚至在组织结构稳定的情况下,NAT系统不能多层嵌套,从而造成路由瘫痪。
当改变网络的IP地址时,都要仔细考虑这样做会给网络中已有的安全机制带来什么样的影响。例如,防火墙根据IP报头中包含的TCP端口号、信宿地址、信源地址以及其他一些信息来决定是否让该数据包通过。可以依NAT设备所处位置来改变防火墙过滤规则,这是因为NAT改变了信源或信宿地址。如果一个NAT设备,如一台内部路由器,被置于受防火墙保护的一侧,将不得不改变负责控制NAT设备身后网络流量的所有安全规则。在许多网络中,NAT机制都是在防火墙上实现的。它的目的是使防火墙能够提供对网络访问与地址转换的双重控制功能。除非可以严格地限定哪一种网络连接可以被进行NAT转换,否则不要将NAT设备置于防火墙之外。只要用户能够使NAT误以为他的连接请求是被允许的,都可以以一个授权用户的身份对网络进行访问。如果企业正在迈向网络技术的前沿,并正在使用IP安全协议(IPSec)来构造一个虚拟专用网(VPN)时,错误地放置NAT设备是不允许的。原则上,NAT设备应该被置于VPN受保护的一侧,因为NAT需要改动IP报头中的地址域,而在IPSec报头中该域是无法被改变的,这便可以准确地获知原始报文发自哪一台工作站。如果IP地址被改变了,那么IPSec的安全机制也就失效了,因为既然信源地址都可以被改动,那么报文内容也可以被改动。
7.IPv6
虽然CIDR和NAT可能赢得了许多年的时间,但是当前的IP版本(IPv4)已经不能再承受如此重的负荷了。除了技术问题以外,还有一个隐藏在背后的问题。在Internet早期,它主要被用于大学、高科技工业和美国政府,特别是美国国防部。20世纪90年代中期开始,人们对于Internet的兴趣不断膨胀,Internet开始为各种各样的人所使用,尤其是有着不同需求的人们。首先,大最携带无线移动计算设备的人通过Internet与他们的家庭或者企业保持联系。其次,随着计算机工业、通信业和娱乐业的不断交融,有可能在不久的将来,世界上的每一部电话和电视都将变成Internet节点,从而几十亿台机器将会使用音频和视频点播。在这样的形势下,很显然,IP必须也要进一步发展,并且要变得更加灵活。
(1)IPv6的优点
IPv6保持了IP的优良特性,丢弃或者削弱了IP中的缺点,并且在必要的地方增加了新的特性。主要有以下几个方面的优点。
·IPv6有比IPv4更长的地址。IPv6的地址有16字节长,这解决了IPv6一开始就想要解决的问题:使用一个能有效地提供几乎无限Internet地址的空间。
·IPv6对头部进行了简化。它只包含7个域(IPv4有13个域)。这一变化使得路由器可以更快地处理分组,从而提高了路由器的吞吐量,并缩短了延迟。
·更好地支持选项。这一变化对于新的头部来说是本质的变化,因为以前那些必需的域现在变成了可选的,而且选项的表达方式也有所不同,这使得路由器可以非常简单地跳过那些与它无关的选项。此特性也加快了分组的处理速度。
·在安全性方面的改进。在新的IP中,认证和隐私是关键的特征。然而,后来这些特征也被引入到IPv4中,因此IPv6和IPv4在安全性方面的差异已经没有那么大了。
·保证服务质量能力的提升。随着Internet多媒体的增长,服务质量的需求也更加紧迫了。IPv6对服务质量的控制能力大大提升。
图10-6 IPv6头部结构
(2)IPv6的头部
IPv6的头部如图10-6所示。
·对于IPv6,Version(版本)域总是6(对于IPv4该域总是4)。在从IPv4到IPv6的迁移过程中,路由器通过检査该域来确定分组的类型。
·Traffic class(流量类别)域的用途是按照各种不同的实时递交需求将分组区分开。
·通过Flow label(流标签)域,源端和目标端可以建立一个具有特殊属性和需求的虚连接。例如,从某台特定主机上的一个进程到另一台主机上的一个进程之间的分组流可能有严格的延迟要求,因此需要预留带宽。这时可以提前建立一个流(flow),并分配一个标识符。当一个Flow Label域非0分组出现的时候,所有的路由器都在自己的内部表中查找该Flow Label值,看它要求哪一种特殊的待遇。实际上,这样的流是两种传输模型相结合的一种尝试,拥有数据报子网的灵活性和虚电路子网的质量保证。
·Payload length(净荷长度)域指明了紧跟在图10-6所示的40字节头之后还有多少字节数。在IPv4中该域的名字为Total length(总长度),之所以改成现在的名字是因为其含义略有不同:40字节的头部不再像以前那样作为长度中的一部分。
·Next header(下一个头)域显示了IPv6的关键之处。IPv6头部之所以能够得以简化的原因是,它还可以有附加(可选)的扩展头。该域指明了如果当前头之后还有扩展头,该扩展头是哪种扩展头(当前已经定义了6种扩展头)。如果当前的头是最后一个IP头,那么Next header域指定了该分组将被传递给哪一个传输协议处理(如TCP,UDP)。
·Hop limit(跳数限制)域被用来避免分组永远留在网络中。在实践中,它与IPv4中的生存期(Time To Live,TTL)域是一样的,也就是说,在每一跳上该域中的值都要被递减。IPv4中的TTL域理论上是一个以秒为单位的时间值,但是所有的路由器都不按照时间值来使用该域,所以在IPv6中将其名字改过来,以便反映出它的实际用法。
接下来是源地址和目标地址域。这是固定长度的16字节地址。为了书写16字节的地址,IETF也设计了一种新的标记法。16个字节被分成8组来书写,每一组4个十六进制数字,组之间用冒号隔开。
(3)从IPv4到IPv6的演进策略
目前Internet上成千上万的主机、路由器等网络设备都运行着IPv4。这就决定了IPv4的网络向IPv6演进将是一个浩大而且繁杂的工程,IPv4和IPv6网络将在很长时间内共存,如何从IPv4平滑地过渡到IPv6是一个非常复杂的问题。
IETF专门有一个小组V6ops从事描述演进方案并且确定在演进中使用的具体工具的工作。V6ops工作组主要工作是制订在IPv4/IPv6共享网络上的操作指导规范,并提供关于如何把IPv6应用到现有IPv4网络和新的网络设备上的指导方针。在IPv6的发展道路上,与已有的IPv4网互通是不可回避的问题。
IPv6与IPv4互通包括3个层面:与IPv4终端或服务器互通,与IPv4网互通以及通过骨干IPv4网与对端IPv6网连接。针对不同的互通需求,已经有不同的技术标准出现。与IPv4终端或服务器互通可以采用双协议栈技术来实现,对于需要跨越IPv4设备的IPv6网络之间的互连可以采用隧道技术。单一的IPv6网络需要访问IPv4互联网,可以采用协议转换技术NAT/PT(地址翻译与报头转换技术)。在设备中支持这些互通标准,是对设备商的基本要求。
1)双协议栈
双协议栈方式是过渡阶段的一种主要的方式。双协议栈方式是指主机同时运行IPv4和IPv6两套协议栈,同时支持两个版本的网络层IP协议标准。主机和路由器都可以通过双栈方式来获得和IPv4及IPv6节点的通信能力。
双栈工作方式描述如下。
·如果应用程序使用的目的地址是IPv4地址,则使用IPv4协议栈。
·如果应用程序使用的目的地址是嵌入IPv4地址的IPv6地址,IPv6就封装到IPv4中。
·如果目的地址是IPv6地址,则使用IPv6地址,或者封装在默认配置的隧道中。
2)隧道技术
隧道技术在过渡阶段是IPv6单独子网间通信的基本手段。这种机制在IPv4网络“海洋”之上连接孤立的IPv6节点“孤岛”。隧道技术将IPv6的分组封装到IPv4的分组中,封装后的IPv4分组将通过IPv4的路由体系传输,分组报头的“协议”域设置为41,表示这个分组的负载是一个IPv6的分组,以便在适当的地方恢复出被封装的IPv6分组并传送给目的站点。在IPv6变为主导后,此技术可以反过来作为IPv4“孤岛”的连接方式。
3)地址翻译与报头转换技术(NAT/PT)
隧道技术一般用于IPv6节点间的通信,对于IPv4和IPv6节点间的通信,采用直接对IPv4和IPv6报文进行语法和语义翻译的NAT/PT技术。在IPv6网络和IPv4网络之间设置NAT/PT网关,当IPv6子网中有IPv6分组发给网关时,网关将其转化成IPv4分组发向IPv4子网;反过来,当IPv4子网中有数据分组要发送给IPv6网络时,网关就将其转化成IPv6分组发向IPv6子网。NAT/PT网关要维护一个IPv4和IPv6地址的映像表。
IPv6的最终实现还需要很长时间。但是由于各种推动因素的加剧,IPv6网络的大规模实施已经为期不远。网络过渡时期中IPv4和IPv6技术将保持长时间共存,并最终过渡到IPv6。