2015-05-07 54 views
0

根据我的理解,TCP会话被标识为<ServerIP, ServerPort, ClientIP, ClientPort>OPNET模拟 - 无法在同一端口上建立多个TCP连接

例如,会话<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

它看起来像OPNET中的一些错误。只是看看这个问题: http://stackoverflow.com/questions/489036/how-does-the-socket-api-accept-function-work – werewindle

+0

我也认为这是一个错误,但奇怪的是,OPNET是一款世界级的通讯网络模拟软件,我无法想象它会有如此低级的错误。 – 314314314

+0

在端口80尝试到服务器的另一个连接时会出现什么错误? – Prabhu

回答

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开放案件。初步测试表明,现在可以在同一个侦听端口上建立多个连接。