Silly Window Syndrome is a problem that arises due to poor implementation of TCP. It degrades the TCP performance and makes the data transmission extremely inefficient. The problem is called so because:
- It causes the sender window size to shrink to a silly value.
- The window size shrinks to such an extent where the data being transmitted is smaller than TCP Header.
What are the causes?
The two major causes of this syndrome are as follows:
- Sender window transmitting one byte of data repeatedly.
- Receiver window accepting one byte of data repeatedly.
Cause-1: Sender window transmitting one byte of data repeatedly –
Suppose only one byte of data is generated by an application . The poor implementation of TCP leads to transmit this small segment of data.Every time the application generates a byte of data, the window transmits it. This makes the transmission process slow and inefficient.The problem is solved by Nagle’s algorithm.
Nagle’s algorithm suggests:
- Sender should send only the first byte on receiving one byte data from the application.
- Sender should buffer all the rest bytes until the outstanding byte gets acknowledged.
- In other words, sender should wait for 1 RTT(Round Trip Time).
After receiving the acknowledgement, sender should send the buffered data in one TCP segment. Then, sender should buffer the data again until the previously sent data gets acknowledged.
Cause-2: Receiver window accepting one byte of data repeatedly –
Suppose consider the case when the receiver is unable to process all the incoming data.In such a case, the receiver will advertise a small window size.The process continues and the window size becomes smaller and smaller.A stage arrives when it repeatedly advertises window size of 1 byte.This makes receiving process slow and inefficient.The solution to this problem is Clark’s Solution.
Clark’s solution suggests:
- Receiver should not send a window update for 1 byte.
- Receiver should wait until it has a decent amount of space available.
- Receiver should then advertise that window size to the sender.
- Nagle’s algorithm is turned off for those applications that require data to be immediately send. Nagle’s algorithm can introduce delay as it sends only one data segment per round trip.
- Both Nagle’s as well as Clark’s algorithm can work together.Both are complementary.
A fast typist can do 100 words a minute and each word has an average of 6 characters. Demonstrate Nagle’s algorithm by showing the sequence of TCP segment exchanges between a client with input from our fast typist and a server. Indicate how many characters are contained in each segment sent from the client.Assume that the client and server are in the same LAN and the RTT is 20 ms?
Nagle’s algorithm suggests:
Sender should wait for 1 RTT before sending the data. The amount of data received from the application layer in 1 RTT should be sent to the receiver.
Amount of data accumulated in 1 RTT,
= (600 characters / 1 minute) x 20 msec = (600 characters / 60 sec) x 20 msec = (10 characters / 103 msec) x 20 msec = 0.2 characters
From here, we observe:
Even if the sender waits for 1 RTT, not even a single character is produced. So, sender will have to wait till it receives at least 1 character. Then, sender sends it in one segment. Thus, one character will be sent per segment. Assuming the TCP header length is 20 bytes, 41 bytes of data will be sent in each segment.
- Sliding Window protocols Summary With Questions
- Sliding Window Protocol | Set 3 (Selective Repeat)
- Sliding Window Protocol | Set 1 (Sender Side)
- Sliding Window Protocol | Set 2 (Receiver Side)
- Difference between Stop and Wait protocol and Sliding Window protocol
- Static and Dynamic Linking in Operating Systems
- Removing Direct and Indirect Left Recursion in a Grammar
- Difference between LAN and WLAN
- Total Recursive Functions and Partial Recursive Functions in Automata
- Introduction of Shortest Remaining Time First (SRTF) algorithm
- IIT Kanpur M. Tech Interview Experience
- Difference between WAN and WWAN
- Chaumian Blinding
- PGP - Compression
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.