TCP接続中にLANケーブルが抜けた場合に起こりうる問題と対処


1)TCP通信でLANケーブルが外れただけではデバイスサーバ、
 PC共に切断処理信号FINや強制切断信号RSTは発信されませんので、
 通常はすぐにLANケーブルを挿し直せば通信が可能状態に戻る筈です。

2)もし「ケーブルを挿し直しても通信が再開されない」、
 「デバイスサーバの電源OFF/ONしないと接続出来る状態に戻らない」場合、
 LANケーブルを外した時にPC側で切断処理が行われた可能性が高いです。
 TCPの接続断の処理は、お互いに切断を行う旨を通知し、互いに自身の接続
 を破棄する事により行われます。
 LANケーブルが外れているとPC側が切断処理を行う際に、通知する筈の切断
 要求FINがXPortに届かず、もしPC側の接続断のみが行われると、
 デバイスサーバ側は不要なコネクションをそのまま維持し続けることになり
 ます。
 デバイスサーバのシリアル・LAN変換のポート一個は1接続のみ可能な
 ため現接続を破棄しない限り、新たな接続が出来なくなってしまいます。

3)PCで切断処理を行わなくても、ケーブルが抜けている時間が長いと
 PCでTCP Keepaliveによる自動切断処理が働きます。

4)デバイスサーバ側でも一定時間経てばTCP Keepaliveによって
 不要コネクションを破棄します。
 電源を落とさなくてもまた接続出来るようになります。
 出荷設定ではXPortは45秒に一回、TCP Keepaliveを発信し7回連続で
 応答が無ければ無効なコネクションとして破棄します。(315秒後に破棄)
 TCP Keepaliveの発信時間間隔については、設定変更が可能で最低1秒間
 に変更することが出来ます。(7秒後に接続破棄)

5)もしTCP Keepaliveによる不要コネクション破棄迄の時間が待てないと
 いう場合には、UDPをお使いになられるという手もあります。
 UDPは、TCPと違いコネクション接続・切断という概念は無いため、当然
 不要コネクションが発生する事もありません。
 但し、TCPと違ってパケット喪失時の再送処理がございませんので信頼
 性は劣り、用途に応じては不向きとなります。

6)上記とは別の話ですが、LANケーブルが外れたことを検出する方法があります。
 汎用IOに「Link Status」というLANケーブル挿抜状態を通知する機能が
 ありますので、こちらを設定すれば判別可能になります。 (XPort03R-05R only)

最終更新:
2015-07-03 17:44
改訂:
1.2
評価点数: 4 (2 件の投票)
Chuck Norris has counted to infinity. Twice.

このカテゴリー内のレコード

タグ