너무나도 상식이라는데, 나는 몰랐다.
대체 컴퓨터 네트워크시간에는 뭘 했는지??
혹시 배운건데 나만 모르는건가??
<펌 http://depiness.egloos.com/772710>
- TCP 소켓은 Default로 Nagle 알고리즘을 적용하고 있습니다.
3. Nagle 알고리즘의 장단점
- 장점 : 네트워크의 효율성이 높아짐. (똑같은 데이터를 보내더라도 생산하는 패킷이 적음)
- 단점 : 송신 호스트가 ACK를 받을 때까지 기다려야 하므로 전송 속도가 느려짐
4. Nagle 알고리즘의 중단
- 몇몇 네트웍 관련 프로그램에서는 네트웍의 전송량이나 부하보다는 빠른 응답속도를 더 중요시 여기는 상황이 있습니다. 그러한 때에는 TCP_NODELAY 라는 옵션을 사용하여 Nagle 알고리즘을 제거 할 수 있습니다.
- TCP_NODELAY 옵션이
1(TRUE) : Nagle 알고리즘을 적용하지 않습니다.
2(FALSE): Nagle 알고리즘을 적용합니다.
int opt_val = TRUE;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, sizeof(opt_val));
해당 옵션의 사용은 네트웍 부하를 극대화 시켜주면서 서버의 전체적인 성능을 무척 감소하기때문에 꼭 필요한 경우에만 매우 주의를 해서 사용해야 합니다.
- 전송은 작은 단위로 자주 이루어지지만 즉각적인 응답은 필요 없는 어플리케이션에서만 사용 되어야 합니다.(마우스 움직임 같은)
- Nagle 알고리즘은 리얼타임시스템에서의 제어와 특히나 인터렉티브한 키 입력을 하는 어플리케이션에서는 안 좋은 영향을 미칩니다. 선택적으로 Nagle 알고리즘을 통과하는 한가지 방법은 Out-of-bind 메시지 시스템을 쓰는 것입니다. 그러나 이것은 내용물에 제약이 있고 또 다른 문제(순서의 상실: loss of sequentiality)를 일으킬 수 있습니다.
## 결론 : Nagle을 설정하지 않은 상태에서, 소켓을 쓰면, 배(보낼 데이터)보다 배꼽(패킷 헤더)이 더 큰 상황이 발생할수 있으니, 상황에 맞게 소켓 옵션을 잘 설정해서 쓰자!!

Prev
Rss Feed