2005年04月24日

当前,基于Internet的各种应用正在如火如荼地迅猛发展着,而与此热闹场面截然不同的是,Internet当前使用的 IP协议版本IPv4正因为各种自身的缺陷而举步维艰。在 IPv4面临的一系列问题中,IP地址即将耗尽无疑是最为严重的,有预测表明,以目前Internet发展速度计算,所有IPv4地址将在2005~2010年间分配完毕。为了彻底解决IPv4存在的问题,IETF从1995年开始,着手研究开发下一代IP协议,即IPv6。IPv6具有长达128位的地址空间,可以彻底解决IPv4地址不足的问题,除此之外,IPv6还采用分级地址模式、高效IP包头、服务质量、主机地址自动配置、认证和加密等许多技术。

   Ipv4尴尬的现状

  Internet起源于1968年开始研究的ARPANET,当时的研究者们为了给ARPANET建 立一个标准的网络通信协议而开发了IP协议。IP协议 开发者当时认为ARPANET的网络个数不会超过数十个,因 此他们将IP协议的地址长度设定为32个二进制数位, 其中前8位标识网络,其余24位标识主机。然而随着 ARPANET日益膨胀,IP协议开发者认识到原先设想的网络个 数已经无法满足实际需求,于是他们将32位IP地址分 成了三类:A类,用于大型企业;B类,用于中型企 业;C类,用于小型企业。A类、B类、C类地址可以标 识的网络个数分别是128、16384、2097152,每个网络可容纳的主 机个数分别是16777216、65536、256。虽然对IP地址进行分类大大增 加了网络个数,但新的问题又出现了。由于一个 C类网络仅能容纳256个主机,而个人计算机的普及使 得许多企业网络中的主机个数都超出了256,因此, 尽管这些企业的上网主机可能远远没有达到B类地 址的最大主机容量65536,但InterNIC不得不为它们分配B类地址 。这种情况的大量存在,一方面造成了IP地址资源 的极大浪费,另一方面导致B类地址面临着即将被 分配殆尽的危险。

  非传统网络区域路由(Classless InterDomain Routing, CIDR),是节省B类地址的一个紧急措施。CIDR的原理是为那些拥有数千个网络主机的企业分配一个由一系列连续的C类地址组成的地址块,而非一个B类地址。例如,假设某个企业网络有1500个主机,那么可能为该企业分配8个连续的C类地址,如:192.56.0.0至192.56.7.0,并将子网掩码定为255.255.248.0,即地址的前 21位标识网络,剩余的11位标识主机。尽管通过采用 CIDR,可以保护B类地址免遭无谓的消耗,但是依然无法从根本上解决IPv4面临的地址耗尽问题。

  另一个延缓IPv4地址耗尽的方法是网络地址翻译(Network Address Translation, NAT),它是一种将无法在Internet上使用的保留IP地址翻译成可以在Internet上使用的合法IP地址的机制。NAT使企业不必再为无法得到足够的合法IP地址而发愁了,它们只要为内部网络主机分配保留IP地址,然后在内部网络与 Internet交接点设置NAT和一个由少量合法IP地址组成的IP地址池,就可以解决大量内部主机访问Internet的需求了。由于目前要想得到一个A类或B类地址十分困难,因此许多企业纷纷采用了NAT。然而,NAT也有其无法克服的弊端。首先,NAT会使网络吞吐量降低,由此影响网络的性能。其次,NAT必须对所有去往和来自Internet的IP数据报进行地址转换,但是大多数NAT无法将转换后的地址信息传递给IP数据报负载,这个缺陷将导致某些必须将地址信息嵌在IP数据报负载中的高层应用如FTP和 WINS注册等的失败。  

  IPv6的对策

  IPv6采用了长度为128位的IP地址,彻底解决了IPv4地址不足的 难题。128位的地址空间,足以使一个大企业将其所 有的设备如计算机、打印机甚至寻呼机等联入Internet而 不必担心IP地址不足。

  IPv6的地址格式与IPv4不同。一个IPv6的IP地址由8个地址节组成,每节包含16个地址位,以4个十六进制数书写,节与节之间用冒号分隔,除了128位的地址空间,IPv6还为点对点通信设计了一种具有分级结构的地址,这种地址被称为可聚合全局单点广播地址(aggregatable global unicast address),其分级结构划分如图所示。开头3个地址位是地址类型前缀,用于区别其它地址类型。其后的13位TLA ID、32位 NLA ID、16位SLA ID和64位主机接口ID,分别用于标识分级结构中自顶向底排列的TLA(Top Level Aggregator,顶级聚合体)、NLA(Next Level Aggregator,下级聚合体)、SLA(Site Level Aggregator,位置级聚合体)和主机接口。TLA是与长途服务供应商和电话公司相互连接的公共网络接入点,它从国际Internet注册机构如IANA处获得地址。NLA通常是大型ISP,它从TLA处申请获得地址,并为SLA分配地址。SLA也可称为订户(subscriber),它可以是一个机构或一个小型 ISP。SLA负责为属于它的订户分配地址。SLA通常为其订户分配由连续地址组成的地址块,以便这些机构可以建立自己的地址分级结构以识别不同的子网。分级结构的最底级是网络主机。  

  Ipv6中的地址配置

  众所周知,手工配置主机IP地址是一件既费时又乏 味的事情,而管理分配给主机的静态IP地址更是一 项艰难的任务,尤其当主机IP地址需要经常改动的 时候。在IPv4中,动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)实现了主 机IP地址及其相关配置的自动设置。一个DHCP服务器拥 有一个IP地址池,主机从DHCP服务器租借IP地址并获得有 关的配置信息(如缺省网关、DNS服务器等),由此 达到自动设置主机IP地址的目的。IPv6继承了IPv4的这种自 动配置服务,并将其称为全状态自动配置(stateful autoconfiguration)。

  除了全状态自动配置,IPv6还采用了一种被称为无状态自动配置(stateless autoconfiguration)的自动配置服务。在无状态自动配置过程中,主机首先通过将它的网卡MAC地址附加在链接本地地址前缀1111111010之后,产生一个链接本地单点广播地址(IEEE已经将网卡MAC地址由48位改为了64位。如果主机采用的网卡的MAC地址依然是48位,那么IPv6网卡驱动程序会根据IEEE的一个公式将48位MAC地址转换为64位MAC地址)。接着主机向该地址发出一个被称为邻居探测(neighbor discovrey)的请求,以验证地址的唯一性。如果请求没有得到响应,则表明主机自我设置的链接本地单点广播地址是唯一的。否则,主机将使用一个随机产生的接口ID组成一个新的链接本地单点广播地址。然后,以该地址为源地址,主机向本地链接中所有路由器多点广播一个被称为路由器请求( router solicitation)的配置信息请求,路由器以一个包含一个可聚合全局单点广播地址前缀和其它相关配置信息的路由器公告响应该请求。主机用它从路由器得到的全局地址前缀加上自己的接口ID,自动配置全局地址,然后就可以与Internet中的其它主机通信了。

  使用无状态自动配置,无需手动干预就能够改变网络中所有主机的IP地址。例如,当企业更换了联入Internet的ISP时,将从新ISP处得到一个新的可聚合全局地址前缀。ISP把这个地址前缀从它的路由器上传送到企业路由器上。由于企业路由器将周期性地向本地链接中的所有主机多点广播路由器公告,因此企业网络中所有主机都将通过路由器公告收到新的地址前缀,此后,它们就会自动产生新的IP地址并覆盖旧的IP地址。  

  Ipv6中的安全协议

  安全问题始终是与Internet相关的一个重要话题。由于在 IP协议设计之初没有考虑安全性,因而在早期的Internet上 时常发生诸如企业或机构网络遭到攻击、机密数 据被窃取等不幸的事情。为了加强Internet的安全性,从 1995年开始,IETF着手研究制定了一套用于保护IP通信的IP安 全(IP Security,IPSec)协议。IPSec是IPv6的一个组成部分,也是IPv4的一个 可选扩展协议。

  IPSec提供了两种安全机制:认证和加密。认证机制使 IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭到改动。加密机制通过对数据进行编码来保证数据的机密性,以防数据在传输过程中被他人截获而失密。IPSec的认证包头(Authentication Header,AH)协议定义了认证的应用方法,封装安全负载(Encapsulating Security Payload,ESP)协议定义了加密和可选认证的应用方法。在实际进行IP通信时,可以根据安全需求同时使用这两种协议或选择使用其中的一种。AH和ESP都可以提供认证服务,不过,AH提供的认证服务要强于ESP。

  在一个特定的IP通信中使用AH或ESP时,协议将与一组安全信息和服务发生关联,称为安全关联(Security Association,SA)。 SA可以包含认证算法、加密算法、用于认证和加密的密钥。IPSec使用一种密钥分配和交换协议如Internet安全关联和密钥管理协议(Internet Security Association and Key Management Protocol,ISAKMP)来创建和维护SA。SA是一个单向的逻辑连接,也就是说,两个主机之间的认证通信将使用两个SA,分别用于通信的发送方和接收方。

  IPSec定义了两种类型的SA:传输模式SA和隧道模式SA。传输模式SA是在IP包头(以及任何可选的扩展包头)之后和任何高层协议(如TCP或UDP)包头之前插入AH或ESP包头,隧道模式SA是将整个原始的IP数据报放入一个新的IP数据报中。在采用隧道模式SA时,每一个IP数据报都有两个IP包头:外部IP包头和内部IP包头。外部IP包头指定将对IP数据报进行IPSec处理的目的地址,内部IP包头指定原始IP数据报最终的目的地址。传输模式SA只能用于两个主机之间的IP通信,而隧道模式SA既可以用于两个主机之间的IP通信,还可以用于两个安全网关之间或一个主机与一个安全网关之间的IP通信。安全网关可以是路由器、防火墙或VPN设备。

  做为IPv6的一个组成部分,IPSec是一个网络层协议。它只负责其下层的网络安全,并不负责其上层应用的安全,如Web、电子邮件和文件传输等。也就是说,验证一个Web会话,依然需要使用SSL协议。不过,TCP/IPv6协议簇中的协议可以从IPSec中受益,例如,用于IPv6的OSPF路由协议就去掉了用于IPv4的OSPF中的认证机制。Ipv4向Ipv6的过渡。  

  尽管IPv6比IPv4具有明显的先进性,但是IETF认识到,要想在短时间内将Internet和各个企业网络中的所有系统全部从 IPv4升级到IPv6是不可能的,换言之,IPv6与IPv4系统在Internet中长期共存是不可避免的现实。为此,做为IPv6研究工作的一个部分,IETF制定了推动IPv4向IPv6过渡的方案,其中包括三个机制:兼容IPv4的IPv6地址、双IP协议栈和基于IPv4隧道的IPv6。

  兼容IPv4的IPv6地址是一种特殊的IPv6单点广播地址,一个IPv6节点与一个IPv4节点可以使用这种地址在IPv4网络中通信。这种地址是由96个0位加上32位IPv4地址组成的,例如,假设某节点的IPv4地址是192.56.1.1,那么兼容IPv4的IPv6地址就是0:0:0:0:0:0:C038:101。

  双IP协议栈是在一个系统(如一个主机或一个路由器)中同时使用IPv4和IPv6两个协议栈。这类系统既拥有 IPv4地址,也拥有IPv6地址,因而可以收发IPv4和IPv6两种IP数据报。

  与双IP协议栈相比,基于IPv4隧道的IPv6是一种更为复杂的技术,它是将整个IPv6数据报封装在IPv4数据报中,由此实现在当前的IPv4网络(如Internet)中IPv6节点与IPv4节点之间的IP通信。基于IPv4隧道的IPv6实现过程分为三个步骤:封装、解封和隧道管理。封装,是指由隧道起始点创建一个IPv4包头,将IPv6数据报装入一个新的IPv4数据报中。解封,是指由隧道终结点移去IPv4包头,还原原始的IPv6数据报。隧道管理,是指由隧道起始点维护隧道的配置信息,如隧道支持的最大传输单元(MTU)的尺寸等。

  IPv4隧道有四种方案:路由器对路由器、主机对路由器、主机对主机、路由器对主机。如图所示的使用IPv4路由基础设施传递IPv6数据报的网络中,可以根据两个主机之间特定的通信选用相应的隧道方案。例如:当主机2向主机4发送一个IPv6数据报时,路由器 A将把该IPv6数据报封装在一个目的地址为路由器B的IPv4数据报中。当路由器B收到该IPv4数据报后,就将它解封,取出其中的IPv6数据报并将其发往主机4。在这个隧道中,隧道终结点(路由器B)不是数据报的最终目的地址(主机4)。当隧道起始点(路由器A)建立隧道时,必须确定隧道终结点并从配置信息中找到隧道终结点的地址,因此这种类型的隧道被称为配置隧道(configured tunneling)。当主机7向主机1发送一个IPv6数据报时,主机7在它与路由器A之间建立一个主机对路由器隧道。因为路由器A不是该数据报的最终目的地址,所以这种主机对路由器隧道也是配置隧道。

  当进行通信的两个主机都有兼容IPv4的IPv6地址时,数据发送方主机将建立一个主机对主机隧道。隧道起始点(数据发送方主机)确定数据接收方主机就是隧道终结点,并自动从其兼容IPv4的IPv6地址中抽取后 32个地址位以确定隧道终结点的IPv4地址,这种类型的隧道被称为自动隧道(automated tunneling)。例如,当图中的主机 5向主机7发送数据时,将使用从主机5到主机7的自动隧道。自动隧道也可以应用于路由器对主机的隧道方案,例如,当主机4向主机5发送数据时,主机 4 将使用从路由器B到主机5的自动隧道。

  双IP协议栈和基于IPv4的IPv6网络使IPv4网络能够以可控的速度向IPv6迁移。在开始向IPv6过渡之前,首先必须设置一个同时支持IPv4和IPv6的新的DNS服务器。在该DNS服务器中,IPv6主机名称与地址的映射可以使用新的AAAA资源记录类型来建立,IPv4主机名称与地址的映射仍然使用A资源记录类型来建立。  

  结 论

  IPv6是一个建立可靠的、可管理的、安全和高效的IP网络的长期解决方案。尽管IPv6的实际应用之日还需耐心等待,不过,了解和研究IPv6的重要特性以及它针对目前IP网络存在的问题而提供的解决方案,对于制定企业网络的长期发展计划,规划网络应用的未来发展方向,都是十分有益的。

选自《互联网周刊》

作为下一代互联网协议,IPv6所提供的巨大的地址空间以及所具有的诸多优势和功能,使其成为构筑下一代网络的重要基础,从提出至今获得了普遍关注和广泛认可,信息产业部科技发展计划中已经将IPv6列为重点攻关课题。具体分析,IPv6与IPv4相比,主要有如下一些特性。 

  第一,IPv6的地址长度。IPv6与IPv4相比,很明显的一个改善就是可以提供充足的地址空间,从而使亚洲等地区地址空间问题一下子可以得到解决。IPv6的128位地址长度形成的巨大的地址空间,在可预见的很长时期内,它能够为所有可以想象出的网络设备提供一个全球唯一的地址,而且据称IPv6的128位地址空间包含的地址数足够为地球上每一粒沙子提供一个独立的IP地址。同时IPv6还可以实现为主机接口提供不同类型的地址配置,其中包括主机的全球地址、全球单播地址、区域地址、链路本地地址、地区本地地址、广播地址、多播群地址、任播地址、移动地址、家乡地址、转交地址等。 

  第二,IPv6可以实现自动配置。IPv6的另一个基本特性是它支持无状态和有状态两种地址自动配置的方式。无状态地址自动配置方式是获得地址的关键。在这种方式下,需要配置地址的节点使用一种邻居发现机制获得一个局部连接地址。一旦得到这个地址之后,它使用另一种即插即用的机制,在没有任何人工干预的情况下,获得一个全球唯一的路由地址。有状态配置机制,如DHCP(动态主机配置协议),需要一个额外的服务器,因此也需要很多额外的操作和维护。 

  第三,服务质量(QoS)。从协议的角度看,IPv6的优点体现在能提供不同水平的服务。这主要由于IPv6报头中新增加了字段“业务级别”和“流标记”。有了它们,在传输过程中,中间的各节点就可以识别和分开处理任何IP地址流。尽管对这个流标记的准确应用还没有制订有关标准,但将来它会用于基于服务级别的新计费系统。在其它方面,IPv6也有助于改进服务质量。这主要表现在支持“时时在线”连接,防止服务中断以及提高网络性能方面。从另外角度来看,更好的网络和服务质量提高了客户的期望值和满意度,使我们和客户的关系更上一层楼。 

  第四,IPv6的移动性。基于移动IPv6协议集成的IP层移动功能具有很重要的优点。尽管IPv4中也存在一个类似的移动协议,但二者之间存在着本质的区别:移动IPv4协议不适用于数量庞大的移动终端。移动IP需要为每个设备提供一个全球唯一的IP地址。IPv4没有足够的地址空间可以为在公共互联网上运行的每个移动终端分配一个这样的地址。而移动IPv6能够通过简单的扩展,满足大规模移动用户的需求,这样就能在全球范围内解决有关网络和访问技术之间的移动性问题。 

  第五,内置的安全特性。IPv6协议内置安全机制并已经标准化。它支持对企业网的无缝远程访问。例如公司虚拟专用网络的连接。即使终端用户用“时时在线”接入企业网,这种安全机制也是可行的。这种“时时在线”的服务类型在IPv4技术中是无法实现的。对于从事移动性工作的人员来说,IPv6是IP级企业网存在的保证。 

  在安全性方面,IPv6同IP安全性(IPSec)机制和服务一致。除了必须提供网络层这一强制性机制外,IPSec还提供两种服务。认证报头(AH)用于保证数据的一致性,而封装的安全负载报头(ESP)用于保证数据的保密性和数据的一致性。在IPv6包中,AH和ESP都是扩展报头,可以同时使用,也可以单独使用其中一个。作为IPSec的一项重要应用,IPv6集成了虚拟专网(VPN)的功能。 

摘自《人民邮电报》

IPv6包结构

IPv6包由IPv6包头、扩展包头和上层协议数据单元三部分组成,见图1。

图1、IPv6包结构

·IPv6包头 

40字节固定长度,在本文的稍后部分将有详细论述。 

·扩展包头 

IPv6包头设计中对原IPv4包头所做的一项重要改进就是将所有可选字段移出IPv6包头,置于扩展头中。由于大多数IPv6扩展头不受中转路由器检查,因此改进后的IPv6包头可以提高路由器转发效率。 


IPv6扩展头可以没有,也可以有一个或多个。IPv6所做的另一个改进之处是:与IPv4选项不同,IPv6扩展头长度不固定,便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。 


·上层协议数据单元(PDU) 

PDU由传输头及其负载(如ICMPv6消息、或UDP消息等)组成。而IPv6包有效负载则包括IPv6扩展头和PDU,通常所能允许的最大字节数为65,535字节,大于该字节数的负载可通过使用扩展头中的Jumbo 
Payload选项进行发送。 

IPv6包头 
图2、IPv6包头格式 

IPv6包头长度固定为40字节,去掉了IPv4中一切可选项,只包括8个必要的字段,因此尽管IPv6地址长度为IPv4的四倍,IPv6包头长度仅为IPv4包头长度的两倍。 


Version(版本号):4位,IP协议版本号,值 = 6。 

Traffice Class(通信类别):8位,指示IPv6数据流通信类别或优先级。功能类似于IPv4的服务类型(TOS)字段。 

Flow 
Label(流标记):20位,IPv6新增字段,标记需要IPv6路由器特殊处理的数据流。该字段用于某些对连接的服务质量有特殊要求的通信,诸如音频或视频等实时数据传输。在IPv6中,同一信源和信宿之间可以有多种不同的数据流,彼此之间以非“0”流标记区分。如果不要求路由器做特殊处理,则该字段值置为“0”。 


Payload 
Length(负载长度):16位负载长度。负载长度包括扩展头和上层PDU,16位最多可表示65,535字节负载长度。超过这一字节数的负载,该字段值置为“0”,使用扩展头逐个跳段(Hop-by-Hop)选项中的巨量负载(Jumbo 
Payload)选项。 

Next 
Header(下一包头):8位,识别紧跟IPv6头后的包头类型,如扩展头(有的话)或某个传输层协议头(诸如TCP,UDP或着ICMPv6)。 


Hop 
Limit(跳段数限制):8位,类似于IPv4的TTL(生命期)字段。与IPv4用时间来限定包的生命期不同,IPv6用包在路由器之间的转发次数来限定包的生命期。包每经过一次转发,该字段减1,减到0时就把这个包丢弃。 


Source Address(源地址):128位,发送方主机地址。 

Destination 
Address(目的地址):128位,在大多数情况下,目的地址即信宿地址。但如果存在路由扩展头的话,目的地址可能是发送方路由表中下一个路由器接口。 


附:常用的Next Header 字段值表 

IPv6扩展包头 

IPv6将所有的可选项都移出IPv6包头,置于扩展头中。由于除Hop-by-Hop选项扩展头外,其他扩展头不受中转路由器检查或处理,这样就能提高路由器处理包含选项的IPv6分组的性能。 



通常,一个典型的IPv6包,没有扩展头。仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节限制,但是为了提高处理选项头和传输层协议的性能,扩展头总是8字节长度的整数倍。 



目前,RFC 
2460中定义了以下6个IPv6扩展头:Hop-by-Hop(逐个跳段)选项包头、目的地选项包头、路由包头、分段包头、认证包头和ESP协议包头。 



1)Hop-by-Hop选项包头 

包含分组传送过程中,每个路由器都必须检查和处理的特殊参数选项。 


Hop-by-Hop选项包头中的选项描述一个分组的某些特性或用于提供填充。这些选项有: 

·Pad1选项(选项类型为0),填充单字节。 

·PadN选项(选项类型为1),填充2个以上字节。 

·Jumbo Payload选项(选项类型为194),用于传送超大分组。使用Jumbo 
Payload选项,分组有效载荷长度最大可达4,294,967,295字节。负载长度超过65,535字节的IPv6包称为“超大包”。 

·路由器警告选项(选项类型为5),提醒路由器分组内容需要做特殊处理。路由器警告选项用于组播收听者发现和RSVP(资源预定)协议。 

2)目的地选项包头 

需要被中间目的地或最终目的地检查的信息。有两种用法: 

·如果存在路由扩展头,则每一个中转路由器都要处理这些选项。 

·如果没有路由扩展头,则只有最终目的节点需要处理这些选项。 

3)路由包头 

类似于IPv4的松散源路由。IPv6的源节点可以利用路由扩展包头指定一个松散源路由,即分组从信源到信宿需要经过的中转路由器列表。 

4)分段包头 

提供分段和重装服务。当分组大于链路最大传输单元(MTU)时,源节点负责对分组进行分段,并在分段扩展包头中提供重装信息。 

IPv6包的不可分段部分包括:IPv6包头、Hop-by-Hop选项包头、目的地选项包头(适用于中转路由器)和路由包头。IPv6包的可分段部分包括:认证包头、ESP协议包头、目的地选项包头(适用于最终目的地)和上层协议数据单元PDU。 


注:a、在IPv6中,只有源节点才能对负载进行分段。 b、IPv6超大包不能使用该项服务。 

5)认证包头 

提供数据源认证、数据完整性检查和反重播保护。认证包头不提供数据加密服务,需要加密服务的数据包,可以结合使用ESP协议。 

6)ESP协议包头 

提供加密服务。



摘自《eNet学院》

IP数据报的首部格式,如图:

         IP首部长为20字节,除非还有选项字段。目前互联网上大部分版本号还是4,但是教育网用户已经有很多版本已经是6了。

         我们先来看IPv4。先抓一个包,与上图对比起来分析:

         这次抓的是一个ipv4的icmp包,包结构很明了,一共是20字节:

先是4位版本号(version):4

再是4位首部长度(Header length):20 bytes

紧接着是8位服务类型(Differentiated Services Field):0×00,

继续就是16位的总长度(Total Length):92

16位标识(Identification):0xc957,

3位标志(Flags):0×00,

13位偏移(Fragment offset):0,

8位生存时间(Time to Live):125,

8位协议(Protocal):ICMP(0×01),

16位首部校验和(Header checksum):0×0f98,

最后就是32位源IP地址(Source)和32位目的地址(Destination)。

    对于服务类型(简写为:TOS):包括3位的优先权字段(现已被忽略),4bit的TOS字段和1bit未用位但必须置零。4bit的TOS分别代表,参见下图:

    

      这个显得很繁琐,是吧?看看上面的抓包,tos字段是什么,0×00!而且,不光是这个ICMP包,我抓的TCP,UDP,TELNET,DNS等等都是0×00!为什么呢?因为现在大多数TCP/IP实现都不支持TOS特性!简单多了吧!

2005年04月23日

以太网和IEEE802封装:

         以太网这个术语一般是指Digital Equipment Corp,Intel Corp和Xerox公司在1982年联合公布的一个标准。它采用了CSMA/CD的媒体介入方法。他的速率位10M/S,地址为48bit。

         几年后,IEEE802委员会公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。这三者的共同特性由802.2标准来定义,那就是802网络的共有的逻辑链路控制(LLC)。不幸的是,802.2和802.3定义了一个与以太网不同的帧格式。

          以太网数据报的封装实在RFC 894中定义的,IEEE802网络的IP数据报封装是在RFC 1042中定义的。主机RFC要求每台INTERNET主机都与一个10M/S的以太网电缆相连接:

  1. 必须能发送和接收采用RFC 894 封装格式的分组。
  2. 应该能接收与RFC 894 混合的RFC 1042 封装格式的分组。
  3. 也许能够发送采用RFC 1042 格式封装的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组也必须是可以设置的,而且默认条件下必须是RFC 894 分组。

           最常用的封装格式是RFC 1042 定义的格式。如图:

对比一下,RFC 894 的帧格式:

           上面两幅图,有点抽象,我给大家一个实际一点的,看看这个ethereal sniffe的截图:

先是RFC 1042的:

再看看RFC 894 的:

          对比一下实际抓包和理论的帧结构,全部是一一对应的,一目了然了吧?根据我抓包的经验,基本上使用TCP/IP协议的,都是使用 RFC 894 格式的!而使用 RFC 1042 的,好像都是其他的一些协议,比如这里的IPX,还有如Spanning Tree Protocal等。

         802标准定义的帧格式,LENGTH字段是它后续数据的字节长度,但不包括CRC检验嘛。以太网的TYPE字段定义了后续数据的类型。在802标准定义的帧格式中,类型字段则由后续的子网接入协议(Sub-network Access Protocal,SNAP)的首部给出。幸运的是,802定义的有效长度值与以太网的有效类型值无一相同,这样就可以以次区分!(比如:type:0×0800就是IP,type0×0806就是ARP;而对于RFC 1042 来说,LENGTH 一般其值为0×00??,所以他们也是蛮好区分的。当然,这是我常常见到的情况,不知道在其他的网络环境有没有非常大的包,使得length字段的高字节也有值。)

         802.3和以太网定义的帧都有最小长度要求。802.3规定数据部分至少为38字节,而以太网规定,最少有46字节,为了保证这一点,必须在不足的空间插入填充(pad)字节。参考下图:

         正如上图所示,这是一个RFC 1042 格式的帧(它使用了非TCP/IP协议栈的协议(STP),有LENGTH字段),他的长度为最小长度38字节,其实是在后面补上了8个字节的‘00’。

尾部封装:

     RFC 893 定义了另一种用于以太网的封装格式,称作尾部封装。不过,现在,尾部封装已经遭到反对。

SLIP:串行线路IP

     SLIP报文的封装,如图:

     正如图所示,IP数据报以一个称作END(0xc0)的特殊字符结束。同时,为了防止线路噪声,大多数实现在数据报的开始处也传一个END字符(如果有线路噪声,那么这个END将结束这份错误报文。这样当前的报文将得以正确的传输,而前一个错误报文由于毫无意义而被丢弃。)

     如果报文中,某个字符是END,那么就用0xdb,0xdc两个字符来替代,0xdb这个字符在SLIP称作ESC字符,但是它的值和ASCII码中的ESC(0×1B)不同。

     同样的,如果报文中有ESC字符,那么就要连续传输两个字节0xdb,0xdd来取代。

     SLIP是一种简单的封装方法,还有一些缺憾

  1. 每一端必须知道对方的IP地址。没有办法把本端的IP地址通知给另一端。
  2. 数据帧中没有类型数据字段,如果一条串行线路用于SLIP,那么他不能同时使用其它的协议。
  3. SLIP的数据帧中没有加上效验和,错误只能通过上层协议或者是调制解调器来发现并就纠正报文。

压缩的SLIP:

     由于交互式通信,传送一个字节,SLIP需要发送超过40个字节的数据,于是,人们提出了一个CSLIP(压缩的SLIP)。他一般能把上面的40字节压缩到3~5个字节。

PPP:点对点协议

     先看看帧的格式:

      每一帧都是以0×7e开始和结束的。紧接着是一个地址字节,值始终是0xff,然后是一个值为0×03的控制字节。接下来的协议字段,值为0×03表示的是一个IP数据报;值为0xc021表示信息字段是链路控制数据;值为0×8021表示网络控制数据;CRC字段是一个循环冗余检验码。

      转义:0×7e——〉0×7d,0×5e   0×7d——〉0×7d,0×5d  ascii小于0×20的,都需要在前面加上0×7d来转义。

      相比SLIP的优点

  1. 支持多种协议
  2. 每一帧都有CRC
  3. 通信双发可以进行IP地址的动态协商(借助IP网络控制协议)
  4. 与CSLIP类似,对TCP和IP报文的首部进行压缩
  5. 链路控制协议可以对多个数据链路选项进行设置。

      当然,这写有点的代价是,每一帧前面加了3个字节。

环回接口:

     看图:

最大传输单元:

    

 网络

MTU字节 

超通道   65535
 16Mb/S令牌环(IBM)  17914
 4Mb/S令牌环(IEEE802.5)  4464
 FDDI  4352
 以太网  1500
IEEE802.3/802.2  1492
 X.25  576
 点对点 296

路径MTU:

    两台通信主机路径中的最小MTU,他被称作路径MTU。

 网络

MTU字节 

超通道   65535
 16Mb/S令牌环(IBM)  17914
 4Mb/S令牌环(IEEE802.5)  4464
 FDDI  4352
 以太网  1500
IEEE802.3/802.2  1492
 X.25  576
 点对点 296

路径MTU:

    两台通信主机路径中的最小MTU,他被称作路径MTU。

2005年04月22日

TCP/IP协议族的四个层次:

          应用层〈————Telnet,FTP,email

          运输层〈————TCP,UDP

          网络层〈————IP,ICMP,IGMP

          链路层〈————硬件接口,ARPRARP

路由器连接的两个网络:

    从上图中,不难看出,路由器是工作在网络层的,它具有两个或者两个以上的网络接口层,它可以连接连个以上的不同网络(使用不同的协议)!

    当然,连接网络的也有另一个途径——网桥,它是工作在链路层的,它使得多个局域网组合在一起,这样对上层来说,好像一个局域网!

互联网的地址:

  • A类:0+7位网络号        24位主机号     0.0.0.0-127.255.255.255

  • B类:10+14网络号       16位主机号     128.0.0.0-191.255.255.255

  • C类:110+24位网络号 8位主机号      192.0.0.0-223.255.255.255

  • D类:1110+28位多播组号                    224.0.0.0-239.255.255.255

  • E类:11110+27位留待后用                  240.0.0.0-247.255.255.255

数据报的封装:

         TCP传给IP的数据单元称作TCP报文段,简称TCP段。IP传给网络接口层的数据单元称作IP数据报,通过以太网传输的比特流称作帧(FRAME)。

         以太网的物理特征是其长度必须在46~1500字节之间。

         TCP传给IP的数据单元称作TCP报文段,简称TCP段。IP传给网络接口层的数据单元称作IP数据报,通过以太网传输的比特流称作帧(FRAME)。

         以太网的物理特征是其长度必须在46~1500字节之间。

以太网数据帧的分用过程:

         上图中,把ICMP和IGMP放在IP层的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。当然,实际上他们是IP的附属协议。

          对于,ARP和RARP,我们也有类似的问题,在这里,我们把他们放到了以太网驱动程序的上方,这是因为他们和IP数据报一样,都有各自的以太网数据帧类型。而事实上,我们是把ARP作为以太网设备驱动程序的一部分,其原因是符合逻辑的。

        很早就看了tcp/ip的一些书籍,但是总不能深入,以至于常常遇到一些协议的问题还需要再次翻阅相关书籍,实在是令人不爽。

        最近,去见了一些志同道合的网友,突然发现,自己所谓的技术,实在是不值一提。因此有了重新学习的打算。当然,我的第一选择就是tcp/ip了。于是翻开了经典的《TCP/IP详解》,翻了几页,书的确是经典,不是我不支持国产,而是这些国外书籍,水平确实是技高一筹。当然,也不是没有问题,比如他的网络环境中,没有一台是windows的机器,这在先今的中国,实在是不多见的;再如,它的写作时间是98年,如今是2005年了,有些东西都过时了,像现在的ipv6就没有;又比如,他的例子也许有,但是那时毕竟没有如今的网络上丰富的资料,新手学习就有点困难了。正如这些原因,决定自己边学习,边组织一下自己的学习笔记和网络上的各种资料,以便方便自己的学习。当然,如果我能坚持下来,并很好的完成这份学习笔记,十分愿意把他送给自己的朋友共同进步。

        学习前,看一下自己的情况。系统:windows2000;学习工具:Ethereal;主要参考书籍:《TCP/IP详解》及网络上的各种资料;网络环境:吉大校园网。

        附上《TCP/IP详解》中的网络拓扑图:

        学习笔记中肯定会遇到许多问题,那些问题我将以红色标注,方便自己以后解决,当然也十分欢迎大家帮忙解决。