在XenDesktop 4中,一般情况下,1494和2598端口是一直处于LISTENING状态,也可以telnet通,而到了XenDesktop 5,大家如果还是使用telnet这种机制来验证的话,可能就行不通了。以前一直没注意,今天仔细跟踪了下中间的工作机制。
先来看看这张ICS Services的基本工作机制图,图分两部分,一是绿色的正常情况,二是在DDC宕机的情况。
Citrix ICA Services在VDA中负责提供终端设备(endpoint device)连接支持,也就是通俗讲的PortICA主服务。
Citrix CGP Server Services,为终端提供会话可靠性机制,也就是会话保持。
以上两个服务对应的监听端口为1494和2598.
正常情况下:
默认情况下,VDA的1494和2598端口(也就是ICA Services和CGP Services)不处于监听状态。
- 在用户第一次去访问Web Interface的时候,Web Interface会去DDC枚举桌面,DDC会去检查VDA的状态,这个不是今天的重点,所以图中没有标明。而下一步,WI完成了虚拟桌面的枚举以后,会显示给用户(图示步骤1)
- 在XD5中,最开始是灰色状态,如果只有一个桌面,或者用户点击了虚拟桌面,首先WI会去DDC检查VDA的状态(图示中步骤2)
- 如果桌面不可用,那么会返回错误提示信息,如果正常,那么会变成蓝色Active状态(图示步骤3),在DDC检查VDA状态时,DDC会发送IConfigure消息给VDA,同时会发送ILaunch消息,此时VDA的1494和2598端口就会处于LISTENING状态,此时DDC也会通知WI,桌面可用。
- 此时,用户启动ICA Client连接桌面,也就是图示步骤4,到此1494和2598端口会处于ESTABLISHED状态。
DDC全部无法联系状态:
大家可能在想,ICA Services(1494)和CGP Services(2598)没有DDC来通知开启端口,所以终端无法连接虚拟桌面。
在XenDesktop 5中,如果所有的DDC全部无法联系,Citrix提供了另外一种机制用来确保在没有DDC通知的情况下打开1494和2598端口,来为终端提供连接。关于VDA的HA配置见文章结尾。
如果VDA与所有的DDC都无法通信的情况下,VDA会不断的尝试与DDC通信(正常情况是DDC来检查VDA的状态,时间为5分钟,VDA会周期更新桌面信息到DDC,例如用户断开桌面等等)。
- VDA会定期报告本机给DDC本身的状态(DataSink),如果在一定时间(时间大概同VDA的IRegistrar的时间,为5分钟)发现无法与DDC通信,那么Citrix Desktop Services会报告无法与DDC注册,此时会出现注册失败。(图示步骤I)
- VDA会在大概一分钟左右(实际测试为45秒)再次尝试与DDC注册(图示步骤2),如果仍然无法注册,那么会检查VDA是否开启HA模式
- 此时VDA会去检查注册表HighAvailability键值,如果开启,那么将会检查是否存在HaRegistrarTimeout键值,如果该键值不存在,那么取默认值300秒,如果存在,取当前设置值。
- VDA会等待HaRegistrarTimeout时间,然后启动1494和2598端口,此时终端用户可以通过特殊生成的ICA文件连接VDA了(图示步骤III)
可见,只有在用户需要连接,或者VDA认为用户需要连接的时候,才会去启用这两个端口,其他时间会关闭这些端口。
注意:在VDA开启HA的时候,从DDC全挂,到用户桌面可用,可能需要1~6分钟左右,或者更长的等待时间,计算方法请参考通信过程。
配置VDA的HA:
1、设置注册表
1 2 3 4 5 | 在HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\ VirtualDesktopAgent项目下创建以下两个REG_DWORD键: HighAvailability,设置为1则启用HA模式,设置为0,则关闭 HaRegistrarTimeout,单位秒,在启动HA模式前,等待VDA尝试与DDC注册的时间,默认为300秒 |
2、生成ICA文件,修改对应内容即可,需要手动修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [Encoding] InputEncoding=UTF8 [ApplicationServers] Desktop= [Desktop] Username=USER_LOGON_NAME_HERE(登录名) Clearpassword=USER_PASSWORD_HERE (登录密码) addConnectionBar=1 Domain=DOMAIN_NAME_HERE (域) Address=DESKTOP_IP_ADDRESS_HERE:1494(虚拟桌面的IP) AutologonAllowed=ON BrowserProtocol=HTTPonTCP CGPAddress=*:2598 TransportDriver=TCP/IP ClientAudio=On DesiredColor=8 DesiredHRES=1024 DesiredVRES=768 DoNotUseDefaultCSL=On FontSmoothingType=0 InitialProgram=#Desktop LPWD=31 Launcher=WI LocHttpBrowserAddress=! |
请问楼主,ddc和vda通信时用的1494端口是由谁决定用这个端口的,vda或ddc ?现在有个需求,在将桌面虚拟发布到外网中使用时不想使用1494端口,比如改成2000.那么要实现这个效果具体是如何做呢,需要在vda和ddc上做怎么样的设置,看了你的另外一个博客说到了更改ica端口的命令,这个命令是在ddc上用的吗,如果需要在vda上更改ica端口具体是怎么操作呢?还是说vda和ddc 上都要更改ica的1494端口?
DDC和VDA通信不需要使用1494端口,客户端(终端)连接VDA才会使用1494或者2598端口。
发布到外网,只需要做映射和WI的转换配置即可(前提防火墙等配置正确),再或者使用NetScaler做ICA Proxy最为方便,因为通过映射的话,每个桌面都需要映射,如果有1000个桌面,那么需要做1000个端口的配置。
不建议改ICA的协议端口,除非1494有其他用途,导致冲突,否则不建议改。
如果桌面不可用,那么会返回错误提示信息,如果正常,那么会变成蓝色Active状态(图示步骤3),在DDC检查VDA状态时,DDC会发送IConfigure消息给VDA,同时会发送ILaunch消息,此时VDA的1494和2598端口就会处于LISTENING状态,此时DDC也会通知WI,桌面可用。
————————————————————-无敌分割线——————————————————————
vda的1494和2598端口是固定死了的么?有办法 可以改变不?我现在碰到 这样一个比较蛋疼的问题,就是我用的是比较低级的路由器,这路由器的端口映射内外网的端口号要一致,比如1494对应1494 ,2598只能对应2598.那就有个问题,如果内网有多台vda,第一台vda把1494和2598都占用了,那其余的vda如何映射出去?
就经验来看,1494和2598即使可以修改,对DDC来说,也是统一的,应该不会单独记录。
所以,即使可以修改,也无法达到每个VDA都不同的效果。即使每个都不同,如果DDC无法正确识别,那么发出的XML消息应该也是错的,最终生成的ICA文件是否有问题?
————————————————————-无敌分割线——————————————————————
不过是否可以阴差阳错的来实现你的需求呢?
手动改1494和2598的注册表设置,然后DDC还以为是1494和2598,生成XML响应,然后WI上针对1494和2598做转换成正确的端口。
目前知道的2598可以通过注册表修改,1494应该也可以,但目前没环境确认。
听很多朋友说起这个网址,没想到真的很好,一上来就看到好多有用的东西,忍不住留言赞一下。版主真棒,继续努力,我们一起支持你。