1+
2+
3+
4+ <!DOCTYPE html>
5+ < html lang ="en ">
6+ < head >
7+
8+
9+ < title > Eclipse Cyclone DDS - FAQ</ title >
10+ < meta charset ="utf-8 " />
11+ < meta name ="description " content ="Eclipse Cyclone DDS, High performant and robust open source OMG DDS implementation " />
12+ < meta name ="keywords " content ="eclipse, cyclone, dds, pub, sub, pubsub, iot, cyclonedds, cdr, omg, idl, middleware, ros " />
13+ < meta name ="author " content ="Eclipse Cyclone DDS Committers " />
14+ < meta name ="viewport " content ="width=device-width, initial-scale=1, shrink-to-fit=no ">
15+ < meta http-equiv ="x-ua-compatible " content ="ie=edge ">
16+
17+ < link rel ="stylesheet " href ="/css/bootstrap-reboot.min.css ">
18+ < link rel ="stylesheet " href ="/css/bootstrap.min.css ">
19+ < link rel ="stylesheet " href ="/css/font-awesome.min.css ">
20+ < link rel ="stylesheet " href ="/css/style.css ">
21+ < link rel ="stylesheet " href ="/css/syntax.css ">
22+
23+ < link rel ="stylesheet " href ="/css/pygments.css ">
24+ < link rel ="stylesheet " href ="/css/markdown.css ">
25+
26+ </ head >
27+
28+ < body >
29+
30+ < header class ="navbar navbar-expand navbar-dark flex-column flex-md-row ato-navbar px-5 ">
31+ < a class ="navbar-brand " href ="/ ">
32+ < img src ="/images/cyclonedds-light.png " class ="m-1 align-middle " alt ="" height ="30 ">
33+ </ a >
34+
35+ < div class ="collapse navbar-collapse ">
36+ < ul class ="navbar-nav ">
37+ < li class ="nav-item ">
38+ < a class ="nav-link " href ="/ "> Home</ a >
39+ </ li >
40+ < li class ="nav-item ">
41+ < a class ="nav-link " href ="/docs "> Documentation</ a >
42+ </ li >
43+ < li class ="nav-item ">
44+ < a class ="nav-link " href ="/content/faq.html "> FAQ</ a >
45+ </ li >
46+ < li class ="nav-item ">
47+ < a class ="nav-link " href ="/content/deep-dives.html "> Deep Dives</ a >
48+ </ li >
49+ < li class ="nav-item dropdown ">
50+ < a class ="nav-link dropdown-toggle " href ="# " id ="navGuides " role ="button " data-bs-toggle ="dropdown " aria-expanded ="false ">
51+ Guides
52+ </ a >
53+ < ul class ="dropdown-menu " aria-labelledby ="navGuides ">
54+
55+ < li > < a class ="dropdown-item " href ="/content/guides/detect-retransmits.html "> Detect Retransmits</ a > </ li >
56+
57+ < li > < a class ="dropdown-item " href ="/content/guides/interactive-tutorial-chapter-1.html "> Python Interactive Tutorial, Chapter 1</ a > </ li >
58+
59+ < li > < a class ="dropdown-item " href ="/content/guides/supported-idl.html "> What syntax and datatypes are supported in IDL</ a > </ li >
60+
61+ < li > < a class ="dropdown-item " href ="/content/guides/tracefile.html "> Cyclone DDS trace files</ a > </ li >
62+
63+ </ ul >
64+ </ li >
65+ < li class ="nav-item ">
66+ < a class ="nav-link " href ="/blog.html "> Blog</ a >
67+ </ li >
68+ < li class ="nav-item ">
69+ < a class ="nav-link " href ="/content/tools.html "> Tools</ a >
70+ </ li >
71+ </ ul >
72+ </ div >
73+
74+
75+
76+
77+ < ul class ="navbar-nav flex-row ml-md-auto d-none d-md-flex ">
78+ < li class ="nav-item ">
79+ < a class ="nav-link p-2 " href ="https://github.com/eclipse-cyclonedds/cyclonedds " target ="_blank " rel ="noopener " aria-label ="GitHub ">
80+ < span class ="fab fa-github fa-lg "> </ span >
81+ </ a >
82+ </ li >
83+ < li class ="nav-item ">
84+ < a class ="nav-link p-2 " href ="https://twitter.com/EclipseCyclone " target ="_blank " rel ="noopener " aria-label ="Twitter ">
85+ < span class ="fab fa-twitter fa-lg "> </ span >
86+ </ a >
87+ </ li >
88+ < li class ="nav-item ">
89+ < a class ="nav-link p-2 " href ="https://discord.gg/BkRYQPpZVV " target ="_blank " rel ="noopener " aria-label ="Discord ">
90+ < span class ="fab fa-discord fa-lg "> </ span >
91+ </ a >
92+ </ li >
93+ </ ul >
94+ </ header >
95+
96+
97+
98+ < main >
99+ < div class ="container ">
100+ < div class ="row ">
101+ < div class ="col-12 mx-auto px-5 my-3 markdown ">
102+ < h2 id ="detecting-and-optimizing-dds-retransmissions-with-wireshark "> Detecting and Optimizing DDS Retransmissions with Wireshark</ h2 >
103+ < h3 id ="understanding-dds-retransmissions "> Understanding DDS Retransmissions</ h3 >
104+ < p > DDS (Data Distribution Service) relies on UDP, meaning messages can be lost due to network conditions or QoS settings. With reliable QoS, lost messages must be retransmitted, which can introduce latency spikes. Retransmissions can only be detected through heartbeats, which are sent either at regular intervals or with every data message. These heartbeats signal which sequence numbers have been successfully received and indicate any missing messages that need to be retransmitted.</ p >
105+ < h3 id ="detecting-retransmissions-in-wireshark "> Detecting Retransmissions in Wireshark</ h3 >
106+ < p > DDS retransmissions are not explicitly marked in the data stream. However, retransmissions are triggered by a NACK (Negative Acknowledgment). To identify NACKs in Wireshark, you can use the following filter < code > rtps.bitmap.num_bits > 0</ code > .
107+ This filter allows you to focus on NACKs and, in most cases, is sufficient for detecting retransmits.</ p >
108+ < p > You may also filter by submessage IDs e.g., using < code > rtps.sm.id == 0x6</ code > :</ p >
109+ < ul >
110+ < li > ACKNACK: 0x6</ li >
111+ < li > NACKFRAG: 0x12</ li >
112+ </ ul >
113+ < h4 id ="wireshark-example-of-a-retransmit "> Wireshark Example of a Retransmit</ h4 >
114+ < p > In the Wireshark screenshot below, you can see an example of a retransmission.</ p >
115+ < ol >
116+ < li > A message with sequence number 7530 is received.</ li >
117+ < li > Sequence number 7532 is received, but the heartbeat indicates that sequence 7531 was lost.</ li >
118+ < li > Sequence number 7531 is retransmitted.</ li >
119+ < li > Sequence number 7533 is received.</ li >
120+ </ ol >
121+ < p > < img alt ="wireshark retransmit " src ="/images/wireshark-retransmit.jpg "> </ p >
122+ < h3 id ="tuning-heartbeat-intervals-for-faster-recovery "> Tuning Heartbeat Intervals for Faster Recovery</ h3 >
123+ < p > The speed at which lost data is detected and retransmitted depends on the heartbeat interval or the frequency of data transmission. By default, the heartbeat interval is set to 100 ms, but for low-rate periodic data, you can reduce this interval for example to 5 ms:</ p >
124+ < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="nt "> <Internal></ span >
125+ < span class ="nt "> <HeartbeatInterval</ span > < span class ="na "> minsched=</ span > < span class ="s "> "5ms"</ span > < span class ="na "> min=</ span > < span class ="s "> "5ms"</ span > < span class ="nt "> ></ span > 5ms< span class ="nt "> </HeartbeatInterval></ span >
126+ < span class ="nt "> </Internal></ span >
127+ </ code > </ pre > </ div >
128+
129+ < p > With this adjustment, lost data can be recovered in approximately 5.1 ms (5 ms for the heartbeat, plus ~2x50µs for network processing).</ p >
130+ </ div >
131+ </ div >
132+
133+ < div class ="row ">
134+ < div class ="col-12 mx-auto px-5 mb-3 ">
135+ < span class ="text-muted ">
136+ By Sven Trittler, posted on 2024-10-18.</ span >
137+ </ div >
138+ </ div >
139+
140+ </ div >
141+ </ main >
142+
143+ < footer class ="ato-footer text-muted ">
144+ < div class ="container-fluid p-6 p-md-5 ">
145+ < div class ="row ">
146+ < div class ="col-6 col-md-2 pb-2 ">
147+ < h5 > Eclipse Incubation</ h5 >
148+ < p > < img src ="/images/eclipse-incubation.png " style ="width:100px; "> </ p >
149+ < p > Eclipse Cyclone DDS ™ is an incubating project under the Eclipse Foundation.</ p >
150+ </ div >
151+
152+ < div class ="col-6 col-md-2 pb-2 ">
153+ < h5 > More Information</ h5 >
154+ < p > < a href ="https://www.eclipse.org/legal " target ="_blank "> Legal</ a > </ p >
155+ < p > < a href ="https://www.eclipse.org/legal/privacy.php " target ="_blank "> Privacy policy</ a > </ p >
156+ < p > < a href ="https://www.eclipse.org/legal/termsofuse.php " target ="_blank "> Terms of use</ a > </ p >
157+ < p > < a href ="https://www.eclipse.org/legal/copyright.php " target ="_blank "> Copyright</ a > </ p >
158+ < p > < a href ="https://www.eclipse.org/security/ " target ="_blank "> Report a security issue</ a > </ p >
159+ < p > < a href ="https://www.eclipse.org/legal/epl-2.0/ " target ="_blank "> Eclipse Public License 2.0</ a > </ p >
160+ < p > < a href ="https://www.eclipse.org/org/documents/edl-v10.php " target ="_blank "> Eclipse Distribution License 1.0</ a > </ p >
161+ < p > < a href ="https://www.eclipse.org/ " target ="_blank "> Eclipse Foundation</ a > </ p >
162+ </ div >
163+
164+ < div class ="col-6 col-md-2 pb-2 ">
165+ < h5 > Sponsored by:</ h5 >
166+ < p > < a href ="https://www.eclipse.org/ " target ="_blank "> < img src ="/images/eclipse-foundation.svg " alt ="Eclipse Foundation " class ="img-fluid w-75 "> </ a > </ p >
167+ < p > < a href ="https://zettascale.tech/ " target ="_blank "> < img src ="/images/zettascale.svg " alt ="ZettaScale Technology " class ="img-fluid w-75 "> </ a > </ p >
168+ < p > < a href ="https://www.adlinktech.com " target ="_blank "> < img src ="/images/company_logo.svg " alt ="ADLINK Technology " class ="img-fluid w-75 "> </ a > </ p >
169+ </ div >
170+
171+ < div class ="col-6 col-md-2 pb-2 ">
172+ < h5 > Follow us</ h5 >
173+ < p > < a href ="https://github.com/eclipse-cyclonedds/cyclonedds "> < span class ="fab fa-github "> </ span > GitHub</ a > </ p >
174+ < p > < a href ="https://twitter.com/EclipseCyclone "> < span class ="fab fa-twitter "> </ span > Twitter</ a > </ p >
175+ < p > < a href ="https://discord.gg/BkRYQPpZVV "> < span class ="fab fa-discord "> </ span > Discord</ a > </ p >
176+ < p > < a href ="/docs "> < span class ="fa fa-info-circle "> </ span > About</ a > </ p >
177+ </ div >
178+
179+ < div class ="col-12 col-md-4 pb-2 ">
180+ < p > Eclipse Cyclone DDS ™ is free, open source and always will be.</ p >
181+ < p > Copyright © 2022 Eclipse Foundation</ p >
182+ < p > Theme inspired by: < a href ="https://tokio.rs/ " target ="_blank "> Tokio website theme</ a > </ p >
183+ </ div >
184+ </ div >
185+ </ div >
186+ </ footer >
187+
188+ <!-- jQuery first, then Tether, then Bootstrap JS. -->
189+ < script src ="/js/jquery.min.js "> </ script >
190+ < script src ="/js/tether.min.js "> </ script >
191+ < script src ="/js/bootstrap.min.js "> </ script >
192+ < script src ="/js/highlight.min.js "> </ script >
193+ < script > $ ( function ( ) {
194+ $ ( "pre code" ) . each ( function ( i , block ) {
195+ hljs . highlightBlock ( block ) ;
196+ } ) ;
197+ } ) ;
198+ </ script >
199+ </ body >
200+ </ html >
0 commit comments