
こんにちは。
現在、クライアント&サーバの通信プログラムを作成しています。
クライアントがサーバに接続しにいく際、サーバの待ち受けポートにクライアントが
UDPでブロードキャストしています。
その際、クライアントの情報もUDPに乗せて、送信しています。
ここで、問題なのですが、ネットワークモニタで通信データを見てみると、
クライアントから送信するUDPデータが1500バイト?を超えると、UDPパケットの分割が行われ、
2つめのデータが、UDPではなく、IPで送信されています。
しかも、2つめのIPのパケットがサーバ側に届くケースと届かないケースがあるように見受けられます。
(環境の違いかもしれません。)
2つめのパケット破棄は破棄が起こる環境では必ず起きます。
破棄が起きない環境では一回も起こりません。
スイッチ、NIC等で、破棄することってあるのでしょうか?
ネットワーク上の問題っぽいので、OSの違い(Win2K pro,Win2k advanced server)
などには関係ないですよね?
どなたが、ご存知の方がおられましたらご教授願います。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
Ethernetのフレームサイズの上限が1500バイトなのはご存知ですか?
IP自体は1500バイト以上送れますが,例えば途中の経路にEthernetがあった場合,送信時にエラーとなるか、
複数のIPに分割して送信するかします(OSやプログラム、ドライバ等の設定による)。
分割した場合は、UDPの前の方が含まれるIPパケットと
UDPの後ろの方が含まれるIPパケットになります。
つまり、質問されているようなUDPとIPに分かれたように見えてるものは、単にUDPの前の方が含まれるIPパケットと
残りが含まれるIPパケットというだけで、
それそのものは問題ありません。
あとは、受信した側でその二つのIPパケットからUDPを復元するだけです。
これでIPからすれば、分割されずに1パケットとして通信されたように見えます。
話からすると、途中のスイッチなりルータなりFWなりか、受信側のIPドライバ(?)が分割されたIPパケットを正しく処理できてないか,
そもそもIPパケットの分割に対応していないのではないかと思います。
ちなみに、WindowsはIPパケット分割不可の設定で送信するらしいので、このようなデータは送信時にエラーになると思います。
ただ、エラー自体は送信時でなく送信後に発生することになると思いますので,プログラムで検出できるかどうかはわかりませんが。
UDPを使うなら分割が起きないよう,1パケットのサイズは途中経路のフレームなりパケットのサイズを越えないようにした方がいいように思いますが。
そうじゃないと、このケースだとエラー出る経路上の全てをチェックし、必要なら機器なりソフトなりを交換しないとだめなように思えます。
私が作る場合,状況によってはTCPでもEthernetの1フレームに収まるようにしますし、
UDPならまず間違い無く1500(IP,UDPヘッダサイズ込み)以下にします。
もちろん、足らない場合はありますが、その場合はプログラムで自分用のヘッダつけて対処します。
パケットをモニタできるなら、ICMPのエラーが帰ってきているかも知れませんのでチェックしてみてください。
No.2
- 回答日時:
IPパケットがネットワークの途中で消えることがあるかということなら、ありますね。
消えることがあるからこそ、確実に通信を行うためのTCPがあり、IPより上位層で連番管理や受信応答を行い、不着や抜けを検知すると自動再送することで、確実な通信を実現しているわけです。
そういうことを行わないのがUDPなので、届いた・届かないなどの管理はプログラマが行わなければなりません。
消える原因として考えられるのは、
・他のパケットとの衝突
・ノイズ
・接触不良
・電圧変動や高温によるネット機器の不安定動作
などで、IPパケットのデータがビット化けを起こし、チェックサムエラーとなればNIC、スイッチ、ルーター等でパケットが廃棄されます。
再現性があるなら環境の違いを詳しく調べると何か原因がわかるかもしれません。交換できるものは交換してみて変化を見るとか。
回答ありがとうございました。
やはり、UDPの限界(システムで使用する)というものがあるという感じでしょうか。
今回のようなシステムでは、TCPを使用するほうがよりベターであるということですよね?
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
- ネットワーク 社内ネットワークの1台だけ接続できないときがある 4 2023/01/25 11:58
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
- その他(開発・運用・管理) Windows serverでマルチキャスト通信の確認をしたいです。MicrosoftよりMPING 1 2023/03/31 01:05
- PHP PHP でメールフォームを作成したい 1 2022/05/04 22:28
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- その他(メールソフト・メールサービス) メールが送信できない 発信側でできる対策 3 2023/05/11 10:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MACアドレスが知られた場合の危...
-
デフォルトルート(ゲートウェ...
-
通信用語 FR・CR接続って...
-
tcp/ip通信で特定のデータが送...
-
不正アクセスを見破る方法を教...
-
UDPパケットの分割について
-
FWの設定について(片方向のル...
-
MTUとRWINの調整
-
ICMP Echo Message はtcp,udp...
-
パケットサイズによる網内遅延...
-
Redhat Linux7.1でrcpコマンド...
-
軍事目的? インターネット
-
sftpとインターネットVPN
-
PADについての質問です。
-
MACアドレスの情報はどこに保存...
-
TCP12080の設定について
-
IPフラグメントの結合について
-
NTTサービス『131』って何ですか?
-
TTL
-
インテリジェントHUBについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MACアドレスが知られた場合の危...
-
tcp/ip通信で特定のデータが送...
-
FWの設定について(片方向のル...
-
デフォルトルート(ゲートウェ...
-
NAT配下のDNSどうやって外から...
-
UDPパケットの分割について
-
ブロードキャスト転送できるか...
-
通信用語 FR・CR接続って...
-
MACアドレスの情報はどこに保存...
-
UDPのデータの信頼性
-
SYNが2つ?
-
異常パケット
-
インテリジェントHUBについて
-
スイッチングハブとNICの相性
-
TIME_WAIT 時の振る舞い
-
PADについての質問です。
-
Redhat Linux7.1でrcpコマンド...
-
ネットワーク接続動作状況のパ...
-
リピータハブっていつ使う?
-
シーケンス制御
おすすめ情報