お世話になります、海苔通と申します。
ネットワーク通信で困っていることがあります。どなたか、御教授頂ければ幸いです。
2装置間でudpパケットの通信を行っているのですが、
まれにudpパケットが過去に送ったudpパケットとなるときがあります。
mirrorポートを仕込んで現象発生時のパケットをLANアナライザ(イーサリアル)で見たのですが、そのパケットにトレイラーとFCSなるものが付加されていることがわかりました。
質問1
そこで質問なのですが、これらの付加情報を取得することは可能なのでしょうか?(もし、これらの付加情報を取得できるのであれば、エラー処理が可能ですので。。。)
質問2
また、これらの付加情報が付く原因は何が考えられるでしょうか?
以上、宜しくお願いします。
No.1ベストアンサー
- 回答日時:
まずFCSだが、これは原則として「全ての」パケットについている筈だ。
(TCP/IP等のIPパケット以外でもという意味だ)
【参考:FCS】
http://ja.wikipedia.org/wiki/Frame_Check_Sequence
で、通常のパケットダンプには出てこない。
何故なら、出てくる必要がないから。
もしも出てくる必要があるとしたら、そのフレーム自体がFCSチェックの結果エラーと判定されたパケットの場合だけだと思う。
FCSエラーが出たパケットは「破棄される」と書かれているので、おそらくドライバレベルで捨てられている可能性が高い。
質問主殿が書かれている情報から、何が起きているのか私なりに推測すると
・伝送中にパケットが損傷し、FCSエラーとなりLANドライバレベルでパケットが破棄された
・アプリ側はパケットが破棄されたにも拘らず、もう一度読み込みバッファを読みに行ったのでバッファにあったひとつ前に来たパケットのデータをもう一度読み込んだ
辺りではないだろうか。
質問1及び質問2の回答と被るのだが、質問主殿はTCPプロトコルとUDPプロトコルの違い(長所・短所)はご存知だろうか?
文章を読む限り、そのアプリはUDPプロトコルでデータを送っていいような種類のモノではないような気がするのだが。
UDPはデータが途中でロストしてもアプリの実行に影響のないケースに使うようなプロトコルです。
UDPは伝送結果の確認を行なっていないのです。
TCPは伝送結果の確認をちゃんと行なっていますので、途中でパケットが1つロスト(破棄)された場合は、ちゃんと再送処理をプロトコル側でしてくれます。
TCPが重過ぎるためにUDPを使っているなら、今回のようにパケット破棄されてデータがロストした場合に備え必要最小限のチェック処理やエラー回復処理をアプリ側が責任を持って行なう必要があります。
(送信パケット内のデータ部にシーケンス番号を割り振って、番号が途中で飛んでいないかチェックし、飛んでいた場合は再送要求するとか)
早速のお返事ありがとうございました。非常に参考となりました。
>・伝送中にパケットが損傷し、FCSエラーとなりLANドライバレベルでパケットが破棄された
>・アプリ側はパケットが破棄されたにも拘らず、もう一度読み込みバッファを読みに行ったのでバッファにあったひとつ前に来たパケットのデータをもう一度読み込んだ
恐らく後者の現象が発生していると思います。
つまり、recv関数で受信待ちさせた状態で、ドライバがFCSがおかしいと判断してそのパケットを破棄した場合は、recv関数が受信したと誤動作するということでしょうか?また、そのようなことも想定したプログラムにしないといけないということでしょうか?
以上、たびたびの質問ですがよろしくお願いします。
No.2
- 回答日時:
私はこのような伝送を扱うアプリを作った事がないので、その辺りの事情は良く分かりませぬ。
その辺は御自身で関数の仕様を調べるか、他の回答者から回答が付くのを待ってみて下さい。
#回答が付かないようなら、この質問は締めて別の質問としてそれ専用のカテゴリに改めて質問を投稿される事をお勧めします
この回答への補足
いつもお世話になっております。
調査した結果色々分かりましたので、これまでの内容も含めて以下にまとめます。
FCSエラーが発生する原因については某CPUメーカの技術資料の注意事項で記載されていました(その内容についてはここでは割愛します)。
また、前回の補足で「FCSエラーのパケットを破棄した」と記述しましたが実際は破棄していないことが分かりました。
そこでFCSエラー発生時はドライバ内部で破棄するはずなのになぜ破棄しないのか調査したところ、skb->ip_summed変数に「CHECKSUM_NONE」を入れないとFCSエラーパケットを破棄しないようなことがウェブで記載されていました。
ただ、この変数をどのようにして使うのか不明です。
この辺ことを知っている方がいれば教えてください。
宜しくお願いします。
御丁寧にありがとうございます。
とりあえずは調査は継続します。何か進展ありましたアップしますので、宜しくお願いします。
調査と並行にですが、パケットが重複しても問題なく動作するための対策も考案中です。
今考えているのは、過去に受信したパケットを一定期間保持しておき、パケット受信毎に過去のパケットかどうかをチェックするように考えています。
他に何か良い案があれば教えてください。
以上、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- ドライブ・ストレージ ネットワークHDD(NAS)について教えて下さい。 11 2023/03/08 11:15
- その他(応用科学) パケット交換方式 1 2022/07/09 12:00
- docomo(ドコモ) ドコモの114サービスで、パケット通信中となるのは 電話の時以外もありますか? 先日主人の携帯を調べ 2 2022/12/08 11:28
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- FTTH・光回線 AU光回線の速度が出ません 2 2022/07/30 16:05
- 格安スマホ・SIMフリースマホ 日本通信Simで通信量を使い切り、低速制限を受けていますが、この間にパケット使用量は発生しますか? 4 2023/07/07 16:18
- 格安スマホ・SIMフリースマホ 【楽天モバイル】楽天モバイルはパケット通信料が減らない低速モードに切り替えられる公式 3 2022/12/21 07:48
- 防犯カメラ・監視カメラ・小型カメラ VHSを高画質な動画ファイルにしたいです。 3 2022/05/06 12:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sshでリモートアクセス
-
chkconfig iptables --listって...
-
DNSサーバを設定したのですがns...
-
「DNSサーバーを自動的に取得す...
-
同一のホスト名で何か問題があ...
-
パスワード設定していないユー...
-
AWSでSSH接続をしたいのですが...
-
コマンドでのFTP転送が進まない。
-
”Tortoise SVN” と ”Subversio...
-
リモートデスクトップ接続でパ...
-
mailコマンドで外部メールに送...
-
エラーメールで"too many hops"...
-
Mailの送信済みメールボックス...
-
root権限によるFFFTPでの接続
-
MacでKCFErrorDomainCFNetwork ...
-
Linuxでパスワード変更時に「it...
-
sftpのバッチモード(Solaris)
-
サブシステムがロックします。
-
エクセルで#N/Aを含めた平均値...
-
sendmailでのctladdrの変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
chkconfig iptables --listって...
-
scpコマンドでサーバー間のファ...
-
サーバーでポート587番が開放で...
-
iptablesとipchainsの違い
-
CentOS7firewall-cmdでESP許可
-
sambaで使用するポートについて
-
iptablesを設定するとメール送...
-
iptablesの設定がうまく反映さ...
-
linuxのルーティング処理
-
LINUXのiptablesについて
-
vsftpdで動的IP制限をかけたい
-
さくらVPSのVPNサーバーの設定...
-
iptablesを設定するとメールが...
-
DMZのLinuxサーバでメールとFTP...
-
sshでリモートアクセス
-
iptablesについて
-
Linux環境で、UDP514ポートが開...
-
ローカル環境でwebサーバーにつ...
-
iptablesにてRDPが通らない。
-
iptablesを使用してのDNSゾーン...
おすすめ情報