본문 바로가기

TCP-IP 소켓 프로그래밍

Nagle 알고리즘을 이해해보자

들어가며


Nagle알고리즘은 패킷들이 너무 많아 넘쳐나는 것을 막기위해 나오게 된 알고리즘이다. 매우 간단하지만 이번엔 Nagle알고리즘이 무엇인지, 어떨 때 쓰는지 알아보자.

 

Nagle 알고리즘??


Nagle알고리즘은 전송한 패킷의 ACK 패킷을 받아야지만 다음 데이터를 전송하는 간단한 알고리즘이다.

 

gle

Nagle 알고리즘 의 특징

장점

Nagle알고리즘을 적용하면 Network Traffic(네트워크에 걸리는 부하,혼잡 정도)이 감소한다. 1바이트를 보내더라도 패킷의 헤더의 크기는 수십바이트이기 때문이다.

단점

Nagle알고리즘은 ACK 패킷을 받고 정보를 다시 전송하기 때문에 속도 측면에서 좋지않다. 하지만 속도가 느리다고 Nagle알고리즘을 적용하지 않으면 엄청난 트래픽이 상당히 부담되기 때문에 상황에 맞게 사용해야한다.

 

예를 들어 '용량이 큰 파일 데이터의 전송' 같은 상황에선 Nagle알고리즘을 적용하지 않아도용량이 커 출력 버퍼가 꽉차기 때문에 트래픽에 큰 차이가 발생하지 않는다. 이럴 땐 Nagle 알고리즘을 OFF해서 속도와 트래픽 모두를 챙기는 편이 좋다.

 

 

 

Nagle알고리즘 ON/OFF하기

Nagle 알고리즘은 TCP_NODELAY라는 소켓옵션으로 on/off할 수 있다!

 

마무리


게임 서버를 공부하는 입장에서 Nagle알고리즘은 흥미로웠다. 나의 서버 소켓이 Nagle알고리즘이 켜져있다면, 속도면에서 손해를 볼 수 있겠다라는 생각을 하며 공부를 한 것 같다. Nagle알고리즘은 쓰이는 상황에 따라 ON/OFF를 조절해야하니 잘 판단하여 사용해보자!

 

참고