|
发表于 2003-9-22 01:14:40
|
显示全部楼层
来自 新加坡
我就我们学校局域网的情况来谈谈我的猜测:
--------------------------------------------------------------------------------------------------------------
背景:
我们学校现在所有电脑就算是一个大的局域网, 通过学校的若干主机接入Internet, 并且使用了NAT路由技术. 在用局域网里的电脑建一个CS1.6的Server后, 局域网内部的人无法连进去, 会出现Invalid Steam UserID Ticket的错误对话筐, 不管试多少次都是这样. 反倒是学校外部的人可以通过Server的External IP连进来. 还有局域网内部的电脑连进外面的CS1.6 Server基本没有这样的问题, 偶尔遇上, 多连几次就解决了.
猜想:
这可能跟Steam的验证机制有关. 当局域网内部的CS1.6客户端在登陆Steam的时候, 会向Steam的Server发送一些数据包, 其中包括了客户端的IP等信息. 通过了Steam server的验证, 客户端的SteamID以及外部IP就存放在了Steam server的在线用户database里. 当客户端连接一个CS1.6服务器的时候, 也会向服务器发送包含IP等信息的数据包. 游戏服务器在读取了客户端的IP信息后, 向Steam server发出询问, 如果客户端的IP在Steam server的在线用户database里面, steam server就会向游戏server返回"通过"的response, 这样客户端就可以顺利进入游戏服务器了.
解释:
那个多试几次就能解决问题的情况 (或者如很多网友所述, 先退出再登陆就解决了), 原因可能是网络太繁忙, 游戏server无法向steam server取得验证结果, 导致客户端连接游戏失败. 另外一种情况是无法连接同一个局域网里的游戏server, 这个时候可能就跟NAT有关了. 因为局域网里的客户端登陆Steam的时候, 数据包的IP信息先由NAT路由翻译成外部IP了. 当连接外部的游戏server时, 向游戏server发送的IP信息也是这个经过翻译得到的外部IP, 所以能顺利连进去. 但是在连接自己局域网内部的1.6 server的时候, 由于不需要经过NAT路由器, 所以发送给游戏server的IP是未经翻译的内部IP, 而这个IP不在Steam server的在线用户的database里面(在里面的是你的外部IP), 这样就通不验证而出现Invalid Steam UserID Ticket的问题.
----------------------------------------------------------------------------------------------------------------
目前在我们学校内部建CS1.6 server还不可能, 现在只有等网上高手出免Steam验证的补丁了. 呵呵~~ |
|