ネットワーク通信でのudpパケットの通信における付加情報とは?

このQ&Aのポイント
  • ネットワーク通信で困っていることがあります。2装置間でudpパケットの通信を行っている際に、過去に送ったudpパケットとなることがあります。その際、パケットにトレイラーとFCSなるものが付加されていることがわかりました。
  • 質問1として、これらの付加情報を取得することは可能なのでしょうか?もし可能であれば、エラー処理が可能です。
  • 質問2として、これらの付加情報が付く原因は何が考えられるでしょうか?
回答を見る
  • ベストアンサー

ネットワーク通信

お世話になります、海苔通と申します。 ネットワーク通信で困っていることがあります。どなたか、御教授頂ければ幸いです。 2装置間でudpパケットの通信を行っているのですが、 まれにudpパケットが過去に送ったudpパケットとなるときがあります。 mirrorポートを仕込んで現象発生時のパケットをLANアナライザ(イーサリアル)で見たのですが、そのパケットにトレイラーとFCSなるものが付加されていることがわかりました。 質問1 そこで質問なのですが、これらの付加情報を取得することは可能なのでしょうか?(もし、これらの付加情報を取得できるのであれば、エラー処理が可能ですので。。。) 質問2 また、これらの付加情報が付く原因は何が考えられるでしょうか? 以上、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答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を使っているなら、今回のようにパケット破棄されてデータがロストした場合に備え必要最小限のチェック処理やエラー回復処理をアプリ側が責任を持って行なう必要があります。 (送信パケット内のデータ部にシーケンス番号を割り振って、番号が途中で飛んでいないかチェックし、飛んでいた場合は再送要求するとか)

noritsuu
質問者

お礼

早速のお返事ありがとうございました。非常に参考となりました。 >・伝送中にパケットが損傷し、FCSエラーとなりLANドライバレベルでパケットが破棄された >・アプリ側はパケットが破棄されたにも拘らず、もう一度読み込みバッファを読みに行ったのでバッファにあったひとつ前に来たパケットのデータをもう一度読み込んだ 恐らく後者の現象が発生していると思います。 つまり、recv関数で受信待ちさせた状態で、ドライバがFCSがおかしいと判断してそのパケットを破棄した場合は、recv関数が受信したと誤動作するということでしょうか?また、そのようなことも想定したプログラムにしないといけないということでしょうか? 以上、たびたびの質問ですがよろしくお願いします。

その他の回答 (1)

  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答No.2

私はこのような伝送を扱うアプリを作った事がないので、その辺りの事情は良く分かりませぬ。 その辺は御自身で関数の仕様を調べるか、他の回答者から回答が付くのを待ってみて下さい。 #回答が付かないようなら、この質問は締めて別の質問としてそれ専用のカテゴリに改めて質問を投稿される事をお勧めします

noritsuu
質問者

お礼

御丁寧にありがとうございます。 とりあえずは調査は継続します。何か進展ありましたアップしますので、宜しくお願いします。 調査と並行にですが、パケットが重複しても問題なく動作するための対策も考案中です。 今考えているのは、過去に受信したパケットを一定期間保持しておき、パケット受信毎に過去のパケットかどうかをチェックするように考えています。 他に何か良い案があれば教えてください。 以上、宜しくお願いします。

noritsuu
質問者

補足

いつもお世話になっております。 調査した結果色々分かりましたので、これまでの内容も含めて以下にまとめます。 FCSエラーが発生する原因については某CPUメーカの技術資料の注意事項で記載されていました(その内容についてはここでは割愛します)。 また、前回の補足で「FCSエラーのパケットを破棄した」と記述しましたが実際は破棄していないことが分かりました。 そこでFCSエラー発生時はドライバ内部で破棄するはずなのになぜ破棄しないのか調査したところ、skb->ip_summed変数に「CHECKSUM_NONE」を入れないとFCSエラーパケットを破棄しないようなことがウェブで記載されていました。 ただ、この変数をどのようにして使うのか不明です。 この辺ことを知っている方がいれば教えてください。 宜しくお願いします。

関連するQ&A

  • udp通信が常時しています

    最近になって気が付いたのですが、LANのパケットキャプチャーで確認してのですが、UDP通信でポート53と137にたいして常時通信が発生しています。 有害な物(個人情報の流失など)か無害な物なのか分かりません。 firewallなどは反応しません。 止めたいのですが、どうしたら用でしょうか。 OSはwindowsxpです。

  • IEEE802.3通信

    初心者で申し訳ありません。 ご教授お願いいたします。 VCでソケット通信を行うとTCP/IP UDP/IPプロトコルの情報が付加されます。 それをしない方法? もしくはソケット通信ではなくイーサネット通信を行う方法がわかりません。 質問の文にも間違いがあるかもしれませんが、よろしくお願いいたします。

  • UDPのポート53の通信が多い

    Linuxを接続しているルーターが、そのルーターのWAN側と接続しているルーターにUDPのポート53でパケットを飛ばします。 そしてそのルーターからLinuxを接続しているルーターへと返事が帰って来ているみたいです。 この通信がとても多く発生しています。 Linuxで設定が足りなかったり設定が間違っていたりしている可能性はありませんか?

  • winsockを使ったTCP及びUDP通信について

    今回winsockを使った通信プログラムを組む事になったのですが、わからない点が多々ありましたので、どなたかご教授頂けると大変ありがたいです。 1. TCP通信において、送信側が"Hoge" "Fuga"と2回sendした際、受信側でrecvすると"Ho" "geFu" "ga"と3回受信する可能性があると認識しているのですが、これは正しいでしょうか? (到着する順序は保証されるが、recvする際に送信側がどのようにsendしたかは考慮されない) 2. UDP通信においては、上記のような現象は起きないと認識しているのですが、これは正しいでしょうか? (UDP通信では、2回sendすれば2回以上はrecvしない。パケットの破棄はあっても、分割はない) 3. もしUDP通信でも上記のような現象が起きる場合、到着順序の保証がされないという観点から、recvした際に"Ho" "ga" "geFu"と受信する事はあり得るのでしょうか? 4. 2が正しい前提での話です。UDP通信では、MTUを超えた場合、自動でパケットが分割されると聞きました。プログラムを組む際、これは意識しないといけないのでしょうか? (MTUが1500Byteの場合、UDPで2000Byteをsendすると、recvで1500,500と2回受信する?) 以上の4点です。 どなたかご存知の方いらっしゃいましたら、是非ご教授ください。

  • WORLD WINGの通信料について教えてください

    オーストラリア・日本間のWORLD WINGの通信料を教えてください。 50パケットまで50円、50パケットを超えたら1パケット0.2円となっています。これだけ見たら日本国内の通信料と変わりはありませんが、確か、情報が付加されて高くなると聞きました。 オーストラリアから日本にiモードメール(20字程度)を送った場合、実際にはいくらくらいになるのでしょうか? よろしくお願いします。

  • TCP及びUDP通信について

    TCP及びUDP通信について 現在WinSockAPIを用いた通信を行うプログラムを組んでいます。 しかしながらネットワークに関しては初心者で、わからない点がいくつか出てきたので質問させて頂きます。 -------------------------------------------------- 1.TCPで双方向通信を行う場合、サーバ側は指定したポートにbind→listenし、接続を待ち受けます。 クライアント側はサーバのIPを指定し、接続確立後にポートはOSが自動で割り振ると聞きました。 つまり、クライアント側がポートを開放せずに通信が出来るのは、OSなどが自動でポートを割り当て、割り当てたポートに到着したデータを該当アプリケーションに渡すからでしょうか? ポート関連は全てルータが管理しているものだと思っていたのですが、OSがポートを割り当てるという動作がよく理解できません。 -------------------------------------------------- 2.UDPで双方向通信を行う場合、端末A・端末Bともに指定したポートにbindする必要があると聞きました。 つまり、UDPで双方向通信を行う場合、端末A・端末Bの双方でポートを開放する必要があるということでしょうか? -------------------------------------------------- 是非ともご教授ください。

  • 通信する際なぜポートをが必要なのか

    ポートについて以下の認識で正しいか教えてください。    ・基本的にTCP、UDPの通信は通信相手のIP+ポートで接続しにいく。  ・ルータ等でポートを塞いでいた場合は、上記の通信はすべてはじかれる。  ・すべてのポートがふさがっているPC同士は直接通信することが出来ない。    また質問なのですが、クライアント側は通信するときにどこかポートは空けなくてもいいのでしょうか。  つまり、通信しにいけるが、通信を受け付けることが出来ないということでしょうか。  ポートを空けなくていい場合、サーバ側はどうやってクライアントのあるプログラムにあて先を指定してデータを送るのでしょうか。

  • ホンダインターナビの通信費

    ホンダのインターナビの件です ケータイと接続して情報を取得するもののようですが パケット通信費がかかるとの事 これはドコモであれば、パケホーダイに加入していれば、その範囲内で収まるのでしょうか?  それとも別に通信費がかかってしまうのでしょうか? 他の方の回答集を見てもよくわからなかったので質問させて頂きました お分かりの方、よろしくお願い致します

  • ルータがVPN以外の通信を全て遮断するようにしたい

    とある匿名掲示板にあったのですが、日々ルータにはTCPやUDPのパケットが投げられていて、ルータをすり抜けて配下のデバイスに届いているらしく、こととタイミング次第によっては侵入も許していることもあるようです。 そこで、ルータの方でVPNによる通信をするよう設定してしまい、VPNに関わるポートだけを限定的に許可し、それ以外のポートは明示的にDenyにしたら、80/443/53(DNSが一番危険なのではと思っています)の通信はシャットダウンできてセキュリティが向上するのではないかと思うのですが、そのような方法を解説しているサイトなどありませんでしょうか?

  • 【ポート関連】P2Pで通信しているか、サーバーと通信しているか…。

    アラド戦記というオンラインゲームがありまして、そのゲームはハイブリッドP2Pで通信しているらしいのですが?公式からは何の発表がない+質問には自動返信メールで困っております。 で、自分で色々と調べてみたのですが…UDP2種+TCP1種で通信しているっぽいんです。 UDPは5063番と…毎回、接続するたびに変化するポート番号で通信(?) TCPも…毎回、接続するたびに変化するポート番号で通信(?) オンラインゲームで、ポート番号が変化する事ってあるのでしょうか? それと、TCPポートも「netstat」等で調べてみると…eSTablish状態。 これってポートが開放されている状態って事ですよね?その番号は開放した覚えがないのですが…。 これって…本当にP2Pなんでしょうか?P2Pなら、ポート番号を固定化させる方法なんてないでしょうが…あったら教えて戴きたいのです。 ご返答くださると幸いです。よろしくお願い致します。