TCPサーバプログラムの改修(SO_LINGERオプションの利用)

目安時間:約 4分

TCPのサーバ側プログラムを改修する機会があった。

 

時々ではあるが、アプリケーション起動時に、サーバ側プログラムで

 

2分ほどの待ちが発生するとのこと。

 

TCPの知識はほとんどなかったため、この機会に勉強をした。

 

以下のサイトが分かりやすかった。

 

http://www.ne.jp/asahi/hishidama/home/tech/socket/tcp.html

 

このサイトは、以前JavaやScalaの学習をした際にもお世話になっている。

 

サイトの作者は相当熱心な勉強家であることがうかがえる。

 

技術者として尊敬している。

 

 

そちらに下記のように書かれている。

 

 

たしかに今回サーバー側から先に切断しており、サーバー側がアクティブクローズ側になっている。

 

そしてサーバー側でnetstatコマンドで調べてみると、

 

利用しているポートがTIME_WAIT状態になっていた。

 

 

そしてその対策として、

 

とのこと。

 

SO_LINGERオプションにより、強制的にclose状態にできるようだ。

 

だが、筆者も書いている通り、あまりよい方法とは言えないようだ。

 

以下のサイトなども、SO_LINGERオプションは推奨された方法ではなく、

 

本来あるべき姿は、クライアント側から切断するようなアーキテクチャにすることとのこと。

 

https://code.i-harness.com/ja/q/3954e9

 

 

 

ただ、すぐにでも解消したかったので、

 

今回は、とりあえずSO_LINGERオプションを使ってみることにした。

 

下記のサイトを参考に実装。

 

https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/setopt.htm

 

その際に、LINGERを以下のように設定した。

 

 

SO_LINGERをONにして、タイムアウトを0にした。

 

その結果、確かにTIME_WAIT状態に遷移しなくなりました!!!!

 

 

副作用がないのか心配ですが、とりあえずSO_LINGERオプションをONにして

 

様子をみたいと思います。

タグ: 

カテゴリ:TCP/IP  [コメント:0]

Wiresharkでパケットを検索する方法

目安時間:約 4分

最近WireSharkを使用することが多くなってきた。

 

地図を載せた組み込み系のソフトから、

 

正しく地図情報が送られてきているかの確認に使用することが多い。

 

WireSharkとは

 

WireSharkは高機能なパケット取得・プロトコル解析ソフトで、

 

ネットワークに流れるパケット情報をリアルタイムで調査することが可能だ。

 

ネットワークエンジニアには必須のツールであるといえる。

 

※最も私はネットワークエンジニアではないが

 

 

WireSharkは以下からインストールすることができる。

 

https://www.wireshark.org/download.html

 

 

インストール時に特に困ることはなかった(と思う)。

 

 

起動すると、キャプチャしたいインタフェースを聞かれるので、

 

ダブルクリックして起動する。

 

 

キャプチャを開始すると、メイン画面に次々とパケットが表示される。

 

フィルタリング

 

たくさんのパケットが次から次へ流れてくるため、

 

フィルタしないと見づらい。

 

そこで、下記の表示フィルタに検索条件を入力して絞り込む。

 

 

 

IPを指定して検索

 

たいてい、確認したいパケットの

 

SourceのIPやDestinationのIPが分かっていると思うので、

 

それらを指定して検索。

 

 

 

ポートを指定して検索

 

これもかなり使う。

 

指定したポートで通信できているかを確認するときに使う。

 

 

 

TCP制御フラグを指定して検索

 

地味に使うことが多い。

 

SYNが飛んでいるのか、ACKが返ってきているのかなど、

 

疎通確認時に有効。

 

 

以上です。

タグ: 

カテゴリ:TCP/IP  [コメント:0]

ページの先頭へ