I am building an Ethernet Application in which i will be sending packets from one side and receiving it on the other side. I want to calculate delay in packets at the receiver side as in RFC 3393. So I have to put a timestamps in the packet at the sender side and then take the timestamps at the receiver side as soon as i receive the packet . Subtracting the values i will get the difference in timestamps and then subtracting this value with subsequent difference i will get One way ipdv delay . Both the clocks are not synchronized . So any help is greatly appreciated. Thank you.
How to implement RFC 3393 (Ipdv packet delay varation) in C?
1.2k Views Asked by AudioBubble At
1
There are 1 best solutions below
Related Questions in C++
- EMACS-Live + Slime error at startup
- Auto complete of braces in emacs
- tmux + emacs : ctrl is not reconized
- yasnippet weird-input when org-mode :tag: on same line
- Error in Dired sorting on Windows (with Cygwin Emacs)
- ESS produces "Variable binding depth exceeds max-specpdl-size"
- How to simplify the mode-line, and enter evil-insert-state depending on buffer name
- MELPA pointing to non-existent version of multi-term?
- Mark-up for bold and italic in emacs org-mode
- How to get C-` key combo recognized in Emacs under Mac?
Related Questions in C
- EMACS-Live + Slime error at startup
- Auto complete of braces in emacs
- tmux + emacs : ctrl is not reconized
- yasnippet weird-input when org-mode :tag: on same line
- Error in Dired sorting on Windows (with Cygwin Emacs)
- ESS produces "Variable binding depth exceeds max-specpdl-size"
- How to simplify the mode-line, and enter evil-insert-state depending on buffer name
- MELPA pointing to non-existent version of multi-term?
- Mark-up for bold and italic in emacs org-mode
- How to get C-` key combo recognized in Emacs under Mac?
Related Questions in NETWORKING
- EMACS-Live + Slime error at startup
- Auto complete of braces in emacs
- tmux + emacs : ctrl is not reconized
- yasnippet weird-input when org-mode :tag: on same line
- Error in Dired sorting on Windows (with Cygwin Emacs)
- ESS produces "Variable binding depth exceeds max-specpdl-size"
- How to simplify the mode-line, and enter evil-insert-state depending on buffer name
- MELPA pointing to non-existent version of multi-term?
- Mark-up for bold and italic in emacs org-mode
- How to get C-` key combo recognized in Emacs under Mac?
Related Questions in RFC
- EMACS-Live + Slime error at startup
- Auto complete of braces in emacs
- tmux + emacs : ctrl is not reconized
- yasnippet weird-input when org-mode :tag: on same line
- Error in Dired sorting on Windows (with Cygwin Emacs)
- ESS produces "Variable binding depth exceeds max-specpdl-size"
- How to simplify the mode-line, and enter evil-insert-state depending on buffer name
- MELPA pointing to non-existent version of multi-term?
- Mark-up for bold and italic in emacs org-mode
- How to get C-` key combo recognized in Emacs under Mac?
Related Questions in IP-PROTOCOL
- EMACS-Live + Slime error at startup
- Auto complete of braces in emacs
- tmux + emacs : ctrl is not reconized
- yasnippet weird-input when org-mode :tag: on same line
- Error in Dired sorting on Windows (with Cygwin Emacs)
- ESS produces "Variable binding depth exceeds max-specpdl-size"
- How to simplify the mode-line, and enter evil-insert-state depending on buffer name
- MELPA pointing to non-existent version of multi-term?
- Mark-up for bold and italic in emacs org-mode
- How to get C-` key combo recognized in Emacs under Mac?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
RFC 3393 is for measuring the variance in the packet delay, not for measuring the delay itself.
To give an example: you're writing a video streaming application. You want to buffer as little video data as possible (so that the video starts playing as soon as possible). Let's say that data always always always takes 20ms to get from machine A to machine B. In this case (and assuming that machine A can send the video data as fast as it needs playing), you don't need any buffer at all. As soon as you receive the first frame, you can start playing, safe in the knowledge that by the time the next frame is needed, it will have arrived (because the data always takes exactly 20ms to arrive and machine A is sending at least as fast as you're playing).
This works no matter how long that 20ms is, as long as it's always the same. It could be 1000ms - the first frame takes 1000ms to arrive, but you can still start playing as soon as it arrives, because the next frame will also take 1000ms and was sent right behind the first frame - in other words, it's already on its way and will be here momentarily. Obviously the real world isn't like this.
Take the other extreme: most of the time, data arrives in 20ms. Except sometimes, when it takes 5000ms. If you keep no buffer and the delay on frames 1 through 50 is 20ms, then you get to play the first 50 frames without a problem. Then frame 51 takes 5000ms to arrive and you're left without any video data for 5000ms. The user goes and visits another site for their cute cat videos. What you really needed was a buffer of 5000ms of data - then you'd have been fine.
Long example, short point: you're not interested in what the absolute delay on the packets is, you're interested in what the variance in that delay is - that's how big your buffer has to be.
To measure the absolute delay, you'd have to have the clocks on both machines be synchronised. Machine A would send a packet with timestamp 12337849227 28 and when that arrived at machine B at time 12337849227 48, you'd know the packet had taken 20ms to get there.
But since you're interested in the variance, you need (as RFC 3393 describes) several packets from machine A. Machine A sends packet 1 with timestamp 1233784922 72 8, then 10ms later sends packet 2 with timestamp 1233784922 73 8, then 10ms later sends packet 3 with timestamp 1233784922 74 8.
Machine B receives packet 1 at what it thinks is timestamp 1233784922 12 8. The one-way delay between machine A and machine B has in this case (from machine B's perspective) been -600ms. This is obviously complete rubbish, but we don't care. Machine B receives packet 2 at what it thinks is timestamp 1233784922 15 8. The one-way delay has been -580ms. Machine B receives packet 3 at what it thinks is timestamp 1233784922 16 8. The one-way delay was again -580ms.
As above, we don't care what the absolute delay is - so we don't even care if it's negative, or three hours, or whatever. What we care about is that the amount of delay varied by 20ms. So you need a buffer of 20ms of data.
Note that I'm entirely glossing over the issue of clock drift here (that is, the clocks on machines A and B running at slightly different rates, so that for example machine A's time advances at a rate of 1.00001 seconds for every second that actually passed). While this does introduce inaccuracy in the measurements, its practical effect isn't likely to be an issue in most applications.