回答編集履歴

3

update

2017/01/13 03:10

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -19,3 +19,11 @@
19
19
 
20
20
 
21
21
  UDP送信処理という観点からは、上記のような微妙なタイミング制御には意味があります。データグラム欠損を極力避けるには、UDP送信側はなるべく一定間隔でのデータ送信を行うよう制御し(バースト的な送出処理は避ける)、UDP受信側は可能な限り最速でネットワークスタックからデータを取り出す(`recvfrom`とその後の解析処理を分離するなど)必要があります。
22
+
23
+
24
+
25
+ > しかし速度を重視してUDPを採用したので,可能であれば無意味な処理を使用せず実行したいと考えている.
26
+
27
+
28
+
29
+ (気持ちは分かりますが)UDP通信路全体でみると全くの**逆効果**です。送信側だけの都合で最速処理すると、既に説明したようなデータグラム欠損があちこちで生じてしまいます。

2

update

2017/01/13 03:10

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -10,4 +10,12 @@
10
10
 
11
11
 
12
12
 
13
- `SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。それ以外の方策としては、UDP送信側はなるべく一定間隔でのデータ送信を行うよう制御し(バースト的な送出処理は避ける)、UDP受信側は可能な限り最速でネットワークスタックからデータを取り出す(`recvfrom`とその後の解析処理を分離するなど)必要があります。
13
+ `SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。
14
+
15
+
16
+
17
+ > 送信のforループの中に無意味な処理("for (int h = 0; h < 1000000; h++)")を追加して送信の間隔を空けた場合
18
+
19
+
20
+
21
+ UDP送信処理という観点からは、上記のような微妙なタイミング制御には意味があります。データグラム欠損を極力避けるには、UDP送信側はなるべく一定間隔でのデータ送信を行うよう制御し(バースト的な送出処理は避ける)、UDP受信側は可能な限り最速でネットワークスタックからデータを取り出す(`recvfrom`とその後の解析処理を分離するなど)必要があります。

1

update

2017/01/13 03:07

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -6,8 +6,8 @@
6
6
 
7
7
 
8
8
 
9
- 質問者さんが言及している通り、UDPは**あらゆるレイヤで**データグラム欠損が起きうる通信プロトコルです。実際のネットワーク上でパケット・ロス発生する以外にも、NIC内部で破損検知したデータグラムを破棄したり、ネットワークスタック内部の送受信バッファ不足によりデータグラムを破棄することもあります。
9
+ 質問者さんが言及している通り、UDPは**あらゆるレイヤで**データグラム欠損が起きうる通信プロトコルです。実ネットワーク上でパケット・ロス発生以外にも、NIC内部で破損検知したデータグラムを破棄したり、ネットワークスタック内部の送受信バッファ不足によりデータグラムを破棄することもあります。
10
10
 
11
11
 
12
12
 
13
- `SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。
13
+ `SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。それ以外の方策としては、UDP送信側はなるべく一定間隔でのデータ送信を行うよう制御し(バースト的な送出処理は避ける)、UDP受信側は可能な限り最速でネットワークスタックからデータを取り出す(`recvfrom`とその後の解析処理を分離するなど)必要があります。