본문 바로가기
컴퓨터 지식/네트워크&프로토콜

[네트워크📶/TCP] Silly Window Syndrome 과 Nagle 알고리즘

by 서상혁 2020. 5. 28.

Silly Window Syndrome 이란

 

출처 : 588ku <a href="https://pngtree.com/">Pngtree.com</a>

TCP 에서 전송할때 작은 segment도 하나하나씩 보낸다고 가정해봅시다.

TCP는 작은 segment 하나 전송을 위해 3-Way Handshake 과정을 거쳐야 하고,

1 바이트 전송을 위해 40바이트의 헤더가 들어갑니다. 

그 비효율성은 마치 큰 트럭에 조그만한 지우개 하나를 태워 보내는 것과 같습니다.

전체 트럭의 수용량(MSS)를 전혀 사용하지 못하죠.

이를 해결하기 위해 silly window syndrome avidance 가 이루어집니다.

 

즉, receiver가 받을 수 있는 수용량이 매우 적다면, 조금조금씩 받을 수 밖에 없겠죠?

그럼 이러한 비효율적인 일이 벌어집니다.

따라서, reciever 의 수용량이 아주 적을 때, 차라리 sender에게는 0-window ACK 을 전송해, 모아서 나중에 보내게끔 합니다. 이는 양방향 전송에서 모두 이루어집니다.

 

"Be liberal in what you accept, and conservative in what you send" (Postel's Law, RFC 1122)

받을 것은 자유롭게, 보내야 되는것은 꼭 보존하면서.

 

Nagle's algorithm

 

Nalge Algorithm 의 수도코드 (출처 : 위키백과)

 

full segment을 만들 수 있다면, 조그만한 segment가 있다 하더라도 바로 보냅니다.

보낼 데이터가 매우 작다면 그 segment 는 보내지 않고 send socket buffer에 저장해둡니다.

앞서 전송한 데이터에 대해 ACK를 받는다면 그때 socket buffer에 저장해뒀던 데이터를 모두 전송합니다.

 

문제점

1. 네트워크의 효율성은 좋아질 수 있으나, 즉각적인 반응을 보여야 하는, 게임, 마우스 움직임 등에서는 처리 속도가 확연히 떨어지게 됩니다.

 

2. Delayed ACK timer 방식과 충돌이 일어나, 전송이 강제로 진행될 수 있습니다.

728x90

댓글