2015-05-07 87 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開放案件。初步測試表明,現在可以在同一個偵聽端口上建立多個連接。