根据我的理解,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个连接,这严重限制了模拟功能。
请确认该型号是否确实存在问题,或者是否有任何我忽略的问题。此外,我们非常感谢解决方案。
答案 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
打开的案例。初步测试表明,现在可以在同一个监听端口上建立多个连接。