Citrix ICA协议
Citrix的ICA协议(Independent Computing Architecture),普遍翻译为中文:独立计算体系结构。也可以称为是ICA = Intelligent Console Architecture,翻译为中文就是智能控制台架构!WinCredible技术是一个完整的基于Windows系统的扩展技术,支持多个并发用户通过本地局域网或串行连接或远程通过拨号调制解调器访问服务器。在最新版本的Citrix产品中,ICA协议和HDX进行了整合,Citrix将其统称为ICA/HDX协议。
ICA协议工作于OSI七层模型中的第六层。
ICA数据包包含以下标题:帧头,可靠性,加密,压缩,命令,数据命令,帧路径。该命令是唯一必需的信息。在ICA中将KVM,打印,音频,驱动器映射,剪贴板,无缝窗口等虚拟通道进行封装。目前ICA协议基于32bit开发,最多支持32个虚拟通道。 RDP通道和ICA不同,RDP支持30个虚拟通道。每个通道都有一个服务器上的对应点。这些通道位于在ICAWinstation驱动的上面,并且每个通道都有自己相对应的虚拟通道驱动程序。
ICA协议堆栈如下图所示:通过此图可以更好的理解ICA协议,以及明白ICA协议如何与TCP/IP进行交互,以及在以太网中如何进行数据包的接受和发送。
在上图中,描述了ICA数据如何通过各协议层的进行流动。ICA协议数据包是通过TCP/ IP网络由客户端应用程序(或服务器)中产生并包装用于递送到服务器(或客户端应用程序)。
目的地(客户端或服务器)接收的ICA数据通过相应的协议层。所有的ICA协议层驻留在OSI网络模型内。
(一)虚拟通道驱动。
每个虚拟通道会通过他自己专门的虚拟通道驱动将数据发送到WinStation驱动。因为每个虚拟通道的实现功能不一致,所以其去调用相应系统的自己的驱动就不相同和不规范。所以虚拟通道的驱动都是基于需要实现的功能来作相应的驱动开发,完全取决于虚拟通道实现。
(二)WinStation驱动。
该WinStation驱动通过较低的网络层接收和发送来自多个ICA虚拟通道驱动的虚拟通道的数据。该WinStation驱动工作在OSI网络模型的应用层、表示层和会话层。WinStation驱动程序执行以下功能:(1)建立客户端和服务器之间的ICA会话,并保持会话信息诸如在ICA会话中压缩和加密功能是否开启和ICA数据包优先级标识是否启用。(2)编码ICA命令信息和变换输入虚拟通道数据分成ICA报文,它放置在WinStation驱动程序的输入缓冲区中。一个ICA包由一个命令字节后跟可选命令数据。包含指令数据的ICA数据包并不是硬性的要求,因此一个ICA数据包在命令格式这里可能仅包含单个命令字节。 一个ICA数据包包含一个虚拟通道数据。一个单一的ICA包的最大长度不能超过2048字节(2KB)。(3)压缩ICA数据包(当数据包处于连通时进行压缩)。(4)合并或分离压缩ICA数据包(如果不使用压缩或解压缩的ICA数据包)进入一个可用的输出缓冲器。WinStation驱动程序确定在各输出缓冲器的数据量,使得包括ICA数据包的长度在成帧协议驱动程序离开时不超过1460字节(保持ICA数据包通过TCP/ IP传送的时候不被分解或丢弃)。(5)在加入到输出缓冲器(当压缩已打开时)附加一个压缩报头。当多个ICA数据包被分配到一个输出缓冲器中,WinStation驱动程序在输出缓冲区里确定哪些ICA虚拟通道的数据包是具有最高优先级的。确定基于虚拟通道的每个输出缓冲区的优先级,并通过此信息提供给成帧协议的驱动程序。例如,如果该输出缓冲器包含Thinwire(优先级0)和打印(优先级为3)的ICA的数据包,那么Thinwire的数据的优先级最高,在输出数据的时候优先输出Thinwire虚拟通道的ICA数据包。
将输出缓冲区转发给加密协议驱动程序(在加密时)。
(三)加密协议驱动程序
在打开加密时,加密协议驱动程序将Winstation驱动输出缓冲区数据传递过来的数据添加加密头。所有的数据都经过加密头加密,包括压缩头(如果压缩开启)。
(四)帧协议驱动程序
帧协议驱动程序计算输出缓冲区的字节计数,并添加一个帧头。在除了字节计数、帧头包括一个二位的由WINSTATION驱动程序确定优先值。
(五)、TDTCP
ICA协议通过tdtcp(TCP传输驱动程序)传输控制TCP/IP协议栈。tdtcp是ICA(RDP)接口的TCP/IP协议栈。tdtcp不附加任何额外的头部或尾部信息到ICA数据。
(六)TCP/IP协议
一旦TDTCP控制转移到TCP/IP协议栈,该TCP/IP协议驱动程序将准备在网络中传输ICA数据。