데이터 는 (Data)TCP/IP Protocol 을 사용하여 네트워크와 인터넷(Internet) 을 통해 전송 됩니다. TCP/IP 는 완벽하지는 않지만 ISO OSI 모델 과 같이 데이터 통신을 위해 이론화된 다른 프로토콜에 비해 구현하기가 더 쉽습니다 . 기술적인 문제와 마찬가지로 TCP/IP 에도 몇 가지 결함이 있으며 Silly Window Syndrome 은 이러한 결함 중 하나의 생성입니다. Silly Window Syndrome 또는 SWS 가 무엇인지 이해하려면 먼저 TCP/IP 에서 데이터 통신의 기본 메커니즘을 이해해야 합니다 .
어리석은 창 증후군
창 및 크기 이해
두 지점이 TCP/IP 에서 통신할 때 승인 메커니즘이 포함됩니다. 이 인식 메커니즘은 더 자세히 설명하는 것처럼 어리석은 창 증후군 을 일으키는 원인입니다. (Silly Window Syndrome)포인트는 두 대의 컴퓨터, 클라이언트와 서버 등을 가리킬 수 있습니다.
SWS is caused by the receiver advancing the right window edge whenever it has any new buffer space available to receive data and by the sender using any incremental window, no matter how small, to send more data. The result can be a stable pattern of sending tiny data segments, even though both sender and receiver have a large total buffer space for the connection, says MSDN.
컴퓨터 A가 데이터 패킷을 다른 컴퓨터 B로 보낼 때 B는 데이터 패킷을 수신했음을 확인하고 응답해야 합니다. 승인과 함께 해당 통신 스레드에 대해 별도로 설정된 버퍼 크기도 보내야 합니다. 이것은 일반적으로 통신을 위해 사용 가능한 바이트 수입니다.
따라서 B가 다음 메시지에 대해 100B를 사용할 수 있다고 말하면 100B는 어리석은 창 증후군(Silly Window Syndrome) 의 창 입니다. 즉, 버퍼 크기입니다. 자체 결함으로 인해 TCP/IP 메커니즘은 A에서 오는 각 통신/데이터에 대한 버퍼 크기를 줄일 수 있습니다. 즉, A가 메시지를 보낼 때마다 B는 버퍼 크기가 축소된 것으로 가정하고 더 작은 수를 보냅니다. 따라서 창 크기는 계속 줄어들고 어느 시점에서 B가 창 크기로 0B를 보내면서 통신이 중지됩니다.
어리석은 창 증후군은 어떻게 작동합니까?
위의 A와 B의 예에 따르면 B가 창 크기로 1000B를 보내면 A는 두 개의 500B로 분할하여 500B의 두 패킷을 보냅니다. 첫 번째 패킷을 수신하면 B는 두 번째 패킷이 아직 수신되지 않았기 때문에 창에 대해 500B를 사용할 수 있다는 응답을 보냅니다. A는 500B가 창 크기라고 가정하고 결과적으로 250B의 두 패킷을 보냅니다. B에서 500B가 사용되고 500이 방금 수신된 동안 사용 가능한 경우 0B를 보냅니다. 이 시점에서 A는 프로세서가 데이터를 사용했기 때문에 버퍼가 비어 있는 경우에도 사용할 수 있는 창이 없다고 가정합니다. A는 여전히 사용 가능한 창이 있는지 확인하기 위해 더 작은 패킷을 보냅니다. B에 있는 버퍼의 내용이 아직 제거되지 않은 경우 응답/승인으로 여전히 0을 받습니다.
따라서 창 크기는 B가 A로부터 패킷을 수신할 때마다 승인을 보내므로 계속 감소합니다. 이 크기는 일반적으로 B가 데이터 패킷을 부분적으로 수신하기 때문에 이전 승인보다 작습니다. A가 한 번에 B의 버퍼 크기를 커버할 만큼 충분히 큰 패킷을 보낼 수 있다면 문제가 없을 것입니다. 그러나 추가 메커니즘이 필요하고 따라서 어리석은 창 증후군(Silly Window Syndrome) 이 필요 합니다. A가 0을 두세 번 수신하면 통신이 중지됩니다.
바보창 증후군(Silly Window Syndrome) ( SWS ) 을 예방하는 방법
SWS 를 제거하기 위해 구현해야 하는 간단한 알고리즘이 있습니다 . 초기 패킷을 받으면 B는 실제 사용 가능한 공간의 절반을 창으로 보냅니다. 그러면 A가 더 작은 패킷을 보냅니다. 결과적으로 패킷이 너무 작아지면 B는 A가 더 큰 데이터 바이트를 다시 보낼 수 있도록 총 버퍼 크기를 보냅니다.
즉, 1000B가 사용 가능한 경우 B는 승인으로 500B를 보냅니다. 따라서 A는 250B x 2 패킷을 보낸다. 이를 위해 A는 100B를 수신확인으로 받습니다. 50B 패킷을 받으면 B는 1000B – 50B를 A에게 보냅니다. 그러면 전체 대화가 다시 작동하게 됩니다. 이렇게 하면 처리가 약간 지연될 수 있지만 어리석은 창 증후군(Silly Window Syndrome) 이 발생하여 전체 대화가 중단되는 것을 방지할 수 있습니다.
요약하자면 SWS 는 수신자가 사용할 수 있는 버퍼 크기와 발신자가 계산한 추정 크기를 기반으로 합니다. SWS 를 방지하기 위해 지연이 도입되고 패킷 크기가 너무 작아질 때까지 의도적으로 더 작은 창 크기가 보답됩니다. 그런 다음 수신자는 실제로 사용 가능한 창 크기를 공개합니다. 통신이 완료될 때까지 전체 프로세스가 계속 반복됩니다.
비록 내가 단어 창과 버퍼를 같은 의미로 사용했을지 모르지만. 나는 그들 사이에 어떤 차이도 의미하지 않습니다. SWS 연구 에서 버퍼는 창입니다.
What is Silly Window Syndrome - Explanation and Prevention
Data is transferred over the network and Internet using the TCP/IP Protocol. The TCP/IP is not perfect but is easier to implement compared to other protocols theorized for data communication… such as the ISO OSI model. As with any technical thing, TCP/IP has some flaws too and Silly Window Syndrome is a creation of one of those flaws. To understand what is Silly Window Syndrome or SWS, you will first need to understand the underlying mechanism of data communication in TCP/IP.
Silly Window Syndrome
Understanding the window and its size
When two points are communicating under TCP/IP, it involves an acknowledging mechanism. This acknowledging mechanism is what causes Silly Window Syndrome as explained further. Points may refer to two computers, client and server, etc.
SWS is caused by the receiver advancing the right window edge whenever it has any new buffer space available to receive data and by the sender using any incremental window, no matter how small, to send more data. The result can be a stable pattern of sending tiny data segments, even though both sender and receiver have a large total buffer space for the connection, says MSDN.
When a computer, say A, sends a data packet to another computer B, the latter has to acknowledge and reply that it received the data packet. Along with the acknowledgment, it also has to send the size of buffer set apart for that communication thread. This is generally the number of bytes set free for communication.
So when B says 100B is available for the next message, the 100B is the window in Silly Window Syndrome. That is, it is the buffer size. With its own flaw, the TCP/IP mechanism may reduce the buffer size for each communication/data coming from A. That is, whenever A sends a message, B assumes the buffer size is reduced and sends a smaller number. Thus the window size keeps on reduced and at a point, the communication just stops as B sends 0B as the window size.
How Does Silly Window Syndrome Work
According to the above example of A and B, if B sends 1000B as window size, A will split it into two 500B and send two packets of 500B. Upon receipt of the first packet, B will send an acknowledgment saying 500B is available for the window as the second packet is yet to be received. A assumes 500B is the window size and sends two packets of 250B consequently. While at B, 500B is used and 500 is just received, it will send 0B as available. At this point, A will assume no window is available though it might happen that buffer is empty as the processor used up the data there. A will still send a smaller packet to see if any window is available. If the contents of the buffer at B are not yet removed, it will still receive 0 as response/acknowledgment.
Thus, the window size keeps on reducing as B sends acknowledgment every time it receives a packet from A. This size is usually smaller than the previous acknowledgment as B is receiving data packets in parts. There would be no problem if A could send a packet big enough to cover the buffer size on B at a time. But that it would require additional mechanisms and hence Silly Window Syndrome. The communication stops after A receives 0 two or three times.
How to prevent Silly Window Syndrome (SWS)
There is a simple algorithm to be implemented to get rid of SWS. Upon receiving the initial packet, B sends half the really available space as the window. That will make A send smaller packets. Consequently, when the packets become too smaller, then B sends the total buffer size so that A can start sending bigger data bytes again.
In other words, if 1000B is available, B sends 500B as acknowledgment. Accordingly, A sends 250B x 2 packets. For this, A receives 100B as acknowledgment. When it receives 50B packet, B sends 1000B – 50B to A. That makes the entire conversation operational again. This might induce a little delay in processing but will prevent Silly Window Syndrome from occurring and stopping the entire conversation.
To sum up, SWS is based on the buffer size available to the recipient and the assumed size calculated by the sender. To prevent SWS, a delay is introduced and a deliberate smaller window size is reciprocated until packet size becomes too small. Then the recipient discloses actually available window size. The entire process keeps on repeating until the communication is complete.
Although I may have used the words window and buffer interchangeably. I do not mean any difference between them. In SWS studies, the buffer is the window.