OPNET模拟 - 无法在同一端口

时间:2015-05-07 13:21:22

标签: tcp opnet

根据我的理解,TCP会话被标识为<ServerIP, ServerPort, ClientIP, ClientPort>

例如,会话<192.168.0.1, 80, 192.168.0.2, 1000><192.168.0.1, 80, 192.168.0.2, 1001>分开,这两个会话可以同时在主机上共存。

但是,在OPNET中,如果已经建立<192.168.0.1, 80, 192.168.0.2, 1000>,则无法建立<192.168.0.1, 80, 192.168.0.2, 1001>,因为192.168.0.1的端口80已在使用中。

鉴于此模型,如果我尝试在192.168.0.1:80上托管HTTP服务,则一次只能与我的服务器建立1个连接,这严重限制了模拟功能。

请确认该型号是否确实存在问题,或者是否有任何我忽略的问题。此外,我们非常感谢解决方案。

1 个答案:

答案 0 :(得分:1)

我挖掘了OPNET TCP模型的源代码,发现了这个bug。

首先,OPNET确实将<192.168.0.1, 80, 192.168.0.2, 1000><192.168.0.1, 80, 192.168.0.2, 1001>视为两个独立且独立的会话,并且可以使用session_key来区分它们。

但是,模型中存在一个小错误。当向TCP模型层发出打开请求(PASSIVE(监听)或ACTIVE(连接))时,模型将检查是否正在使用本地端口。如果正在使用本地端口,则无论打开请求的类型如何,都将返回错误信号,而正确的操作是仅检查ACTIVE打开。

解决方案是将检查过程修改为仅适用于ACTIVE打开的案例。初步测试表明,现在可以在同一个监听端口上建立多个连接。