cs吧 关注:880,800贴子:6,456,657
  • 11回复贴,共1

《反恐精英CS》CS1.6网络参数解析.古老古老的转贴.

只看楼主收藏回复

本文将深入探讨一些CS中有争议的关于网络的参数。网络参数是一个相对新的课题,那些顶尖的选手也是从1.3时代欧洲与美洲的激烈碰撞中才开始注意到的。在1.5的时代,选手们开始认真研究特定网络参数的意义。事实上,大多数人直接采用了别人的正确设置。尽管如此,到了1.6,Valve修正了代码中的一个错误,反而造成了更多的混乱。原来正确的设置由于Valve的反作弊程序(VAC)而不能发挥其效力。你们中的有些人可能由于我很久之前的那篇“ex_参数解析”的文章而记得我。
         这个观点是通过两年来试验和观察累计而成的。近来有些事情使我提起了对网络参数的兴趣:网管强迫玩家使用错误的参数,局域网赛事中选手由于使用正确的参数而被取消资格等等。最近我通过和一位Valve员工之间的一系列通信而确认了本文中的大部分内容。(对于你们关于demo问题的那些疑问,Valve确实在研究解决方案。)要声明的是,本文所含内容不会使你成为另外一个“Spawn”,但是可以消除错误的对他人关于网络参数的指责并提供一个更加平衡的竞技环境。
         下面,我将对我认为重要的网络参数给出一个概述并介绍一下其背景。然后我会给出网络参数建议值,并解释为何如此建议。
         请注意:
         以“sv_”或者“sys_”开头的参数是服务器端参数,如需修改必须用远程控制命令“rcon”修改。直接修改该参数将导致本地机器的参数被修改,而不是服务器上的参数。
         “ex_interp”和“cl_updaterate”两个参数之间的关系极端重要,阅读下文关于其中任何一个的时候,也请阅读关于另外一个的部分。
         本文阅读对象主要是那些用宽带上网的读者。
         一般信息:
         cl_cmdrate:
         这个参数决定了每秒钟你--即客户端发给服务器多少个数据包。很显然,这个值越高,服务器对你执行的命令的响应就越快。如果你拥有宽带网并且是其唯一使用者,把此值设高对你没什么坏处。如果你和你的朋友在一处上网打CS,并且能感觉到经常出现延迟的现象,那么这个命令就是罪魁祸首。大多数的宽带(主要是ADSL)并不提供足够的上传带宽,而这恰恰是“cl_cmdrate”所需要的。
          cl_updaterate:
          “cl_updaterate”和“cl_cmdrate”颇为类似,只是反其道而行之。它控制的是每秒钟你从服务器端接收的数据包的数量。因此,它依赖的是你的下(和谐)载速(和谐)度。你的“cl_updaterate”值越高,你和服务器的同步率就越高。既然只有服务器能决定你是否打中了,你当然希望收到足够多的数据包以保持和服务器同步。
         sv_maxupdaterate:
         如同“cl_updaterate”控制每秒钟客户端发给服务器端的最大数据包数量,“sv_maxupdaterate”就是每秒钟服务器端允许客户端接收的最大数据包数量。因此,把“cl_updaterate”设置的高于“sv_maxupdaterate”是毫无意义的。
         sys_ticrate:
         这个参数设定的是每秒钟服务器将计算出的帧数。默认值是100。为什么服务器的FPS(每秒钟的帧数)重要呢?这个参数本身决定了你在这个服务器上的感觉。我肯定我们都有过这种经验:有些服务器好像是架设在“深蓝”(或者曙光?龙芯?呵呵)上,而我们就好像是在局域网里打比赛一样。



IP属地:辽宁1楼2009-07-01 15:58回复

             “sys_ticrate”只是设定你服务器的最大FPS。一般来说,你的服务器不会达到这个值,因为你的操作系统并不允许你这样。有很多种不同的方法来提升服务器的FPS,但是其中很多种都需要服务器提供商的合作。请记住,提高服务器的FPS会导致服务器提供商的机器CPU加重负担,因此多半服务器供应商们不会这么做。(出于某种原因,在de_inferno和de_aztec上提高服务器的FPS会导致CPU过载)。基于Windows的“半条命”服务器的默认FPS是64,而基于Linux的服务器的默认FPS是50。某些情况下,你可以把服务器FPS提高到512。是否使用如此之高的服务器FPS现在还有争议,但是就我个人的经验,通常在200FPS下你的游戏感觉会有明显的改善。
             稳定性是关键。FPS在100和512之间跳来跳去只会使你的游戏感觉更糟糕,因此当你的服务器一般状态下是150FPS的时候,不妨把“sys_ticrate”设成150。
             如果你有服务器的远程控制权限并且想知道服务器当前的FPS,那么就在命令台中输入“rcon stats”。要检查你的服务器有没有被提升过,暂时把“sys_ticrate”设成10000,并输入“rcon stats”。如果你的服务器FPS大于100,那么你的服务器就是被提升过了。
              ex_interp:
              开始之前,韦氏大辞典如下定义“interpolate”(插值):
              Main Entry: in·ter·po·late (主要词条: interpolate)
              3 : to estimate values of between two known values (3:估计两个已知函数值中间的函数值)
              intransitive senses : to make insertions (as of estimated values) (不及物动词: 插入(在估计值的时候))
             你不可能完全和服务器同步,因为你只是每秒钟接收到一定量的数据包。比如:    
           
    http://www.pcgames.com.cn/fight/cs/jiqiao/0405/pic/anom_interp.jpg
    如图所示。随着数据点的增加,插值图形将越来越接近原本的圆。CS中我们可以认为这个圆就是一个玩家中在一秒钟不同的位置。从服务器的观点来看,它就是一个完美的圆,而客户端不得不通过插值来预测两个数据包中间的空档。
             这就是“ex_interp”出现的原因。两个数据包之间的空档,就要由“半条命”的预测机制来决定了。“ex_interp”设置的是在两个连续数据包之间隔多长时间插值一次,其单位是秒。如上图所示,这些小的时间段就对应了插值多边形的边。因为插值是由客户器端做出的,他和服务器端的判断并不是完全一样。没什么东西能替代真正的数据包,但是插值预测大多数情况下都做得不错。
             对于在线游戏的推荐值:
             rate:
             我已经确认过rate最高是20000,设成20000以上是没有任何意义的,甚至有可能会降低性能。
    


    IP属地:辽宁2楼2009-07-01 15:58
    回复
      2025-08-24 04:13:42
      广告
      不感兴趣
      开通SVIP免广告

               推荐值:
               rate 20000
               sv_maxrate:
               这个值通常会被设成0。对于在线游戏来说,这并不是最优值。“sv_maxrate 0”会自动监测所有玩家的连接速度,并满足每个人的要求。假定“半条命”允许玩家使用超过20000的“rate”值,如果一个玩家疯到把“rate”设成999999999,服务器会满足他的要求。这不仅导致了带宽的浪费,也导致了服务器过载。因此我推荐一个更安全的值“20000”。事实上,“sv_maxrate 0”和“sv_maxrate 20000”有可能效果是相同的,但是预防措施总是没有坏处的。
               推荐值:
               sv_maxrate 20000
               cl_cmdrate:
               这个参数的理想值应该是和服务器的FPS一样(而不是原来大家认为的客户端FPS)。如果你向服务器端发出的更新超过服务器本身的FPS,通常那些多余的数据包就会被丢弃掉。因此,“cl_cmdrate”设置过高没有什么大坏处,但是它浪费了你的带宽。
               推荐值:
               cl_cmdrate 等于或者大于服务器FPS
               ex_interp:
               把这个值设成0。CS会自动把你的“ex_interp”设成“1/cl_updaterate”(你的命令台会告诉你“ex_interp”被强制设成XX毫秒。原文“ex_interp forced up to xx msec”)。这是因为两个数据包之间的时间间隔就正好是1/(每秒更新次数),这就是你需要客户端做出插值预测的时间长度。调整“cl_updaterate”会自动调整“ex_interp”(当“ex_interp”设成0的时候)。我建议你只修改“cl_updaterate”,而让你的CS来自动修改“ex_interp”。你现在不能把“ex_interp”设置的低于“1/cl_updaterate”,而把它设高则导致了你射击对手的时候不得不瞄准出现在你屏幕上的人的后方,这种行为通常被认为是作弊(原文exploit,因为欧美比赛中exploit也算是作弊的一种,因此这里就直接翻译成作弊了)。比如,如果你的“cl_updaterate”是101,你“ex_interp”的正确值就是“1/101=0.009”(9毫秒)。而使用默认值0.1就形成了前述的“作弊”(又是exploit,我ft)
               推荐值:
               ex_interp 0
               cl_updaterate:
               很长时间以来的做法是让“cl_updaterate”从101开始下降,降到你可以接受的“choke”值。可以用命令“net_graph 3”来查看“choke”。对我来讲,“choke”是我最后才关心的一个数值。事实上得到“cl_updaterate”的最优值是更为复杂的。CAL比赛服务器端设置都是“sv_maxupdaterate 101”,所有有人可能会觉得“cl_updaterate”应该设成101。理想状态下,这是对的,但现实中这并不正确。美国大部分的服务器并不能提供100FPS,这就意味着每秒钟服务器不可能发出100次更新。因此“cl_updaterate 101”除了让你的“ex_interp”变成0.009之外,并不能保证你每秒钟都收到100次更新,这就导致了玩家们的游戏感觉不断在变。既然没有(除非有远程控制权,“rcon stats”)知道服务器FPS的方法,我们就不得不猜测“cl_updaterate”的最优值。你可能说:“不妨把“cl_updaterate”设成101,这样就保证了能尽可能多的接收到数据包”。这样做的问题是忽视了“cl_updaterate”对“ex_interp”的影响,而实际上你的“ex_interp”应该设的更高。
      


      IP属地:辽宁3楼2009-07-01 15:58
      回复
        终于审核出来了.


        IP属地:辽宁5楼2009-07-01 16:57
        回复
          辛苦``


          IP属地:四川6楼2009-07-01 19:09
          回复
            你是谁.我好久没上HF了~~


            IP属地:辽宁8楼2009-07-01 19:19
            回复
              • 218.25.163.*
              哦 那就不是你
              看到有人挂你ID
              Sumnus
              貌似是这个


              9楼2009-07-01 19:24
              回复
                我是Somnus


                IP属地:辽宁10楼2009-07-01 19:26
                回复
                  2025-08-24 04:07:42
                  广告
                  不感兴趣
                  开通SVIP免广告
                  不过最开始刚换ID的时候叫Sumnus


                  IP属地:辽宁11楼2009-07-01 19:27
                  回复


                    IP属地:辽宁12楼2009-07-01 22:59
                    回复
                      • 211.138.147.*
                      这种傻x贴都没人回


                      13楼2009-07-07 22:59
                      回复
                        • 221.236.186.*
                        有1.5的么


                        14楼2009-07-07 23:11
                        回复