• 为了适应网络应用深化带来的挑战,网络在规模和速度方向都在急剧发展,局域网的速度已从最初的10Mbit/s 提高到100Mbit/s,目前千兆以太网技术已得到普遍应用。
      在网络结构方面也从早期的共享介质的局域网发展到目前的交换式局域网。交换式局域网技术使专用的带宽为用户所独享,极大的提高了局域网传输的效率。可以说,在网络系统集成的技术中,直接面向用户的第一层接口和第二层交换技术方面已得到令人满意的答案。但是,作为网络核心、起到网间互连作用的路由器技术却没有质的突破。在这种情况下,一种新的路由技术应运而生,这就是第三层交换技术:说它是路由器,因为它可操作在网络协议的第三层,是一种路由理解设备并可起到路由决定的作用;说它是交换器,是因为它的速度极快,几乎达到第二层交换的速度。二层交换机、三层交换机和路由器这三种技术究竟谁优谁劣,它们各自适用在什么环境?为了解答这问题,我们先从这三种技术的工作原理入手:
      1.二层交换技术
      二层交换机是数据链路层的设备,它能够读取数据包中的MAC地址信息并根据MAC地址来进行交换。
      交换机内部有一个地址表,这个地址表标明了MAC地址和交换机端口的对应关系。当交换机从某个端口收到一个数据包,它首先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上的,它再去读取包头中的目的MAC地址,并在地址表中查找相应的端口,如果表中有与这目的MAC地址对应的端口,则把数据包直接复制到这端口上,如果在表中找不到相应的端口则把数据包广播到所有端口上,当目的机器对源机器回应时,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。
      二层交换机就是这样建立和维护它自己的地址表。由于二层交换机一般具有很宽的交换总线带宽,所以可以同时为很多端口进行数据交换。如果二层交换机有N个端口,每个端口的带宽是M,而它的交换机总线带宽超过N×M,那么这交换机就可以实现线速交换。二层交换机对广播包是不做限制的,把广播包复制到所有端口上。
      二层交换机一般都含有专门用于处理数据包转发的ASIC (Application specific Integrated Circuit)芯片,因此转发速度可以做到非常快。

       2.路由技术
      路由器是在OSI七层网络模型中的第三层——网络层操作的。
      路由器内部有一个路由表,这表标明了如果要去某个地方,下一步应该往哪走。路由器从某个端口收到一个数据包,它首先把链路层的包头去掉(拆包),读取目的IP地址,然后查找路由表,若能确定下一步往哪送,则再加上链路层的包头(打包),把该数据包转发出去;如果不能确定下一步的地址,则向源地址返回一个信息,并把这个数据包丢掉。
      路由技术和二层交换看起来有点相似,其实路由和交换之间的主要区别就是交换发生在OSI参考模型的第二层(数据链路层),而路由发生在第三层。这一区别决定了路由和交换在传送数据的过程中需要使用不同的控制信息,所以两者实现各自功能的方式是不同的。
      路由技术其实是由两项最基本的活动组成,即决定最优路径和传输数据包。其中,数据包的传输相对较为简单和直接,而路由的确定则更加复杂一些。路由算法在路由表中写入各种不同的信息,路由器会根据数据包所要到达的目的地选择最佳路径把数据包发送到可以到达该目的地的下一台路由器处。当下一台路由器接收到该数据包时,也会查看其目标地址,并使用合适的路径继续传送给后面的路由器。依次类推,直到数据包到达最终目的地。
      路由器之间可以进行相互通讯,而且可以通过传送不同类型的信息维护各自的路由表。路由更新信息主是这样一种信息,一般是由部分或全部路由表组成。通过分析其它路由器发出的路由更新信息,路由器可以掌握整个网络的拓扑结构。链路状态广播是另外一种在路由器之间传递的信息,它可以把信息发送方的链路状态及进的通知给其它路由器。
      3.三层交换技术
      一个具有第三层交换功能的设备是一个带有第三层路由功能的第二层交换机,但它是二者的有机结合,并不是简单的把路由器设备的硬件及软件简单地叠加在局域网交换机上。
    从硬件上看,第二层交换机的接口模块都是通过高速背板/总线(速率可高达几十Gbit/s)交换数据的,在第三层交换机中,与路由器有关的第三层路由硬件模块也插接在高速背板/总线上,这种方式使得路由模块可以与需要路由的其他模块间高速的交换数据,从而突破了传统的外接路由器接口速率的限制。在软件方面,第三层交换机也有重大的举措,它将传统的基于软件的路由器软件进行了界定。
      其做法是:
      对于数据包的转发:如IP/IPX包的转发,这些规律的过程通过硬件得以高速实现。
      对于第三层路由软件:如路由信息的更新、路由表维护、路由计算、路由的确定等功能,用优化、高效的软件实现。
      假设两个使用IP协议的机器通过第三层交换机进行通信的过程,机器A在开始发送时,已知目的IP地址,但尚不知道在局域网上发送所需要的MAC地址。要采用地址解析(ARP)来确定目的MAC地址。机器A把自己的IP地址与目的IP地址比较,从其软件中配置的子网掩码提取出网络地址来确定目的机器是否与自己在同一子网内。若目的机器B与机器A在同一子网内,A广播一个ARP请求,B返回其MAC地址,A得到目的机器B的MAC地址后将这一地址缓存起来,并用此MAC地址封包转发数据,第二层交换模块查找MAC地址表确定将数据包发向目的端口。若两个机器不在同一子网内,如发送机器A要与目的机器C通信,发送机器A要向“缺省网关”发出ARP包,而“缺省网关”的IP地址已经在系统软件中设置。这个IP地址实际上对应第三层交换机的第三层交换模块。所以当发送机器A对“缺省网关”的IP地址广播出一个ARP请求时,若第三层交换模块在以往的通信过程中已得到目的机器C的MAC地址,则向发送机器A回复C的MAC地址;否则第三层交换模块根据路由信息向目的机器广播一个ARP请求,目的机器C得到此ARP请示后向第三层交换模块回复其MAC地址,第三层交换模块保存此地址并回复给发送机器A。以后,当再进行A与C之间数据包转发进,将用最终的目的机器的MAC地址封装,数据转发过程全部交给第二层交换处理,信息得以高速交换。既所谓的一次选路,多次交换。
      第三层交换具有以下突出特点:
      有机的硬件结合使得数据交换加速;
      优化的路由软件使 得路由过程效率提高;
    除了必要的路由决定过程外,大部分数据转发过程由第二层交换处理;
      多个子网互连时只是与第三层交换模块的逻辑连接,不象传统的外接路由器那样需增加端口,保护了用户的投资。
      4.三种技术的对比
      可以看出,二层交换机主要用在小型局域网中,机器数量在二、三十台以下,这样的网络环境下,广播包影响不大,二层交换机的快速交换功能、多个接入端口和低廉价格为小型网络用户提供了很完善的解决方案。在这种小型网络中根本没必要引入路由功能从而增加管理的难度和费用,所以没有必要使用路由器,当然也没有必要使用三层交换机。
      三层交换机是为IP设计的,接口类型简单,拥有很强二层包处理能力,所以适用于大型局域网,为了减小广播风暴的危害,必须把大型局域网按功能或地域等因素划他成一个一个的小局域网,也就是一个一个的小网段,这样必然导致不同网段这间存在大量的互访,单纯使用二层交换机没办法实现网间的互访而单纯使用路由器,则由于端口数量有限,路由速度较慢,而限制了网络的规模和访问速度,所以这种环境下,由二层交换技术和路由技术有机结合而成的三层交换机就最为适合。
      路由器端口类型多,支持的三层协议多,路由能力强,所以适合于在大型网络之间的互连,虽然不少三层交换机甚至二层交换机都有异质网络的互连端口,但一般大型网络的互连端口不多,互连设备的主要功能不在于在端口之间进行快速交换,而是要选择最佳路径,进行负载分担,链路备份和最重要的与其它网络进行路由信息交换,所有这些都是路由完成的功能。
      在这种情况下,自然不可能使用二层交换机,但是否使用三层交换机,则视具体情况而下。影响的因素主要有网络流量、响应速度要求和投资预算等。三层交换机的最重要目的是加快大型局域网内部的数据交换,揉合进去的路由功能也是为这目的服务的,所以它的路由功能没有同一档次的专业路由器强。在网络流量很大的情况下,如果三层交换机既做网内的交换,又做网间的路由,必然会大大加重了它的负担,影响响应速度。在网络流量很大,但又要求响应速度很高的情况下由三层交换机做网内的交换,由路由器专门负责网间的路由工作,这样可以充分发挥不同设备的优势,是一个很好的配合。当然,如果受到投资预算的限制,由三层交换机兼做网间互连,也是个不错的选择.
  • 存储器包括:

    随即存储器(RAM) - 用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由两个位置上的RAM组成,装在主板上的RAM和插在扩展插槽上的RAM(指内存条)。

    装有BIOS的ROM - BIOS是有主板和各类接口卡(网卡显卡等)厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。主板和接口卡上插有存储相应BIOS的ROM。主板上的ROM有主板的BIOS,显卡上的ROM有显卡的BIOS。网卡上如果有ROM,也会有网卡的BIOS。

    接口卡上的RAM - 用于对大批量输入输出数据进行缓存,如显存。显卡随时将显存中的数据显示在显示器上。

    内存是有以上所有类型存储器的总和,CPU需要和以上所有的存储器进行读写工作。存储器以byte为最小单位作为一个存储单元,把存储单元编号,即为内存地址。这些存储器都是通过总线和CPU相连,CPU通过控制总线对其发出读写命名。虽然各个存储器物理上是独立的器件,但是CPU操作时并不会区分哪个是哪个,而是都当作由若干存储单元组成的逻辑存储器对待,每个存储器在地址空间中占有一小段,然后根据地址到指定的地方读写数据而已。8086地址总线宽度为20,所以其寻址空间为2的20次方,即1M, 而80386地址总线宽度为32,则内存地址空间最大为4G。

    CPU的读写需要和外部器件进行三方面的信息交互:

    • 存储器单元的地址(地址信息)
    • 器件的选择,读或写的命令(控制信息)
    • 读或写的数据(数据信息)

    CPU通过总线与外部器件连接,相应的有地址总线,控制总线和数据总线。地址总线给出操作的地址,控制总线给出操作的类型读或写,数据总线读或写出具体的信息。

    一个CPU有N根地址线,则可以说地址总线宽度为N。寻址范围则为2的N次方。数据总线的宽度决定了CPU和外界数据传送的速度。 8根总线则一次可以传送一个byte, 16根总线则一次可以传送两个byte。8088CPU总线宽度为8,8086CPU总线宽度为16. 控制总线宽度反应了CPU的控制能力,其中一根称为读信号输出的控制线负责cpu向外传送读信号,cpu向该控制线上输出低电平表示要读取数据,另一根写信号输出控制线负责传送写信号。

    CPU不能对外部设备进行直接控制,而是通过外部接口卡来控制,如显卡控制显示器,声卡控制音箱等。

    汇编语言笔记-寄存器

    一个典型的CPU由运算器、控制器、寄存器构成。这些器件靠内部总线(地址总线、控制总线、数据总线都是外部总线)相连。运算器进行信息处理,寄存器进行信息存储,控制器控制各器件进行工作,内部总线在各器件间进行数据传总。

    不同的CPU,寄存器的个数不同,每个寄存器的容量也不同,8086CPU有14个寄存器,每个寄存器都是16位的,即可以存放2byte。其中AX(Accumulator累加寄存器, 可用于乘、 除、输入/输出等操作,使用频率很高)、BX(Base Register基址寄存器, 可作为存储器指针来使用)、CX(Count Register计数寄存器 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数)、DX(Data Register,在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址)用来存放一般性数据,叫通用寄存器,为了兼容8位寄存器,可以把16位寄存器分成2个8位寄存器用,即AX可以分为AH、AL,其他类同。在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性.

    8086CPU作为16位结构的CPU,运算器一次最多可以处理16位的数据,寄存器最大宽度为16位,可以一次性处理、传输、暂存的地址也为16为,但是8086却有20位地址总线。所以8086内部用两个16位地址通过地址加法器来合成一个20位物理地址,此两个16位地址一个为段地址,一个为偏移地址,物理地址=段地址*16 (即左移4位)+ 偏移地址。段只是CPU管理内存的一种方式,内存本身并没有分段。段地址*16 称为基础地址,也成为段起始地址,可见此地址一定是16的倍数。

    8086CPU中CS和IP(Instruction Pointer)是两个重要的寄存器,CS为代码段寄存器,IP为指令指针寄存器,专门用于存储段地址和偏移地址。即CS:IP指向的内容永远是CPU下一条要执行的指令。

    程序员不能用mov来修改CS和IP的值,可以用转移指令如jmp来修改。jmp有两种格式,一种“jmp 段地址:偏移地址" 用于直接跳转到指定地址,另一种"jmp 某一合法寄存器"如jmp ax, 表示仅用寄存器的值修改IP即偏移地址的值,段地址不变.

    DS寄存器通常用来存放要访问的数据的段地址,mov al,[0] 指令表示把偏移地址为"0", 段地址不变(即存在DS寄存器中的值)的数据存入al寄存器中。8086CPU不支持把数据直接送入段寄存器的操作, 所以要改变段地址必须借助寄存器,如mov bx, 1000H; mov cs bx。mov指令和add指令sub指令一样都是双操作数,可以有的形式为add 寄存器,数据;add 寄存器,寄存器;add 寄存器,内存单元;add 内存单元,寄存器; add 寄存器,数据[add ax,8]mov 段寄存器,寄存器[mov ds, ax]; mov 寄存器, 数据[mov ax,8]; mov 寄存器, 寄存器[mov ax,bx];mov 寄存器,内存单元[mov ax,[0]];mov 内存单元,寄存器[mov [0],ax]

    段寄存器SS和寄存器SP用来存储栈顶的地址,SS:SP永远指向栈顶元素。入栈时,栈顶从高地址向低地址方向增长。在指令中"[ax]"表示寄存器ax中的内容,[1111h]就表示内存单元的偏移地址是0x1111. 所以"mov ax, bx"的意思就是bx寄存器中存放的内容作为偏移地址, 段地址就是ds中的内容,然后把此地址中的内容放入ax中。即(ax)=((ds)*16+bx), 描述语言中加()表示其内容。而[bx+200]表示bx的内容加上200,即"mov ax,[bx+200]"的含义是"(ax) = ((ds)*16+(bx)+200)", 汇编语言中BX寄存器常用来和立即数一起构成内存单元的地址,即形如[bx+20]的形式si和di寄存器也可以和bx一样这样使用,但是si和di不能分成8位寄存器来使用, SI和DI被称为变址寄存器(Index Register, 包括32位的ESI和EDI),主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便,另外ESI和EDI低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据,SI和DI与串操作指令REP/ STOS/ MOVS/ CMPS/ SCAS/ LODS甚至可以用[bx+si+200h]或[bx+di+0h]等更灵活的方式来访问内存。另外bp寄存器也可以放在[]中来使用。即可以放在[]使用的寄存器只有"bx,si,di,bp"四个,这四个可以单独使用或组合使用或和立即数一起使用, 但是[bx+bp],[si+di]的组合是错误的。另外,bp作为堆栈段的栈基址寄存器,在有bp出现而没有指明段地址的情况下,缺省段地址是[ss], 而不是[ds],如[bp+si+200h]的段地址就是[ss],[bx+di+39h]的段地址在[ds],BP后SP作为指针寄存器(base pointer, stack pointer)相应的32位版本EBP和ESP,对低16位数据的存取,不影响高16位的数据,指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果.

    汇编程序中标号代表一个地址,用于实现跳转,如"loop 标号"指令,就是要跳转到标号的位置去执行以实现循环,循环控制用cx中的值来计算。loop的执行先要把cx中的内容减1,如果大于0则跳转到标号位置,否则继续执行

    在汇编程序中和debug不同的一点是,debug认为"mov ax,0"和"mov ax,[0]"不一样,前者表示将0存入ax,后者[0]表示偏移地址,但是汇编程序中,二者含义一样。汇编程序中要用立即数来指明偏移地址,一种办法是借助寄存器,如"mov bx,0  mov ax,bx". 另一种办法是直接给出段地址,如"mov ax, [ds]:0", [bx]也是间接给出了偏移地址,默认段地址在ds中。

    32位段寄存器包括 ECS——代码段寄存器(Code Segment Register),其值为代码段的段值;EDS——数据段寄存器(Data Segment Register),其值为数据段的段值;EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
    EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值
    。所以,在32位环境下开发的程序最多可同时访问6个段。32位CPU有两个不同的工作方式:实方式和保护方式。实模式下前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。 保护模式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值

    debug的使用简介

    R命令查看、改变寄存器的内容,D命令查看内存中的内容,E命令改写内存的内容。U命令将内存中的机器指令翻译为汇编指令,T命令执行一条机器指令。A命令以汇编指令的格式在内存中写入一条机器指令。

    输入"r 寄存器名字"回车,则出现-符,然后输入要修改成的内容,及可以修改指定寄存器的内容。用"e 起始地址 数据 数据 数据"的格式可以改写内存中的内容。

    一个完整的程序

    汇编语言中包括两种指令,汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。伪指令没有对应的机器指令,最终不会被CPU执行,伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。比如assume就是一条伪指令,用来指定某一个段的代号,如"assume cs:codeseg",表示用codeseg来表示代码段。然后就可用用"codeseg segment .... codeseg ends"来开始和结束一个代码段了。在汇编程序里用"段名 ends"表示一个段的结束,用"end"表示汇编程序的结束,用"mov ax,4c00h int 21h"表示程序返回,交出cpu控制权。

    dw用来定义一个字,如"dw 0123h",数据类型为word。当在代码段中定义数据时,数据从代码段的起始位置开始存放,也就是说cs:[0]处存放的是第一个变量。为了明确指明程序的起始位置,可以在程序的起始位置加标号,如"start",并用"end start"来取代原先的"end"来结束程序,这样就明确标明了程序的起始位置。我们也可以把栈放在代码段里,只需要定义一块连续的空间(如"dw 0,0,0,0,0"),并把SS:SP指向起始空间的开始位置,就可做堆栈操作。我们也可以定义专门的堆栈段和数据段,如"assume cs:code, ss:stack, ds:data", 然后用"stack segment"开始一个堆栈段并用"end stack"来结束一个堆栈段。数据段也一样,都和前面提到的代码段一样。需要注意的是"标号就代表了段的起始地址",所以可以做如下操作"mov ax, data",用以把数据段中定一个的第一个"字"变量存到ax寄存器里。

    数据后边加H表示数据是16进制表示的,加B表示是二进制表示的,如"101110B"。用''方式表示一个字符串,如"db 'unIX'"就定义了一个字符串,相当于"db 75H,6EH,49H,58H"。dd用于定义一个32位数。

    在汇编语言中可以有多种方式来指明内存单元的长度。其一是利用寄存器,如ax表示16bit,al表示8bit。其二是"X ptr"方式,由于8086CPU只有两种类型"字节和字",所以X表示word或者byte,如"mov word ptr ds:[0],1", "inc byte ptr [bx]"。其三有些指令本身已经表明了。如push和pop只对字操作。

    div用于除法操作。除数有8位和16为两种放在一个寄存器或存储单元里,被除数有8位16为32位三种。如果是8或16位,则放在AX中,如果是32位,则高位放DX中,低位放AX中,如果除数是8位,则AL存商,AH存余数,如果除数为16位,则AX存商,DX存余数。mul是乘法指令。乘数要么都是8位要么都是16位,如果都是8位一个放在al中。另一个放在8位寄存器或内存单元中,如果是16为,则一个乘数放在ax中。另一个放在16为寄存器或内存单元中。如果是8位相乘,则乘积放在ax中,如果是16位相乘,乘积高位放在dx中,低位放在ax中。

    dup用于数据定义,表示重复。格式为"db/dw/dd 重复次数 dup (重复的字节/字/双字数据)" 如"db 3 dup(0,2,3)" 等同于"db 0,2,3,0,2,3,0,2,3"。

    转移指令指改变CS:IP的指令。包括段间转移如"jmp 1000:0",和段内转移如"jmp ax"。由于转移指令对IP修改范围不同,段内转移又分为短转移(ip修改范围在-128 - 127)和长转移(-32768 - 23767)。8086的转移指令包括: 无条件转移指令如jmp;条件转移指令;循环指令如loop;过程;中断

    offset是编译器处理的符号,用于取得标号的偏移地址如 "s: mov ax,offset s" 用于取得标号s的偏移地址,从而不用去计算s处的偏移地址,编译器自己可以算出。jmp作为无条件转移指令,可以只修改IP,也可以同时修改CS和IP。其一格式为"jmp short 标号", 用于段内短转移到标号处执行指令,IP的修改范围为"-128 - 127",编译器处理后并不给出新的CS:IP,而是给出一个位移(即向前还是向后移动多少字节),因为系统不能确定目的地址,利用这种方式实现跳转,所以实际上内短转移指令"short 标号"等同于"(IP)=(IP)+8位位移[所以IP改变的范围为-128 - 127]"。而段内近转移"near ptr 标号"相当于"(IP)=(IP)+16位位移[范围为-32768 - 32767]" 而段内长转移"far ptr 标号" 实现的是段间转移。其二格式为"jmp 寄存器(16位)", 如"jmp ax". 其三为"jmp word ptr 内存单元地址(段内转移)[内存单元中存放的字是偏移地址]" 或 "jmp dword ptr 内存单元地址(段间转移)"[内存单元中有两个字,高地址的字中是目的段地址,低地址的字中是目的偏移地址]

    所有条件转移指令都是短转移,即IP修改范围在-128 - 127之间。如"jcxz 标号"表示"如果(cx)=0 转移到标号处执行, (cx)<>0则顺序执行"。loop作为循环指令也是短转移。指令格式为"loop 标号[(cx)=(cx) - 1 如果(cx<>0) 则转移到标号处执行]"

    ret和retf指令用栈中的数据修改CS和IP实现转移,其中ret实现近转移。等同如下2步操作"1. (IP) = ((SS)*16 + (SP)) 2. (SP) = (SP) + 2",相当于"POP IP"。而retf指令等同于如下4步操作"(IP) = ((SS) * 16 + (SP)) 2. (SP) = (SP) +2 3. (CS) = ((SS)*16 + (SP)) 4. (SP) = (SP) +2",相当于"POP IP  POP CS"。

    Call指令不能实现短转移,其转移实现的原理和jmp相同。Call指令分两步进行,第一步"将当前的IP或CS和IP压栈",第二步转移格式"call 标号"或"call 16为寄存器"或"call word ptr 内存单元地址"为段内转移,格式"call far ptr 标号"或"call dword ptr 内存单元地址"是段见转移

    shl逻辑左移指令,功能为将寄存器或内存单元中的数据向左移位,将最后移出的一位写入CF中。最低位用0补充。shr是逻辑右移指令。

    标志寄存器(Flag register), VC中用EFL(标志寄存器)表示

    标志寄存器的作用是 1. 存储相关指令的某些执行结果。2. 为CPU执行相关指令提供依据。3. 用来控制CPU的相关工作方式

    8086CPU的标志寄存器使用了16位中的9位。第6位ZF表示指令执行的结果是否为0. 第二位PF为奇偶标志位,表示指令执行后,结果中所有的bit位中1的个数是偶数还是奇数。第7位SF表示符号位,表示执行结果的正负。第0位CF是进位标志位。表示在无符号运算是结果的最高有效位是否向更高位借位或进位。第11位OF(Overflow Flag)是溢出位,表示结果是否溢出,仅对有符号数运算有效。第10位为方向标志位DF。串处理指令中控制每次操作后si,di的递增还是递减。pushf和popf分别是对标志寄存器压栈和出栈。辅助进位标志AF(Auxiliary Carry Flag)在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。

    状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。
    1、追踪标志TF(Trap Flag)
    当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。
    2、中断允许标志IF(Interrupt-enable Flag)
    中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。CPU的指令系统中也有专门的指令来改变标志位IF的值

    adc是带进位加法指令,利用了CF位来进行加法计算。adc ax,cx 表示(ax) = (ax) + (cx) + CF. SBB是带借位减法指令。sbb ax,cx 表示(ax) = (ax) - (cx) -CF. cmp指令是比较指令,相当于不保存结果的减法指令,然后通过标志位来判断比较的结果。可以根据CF和ZF的值判断比较的结果。

    其他条件转移指令包括: je等于则转移(zf=1), jne不等于则转移(zf=0), jb低于则转移(cf=1), jnb不低于则转移(cf=0), ja高于则转移(cf=0或zf=0), jna不高于则转移(cf=1或zf=1)。其中e = equal, a = above, b = below。

    32位标志寄存器增加的标志位
    1、I/O特权标志IOPL(I/O Privilege Level)
    I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。
    2、嵌套任务标志NT(Nested Task)
    嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:(1)、当NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;(2)、当NT=1,通过任务转换实现中断返回。
    3、重启动标志RF(Restart Flag)
    重启动标志RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。
    4、虚拟8086方式标志VM(Virtual 8086 Mode)
    如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

    中断

    由于CPU内部情况而发生的中断叫内中断,如除法错误(0号中断),单步执行(1号中断),执行into指令(4号中断),执行int指令(包括各种中断号 int n, n为byte型)。中断即指CPU停止当前的操作,而去相应另一个操作。CPU用8位的中断类型码,查找中断向量表来找到需要跳往的地址。执行中断前也需要保存现场包括IP,CS,标志寄存器值等,然后执行完毕后用iret而不是ret指令返回。

    两个常数的减法可以用-完成,由编译器负责解析。

    外中断源有可屏蔽中断和不可屏蔽中断两大类。可屏蔽中断是cpu可以不响应的中断,cpu依据IF寄存标志判断是否响应,IF=1则CPU执行完当前命令后响应中断,如果IF=0则不响应中断,所以IF置0的意义是在进入中断处理程序后,禁止其他的可屏蔽中断。不可屏蔽中断是cpu必须响应的中断,执行完当前指令后马上响应,不可屏蔽中断的类型码固定为2。

    端口

    CPU可以对其内部的寄存器,内存单元以及端口直接进行读写。PC中和CPU通过总线相连的除了各种存储器外,还有3种芯片,其一各种接口卡上的芯片(如网卡显卡等),其二主板上的接口芯片,主板通过他们对部分外设进行访问,其三其他用来存储相关系统信息或输入输出的芯片。这些芯片中也都有寄存器通过总线和CPU相连,虽然这些寄存器物理上在不同芯片中,但都被cpu通过统一编址而进行统一管理。CPU将这些寄存器都当作端口对端口的读写只能用int和out命令,而不能用move,push等命令。8086cpu最多可以定位64K个端口。in al, 60h表示从60号端口读一个byte数据到al中. 

  • 2009-03-02

    MPLS - [网络]

    (MultiProtocol Label Switching) A standard from the IETF for including routing information in the packets of an IP network. MPLS is used to ensure that all packets in a particular flow take the same route over a backbone. Deployed by many telcos and service providers, MPLS can deliver the quality of service (QoS) required to support real-time voice and video as well as service level agreements (SLAs) that guarantee bandwidth. Large enterprises may also use MPLS in their national networks.

    Similar to Cisco's tag switching, an MPLS router attaches labels (tags) containing forwarding information to outgoing IP packets. These "label edge routers" (LERs) sit at the edge of the network and perform the complex packet analysis and classification before the packet enters the core of the network. The routers within the core, known as "label switch routers" (LSRs), quickly examine the label and forward the packet per its directions without having to look up data in tables and compute the forwarding path each time. The edge routers at the receiving end remove the labels.

    Following in the tradition of the "dumb network," MPLS enables more decisions to be made at the periphery of the network. See VPLS, GMPLS, dumb network and Diffserv.

     

     

    An MPLS Core
    Using IP and MPLS in the core, a service provider can offer its customers a virtual private VPN service for IP traffic and guarantee bandwidth for real-time voice and video.

    In computer networking and telecommunications, Multi Protocol Label Switching (MPLS) is a data-carrying mechanism that belongs to the family of packet-switched networks. MPLS operates at an OSI Model layer that is generally considered to lie between traditional definitions of Layer 2 (Data Link Layer) and Layer 3 (Network Layer), and thus is often referred to as a "Layer 2.5" protocol. It was designed to provide a unified data-carrying service for both circuit-based clients and packet-switching clients which provide a datagram service model. It can be used to carry many different kinds of traffic, including IP packets, as well as native ATM, SONET, and Ethernet frames.

    A number of different technologies were previously deployed with essentially identical goals, such as frame relay and ATM. MPLS technologies have evolved with the strengths and weaknesses of ATM in mind. Many network engineers agree that ATM should be replaced with a protocol that requires less overhead, while providing connection-oriented services for variable-length frames. MPLS is currently replacing some of these technologies in the marketplace. It is highly possible that MPLS will completely replace these technologies in the future, thus aligning these technologies with current and future technology needs.[1]

    In particular, MPLS dispenses with the cell-switching and signaling-protocol baggage of ATM. MPLS recognizes that small ATM cells are not needed in the core of modern networks, since modern optical networks (as of 2008) are so fast (at 40 Gbit/s and beyond) that even full-length 1500 byte packets do not incur significant real-time queuing delays (the need to reduce such delays — e.g., to support voice traffic — was the motivation for the cell nature of ATM).

    At the same time, MPLS attempts to preserve the traffic engineering and out-of-band control that made frame relay and ATM attractive for deploying large-scale networks.

    While the traffic management benefits of migrating to MPLS are quite valuable (better reliability, increased performance), there is a significant loss of visibility and access into the MPLS cloud for IT departments.[2]

    Contents

    [hide]

    History

    MPLS was originally proposed by a group of engineers from Ipsilon Networks, but their "IP Switching" technology, which was defined only to work over ATM, did not achieve market dominance. Cisco Systems, Inc. introduced a related proposal, not restricted to ATM transmission, called "Tag Switching". It was a Cisco proprietary proposal, and was renamed "Label Switching". It was handed over to the IETF for open standardization. The IETF work involved proposals from other vendors, and development of a consensus protocol that combined features from several vendors' work.

    One original motivation was to allow the creation of simple high-speed switches, since for a significant length of time it was impossible to forward IP packets entirely in hardware. However, advances in VLSI have made such devices possible. Therefore the advantages of MPLS primarily revolve around the ability to support multiple service models and perform traffic management. MPLS also offers a robust recovery framework[3] that goes beyond the simple protection rings of synchronous optical networking (SONET/SDH)..

    How MPLS works

    MPLS works by prefixing packets with an MPLS header, containing one or more 'labels'. This is called a label stack. Each label stack entry contains four fields:

    • A 20-bit label value.
    • a 3-bit field for QoS (Quality of Service) priority (experimental).
    • a 1-bit bottom of stack flag. If this is set, it signifies that the current label is the last in the stack.
    • an 8-bit TTL (time to live) field.

    These MPLS-labeled packets are switched after a Label Lookup/Switch instead of a lookup into the IP table. As mentioned above, when MPLS was conceived, Label Lookup and Label Switching were faster than a RIB lookup because they could take place directly within the switched fabric and not the CPU.

    The entry and exit points of an MPLS network are called Label Edge Routers (LER), which, respectively, push an MPLS label onto the incoming packet and pop it off the outgoing packet. Routers that perform routing based only on the label are called Label Switch Routers (LSR). In some applications, the packet presented to the LER already may have a label, so that the new LSR pushes a second label onto the packet. For more information see Penultimate Hop Popping.

    Labels are distributed between LERs and LSRs using the “Label Distribution Protocol” (LDP)[4]. Label Switch Routers in an MPLS network regularly exchange label and reachability information with each other using standardized procedures in order to build a complete picture of the network they can then use to forward packets. Label Switch Paths (LSPs) are established by the network operator for a variety of purposes, such as to create network-based IP Virtual Private Networks or to route traffic along specified paths through the network. In many respects, LSPs are no different than PVCs in ATM or Frame Relay networks, except that they are not dependent on a particular Layer 2 technology.[5]

    In the specific context of an MPLS-based Virtual Private Network (VPN), LSRs that function as ingress and/or egress routers to the VPN are often called PE (Provider Edge) routers. Devices that function only as transit routers are similarly called P (Provider) routers. See RFC 2547.[6] The job of a P router is significantly easier than that of a PE router, so they can be less complex and may be more dependable because of this.

    When an unlabeled packet enters the ingress router and needs to be passed on to an MPLS tunnel, the router first determines the forwarding equivalence class (FEC) the packet should be in, and then inserts one or more labels in the packet's newly-created MPLS header. The packet is then passed on to the next hop router for this tunnel.

    When a labeled packet is received by an MPLS router, the topmost label is examined. Based on the contents of the label a swap, push (impose) or pop (dispose) operation can be performed on the packet's label stack. Routers can have prebuilt lookup tables that tell them which kind of operation to do based on the topmost label of the incoming packet so they can process the packet very quickly.

    In a swap operation the label is swapped with a new label, and the packet is forwarded along the path associated with the new label.

    In a push operation a new label is pushed on top of the existing label, effectively "encapsulating" the packet in another layer of MPLS. This allows hierarchical routing of MPLS packets. Notably, this is used by MPLS VPNs.

    In a pop operation the label is removed from the packet, which may reveal an inner label below. This process is called "decapsulation". If the popped label was the last on the label stack, the packet "leaves" the MPLS tunnel. This is usually done by the egress router, but see PHP below.

    During these operations, the contents of the packet below the MPLS Label stack are not examined. Indeed transit routers typically need only to examine the topmost label on the stack. The forwarding of the packet is done based on the contents of the labels, which allows "protocol-independent packet forwarding" that does not need to look at a protocol-dependent routing table and avoids the expensive IP longest prefix match at each hop.

    At the egress router, when the last label has been popped, only the payload remains. This can be an IP packet, or any of a number of other kinds of payload packet. The egress router must therefore have routing information for the packet's payload, since it must forward it without the help of label lookup tables. An MPLS transit router has no such requirement.

    In some special cases, the last label can also be popped off at the penultimate hop (the hop before the egress router). This is called Penultimate Hop Popping (PHP). This may be interesting in cases where the egress router has lots of packets leaving MPLS tunnels, and thus spends inordinate amounts of CPU time on this. By using PHP, transit routers connected directly to this egress router effectively offload it, by popping the last label themselves.

    MPLS can make use of existing ATM network infrastructure, as its labeled flows can be mapped to ATM virtual circuit identifiers, and vice versa.

    Installing and removing MPLS paths

    There are two standardized protocols for managing MPLS paths: CR-LDP (Constraint-based Routing Label Distribution Protocol) and RSVP-TE, an extension of the RSVP protocol for traffic engineering. As of February 2003, as documented in RFC 3468,[7] defined in RFC 3209.

    Extensions of the BGP protocol, starting with RFC 2547, can be used to manage an MPLS path, including RFC 3107 and RFC 4781. [8] [9].

    An MPLS header does not identify the type of data carried inside the MPLS path. If one wants to carry two different types of traffic between the same two routers, with different treatment from the core routers for each type, one has to establish a separate MPLS path for each type of traffic.

    Comparison of MPLS versus IP

    MPLS cannot be compared to IP as a separate entity because it works in conjunction with IP and IP's IGP routing protocols. MPLS gives IP networks simple traffic engineering, the ability to transport Layer 3 (IP) VPNs with overlapping address spaces, and support for Layer 2 pseudowires (with Any Transport Over MPLS, or ATOM - see Martini draft). Routers with programmable CPUs and without LSP can either be (a) explicitly configured hop by hop, (b) dynamically routed by the Constrained Shortest Path First CSPF algorithm, or (c) configured as a loose route that avoids a particular IP or that is partly explicit and partly dynamic. In a pure IP network, the shortest path to a destination is chosen even when it becomes more congested. Meanwhile, in an IP network with MPLS Traffic Engineering CSPF routing, constraints such as the RSVP bandwidth of the traversed links can also be considered, such that the shortest path with available bandwidth will be chosen. MPLS Traffic Engineering relies upon the use of TE extensions to OSPF or IS-IS and RSVP. Besides the constraint of RSVP bandwidth, users can also define their own constraints by specifying link attributes and special requirements for tunnels to route (or to not route) over links with certain attributes. [10]

    MPLS local protection (Fast Reroute)

    Main article: MPLS local protection

    In the event of a network element failure when recovery mechanisms are employed at the IP layer, restoration may take several seconds which is unacceptable for real-time applications (such as VoIP)[11] [12][13]. In contrast, MPLS local protection meets the requirements of real-time applications with recovery times comparable to those of SONET rings (up to 50ms).[11][13][14]

    Comparison of MPLS versus Frame Relay

    Frame relay aimed to make more efficient use of existing physical resources, which allow for the underprovisioning of data services by telecommunications companies (telcos) to their customers, as clients were unlikely to be utilizing a data service 100 percent of the time. In more recent years, frame relay has acquired a bad reputation in some markets because of excessive bandwidth overbooking by these telcos.

    Telcos often sell frame relay to businesses looking for a cheaper alternative to dedicated lines; its use in different geographic areas depended greatly on governmental and telecommunication companies' policies.

    AT&T is currently (as of June 2007) the largest frame relay service provider in the United States, with local networks in 22 states, plus national and international networks. This number is expected to change between 2007 and 2009 when most of these frame relay contracts expire. Many customers are likely to migrate from frame relay to MPLS over IP or Ethernet within the next two years, which in many cases will reduce costs and improve manageability and performance of their wide area networks.[15] [16]

    Comparison of MPLS versus ATM

    While the underlying protocols and technologies are different, both MPLS and ATM provide a connection-oriented service for transporting data across computer networks. In both technologies, connections are signaled between endpoints, connection state is maintained at each node in the path, and encapsulation techniques are used to carry data across the connection. Excluding differences in the signaling protocols (RSVP/LDP for MPLS and PNNI:Private Network-to-Network Interface for ATM) there still remain significant differences in the behavior of the technologies.

    The most significant difference is in the transport and encapsulation methods. MPLS is able to work with variable length packets while ATM transports fixed-length (53 byte) cells. Packets must be segmented, transported and re-assembled over an ATM network using an adaption layer, which adds significant complexity and overhead to the data stream. MPLS, on the other hand, simply adds a label to the head of each packet and transmits it on the network.

    Differences exist, as well, in the nature of the connections. An MPLS connection (LSP) is uni-directional - allowing data to flow in only one direction between two endpoints. Establishing two-way communications between endpoints requires a pair of LSPs to be established. Because 2 LSPs are required for connectivity, data flowing in the forward direction may use a different path from data flowing in the reverse direction. ATM point-to-point connections (Virtual Circuits), on the other hand, are bi-directional, allowing data to flow in both directions over the same path (bi-directional are only SVC ATM connections; PVC ATM connections are uni-directional).

    Both ATM and MPLS support tunneling of connections inside connections. MPLS uses label stacking to accomplish this while ATM uses Virtual Paths. MPLS can stack multiple labels to form tunnels within tunnels. The ATM Virtual Path Indicator (VPI) and Virtual Circuit Indicator (VCI) are both carried together in the cell header, limiting ATM to a single level of tunnelling.

    The biggest single advantage that MPLS has over ATM is that it was designed from the start to be complementary to IP. Modern routers are able to support both MPLS and IP natively across a common interface allowing network operators great flexibility in network design and operation. ATM's incompatibilities with IP require complex adaptation, making it comparatively less suitable for today's predominantly IP networks.

    Comparison of MPLS VPN versus IPSec VPN

    MPLS is more reliable than IPSec VPNs as there is less complication in the tunnelling and firewall configuration. Network intrusions are a greater concern with IPSec VPN tunnels since they are run through an Internet circuit, which is open to connections from around the world. A misconfigured firewall can open the VPN network to security threats of the Internet.

    MPLS deployment

    MPLS is currently in use in large "IP Only" networks, and is standardized by IETF in RFC 3031.

    In practice, MPLS is mainly used to forward IP datagrams and Ethernet traffic. Major applications of MPLS are Telecommunications traffic engineering and MPLS VPN.

    Competitors to MPLS

    MPLS can exist in both IPv4 environment (IPv4 routing protocols) and IPv6 environment (IPv6 routing protocols). The major goal of MPLS development - the increase of routing speed - is no longer relevant because of the usage of ASIC, TCAM and CAM-based switching. Therefore the major usage of MPLS is to implement limited traffic engineering and Layer 3/Layer 2 “service provider type” VPNs over existing IPv4 networks. The only competitors to MPLS are technologies like L2TPv3 that also provide services such as service provider Layer 2 and Layer 3 VPNs.

    IEEE 1355 is a completely unrelated technology that does something similar in hardware.

    IPv6 references: Grossetete, Patrick, IPv6 over MPLS, Cisco Systems 2001; Juniper Networks IPv6 and Infranets White Paper; Juniper Networks DoD's Research and Engineering Community White Paper.

    Access to MPLS networks

    MPLS supports a range of access technologies, including T1, ATM and frame relay. In April 2008, New Edge Networks announced traffic prioritization on its MPLS network available via less expensive DSL access. Previously, traffic prioritization was not possible across DSL connections.

    Benefits of MPLS

    MPLS provides networks with a more efficient way to manage applications and move information between locations. With the convergence of voice, video and data applications, business networks face increasing traffic demands. MPLS enables class of service (CoS) tagging and prioritization of network traffic, so administrators may specify which applications should move across the network ahead of others. This function makes an MPLS network especially important to firms that need to ensure the performance of low-latency applications such as VoIP and their other business-critical functions. MPLS carriers differ on the number of classes of service they offer and in how these CoS tiers are priced. [17]

  • 43.1.1  协议简介
    ATM(Asynchronous Transfer Mode)是一种以信元为单位的异步转移模式。它是基于B-ISDN宽带综合服
    务数字网标准而设计的用来提高用户综合访问速度的一项技术。在交换形式上而言,ATM 是面向连接的
    链路,任何一个 ATM 终端与另一个用户通信的时候都需
    要建立连接,这一方面来看,ATM 拥有电路交换的特点;
    另一方面 ATM 采用信元(Cell)交换的方式,信元长度固定
    为53字节。

     

    选择净荷长度需要考虑的几个因素:
    网络总时延:1000km 传输,8 个 ATM 交换机,2 次
    ATM和非ATM之间的转换,端到端时延: 32字节信元14ms,
    64字节信元22ms,总时延过大对话音承载有困难。欧洲
    意见:32字节,时延小。美国、日本意见:64字节,传输
    效率高。
    最终  ITU折衷:48字节
     
    ATM协议参考模型如下:

     


    用户平面:
    采用分层结构,提供用户信息流的传送,同时也具有一定的控制功能,如流量控制、差错控
    制等;
     
    控制平面:
    采用分层结构,完成呼叫控制和连接控制功能,利用信令进行呼叫和连接建立、监视和释放;
     

    管理平面:
    包括层管理和面管理。其中层管理采用分层结构,完成与各协议层实体的资源和参数相关的
    管理功能,如元信令。同时层管理还处理与各层相关的 OAM 信息流;面管理不分层,它完
    成与整个系统相关的管理功能,并对所有平面起协调作用。

    43.1.2 ATM物理层
    ATM 物理层和 OSI 模型中的第一层非常一致。在物理介质上控制传输,并结收位流。  ATM 物理层分
    为两个子层,传输汇聚层(TC)和物理介质层(PMD)。输入 TC 层的是 53 字节长的 ATM 信元。而 PMD 层输
    出的是包含ATM信元的第一层数据。
    ATM物理层有很多职责:

     


    TC子层:
    传输汇聚子层察看信头,并使用HEC检查信头是否有错,同时可以进行信元定界,即计算和
    忽略开始前7 个信元,完成计算后,对接下来的信元进行分析和传送。以一条OC-3 链路而言,大
    约每秒产生2.5M个Cell,前 7个显得微不足道了。
    同时由于ATM为异步传输链路,但在SONET以及DS-3这些链路上,是采用同步传输方式的,
    ATM 使用信元率退耦功能插入空载信元到同步链路中去。这种模式可以与同步 T1 线路做一对比。
    在 T1 线路中每 125us 都有一个 T1 帧生成,该速率由主时钟控制,每帧的第 k 时隙中有从相同源
    来的1字节数据。而ATM不严格要求信元交替地从不同的源到来,每一列从各个源来的信元,没
    有特别的模式,信元可以从任意不同的源到来,而且,不要求从一台计算机来的信元流是连续的,
    数据信元可以有间隔,这些间隔由特殊的空闲信元(idle cell)填充。
    VCI/VPI均为0 的信元被定义为空信元。
    TC 子层的另一项重要任务是:针对从事传输的系统,产生成帧信息。比如,一个 ATM 摄象
    机在线路上只产生一系列信元,但它也可能用ATM信元产生SONET帧, 嵌入SONET有效载荷中。

    在后一种情况下,TC 子层将产生 SONET 或帧,并把 ATM 信元打包,这并不完全是一个不必要的
    步骤,因为SONET有效载荷不能支持53字节信元的整数倍。
     
    物理介质子层:
    物理介质子层提供比特传输能力,对比特定时和线路编码等方面作出了规定,并针对所采用
    的物理介质(如光纤、同轴电缆、双绞线等)定义其相应的特性;
    ITU-T标准(协议I.432)定义了两个主要的ATM物理层协议:
    1、基于信元的接口-不需要成帧的连续信元流
    2、基于帧的接口-使用SDH 和PDH的传输帧结构。

     

    点击看大图 


    1、ATM信元流被映射到带有VC-4路径开销的VC-4容器中
    2、由于C-4容量(2340字节)并不是信元长度的整数倍,因此信元可以跨过C-4边界
    3、映射的细节和开销的结构由协议I.432 和 G.707(1995)给出
    STM-1的标准速率为155.52Mbps,去掉各种开销,信元的传送速率为:
    (155.52/270)x260=149.76Mbps
    类似的原理可以用于STM-4(622.08 Mbits/s结构中的信元映射; PDH的映射结构在协议G.703, G.803

    和G.832中有所描述。但传输帧映射/开销处理是很复杂的且需要大量的硬件工作。
    ATM定义了众多接口标准,如下:

    点击看大图 

    43.1.3 IMA反向多路复用
    IMA(Inverse Multiplexing  for  ATM)用于将一个单一的高速ATM信元流在发送端拆散并放在两个或多个
    低速链路上进行传输。在接收端将多个低速ATM信元流还原为高速ATM信元流。  其工作原理如下图
     

    点击看大图 


    他在发送端通过IMA模块对信号进行处理,并将空载信元过滤,然后通过ICP协议在特定的时间发送
    ICP 信元,帮助接收方 IMA 进行流重组和空载信元的再次加入。它工
    作在TC和 PMD层之上,位于ATM层下方,右图为Cisco 的ATM-IMA
    模块,它可以将8 个T1链路进行聚合。

     

    43.1.4 ATM层
    ATM 不同于同步交换机制,它是一种异步多路复用机制,在 ATM 层的作用为产生 5 字节的 ATM 信元
    头。并将信元头夹在到净荷前端。ATM交换机制如下:
    1.信元传输  
    第一步是进行头部的校验和。一旦产生出 HEC,并插入信元头部,那么此信元就作好了发送准
    备。传输手段分成两组:异步的和同步的。当使用异步方式时,只要准备好了发送它,就可以发送,

    没有时间限制。使用同步方式,信元就必须按照事先确定的时间节拍发送。如果在需要时无数据信
    元可用,TC子层就必须发明一个,这种信元称为空闲信元(idle cell)。  
    无数据信元的另一种类型是操作和维护OAM(operation and maitenance)信元。ATM机制也使用
    OAM 信元来交换控制及其他必需的信息,以保证系统的运行。把 ATM 输出速率与从事传输系统的
    速率相匹配是TC子层的重要任务。
    在接收方,空闲信元在TC子层中进行处理,但OAM信元交给了ATM层。
    尽管电话公司明确地使用 SONET 作为 ATM 的传输系统,但是也可以定义成把 ATM 对应到其他
    系统的有效载荷字段,并且这种新帧已在工作。尤其是,映射成T1,T3或FDDI帧也是可以的。
     
    2.信元接收  
    在输出处,TC 子层的工作是取得一系列信元,在每个信元上增加一个HEC,把此结果转变成比
    特流,并通过加入 OAM 信元,将比特流匹配为进行物理传输系统的速率。在输入处,TC 层准确地
    进行逆变换。它取来到达的比特流,设定信元边界,确定信元头(丢弃拥有不合法头部的信元),处
    理OAM信元,并把数据信元上传给ATM层。
    最困难的部分是在到来的比特流中设定信元边界。在某些情况下,进行传输的物理层提供了帮
    助。然而,有时物理层对成帧并不能提供帮助。这时应该使用HEC。随着比特流到达TC子层,保留
    一个40位移位寄存器,比特流从左边进入,右边出来。TC子层然后审查这40位,看是否可能存在
    一个合法的信元头部。如果有,最右边的8位将是合法的HEC,而最左边的32位则不是。如果不存
    在这种情况,则缓冲区没有存在一个合法信元,在这种情况下,缓冲区中所有的位都向右移动一位,
    使得后端空出一位,于是一个新的输入位就加到最左端。不断重复此过程,直到定位一个合法的 HEC。
    此时,明确了信元边界,因为移位寄存器包括了一个有效的头部。

    43.1.5 VPI/VCI
    ATM 交换机使用 VPI/VCI 进行数据交换,这一点和 Frame-Relay 的 DLCI 号比较相似,每个交换机将分
    析信元头部的信息,根据信元头部的VCI/VPI信息进行数据交换。VPI 和VCI的关系如下:
    VP 表示一个虚通路,而 VC 表示为一个虚电路。  而一个 VCC 表示一个虚电路连接,通常为 OC-3  E3
    等数字链路。下图为它们之间的关系:

     

    一个 VCC 链路可以包含多条 VP,而一个 VP 则可以包含多个 VC。ATM 则采用这种方式来讲多个虚拟
    链路聚合到一条VP或者VCC 中进行传输。通过VPI/VCI 编址,ATM可以支持如下多种虚电路类型:

      永久虚电路PVC
      交换虚电路SVC
      Soft VC

    在链路建立过程中,如下图:

    点击看大图 

    一个虚通道连接VPC是虚通道链接(Virtual Path Links, VPL)的级联。每条VPL与一个VPI 值相联系。交
    换点可以改变VPI值。一个VCC是VCL的级联。每条VCL与一VPI 及VCI相联系。交换点可以改变VPI/VCI
    值。如下图,Cell在传输过程中VPI/VCI的改变过程  

     

    VPI/VCI 值分配方式如下:
     

    点击看大图 

    关于UNI/NNI,ATM论坛定义了多种网络接口:
    1、UNI(User-Network Interface)  
    UNI为ATM网中的用户网络接口,它是用户设备与网络之间的接口,直接面向用户。UNI接
    口定义了物理传输线路的接口标准,即用户可以通过怎样的物理线路和接口与ATM 网相连,还定
    义了ATM层标准、UNI信令、OAM功能和管理功能等。按 UNI接口所在的位置不同,又可分为公
    用网的 UNI 和专用网的 UNI(PUNI),这两种 UNI 接口的定义基本上是相同的,只是 PUNI 由于不必
    象公网的接口那样过多地考虑严格的一致性,所以 PUNI 的接口形式更多、更灵活、发展也更快。 
     

    2、NNI(Network to Network/Network Node Interface)  
    NNI可理解为网络节点接口或网络/网络之间的接口,一般为两个交换机之间的接口,与 UNI
    一样,NNI 接口也定义了物理层、ATM 层等各层的规范,以及信令等功能,但由于 NNI 接口关系
    到连接在网络中的路由选择问题,所以特别对路由选择方法做了说明。同样,NNI 接口也分为公
    网NNI和专用网中的NNI(PNNI),公网NNI和PNNI的差别还是相当大的,如公网NNI的信令为3、
    7 号信令体系的宽带 ISDN 用户部分 B-ISUP,而 PNNI 则完全基于 UNI 接口,仍采用 UNI 的信令结
    构。ATM论坛又开发了一种新型接口AINI,用于PNNI 和 B-ICI之间的互联,它同样采用PNNI 类似
    的信令。
    3、B-ICI(BISDN Inter-Carrier Interface)  
    B-ICI 定义为两个公用 ATM 网之间的接口,为分别属于两个运营者的 UNI 接口提供了连接,
    它的定义基于 NNI 接口,其特点是支持不同网络间的多种业务传送,包括基于信元的 PVC 方式业
    务、PVC方式的帧中继业务、电路仿真业务、SMDS以及SVC业务等。
    4、DXI(Data Exchange Interface)  
    DXI 定义在数字终端设备 DTE 和数字连接设备 DCE 之间,DTE 通过 DXI 与 DCE 相连,再通过
    ATM  UNI 接口接入 ATM 网中,DCE 完成了不符合 ATM 标准的数据终端到 ATM 的适配过程,相当
    于终端适配器。
    5、FUNI(Frame Based UNI Interface)  
    FUNI的意义与 DXI相似,FUNI 将ATM适配功能完全移入了交换机内部,终端和ATM交换机
    之间传送FUNI 帧,所以与基于信元的DXI 接口相比,FUNI在接入线上有更高的效率。
     
    VPI/VCI 号放置在ATM信元的信头,信元头部格式如下:

     


    HEC:信头错误控制:
    信头错误控制(HEC)机制提供了两项重要的功能:
         1、ATM信头差错的检测和校正            
         2、信元定界
    ATM信头差错检测和校正
    信头差错控制在整个的信元头(在发送端)上完成一CRC  8  的计算。每个信元都有一个5字节
    的头部,头部中包括 4 字节的虚拟电路及控制信息和 1 字节的校验和。校验和只包括了前 4 个头
    部字节,而不占用有效载荷字节。它是由32个头部位除以多项式x^8+x^2+x+1 后,所得的余数构

    成的。校验和加上常数01010101。
    做出只校验头部的决定,是为了减少由于头部错误,而造成不正确传递信元的可能,也为了
    避免其校验开始要大得多的有效载荷字段的校验。如果确需校验有效载荷字段,就要上到较高的
    层上完成这一功能。由于校验和字段只位于头部,因此这 8 位校验和字段被称为头部错误控制
    HEC(header error control)。
    接收HEC算法能够完成
          1)  单比特的错误校正                  
    2)  多比特的错误检测

    点击看大图 


    信元定界:
    利用HEC域完成信元定界的功能以识别信元的边界, 信元定界的算法是通过利用头中的32个防止
    错误的信头比特和8个控制比特间的相关性来完成。如下图:

     

    确的HEC
    在捕获状态,定界过程是通过比特接比特地检验假设信头域中的正确的HEC来完成。一旦找
    到,运行机制即进入预同步状态。在捕获状态,自同步加扰器是被禁能的。(加扰器只被用于信息
    域,而不被用于信头)。在预同步状态,定界是由检查信元接信元的HEC相关性来完成的。在同步
    状态,信元定界会丢失掉,如果出现7次连续的不正确的HEC时,重新进入捕获状态。  
     
    CLP信元丢失优先级
    信元丢失优先级域(CLP)被用来严格地指示出在一个给定的连接中的信元的优先级
          CLP=0          指示一连接中的“高优先级”信元;
          CLP=1          指示一连接中的“低优先级”信元。

      在遇到拥塞的情况下,一个  ATM网络元素可以有选择地在删除高优先级(CLP=0)的信元之前删除低优
    先级  (CLP=1)的信元。   这一CLP应用很类似于帧中继承载业务中的Discard Eligibility(DE)功能。   CLP与  ATM
    的流量控制策略和业务质量  (QOS)参数密切相关。
     
    PT载荷类型
    载荷类型字段有3位,分别表示:净荷类型,帧结尾和拥塞情况。
    第一位用于区分OAM信元和用户数据信元,PT的第二位为拥塞状况,任何拥塞的ATM网络元素可以
    按下面方式改变 PTI 值:以 PTI=000 或 010 接收的信元可以按 PTI=010 发送出去;而以 PTI=001 或 011
    接收的信元可以按PTI=011 发送出去。没有拥塞的网络元素不应该改变PTI。
    详细的PT值分类如下:

     

    预分配信头值:

    点击看大图 


    43.1.6 AAL层
    ATM适配层用于和高层和ATM之间的通讯,高层信息类型为语音,数据或视频。
    ATM网络的AAL层与TCP具有本质区别,其主要原因是设计者对传输音频和视频数据流更有兴趣,为
    此迅速传送比精确地传送更重要。ATM层连续输出53字节的信元。信元中没有差错控制、没有流量控制
    以及其他种类的控制。所以,它不能很好地满足多数应用的要求。为了弥补这一不足,在建议 I.363 中,
    ITU在ATM层之上定义了一个端到端的层。这一层称为ATM适配层AAL(ATM adaptation layer),  
    AAL 的目标是向应用提供有用的服务,并将它们与在发送端(方)将数据分割为信元、在接收端将信元

    重新组织为数据的机制隔离开来。它按照3个坐标轴来组织服务空间:
    1、实时服务和非实时服务。
    2、恒定比特率服务和变化的比特率服务。
    3、面向连接的服务和非连接的服务。  

    原则上,用3个坐标轴和每个坐标轴上的2 个值可以定义8种不同的服务, ITU觉得只有其中的4个有
    使用价值,并分别命名为类 A、B、C、D。其他几种则未得到支持。从 ATM4.0 开始,主要的不同是传输
    类(ABR、CBR、NRT-VBR、RT-VBR和UBR)之间,而不是这些AAL支持的服务类之间。
     

    点击看大图 


    恒定比特率CBR(constant bit rate)--Class A
    主要用来模仿铜线或者光导纤维。没有差错校验,没有流量控制,也没有其余的处理。这个类
    别在当前的电话系统和将来的 B-ISDN 系统中作了一个比较圆滑的过渡,因为话音级的 PCM 通道,
    T1电路以及其余的电话系统都使用恒定速率的同步数据传输。
     
    可变比特率VBR(variable bit rate)--Class B/C
    VBR划分为两个子组别,分别是为实时传输和非实时传输而设立的。RT-VBR主要用来描述具有
    可变数据流并且要求严格实时的服务,比如交互式的压缩视频(例如电视会议)。NRT-VBR用于主要
    是定时发送的通信场合,在这种场合下,一定数量的延迟及其变化是可以被应用程序所忍受的,
    如电子邮件。
     
    可用比特率ABR(available bit rate)--Class C/D
    为带宽范围已大体知道的突发性信息传输而设计的。ABR是唯一一种网络会向发送者提供速度
    反馈的服务类型。当网络中拥塞发生时会要求发送者减小发送速率。假设发送者遵守这些请求,
    采用ABR通信的信元丢失就会很低。运行着的ABR有点象等待机会的机动旅客:如果有空余的座
    位(空间),机动的旅客就会无延迟地被送到空余座位处;如果没有足够的容量,他们就必须等待(除
    非有些最低带宽是可用的)。
     
    未指定比特率UBR(unspecified bit rate)--Class C/D
    不做任何承诺,对拥塞也没有反馈,这种类型很适合于发送 IP 数据报。如果发生拥塞,UBR
    信元也会被丢弃,但是并不给发送者发送反馈,也不给发送者希望放慢速度的期望。
     
    AAL层必须将这些大小不等的数据流分割为48字节的净荷。AAL层分为2层:
    1.会聚子层(CS)
      服务特定会聚子层(SSCS)
      公共部分会聚子层(CPCS)
    2.分装和重组(SAR)子层

    SSCS部分与各种业务的特性相关联,CPCS 则通过在帧前后加入可变长度的填充字符来成48字节帧和
    进行错误检测。

    点击看大图 

    各AAL层特征如下:
    AAL1:在各种类型的CBR业务间提供多种共同的程序:检测丢失/误插入信元,定时信息,结构信息,
    前向差错校验(FEC)
    AAL2:为节省带宽,对时延敏感的应用,  提供在单个 VCC 中复用多达 255 个用户数据的一种手段,
    用于传送短和可变长度的分组
    AAL3/4:提供检测用户数据的差错手段,用于无连接业务的适配
    AAL5:提供检测用户数据的差错手段,以及提供把破坏的数据前转给用户的能力

     

    43.1.7 AAL1
    AAL1向用户提供了恒定比特率的数据传输能力,并提供传送定时信息和结构信息的能力。在必要时
    还能够提供一定的纠错能力和报告错误的能力(包括丢失和错误插入的信元,以及信头错误等).
    AAL1中对用户数据不使用通常的检错码。在需要低误码率时采用前向纠错(FEC)。理论上不可能使误

    码率降低为0。以恒定比特率传输数据时,若收发双方的用户时钟不能同步,则会发生滑码。若不允许滑
    码现象的出现,则收方用户时钟必须与发方用户时钟严格一致。
    AAL1中提供的传送定时信息的能力,就是传送发方用户时钟同步信息的能力。用户所传送的恒定比
    特率数据中通常总是具有某种结构。如数字一次群和高次群中的帧结构。这体现为用户传送的比特流被
    划分为一些段落,在这些段落中的不同位置上的各个比特的意义往往并不相同。为使收方能够正确划分
    出这些段落,发方必须把这些段落的起始和终止位置通知对方。AAL1 中的传送结构信息的能力,指的就
    是传送这些起始和终止位置的能力。由于数据传送是恒定比特率的,所以必然是连续不断的,因此,一
    个段落的终止位置必然就是下一个段落的起始位置。这即意味着只需指明两个段落的边界。
    AAL1可以进一步划分成分段重组(SAR)子层和会聚子层(CS)。
    在发送端,AAL-SDU就是CS-SDU,它经过CS 子层后成为CS-PDU,  并做为SAR-SDU送至SAR子层,
    经过SAR子层后成为48字节数据块,即SAR-PDU。SAR-PDU就是AAL-PDU。
    在接收端,SAR 子层从 ATM 层接收 SAR-PDU,即 AAL-PDU,经处理后成为 SAR-SDU。SAR-SDU 做为
    CS-PDU,送至 CS子层,经CS 子层后成为CS-SDU,即AAL-SDU。

    点击看大图 

    SAR子层向CS 子层提供:SAR-SDU的序号;CSI比特以及SN 字段是否可用(即指明是否含有
    不可纠正的错误)。
    CSI比特的值由 CS子层提供。SNP(SequenceNumberProtection)是SN字段的CRC校验码,使
    用多项式x^3+x+1。第4个比特是偶校验码,用于前面7 个比特的偶极性校验。
    AAL1的CS子层:
    CS 子层的功能是:处理 SAR-SDU 的序号,传送时钟信息和结构信息以及纠错。AAL1 规定
    了两种实现业务时钟同步的方法-同步剩余时间标志法 SRTS(SynchronousResidualTimeStamp)和
    自适应时钟法(AdaptiveClockMethod)。
    解释:在 ATM 物理层,收发信息的双方是时钟同步的。这个时钟称为是 ATM 系统时钟。
    由于存在ATM 系统时钟,因此只要接收方知道业务时钟和ATM系统时钟的比值,就可以由ATM
    系统时钟将业务时钟精确地恢复出来。通常,接收方可以事先知道业务时钟的标称值。因此,
    我们需要知道的仅仅是实际使用的业务时钟和标称值的偏差。值得重点说明的是:此偏差可以
    利用CSI比特进行传送。

    结构消息传送(SDT)
    如果AAL1用户传送的信息中包括某种结构,则需要在传送数据的同时把结构消息也传送过
    去。在实际应用中,有许多种信息包含着某种结构(如数字一次群或高次群中的帧结构)。
    AAL1规定了采用CSI比特来传送结构消息。为此存在两种SAR-PDU格式,一种叫做非P格
    式,一种叫做 P 格式。在非 P 格式中,SAR-PDU 净荷的 47 个字节都用于传送用户信息;而在 P
    格式中,SAR-PDU 的第一个字节是一个指针,用于指示用户信息结构的起始位置,其余的 46 个
    字节用于传送用户信息。为防止与时钟信息的传送发生矛盾,规定只允许 CSI 比特 0,2,4,6
    可以是P格式。CSI比特为0 时代表非P格式;而为1时代表P格式。

    点击看大图 

    用户信息的纠错保证
    AAL1 规定了一种纠错方法,可以用来传送误码率要求极低的信息。AAL1 用户可以选择是
    否使用这种方法。AAL1中的 RS码造成了一个128 x 47个字节的矩阵,而后作为128 个信元发送
    出去,相当于在每 124 个装载用户信息的信元后面都附加了 4 个 RS 码信元。RS(128,124)码可以
    用于纠正两个错误字节或恢复 4 个已知位置的丢失字节。由于使用了 SAR-SDU 序号,所以在发
    生信息丢失时,丢失字节的位置是可以知道的。

    43.1.8 AAL2
    AAL1是针对简单的、面向连接的、实时数据流而设计的,除了具有对丢失和误入信元的检测机制外,
    它没有错误检测功能。对于单纯的未经压缩的音频或视频数据,或者其中偶尔有一些较重要的位的其他
    任何数据流都没有什么问题,AAL1就已经足够了。
    对于压缩的音频或视频数据,数据传输速率随时间会有很大的变化。例如,很多压缩方案在传送视
    频数据时,先周期性地发送完整的视频数据,然后只发送相邻顺序帧之间的差别,最后再发送完整的一
    帧。当镜头静止不动并且没有东西发生移动时,则差别帧很小。其次,必须要保留报文分界,以便能区
    分出下一个满帧的开始位置,甚至在出现丢失信元或坏数据时也是如此。由于这些原因,需要一种更完
    善的协议。AAL2就是针对这一目的而设计的。
    AAL2 同样将会聚子层分为 CPCS 和 SSCS 两层。SSCS
    为AAL2的独立用户提供AAL2 与高层应用的连接, CPS提
    供的功能是提供识别 AAL2 用户的基本结构,查错,封装
    和分解各种净荷。AAL2 的独特之处在于它允许在一个
    ATM信元中或跨越多个信元存在可变长度的净荷。
    AAL2 可以通过 CID 字段标示 AAL2 的用户信道,该
    字段为8位,由于1~7被ITU占用,故能支持248个用户
    信道

    AAL2协议结构如下:

    点击看大图 


    CID:      信道标识符(8比特)
    LI:      长度指示(6比特)
    UUI:      用户到用户指示(5比特)
    HEC:      信头差错控制(5比特)
    INFO:    信息(1-45/64字节)
    CID=0:    未使用
    CID=1:    预留给层管理对等层到对等层程序
    CID=2-7:  预留
    CID=8-255:  AAL2 CPS用户实体标识


    CPS-PP 的大小依赖于分组填充时延(PFD)和提供给每一语音汇聚的带宽。PFD 是把 AAL2-PDU 组装和
    分段为信元所需的时间,  对PFD进行配置,可以改变语音的时延特性以成为AAL2的ATM适配段。不同
    的语音电路可能会有不同的最小时延需求。

    AAL2 可用于第三代移动通信接入网络(如 W-CDMA)。可借助独立于 ATM 信令的全新 AAL2 信令来快
    速、灵活地建立AAL连接。
     
    43.1.9 AAL3/4
    开始时,ITU 为服务类 C 和 D 制订了不同的协议(服务类 C 和 D 分别是对数据丢失或出错敏感,但
    不具有实时性的面向连接和非连接的数据传输服务类)。后来 ITU 发现没有必要指定两套协议,于是便将
    它们合二为一,形成了一个单独的协议,即AAL3/4。
    AAL3/4可以按两种模式进行操作,即流和报文。在流模式中不保留报文分界信息。以下将集中讨论
    流模式。在每种模式中都可能出现可靠的传输和不可靠的(即不保证可靠性)的传输。AAL3/4 具有一个
    其他协议中没有的性能--支持多路复用。 AAL3/4的这一功能允许来自于一台主机的多个会话(如远程登录)
    沿着同一条虚电路传输并在目的端分离出来。使用一条虚电路的所有会话得到相同质量的服务,因为这
    是由虚电路本身性质所决定的。
    和 AAL1、AAL2 不一样,AAL3/4 具有会聚子层协议和 SAR 子层协议。从应用程序到达会聚子层的报
    文最大可达 65535 字节。首先将其填充为 4 的整数倍字节。接着加上头和尾信息。在会聚子层对保温进
    行了重构,并加上了头和尾信息后,便将报文传送给 SAR子层,由SAR 子层将报文分为最大44字节的数
    据片。AAL3/4 具有两层协议开销:每个报文需要增加 8 字节,每个信元增加 4 字节。总之,它是一种开
    销极大的机制,尤其是对短的报文。
    CPCS-PDU格式如下图:

    点击看大图 


    1.  公共部分指示符(CPI):用来指示消息类型、解释接下来的字段和计数单元(默认编码为
    0000 0000,用于按字节计数)。
    2.  开始标志(B-Tag):与尾中的End Tag 结合起来,来检测错误/误装配条件。
    3.  缓冲器分配(BA)大小:被用于数据帧所需的最大缓冲器要求。
    4.  垫塞(Pad):被用于对CPCS-PDU载荷进行32 比特的校准。取值范围为0-3个字节。
    5.  对准:这一字段被用于尾的32比特对准。其它编码没有被规定。
    6.  结束标志(E-Tag):与B-Tag字段相关起来,用于CPCS-PDU的错误/误装配控制。
    7.  长度(Length):指示出CPCS-PDU载荷字段的长度。也可与B/E-Tag关联起来,以进行差错
    控制。

    AAL3/4-SAR格式:

    点击看大图 


    1.  段类型(ST):这一字段被编码成用来指示出该SAR-PDU是消息开始BOM、消息继续(COM)、
    消息结束(EOM)还是单段消息(SSM)。
    2.  序列号(SN):指示CPCS-PDU段中的序列号。
    3.  消息识别符(MID):这一字段提供了能力以进行多个 AAL 连接的复用/去复用(交织)(在一条

    ATM连接上)。这一能力也可被用于无连接的传输。
    4.  垫塞(Pad):用来将SAR-PDU 载荷调整为44 字节。此字段被编码为全0。
    5.  长度指示符(LI):按字节数指示出用户信息的长度。
    6.  CRC:CRC-10被用于检测错误。CRC的计算是在整个的SAR-PDU上进行的。

    点击看大图 


    AAL 类型 3/4 的 CPCS 能够提供广泛的错误检测/序列号能力以用于可靠数据的传输和将来功能的增
    强,但实现上相对复杂。AAL 类型 3/4 的 SAR 功能提供了复用和错误检测/序列校验能力,但实现上相对
    复杂且效果不是很有效。
     
    43.1.10 AAL5
    从 AAL1 到 AAL3/4 协议主要是由电信工业设计的并被 ITU 标准化,它没有太多地考虑计算机工业的
    要求。由于两个协议层所导致的复杂性及低效性,再加上校验和字段十分短(仅 10 位),使一些研究人
    员萌生了一个制订新的适配层协议的念头。该协议被称为简单有效的适配层 SEAL(simple  efficient
    adaptation layer),经过论证,ATM论坛接受了SEAL,并为它起名叫AAL5。
    AAL5向其应用程序提供了几种服务。一种选择是可靠服务(即采用流控机制来保证传输,以防过载);
    另一种选择是不可靠服务(即不提供数据传输保证措施),通过选项使校验错的信元或者丢失或者传送给
    应用程序(但被标识为坏信元)。AAL5支持点到点方式和多点播送方式的传输,但多点播送方式未提供数
    据传输的保证措施。
    像AAL3/4一样, AAL5支持报文模式和流模式。在报文模式中,应用程序可以将长度从1 字节~65535
    字节的数据报传送到 AAL 层。当到达会聚子层时,将报文填充至有效载荷字段并加上尾部信息,选择填
    充数据(0 字节~47 字节),以使整个报文(包括填补的数据和尾部信息)为 48 字一节的整数倍。AAL5
    没有会聚子层头,只有一个8字节的尾。
    用户到用户UU(User  to  User)字段不用于AAL层本身,而是为了自己的目的供更高一层(可能是
    会聚子层的特定服务子部分)使用,例如,排序或者多路复用。长度(Length)字段指出真正的有效载荷
    是多少,以字节为单位,不包括填充的字节数。0值用于终止未传送完毕的报文。CRC 字段是基于整个报
    文的标准32位校验和,包括填充数据和尾部信息(CRC字段设置为0)。尾部的一个8 位的字段留作将来
    使用。报文交给SAR子层,然后发送出去。在SAR子层不增加任何头、尾信息,而是将报文分成48字节
    的单元,并将每个单元送到 ATM 层进行传输。它还通知 ATM 层将最后信元的 PTI 字段置为 1,以便保留
    报文分界。(这时出现了一个问题:这是一种不正确的协议层混合体,因为 AAL 层不该使用 ATM 层的头
    部信息。)

    AAL5较AAL3/4 的主要优点是更加高效。虽然AAL3/4对每个报文只增加4字节的头信息,但它还要
    为每个信元增加4字节的头信息,因而使有效载荷的容量减少到44字节,对于长的报文,无效数据占8%。
    AAL5的每个报文有一个稍大的尾部(8字节),但每个信元无额外开销。信元中没有顺序号,可以通过长
    的校验和来弥补,从而可以检测丢失的、误插的或错误的信元,而不需要使用顺序号。
    在因特网中,与ATM网接口的一般方法是使用AAL5的有效载荷字段来传输IP分组。

    点击看大图 

    AAL5的CPCS-PDU如上图所示:
    1.  CPCS-PDU载荷:被用于运载CPCS-SDU(用户信息)。该字段是字节调整的,其长度范围可以
    从1 到65535 个字节。
    2.  垫塞(Pad):被用于将CPCS-PDU凑成48个字节的整倍数,以利于SAR使用。此Pad 的范围
    可以从0到 47 个字节,可取任何编码(例如全0)。
    3.  CPCS用户到用户指示CPCS-UU(CPCS User-to-user indication):被用于透明地传输用户到用户
    的信息。
    4.  公共部分指示 CPI:用于将尾调整到 64 比特边界。默认的编码为 0。这一字段也可被用于
    消息类型功能(在将来)以区分例如管理消息。
    5.  长度(Length):被用于指示出按字节计算的 CPCS-PDU 载荷的长度。当被置为零时,它指示
    出异常中止功能。
    6.  CRC:CRC-32被用于对整个的CPCS-PDU进行错误的检测。

    各种AAL协议似乎不必要地相似,并且考虑得很不周到,把会聚子层和SAR子层区分开也是有疑问
    的,尤其是因为 AAL5 的 SAR 子层并无任何自己的特点。用稍微增强一些的 ATM 层头部信息来提供像排
    序、多路复用和数据分帧的功能便足够了。
    AAL 给人的整体印象是变体很多,变体之间存在很多细微的差别,而且尚未完工。原来的 4 个服务
    类 A、B、C、D 实际上已被废除。AAL1 可能确实没有必要存在;AAL2 不完整;AAL3 和 AAL4 永无出头之
    日;AAL3/4 效率低而且校验和字段位数太少。
    将来的一切都依赖于 AAL5,但到目前为止,AAL5 尚有很多改进的余地。AAL5 报文应该有一个顺序
    号和一位用于区分数据还是控制报文的标志位,从而可以成为一种可靠的传输协议。可以用尾部的未用
    空间来实现上述功能。

  • 理解和使用ICMP协议

    随着本讲座开始接触涉及路由的层,我们必须暂时停一下。我们需要关注一下最容易误解的协议:ICMP(互联网控制消息协议 )。经理人和网络管理员如果计划制定防火墙决策就要了解ICMP协议的真正用途,而且网络管理员要能够使用ICMP协议的知识全面理解路由问题。

      既然IP网络不可靠并且不能保证信息传递,因此当发生问题时通知发送人是很重要的。ICMP协议是一种提供有关阻止数据包传递的网络故障问题反馈信息的机制。 它让TCP等上层协议能够意识到数据包没有送达目的地,ICMP协议提供一种查出灾难性问题的方法。这些灾难性的问题包括“TTL exceeded”(超过生存时间)和“需要分更多的数据段”等。ICMP协议不报告IP校验失败等常见的问题。这是因为我们假定TCP或者其它可靠的协议能够处理这类数据包损坏的问题。而且,如果我们使用UDP等不可靠的协议,我们就不应理会较小数量的数据损失。

      反之,网络问题需要立即报告。例如,如果IP TTL值(IP生存时间)将达到零,这就可能是网络的某个部分发生了路由环路问题,这样将没有任何数据包能发送到目的地。端点系统需要了解这些类型的故障。ICMP是一种发送各种消息报告网络状态的协议,而非仅仅是简单的ping(联通性测试程序)。回应请求(echo request)仅是ICMP协议提供的众多消息之一。Ping信息可以被过滤掉。但是,大多数ICMP消息类型是IP、TCP和其它协议正常运行所需要的。永远不要相信ICMP协议是邪恶的并且简单的封锁这个协议。

      ICMP协议本身非常复杂。每一种类型的ICMP消息也称“主要类型(major type)”拥有自己的“子类型编码(minor codes)”。ICMP协议工作在第3层,因此,它能够在互联网上路由。一个ICMP数据包实际上就是一个IP数据部分包含ICMP协议数据的IP数据包。每一个ICMP消息都将包含引发这条ICMP消息的数据包的完全IP包头,这样,端点系统就会知道实际上哪一个数据包没有发送到目的地。另外引发此ICMP消息的数据包的前8个字节也将包括在内,这通常是TCP或者UDP包头。

      简略的说,ICMP协议消息包含永远不会变化的三个字段,随后是ICMP数据,然后是引发此消息的源IP数据包包头。不会变化的三个字段中,前8个字节包含ICMP类型(主要类型)、第二个字段包含了类型代码、第三个字段是ICMP消息校验值。

      我们需要认识到,ICMP协议在某些情况下不会发送错误信息。ICMP不会对ICMP信息做出响应。如果ICMP回应其它ICMP消息,这些消息的数量会爆炸性增长而演变为一场ICMP消息风暴。为了防止出现广播风暴,ICMP消息也不会回应一个广播或者多播地址。

      最有用的ICMP数据包类型“目标不可达”(类型三)的消息。错误消息一般由路由器生成,并且发送给数据包的来源。大多数错误信息还将发送给与发送的数据包有关的应用程序。在这种情况下,TCP协议将广泛使用ICMP协议。我们在后面将很快看到这种情况。

    在IPv4协议中最常用的ICMP消息类型有以下几种:

      •回显应答(类型0)和回显请求(类型8):这是Ping程序发送的信息。

      •目标不可达(类型3)

      •源抑制(类型4):这是一种用于通知发送者路由器或者主机出现阻塞现象的ICMP消息,发送者需要降低发送速度。

      •重定向(类型5):这个消息用来向可以访问两台路由器的主机说“请使用另一台路由器”。我们在此系列讲座中未来的路由问题中再详细讨论这个问题。

      •路由器信息应答(类型9)和路由器信息请求(类型10)

      •超时(类型11):这个消息有两种用途。第一,当超过IP生存期时向发送系统发出错误信息。第二,如果分段的IP数据报没有在某种时限内重新组合,这个消息将通知发送系统。

      当然,上述各种类型的消息中都包含子类型代码。类型三消息“目标不可达”本身有15个子类型代码。我们就不提供每一项的细节了。但是,ICMP协议中有一项非常重要的应用要依靠类型三的消息。

      路径最大传输单元(PMTU)是各种协议用来寻找整条路径中支持的最大的MTU(最大传输单元)的机制,小于此限制的数据可以不用分段。发送者在其本地接口设置最大的数据包规格,然后,在IP包头中使用DF(不要分段)的标记发出数据包。如果有问题发送者就会收到第三种类型的ICMP错误信息,其子类型代码是“要求分段,但是已经设置了DF标记”。当发生这种情况是,发送者知道它必须要减小发送数据的规格。如果没有返回错误信息,这就表明MTU的设置没有问题。

      在查找PMTU时的主要问题是人们常封锁ICMP协议,阻止这个报错信息传递到发送数据的主机。这种情况很多时候发生在你设法连接的远程站点。假如你向一台Web服务器发送一个请求,但是,一个空白页却不断出现。在虚拟专用网连接上的人们经常会看到这种情况,这是因为由于有的虚拟专用网封装的额外的文件头,它们的MTU比通常的容量要小一些。当远程Web服务器向虚拟专用网用户发送其要求的内容时,如果数据包太大,用户前面最后的路由跳数需要为这个数据分段。如果发送方设置DF标记之后,它能做的一切就是通知发送者必须发送较小的数据包。但是,发送者封锁了ICMP协议,因此这个网站将永远不会看到这种ICMP信息。不过一个好消息是大多数TCP协议的执行都是智能化的。如果它们一直得不到发送数据的许可,它们会自己以较小的分段尺寸发送数据。但是,如果你使用某些流行的、操作方便的操作系统,这种机制并没实现。

      简言之,封锁ICMP协议对于成功地运行网络是有害的。这不仅会破坏ping,事实上,如果ICMP协议不工作,许多协议都将不能完全发挥作用。

      小结

      ICMP包括许多种类型的用于各种用途的数据包,每一种类型都有子类型代码,用于指明这些消息类型的具体内容。

      查找路径最大传输单元能够让规格正确的数据包在各种数据包容量的链路上传送。

      ICMP对于恰当的路由和数据包传递是非常重要的,你只能封锁你不需要的那一些消息。

    IP协议介绍

    本文将介绍理解路由问题所需要的IP协议知识。互联网上的大多数东西都使用IP协议。与以太网不同,了解这个协议对于理解网络在更大范围的应用非常重要。在以后发表的文章中,这个讲座将介绍TCP和UDP协议、路由理论、然后再深入研究具体的路由协议。

      IP协议直接位于2层数据链路层之上,负责生成发往目的地的数据报。IP协议原来在RFC 791中定义,后来进行了修改并且进行了多次重新修订。但是,IP协议的基本设计思想仍没有变。IP层不提供任何类型的流量控制或者排序功能。这些功能留给上层。我们将使用“数据报” (datagram)这个词汇指一个完整的IP信息,使用“数据包”(packet)这个词汇指一个单个的IP数据包。

      IP协议负责接收和发送指定IP地址数据包。但是,IP协议并不保证数据传递的可靠性。在IP协议层中没有“重试一下”的概念。由于各种原因,数据包有可能出现丢失、损坏、重复、不按照顺序传递或者延迟等问题。IP协议还负责处理IP选项并且以ICMP错误和控制消息等方式提供反馈信息。

      IP数据报头有20个字节长,紧接在2层报头后面(因为IP协议是第3层协议)。IP数据部分包含一个完整的TCP或者UDP数据包等一切其它的信息,如下面的图表所示。还要指出的是,如果使用IP选项,IP数据报头可以超过20个字节。

    以太网报头
    IPv4包头
    数据(TCP等)

      IP协议的目标很简单:生成发往目的地的数据报,而且除了把这个数据包发送到下一跳路由器之外,不需要担心任何事情。实际上,IP协议很复杂,否则,IP数据报头就不需要那么多的字段。认真研究IP数据报头是非常重要的。这些字段从第一个字节开始的含义是:

      •版本:使用的IP协议的版本。IPv4数据包将把这个字段设置为“4”。

      •报头长度:以4个字节的倍数的方式说明报头的长度。因为很少使用IP选项功能。因此,你很可能你看到它的值将是“5”,意味着报头的长度是5个4字节,也就是20个字节。

      •服务类型:这个字段很少使用。但是,在理论上,这个字段旨在向路由器提供转发队列中特定IP数据报优先级顺序信息。主要用于提高服务质量。主机可以选择设置各种选项,如低延迟、高数据吞吐量或者高可靠性等。大多数路由器都忽略这些选项。

      •总长度:以字节为单位具体说明包括报头在内的整个IP数据包的总长度。因为这个字段有16位,所以IP数据包长度限制在65K之内。这个数字定义的是字段所在的IP数据包,而不是整个IP数据报的长度。

      •IP数据报ID:有时候称作“段标识符”。这个标识符用来确定一个具体的IP数据包属于哪一个IP数据报。如果IP协议需要把多个单个的IP数据包组合成一个IP数据报,这个字段是必要的。

      •标志:DF(不分片)位在这个字段中用来指示路由器不要把IP数据包分段。这里也可以使用MF(更多地分片)标识。

      •段内偏移量:原来数据报中的分段的偏移量,用64位的块表示。

      •生存时间(TTL):IP数据包在被销毁之前包含的跳数。生存时间是为了避免无法发送的数据包永远在互联网上流动。

      •协议类型:具体指明下一个协议。也就是在IP数据包的数据部分中将遇到的报头。

      •头校验和:一个报头的校验和,而不是数据的校验和。

      •IP源:原来发送数据包的主机的IP地址。

      •IP目的地:IP数据包目的地主机的IP地址。

    当路由器收到一个IP数据包的时候,路由器首先要检查这个数据包的目的地。如果这台路由器有一个通向目的地的路由,这台路由器将减少这个数据包的TTL,重新计算校验和,然后再把这个数据包发出去。如果出现错误,将会发出相应的ICMP错误通知,这个数据包将被丢弃。IP协议就是以这种最简单的方式工作的:它遇到每一个数据包都要重复上述的步骤。

      IP分段对于IP功能是非常重要的,它提供了这些报头字段的真正含义。并非每一个发送数据包的物理网络都能够接受同样大小的数据包。各种各样的2层帧格式允许同时发送不同大小的数据。允许的最大的MTU是65KB,最小的是68字节。RFC 1122规定,所有的主机必须能够重新组合最多为576字节的数据报,但实际上是应该能够重新组合与系统接口的MTU规格相同的数据报。

      当在互联网上发送一个IP数据报的时候,你不知道沿着每一个2层链路前进的MTU将发生什么情况。你可能通过以太网连接自己的ISP。但是,你正在设法访问的远程站点也许是在一个ISDN链路上。因此,你的IP数据包在到达最后一个跳点之前必须要分段。分段可能需要进行多次。如果我们要向一个通过ISDN连接的远程站点发送一个2000个字节的数据包,我们原来可能把这个数据包分段以便符合我们的1500个字节的链路要求。但它大于576字节(ISDN的MTU)。因此,在到达ISDN链路之前的最后一个路由器必须还要对这个数据包分段。

      应该知道,IP不是一个可靠的协议。因此,如果任何IP分段在传输的路径中丢失,整个数据报必须要重新发送。IP没有办法要求得到数据报中丢失的特定部分。因此,当出现错误时,其结果是重新发送该数据报所有的分段。有时候,阻塞的路由器不得不丢弃一些数据包。如果被丢弃的数据包恰巧是一个65KB数据报的一部分,那么,整个数据报必须要重新发送。TCP或者其它上层协议一般都知道一个完整的数据报是否全丢失了,并且能够要求重新发送。然而,TCP协议不能告诉你一个数据报的片段是否丢失了,因为IP收到数据报将是不完整的,并且永远不会向上层TCP协议发送这个数据报。如果TCP协议从来没有收到这个数据报,这个数据报最终将被重新发送。显然,65K数据包的一小部分的丢失对于缓解一个阻塞的链路并没有什么帮助,而是会引起更严重的阻塞。UDP应用程序发送时的大小一般不超过576字节,这有两个原因。第一,MTU小于576字节的链路并不多,因此,这个IP数据报将不会分段。第二,要记住,576是所有采用IP协议的端点系统的特殊数字:它们必须能够把数据报重新组合为这个大小。配置有限内存的设备对于处理大于这个规格的数据可能会遇到困难,因此,这个做法值得推荐。

      假设我们是一台主机,我们想发送一个1550个字节的数据报(1530个字节的数据+20个字节的报头)。但是,我们的MTU是1500个字节。我们必须要分为两个数据包发送,相关的IP报头看起来是这样的:

      • fragment 0, offset = 0, size = 1480, MF位设置.

      • fragment 1, offset = 1480, size = 50

      分段中的IP ID和IP地址总是与原来IP数据报中内容是一样的。但是,报头的校验值、偏离量和字段长度肯定要发生变化。当另一方收到第一个数据包并且看到这个数据包是一个分段的时候,另一方将等待获得其它的分段,并且把这些分段重新组合在一起,然后再发送给上层协议。

      在这个数据报发出之后,假如在IP标志中没有设置DF字节,我们就不会听到任何有关这个数据报的消息。但是,如果这个链路的某一个地方的MTU是400字节会发生什么情况呢?在可以发送1480字节的数据包之前,这个链路中的路由器会先对这个数据包分段。上一篇教程的MTU路径可用来解决中间路由器为数据包分段的问题。分段要耗费时间和宝贵的路由器资源。我们避免过度分段的主要原因就是因为过度分段将不可避免地引起通信的延迟。

      对数据包的重新组合总是在最后的目的地完成。因此,中间路由器不需要存储IP数据报。这也意味着IP数据包能够在不同的路径上单独地路由,而不会引起混乱。这是一个需要理解的重要的概念。这将使IP协议有多种用途。无论接收方以什么顺序收到这个数据包,接收方都能够根据IP报头中的分段偏移量字段重新把数据报组合起来。

      现在,我们理解了分段。我们发现分段提出了这样一个问题:IP真的与数据链路层无关吗?

      小结

      IP协议是不可靠的。当IP数据包丢失的时候,要更高一层的协议认识到数据包的丢失并且要求重新发送。

      路由器在每一次发送IP数据包的时候都必须要重新计算IP报头的校验值。

      IP分段能够让路由器延迟发送一个数据包或者在多个链路上发送数据包。端点系统将能过重新组合整个IP数据报。

    TCP协议介绍

    仅仅介绍为了让你理解下一篇关于TCP协议的讲座所需的知识。经过本文的学习你会了解一些TCP相关的术语,理解TCP包头的各组成部分,然后,我们将在后面一篇文章中重点讲解TCP协议常见的一些问题,包括TCP窗口可伸缩性问题、阻塞和TCP连接机制等问题。

      我们有时候听到人们提到“TCP/IP协议栈”。这意味着他们在谈论1至4层和7层的问题,TCP协议位于第四层。其代表的含义是传输控制协议(Transmission Control Protocol)。还记得IP协议那篇文章中的协议头的构成吗?当一个数据包被封装之后,第三层当然有个IP协议头,紧接着就是这个TCP协议头。TCP协议头成为了IP协议头中的“数据”。就像其它协议都有自己的术语一样,TCP协议也有自己的专门术语,如以太网帧、IP数据报和现在的TCP段等。你可以把它们都当作数据包。但是,当它们之间在进行通讯的时候,一定要使用正确的术语。

      TCP协议是一种端对端的协议。使用TCP没有任何广播或类似的概念。要用TCP协议与另一台计算机通信,两台机之间必须像打电话一样连接在一起,每一端都都为通话做好准备。“流传输”(Stream delivery)是谈到TCP时的另一个常用词语。这个短语的含义是TCP协议主要用来处理数据流,可以正确处理乱序的数据包。TCP协议甚至还允许存在丢失的或者损坏的数据包,最终它可以再次得到这些数据包。你很可能听一位程序员在谈论“流”的概念。他指的是这样一个事实:数据到底是在什么时候发送的是很难说清楚的,你也可以在TCP流中发送非结构化数据。TCP协议以它自己的方式缓存数据。不过,其缓存过程对程序员和用户是透明的。

      TCP协议每发送一个数据包将会收到一个确认信息。这种发送/应答模式是提供可靠的协议的唯一方法:你必须让对方知道你否收到了数据。当然,这也会造成一些性能损失,而人们需要改善系统效率不高的状况。所以引入了“捎带确认(piggybacking ACKs)”的方法。TCP协议之所以是全双工的就是因为这个“捎带确认”信息,因为它允许双方同时发送数据。这是通过在当前的数据包中携带以前收到的数据的确认信息方式实现的。从提高网络利用率的角度看,这比单纯发送一个通知对方“信息已收到”的数据包要好得多。最后,还有一个批量确认的概念:也即一次确认一个以上的数据包,表示“我收到了包括这个数据包在内的全部数据包”。

      在IP协议中,我们处理的单个数据包是一个更大的数据报的一部分。请记住,一个TCP段就是一个单个的TCP数据包。TCP是一个数据流,因此,除了“连接”之外,没有任何需要真正担心的其它概念。最大报文段长度(MSS)是在连接的时候协商的,但是,它总是在不断地改变。默认的最大报文段长度是536字节,这是576字节(IP协议保证的最小数据包长度)减去用于IP头的20个字节和用于TCP头的20个字节以后的长度。TCP协议要设法避免在IP级别上的分段。因此,TCP协议总是从536字节开始的。

      TCP协议最有魅力的功能仍然保留着。这就是滑动窗口协议。这个窗口实际上是已经发出的“没有签收确认的”数据总数。这个窗口可以根据意愿放大和缩小。这是很有趣的。下一讲将介绍这方面的内容。

      一个TCP数据包的头是20个字节,就像一个IP数据包一样。如果使用一些选项,IP和TCP数据包头都可以放大。TCP头不包含IP地址,它仅需要知道要连接哪一个端口。不过,你不要被这弄晕了。TCP工作时要一直跟踪状态表中的端对端的连接。这个状态表包含IP地址和端口。这就是说,只是TCP头不需要IP信息,因为它来自于IP头。

      把一个数据包设想为一个字节跟着一个字节的数据流是很容易的。很多人都想要一个显示TCP头的表格。但是,这常会把事情搞乱。TCP头从第一位开始依次是下面这些内容:

      •源端口,16位:用于这次连接的本地TCP端口。

      •目的地端口,16位:通讯目标机器的TCP端口。

      •序列号,32位:用来跟踪数据包顺序的号码。

      •确认编号,32位:我们确认的以前收到的序列号。

      •头长度,4位:报头中的32位字(words)的数量。如果不使用选项,这个值设定为5。

      •保留,6位:为将来的使用保留的字节。

      •标记,一共6位:每一个标记一个字节(开或者关)

      -URG:紧急字段指针。

      -ACK:本数据包是(或者包含)一个确认信息。

      -PSH:推送功能(没有使用)。

      -RST:重置,或者中断本次连接。

      -SYN:同步数据包,也就是开始连接。

      -FIN:最后一个数据包,开始挂断序列。

      •窗口尺寸,16位:从接收方将收到的确认字段开始。

      •校验和,16位:TCP头和数据的校验和。

      •应急指针,16位:指向跟在URG数据后面的数据的序列号的偏移值。

      •选项:MSS、窗口比例等等。我们在关于TCP协议的下一讲中将重点介绍这个部分。

      TCP连接的两端使用两对IP地址和端口识别这个连接,并且向监听这个端口的应用程序发送数据。

    现在我们来介绍一下TCP协议的运行问题,因为我们对TCP协议实际上是什么样子知道的并不多。

      我们说过,TCP协议在能够发送数据之前就建立起了“连接”。要实现这个连接,启动TCP连接的那一方首先将发送一个SYN(回忆一下在上一篇文章中讲到的TCP包头格式)数据包。这只是一个不包含数据的数据包,然后,打开SYN标记。如果另一方同时在它收到SYN标记的端口通话,它将发回一个SYN+ACK:SYN和ACK标志位都被打开,并将ACK(确认)编号字段设定为刚收到的那个数据包的顺序号字段的值。接下来,连接发起方为了表示收到了这个SYN+ACK信息,会向发送方发送一个最终的确认信息(ACK包)。这种SYN、SYN+ACK、ACK的步骤被称为TCP连接建立时的“三次握手”。在这之后,连接就建立起来了。这个连接将一直保持活动状态,直到超时或者任何一方发出一个FIN(结束)信号。

      任何一方都可以关闭一个TCP连接,要求双方发送一个FIN信号关闭自己的通讯频道。一方可以在另一方之前关闭,或者双方同时关闭TCP连接。因此,当一方发送一个FIN信号时,另一方可发送“FIN+ACK”,开始关闭自己一方的通信并且确认收到了第一个FIN信号。发送第一个FIN信号的人接下来再发送一个“FIN+ACK”信息,确认收到第二个FIN信号。另一方就知道这个连接已经关闭了,并且关闭了自己的连接。发送第一个FIN的人没有办法收到最后一个ACK信号的确认信息。这时它会进入“TIME_WAIT”(等待时间)状态并启动一个定时器,防止另一方没有收到ACK信息并且认为连接仍是打开的。一般来说,这个状态会持续1至2分钟。

      现在,我们来讨论第一个问题。如果有人(假如一个黑客)在你的Web服务器上留下一个半开或者半关的连接,那就是一个坏消息。每一个连接都要消耗内存,打开数千个虚假的TCP连接可能导致服务器瘫痪。当然,你实际上不可能在不影响TCP正常工作的情况下调整TCP定时器。如果你听说过TCP SYN 攻击的话,那就是这个意思。为了防止出现这种情况,大多数操作系统都要限制半开连接的数量。例如,Linux默认的限制一般是256个。

      我们前面提过将讨论关于持续流控制问题,现在我们就来讨论这个问题。TCP中实现它的机制是TCP滑动窗口机制。TCP协议使用“重新发送与正向ACK”来保证数据传输的可靠性。发送方将等待一段时间,如果没有收到其发送的数据包的ACK确认信息,发送方就要重新发送。顺便说一下,TCP协议中有许多定时器。这只是其中一个定时器。ACK的概念对于流控制是非常重要的,因为TCP滑动窗口协议使TCP的往复确认变得更有效率。如果TCP要发送一个数据包并且等待每一个ACK确认信息,它实际上就把数据吞吐量削减了一半。

  • 摘 要:TCP是针对固定网络设计的一种传输协议,其错误控制机制是基于将所有丢包原因都归结于网络拥塞的假设。这种错误控制机制在有线网络上获得了很大的成功;但由于移动计算环境有着明显不同于有线网络环境的特点,如较高的位出错率、可用带宽小、衰减信道等,因此针对传统有线网络设计的TCP协议,其性能受到了很大影响。本文对目前移动计算环境下TCP协议的一些主要改进方案进行了综述,在对这些方案进行分类的基础上,对其优缺点进行了分析,并且对这些方案进行了比较。最后,提出了进一步研究的方向。

    1. 引言

    互联网最初源于美国国防部的ARPANET计划。在上世纪60年代中期,正是冷战的高峰,美国国防部希望有一个命令和控制网络能够在核战争的条件下幸免于难,而传统的电路交换的电话网络则显得太脆弱。国防部指定其下属的高级研究计划局(ARPA)解决这个问题,此后诞生的一个新型网络便称为ARPANET,其最大特点是采用无连接的端到端包交换服务。随后ARPANET开始与美国国家科学基金会(NSF)建成的NSFNET及加拿大、欧洲和太平洋地区的网络互联。到了80年代中期,人们开始把互联的网络称为互联网。

    早在70年代中期,ARPA为了实现异种网络之间的互联与互通,推出了TCP/IP体系结构和协议规范。时至今日,TCP/IP协议也成为最流行的网际互联协议,并由单纯的TCP/IP协议发展成为一系列以IP为基础的TCP/IP协议簇。TCP/IP协议簇为互联网提供了基本的通信机制。

    互联网采用的是无连接的端到端数据包交换,提供“尽力而为”(best effort)服务模型的设计机制。这种机制的最大优势是设计简单,可扩展性强。互联网在过去的十几年中经历了爆炸式的增长,这已经充分证明了这种设计机制的成功。然而这种优势并不是没有代价的,随着互联网用户数量的膨胀,网络的拥塞问题也越来越严重。例如由于队列溢出,互联网路由器会丢弃约10%的数据包。据统计,互联网上95%的数据流使用的是TCP/IP协议,因此,互联网上主要的互连协议TCP/IP的拥塞控制(congestion control)机制对控制网络拥塞具有特别重要的意义。拥塞控制是确保互联网鲁棒性(robustness)的关键因素,也是各种管理控制机制和应用(如多媒体通信中QoS控制、区分服务(differentiated services))的基础,因此关于互联网的拥塞控制问题一直是网络研究的一个热点。

    TCP是目前Internet上使用最广泛的一种传输协议,根据MCI的统计,Internet上总字节数的95%及总数据包数的90%使用TCP协议传输[25]。TCP的目的是为了解决Internet的稳定性、异质性(接受端缓冲区大小、网络带宽及延迟等)、各流之间享用带宽的公平性、使用效率及拥塞控制等问题,从而为Internet提供可靠、健壮(robust)的端到端通讯。Internet近十年来的迅猛发展已证明TCP协议在设计上是成功的。

    但是,TCP是为固定主机及有线网络设计的一种滑动窗口协议,它在位出错率(bit rate error,BER)很低、丢包的主要原因是网络拥塞的传统网络上的成功在移动计算环境下受到了巨大的挑战。移动计算带来的新问题主要是无线链路传输的可靠性、移动操作的特点以及对效率进行评估的性能尺度等。因此,对TCP协议的改进已经成为近几年网络通讯领域的一个研究热点。

    本文第二部分对网络拥塞的基本概念进行了简要介绍;第三部分TCP的拥塞控制机制及有线网络环境下的改进进行了介绍;第四部分分析了TCP在移动计算环境下的缺点及其需要增加的功能;第五部分对增强移动环境下TCP的技术方案进行了分类介绍,分析了各自的优缺点,并对这些方案进行了比较。最后进行了总结,并提出了有待进一步研究的一些热点方向。

    2. 网络拥塞的基本概念

    2.1 拥塞的基本概念和互联网模型

    当网络中存在过多的数据包时,网络的性能就会下降,这种现象称为拥塞。在网络发生拥塞时,会导致吞吐量下降,严重时会发生“拥塞崩溃”(congestion collapse)现象。一般来说,拥塞崩溃发生在网络负载的增加导致网络效率的降低的时候。最初观察到这种现象是在1986年10月,在这个过程中,LBL与UC Berkeley之间的吞吐量从32kbps下降到了40bps。Floyd总结出拥塞崩溃主要包括以下几种:传统的崩溃、未传送数据包导致的崩溃、由于数据包分段造成的崩溃、日益增长的控制信息流造成的崩溃等。

     

    图1:网络负载与吞吐量及响应时间的关系

    对于拥塞现象,我们可以进一步用图1来描述。当网络负载较小时,吞吐量基本上随着负载的增长而增长,呈线性关系,响应时间增长缓慢。当负载达到网络容量时,吞吐量呈现出缓慢增长,而响应时间急剧增加,这一点称为Knee。如果负载继续增加,路由器开始丢包,当负载超过一定量时,吞吐量开始急剧下降,这一点称为Cliff。拥塞控制机制实际上包含拥塞避免(congestion avoidance)和拥塞控制(congestion control)两种策略。前者的目的是使网络运行在Knee附近,避免拥塞的发生;而后者则是使得网络运行在Cliff的左侧区域。前者是一种“预防”措施,维持网络的高吞吐量、低延迟状态,避免进入拥塞;后者是一种“恢复”措施,使网络从拥塞中恢复过来,进入正常的运行状态.

    拥塞现象的发生和前面提到的互联网的设计机制有着密切关系,我们对这种设计机制作一个简单的归纳:

    1. 数据包交换(packet switched)网络:与电路交换(circuit switched)网络相比,由于包交换网络对资源的利用是基于统计复用(statistical multiplexing)的,因此提高了资源的利用效率。但在基于统计复用的情况下,很难保证用户的服务质量(quality of service,QoS),并且很容易出现数据包“乱序”的现象,对乱序数据包的处理会大大增加拥塞控制的复杂性。
    2. 无连接(connectionless)网络:互联网的节点之间在发送数据之前不需要建立连接,从而简化了网络的设计,网络的中间节点上无需保留和连接有关的状态信息。但无连接模型很难引入接纳控制(admission control),在用户需求大于网络资源时难以保证服务质量;此外,由于对数据发送源的追踪能力很差,给网络安全带来了隐患;无连接也是网络中出现乱序数据包的主要原因。
    3. “尽力而为”的服务模型:不对网络中传输的数据提供服务质量保证。在这种服务模型下,所有的业务流被“一视同仁”地公平地竞争网络资源,路由器对所有的数据包都采用先来先处理(First Come First Service,FCFS)的工作方式,它尽最大努力将数据包包送达目的地。但对数据包传递的可靠性、延迟等不能提供任何保证。这很适合Email、Ftp、WWW等业务。但随着互联网的飞速发展,IP业务也得到了快速增长和多样化。特别是随着多媒体业务的兴起,计算机已经不是单纯的处理数据的工具。这对互联网也就相应地提出了更高的要求。对那些有带宽、延迟、延迟抖动等特殊要求的应用来说,现有的“尽力而为”服务显然是不够的。

    2.2 拥塞产生的原因

    拥塞发生的主要原因在于网络能够提供的资源不足以满足用户的需求,这些资源包括缓存空间、链路带宽容量和中间节点的处理能力。由于互联网的设计机制导致其缺乏“接纳控制”能力,因此在网络资源不足时不能限制用户数量,而只能靠降低服务质量来继续为用户服务,也就是“尽力而为”的服务。

     

    图2(a) 图2(b)

    拥塞虽然是由于网络资源的稀缺引起的,但单纯增加资源并不能避免拥塞的发生。例如增加缓存空间到一定程度时,只会加重拥塞,而不是减轻拥塞,这是因为当数据包经过长时间排队完成转发时,它们很可能早已超时,从而引起源端超时重发,而这些数据包还会继续传输到下一路由器,从而浪费网络资源,加重网络拥塞。事实上,缓存空间不足导致的丢包更多的是拥塞的“症状”而非原因。另外,增加链路带宽及提高处理能力也不能解决拥塞问题,例如,图2(a)中,四个节点之间的链路带宽都是19.2kbps,传输某个文件需要用时5分钟;当第一个节点和第二个节点之间的链路带宽提高到1Mbps时(如图2(b)所示),传输完该文件所需时间反而大大增加到了7个小时!这是因为在路由器R1中,数据包的到达速率远远大于转发的速率,从而导致大量数据包被丢弃,源端的发送速度被抑止,从而使得传输时间大大增加。即使所有链路具有同样大的带宽也不能解决拥塞问题,例如图3中,

    所有链路带宽都是1Gbps,如果A和B同时向C以1Gbps的速率发送数据,则路由器R的输入速率为2Gbps,而输出速率只能为1Gbps,从而产生拥塞。
    单纯地增加网络资源之所以不能解决拥塞问题,是因为拥塞本身是一个动态问题,它不可能只靠静态的方案来解决,而需要协议能够在网络出现拥塞时保护网络的正常运行。目前对互联网进行的拥塞控制主要是依靠在源端执行的基于窗口的TCP拥塞控制机制。网络本身对拥塞控制所起的作用较小,但近几年这方面的研究已经成了一个新的热点。

    3. TCP拥塞控制及其改进

    3.1 TCP拥塞控制机制介绍

    基于源端的拥塞控制策略中,使用最为广泛的是TCP协议中的拥塞控制策略,TCP协议是目前互联网中使用最为广泛的传输协议。根据MCI的统计,互联网上总字节数的95%及总数据包数的90%使用TCP协议传输。

    早期的TCP协议只有基于窗口的流控制(flow control)机制而没有拥塞控制机制,因而易导致网络拥塞。1988年Jacobson针对TCP在网络拥塞控制方面的不足,提出了“慢启动”(Slow Start)和“拥塞避免”(Congestion Avoidance)算法。1990年出现的TCP Reno版本增加了“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)算法,避免了网络拥塞不严重时采用“慢启动”算法而造成过度减小发送窗口尺寸的现象,这样TCP的拥塞控制就主要由这4个核心算法组成。

    TCP协议的目的是为上层应用提供可靠的服务,其主要特征在于:

    1. 确保各流享用带宽的公平性。
    2. 动态发现当前可利用的带宽。
    3. 拥塞避免及控制机制以避免拥塞崩溃(congestion collapse)的发生。

    标准版本的TCP使用基于窗口的的和式增加积式减小(Additive Increase Multiplicative Decrease,AIMD)方式控制发送速率,以保证稳定性及带宽享用的公平性。

    错误控制机制是一个可靠传输协议的关键部分。它对协议的性能有很大的影响,包括吞吐量、能量消耗及可靠性。错误控制通常包括错误检测和错误恢复两部分。为了保证数据传输的可靠性,TCP要求接受端在正确接收到数据段(data segment)后向发送端发送一个确认包,确认包中包含了期望接收到的下一个数据段的序号。TCP发送端通过监测确认包的序号来检测是否发生了错误。如果发生超时或者发送端收到一定数量(通常是3个)重复的确认包,则认为传输过程中发生了错误,数据段被丢弃。由于有线网络的位出错率很低(例如光纤的BER通常只有10-12[22]),因此TCP假设丢包是由于网络拥塞引起的。在错误恢复处理过程中,TCP重传丢弃的数据段、减小发送端窗口大小并且在超时情况下重置超时时钟。

    最初的TCP协议只有基于窗口的流控制(flow control)机制而没有拥塞控制机制。流控制作为接受方管理发送方发送数据的方式,用来防止接受方可用的数据缓存空间的溢出。流控制是一种局部控制机制,其参与者仅仅是发送方和接收方,它只考虑了接收端的接收能力,而没有考虑到网络的传输能力;而拥塞控制则注重于整体,其考虑的是整个网络的传输能力,是一种全局控制机制。正因为流控制的这种局限性,从而导致了拥塞崩溃现象的发生。

    1986年初,Jacobson开发了现在在TCP应用中的拥塞控制机制。运行在端节点主机中的这些机制使得TCP连接在网络发生拥塞时回退(back off),也就是说TCP源端会对网络发出的拥塞指示(congestion notification)(例如丢包、重复的ACK等)作出响应。1988年Jacobson针对TCP在控制网络拥塞方面的不足,提出了“慢启动”(Slow Start)和“拥塞避免”(Congestion Avoidance)算法。1990年出现的TCP Reno版本增加了“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)算法,避免了网络拥塞不严重时采用“慢启动”算法而造成过大地减小发送窗口尺寸的现象,这样TCP的拥塞控制就由这4个核心部分组成。近几年又出现TCP的改进版本如NewReno和选择性应答(selective acknowledgement,SACK)等。正是这些拥塞控制机制防止了今天网络的拥塞崩溃。

    TCP拥塞控制四个主要过程(如图4(a)和(b)所示)简要介绍如下:

    1. 慢启动阶段:早期开发的TCP应用在启动一个连接时会向网络中发送大量的数据包,这样很容易导致路由器缓存空间耗尽,网络发生拥塞,使得TCP连接的吞吐量急剧下降。由于TCP源端无法知道网络资源当前的利用状况,因此新建立的TCP连接不能一开始就发送大量数据,而只能逐步增加每次发送的数据量,以避免上述现象的发生。具体地说,当建立新的TCP连接时,拥塞窗口(congestion window,cwnd)初始化为一个数据包大小。源端按cwnd大小发送数据,每收到一个ACK确认,cwnd就增加一个数据包发送量,这样cwnd就将随着回路响应时间(Round Trip Time,RTT)呈指数增长,源端向网络发送的数据量将急剧增加。事实上,慢启动一点也不慢,要达到每RTT发送W个数据包所需时间仅为RTT×logW。由于在发生拥塞时,拥塞窗口会减半或降到1,因此慢启动确保了源端的发送速率最多是链路带宽的两倍。
    2. 拥塞避免阶段:如果TCP源端发现超时或收到3个相同ACK副本时,即认为网络发生了拥塞(主要因为由传输引起的数据包损坏和丢失的概率很小(<<1%))。此时就进入拥塞避免阶段。慢启动阈值(ssthresh)被设置为当前拥塞窗口大小的一半;如果超时,拥塞窗口被置1。如果cwnd>ssthresh,TCP就执行拥塞避免算法,此时,cwnd在每次收到一个ACK时只增加1/cwnd个数据包,这样,在一个RTT内,cwnd将增加1,所以在拥塞避免阶段,cwnd不是呈指数增长,而是线性增长。
    3. 快速重传和快速恢复阶段:快速重传是当TCP源端收到到三个相同的ACK副本时,即认为有数据包丢失,则源端重传丢失的数据包,而不必等待RTO超时。同时将ssthresh设置为当前cwnd值的一半,并且将cwnd减为原先的一半。快速恢复是基于“管道”模型(pipe model)的“数据包守恒”的原则(conservation of packets principle),即同一时刻在网络中传输的数据包数量是恒定的,只有当“旧”数据包离开网络后,才能发送“新”数据包进入网络。如果发送方收到一个重复的ACK,则认为已经有一个数据包离开了网络,于是将拥塞窗口加1。如果“数据包守恒”原则能够得到严格遵守,那么网络中将很少会发生拥塞;本质上,拥塞控制的目的就是找到违反该原则的地方并进行修正。

     
    图4(a):慢启动和拥塞避免 图4(b):快速重传和快速恢复

    经过十多年的发展,目前TCP协议主要包含有四个版本:TCP Tahoe、TCP Reno、TCP NewReno和TCP SACK。TCP Tahoe是早期的TCP版本,它包括了3个最基本的拥塞控制算法-“慢启动”、“拥塞避免”和“快速重传”。TCP Reno在TCP Tahoe基础上增加了“快速恢复”算法。TCP NewReno对TCP Reno中的“快速恢复”算法进行了修正,它考虑了一个发送窗口内多个数据包丢失的情况。在Reno版中,发送端收到一个新的ACK后旧退出“快速恢复”阶段,而在NewReno版中,只有当所有的数据包都被确认后才退出“快速恢复”阶段。TCP SACK关注的也是一个窗口内多个数据包丢失的情况,它避免了之前版本的TCP重传一个窗口内所有数据包的情况,包括那些已经被接收端正确接收的数据包,而只是重传那些被丢弃的数据包。

    另外,在1994年,L.S.Brakmo等提出了一种新的拥塞控制策略-TCP Vegas。由于RTT值与网络运行情况有密切关系,因此,TCP Vegas通过观察TCP连接中RTT值改变感知网络是否发生拥塞,从而控制拥塞窗口大小。如果发现RTT值变大,Vegas就认为网络正在发生拥塞,于是开始减小拥塞窗口;另一方面,如果RTT变小,Vegas就认为网络拥塞正在解除,于是再次增加拥塞窗口。这样,拥塞窗口在理想情况下就会稳定在一个合适的值上。TCP Vegas的最大优点在于拥塞机制的触发只与RTT的改变有关,而与包的具体传输时延无关。由于TCP Vegas不是利用丢包来判断网络可用带宽,而是以RTT的变化来判断,因此能更精确地预测网络的可利用带宽,其公平性、效率都较好。但TCP Vegas之所以未能在互联网上大规模使用,主要是因为使用TCP Vegas的流在带宽竞争能力方面不及未使用TCP Vegas的流,从而导致网络资源享用不公平,而不是算法本身的问题。

    3.2 拥塞控制的主要问题

    拥塞控制的问题主要集中在效率和公平性(fairness)上。网络资源的使用效率是指源端要求的总资源与网络所能提供的资源之间的关系。如果二者刚好相等或者很接近,那么这种算法的效率就是高的,否则都是效率不高的表现。

    公平性是指在网络发生拥塞时各连接能公平地共享网络资源。产生公平性的根本原因在于拥塞发生必然导致数据包丢失,而数据包丢失会导致各数据流之间为争抢有限的网络资源发生竞争,竞争能力强的数据流将到更多网络资源,从而损害了其他流的利益。所以说没有拥塞,也就没有公平性问题。公平性问题表现在两方面:一是拥塞响应的TCP流和非拥塞响应的UDP流之间资源享用不公平;二是TCP流之间资源享用的不公平。前者主要是在发生拥塞时对拥塞指示作出的不同反应造成的。由于TCP流具有拥塞控制机制,在收到拥塞指示后,源端会主动降低发送速率;而UDP流由于没有端到端的拥塞控制机制,因此在收到拥塞指示后,UDP不会降低数据发送速率。结果在网络拥塞时,拥塞适应的TCP流得到的资源越来越少,非拥塞适应的UDP得到的资源越来越多,从而导致了网络资源分配的不公平。网络资源分配的不公平反过来会加重拥塞情况,甚至可能导致拥塞崩溃。对于第二个不公平性问题,研究表明,不同的窗口大小、RTT值及数据包的尺寸都会影响TCP流对带宽的占用。窗口较大,或者RTT较小,或者数据包较大的流往往能占用更多的带宽。

    3.3 有线网络中TCP拥塞控制机制的改进

    3.3.1 针对对不必要的超时重传和快速重传

    我们知道,当前的TCP应用主要有两种重传机制-快速重传和超时重传。当TCP源端收到3个ACK副本时,就会触发快速重传机制,此时源端重传丢失的数据包并且将拥塞窗口大小减半。这种情况下,TCP流往往能够很快从丢包中恢复过来,重新回到原先的发送速率。但如果TCP源端没有收到3个ACK副本,例如拥塞窗口大小小于4,那么TCP源端则需要等待相当长时间,以便超时重发。这样,小窗口的TCP流就很容易陷入不必要的超时重发,使其吞吐量大大下降。

    为了避免这种不必要的超时重传,一种改进办法就是只要TCP源端收到一个或者两个ACK副本,并且如果通告窗口允许,便继续发送新的数据包。这是因为只要收到ACK副本,就表明有数据包已经离开网络被接受端接收了,而此时源端还无法判断数据包是否被丢弃,根据“数据包守恒”原则,只要遵守拥塞窗口的规范,也即同时在网络中传送的数据包数量不能超过拥塞窗口的大小(以数据包为单位),源端就可以继续发送新的数据包。这种机制称为限制传输机制(Limited Transmit mechanism),这种机制对排序的数据包尤其有效。

    限制传输机制可以使小窗口的TCP流很快从丢包中恢复过来。例如,对于拥塞窗口大小为4地TCP流,如果其第二个数据包丢失,那么按传统地做法需要等待超时重传。而在限制传输机制下,当源端收到对第三个数据包确认的ACK副本时(ACK中要求源端发送第二个数据包),继续发送新的数据包,最终源端可以收到三个ACK副本从而触发快速重传,从而减少了不必要的超时重传。

    3.3.2 针对乱序包和延迟包引起的重传

    在不少情况下,TCP源端推断认为数据包被丢弃了,从而导致重传及拥塞窗口的减小,而实际上数据包并没有被丢弃。如果超时时钟过早地到时了(事实上数据包或者ACK并没有丢失,只要能够再等待一会儿并可收到ACK),源端便毫无必要地重发了数据包,更严重的是拥塞窗口的减小,而实际上并没有数据包被丢弃。类似地,如果由于数据包的乱序导致源端接收到3个ACK副本,便会导致快速重传,TCP源端也毫无必要地重发了数据包,并且减小了拥塞窗口。对于前者,虽然可以通过更为精确地调节超时时钟来减少不必要地超时重传,但要完全避免却是不可能的。同样,对于后者,虽然可以通过提高快速重传算法的性能来减少不必要的快速重传,但也不可能完全避免。

    对于拥塞窗口较大的流,比如大小为W,不必要地减小拥塞窗口会导致其至少花费W/2 RTT时间恢复到原来拥塞窗口的大小,从而使其性能大大下降,特别是在数据包持续出现乱序或者对RTT的估算不很精确的情况下。持续乱序的数据包往往是由于路由的改变或者链路层重传受损的数据包引起的。

    为了使得在出现不必要的超时重传和快速重传情况下,TCP性能能够更加健壮(robust),一种方法就是在出现这些情况时向TCP源端发送有关的信息。这个工作已经由D-SACK扩展(duplicate-SACK extension)完成了。D-SACK扩展允许TCP接受端在利用SACK选项来通报收到重复的数据包,从而TCP源端能够正确地推断出接受端是否收到了重复地数据包。因此,D-SACK扩展使得TCP源端在重发后一个RTT时间内正确地推断出重发是否必要。如果源端认为重发是不必要的,那么拥塞窗口减半也就没必要了,源端就会将拥塞窗口大小和慢启动阈值分别恢复到原来的值,这样拥塞窗口恢复到原来的大小只需1RTT时间而不是W/2 RTT时间了。

    3.3.3一种新的拥塞控制机制XCP

    针对目前基于窗口的TCP拥塞控制机制的不足,最近MIT的D.Katabi、C.Rohrs和UC Berkeley的M.Handley共同提出了一种新的互联网拥塞控制机制XCP(eXplicit Control Protocol)。XCP源端维持有拥塞窗口cwnd和回路响应时间RTT并且通过数据包中的拥塞头(congestion header)将这两个值与路由器进行通信。当XCP连接刚刚建立时,与TCP一样,初始cwnd较小,XCP将其理想的发送速率填入到拥塞头中,如果链路带宽允许,则在一个RTT后就以次速率发送数据;如果链路带宽不足,则网络会给出一个发送速率,在一个RTT后源端就以此速率发送数据。

    在随后的数据包传输过程中,根据数据流入速率和链路带宽之间的关系,路由器通知每个流是要增加还是减少拥塞窗口并将有关信息填入到拥塞头中。如果在后面的传输过程中,有路由器拥塞更加严重,则该路由器将拥塞头中的有关信息改写。最终该数据包将获得传输过程中的瓶颈链路信息,并将传送给接收端。接收端再将次信息写入到确认包中传送给源端,源端依此信息对拥塞窗口进行调整。通过将拥塞状态信息放入数据包中,XCP无需路由器维持每流状态信息,扩展性较好。

    实验表明,与传统的TCP拥塞控制机制相比,XCP具有链路利用效率高、公平性好、可扩展性强、排队时延小的优点,并且路由器的开销也非常小。但XCP最终能否被标准化作为下一代互联网的传输协议我们将拭目以待。