Hi all friends of the ethereal community ...
I have several questions that I hope I will find an answer through this forum.
What I'm concerned about is the whole process of incidents from when an application
writes some data to a socket, to the point when the data is actually being transmitted over a
medium either wire or wireless.
In my notion, which I guess is quite limited and erroneous, headers are appended to the data
in conformance with the protocol used (eg UDP/TCP) in the Transport layer. This packet is then sent
to the ip layer where an ip header is appended. After this step the packet is sent to the txqueue buffer
which I assume is on the ip-layer ? (I don't know whether this is true or not).
With the ifconfig command, you can set the size of this buffer. When the packet is sent to this buffer
ethereal will log this packet as transmitted (?). But at this stage the packet is not really transmitted
yet. The packet will eventually be sent to the mac layer, whether there is a buffer here I don't know,
but I guess there may be a buffer here as well. At the mac-layer a mac header is appended to the packet,
and then sent to phy-layer which then will transmit the packet over a wire/wireless medium.
I've run some test where I send udp packets from PC A to PC B through wireless interface (802.11).
On both pc's I log events with ethereal. In addition, the pc's are time synchronized. What I can observe
from the log files is that under unstable conditions (like when PC B is moving away from PC A), packets
registered as transmitted at PC A is received 4-5 seconds later at PC B. Based on this I assume that those
packets are delayed while they are in the sender buffer (is this buffer in ip layer or mac layer?), while
they are waiting for to be transmitted. To be able to explain this I think it's necessary to have a thorough
understanding of where on the osi-model the buffering is performed.
As you may see in the description of my notion, there are several question marks, and I hope that you
guys could help me to clear my thoughts. I really wish to understand in detail where in the ip stack
packets are buffered, and at what stage ethereal register a packet as transmitted. If anyone knows how
to monitor the buffer usage as function of time, I hope you could describe that as well.
I did run the mentioned test on linux based pc:
Fedora 2, version 2.6.8
udp traffic was generated using mgen version 4.2b5
Thanks for your time
Best regards
Vinh Pham