TCP 네이글 알고리즘 (TCP_NODELAY)

Daeyoung Nam·2021년 12월 9일
1

CS

목록 보기
8/8

Nagle 알고리즘은 네트워크를 통해 보내야 하는 패킷 수를 줄여 네트워크 부하를 줄여주는 수단입니다
TCP 패킷의 헤더는 40바이트(TCP 헤더 20바이트, IPv4헤더 20바이트)를 가지고있습니다.
만약 작은 크기의 데이터를 계속 보내게 된다면 네트워크 부하가 발생하게 됩니다.
그래서 네이글 알고리즘은 여러개의 작은 메세지를 결합하여 한번에 보내는 방식으로 작동합니다.

위 사진중 어떤게 Nagle 알고리즘이 활성화된것일까요?

왼쪽에 있는 사진이 Nagle 알고리즘이 활성화 되어 통신되고 있는 부분입니다.

오른쪽 사진의 경우, 버퍼링 하지 않고 바로바로 서버측으로 보내주는 로직인데요, 두 사진에서의 차이점은 보시다시피 응답 시간입니다.

네이글 알고리즘이 활성화 된 경우에는 네트워크의 부하를 줄여주지만 응답시간이 늦어지는것을 볼 수 있습니다.
반대로 네이글 알고리즘이 비활성화 된 경우는 응답시간은 빨라지지만 네트워크 부하가 심해지는것을 볼 수 있습니다.

효율적으로 사용하는 방법

저는 현재 네트워크 기반 시스템을 개발해야하는 환경에 있어서 관련 TCP/IP 통신 자료들을 찾아보고 있는데요.
게임 클라이언트와같이 응답시간이 중요한 부분은 옵션을 어떻게 줘야할까요?
Nagle 알고리즘이 활성화 되어있어서 처리가 지연되면 유저는 좋지않은 경험을 하게 될것입니다.

그러면 서버도 Nagle 알고리즘이 비활성화 되어있으면 유저에게 좋은경험을 할 수 있지 않을까요?
정답은 없지만 서버의 경우 트래픽에 민감하기때문에 Nagle 알고리즘을 함부러 비활성화 시키는것은 더 큰 문제를 야기할 수 있습니다.
또한 서버 입장에서는 여러 유저의 데이터를 받는 입장이기때문에 충분히 큰 사이즈의 데이터가 버퍼에 쌓일것이며 이로인해 발생하는 딜레이는 크게 차이나지 않을것입니다.
그렇기에 서버측에서는 네이글 알고리즘을 활성화 하고 클라이언트 측에서는 네이글 알고리즘을 비활성화 하는게 최고의 선택일것같습니다.

profile
내가 짠 코드가 제일 깔끔해야하고 내가 만든 서버는 제일 탄탄해야한다 .. 😎

2개의 댓글

comment-user-thumbnail
2021년 12월 9일

네트워크 수업시간에도 두각을 나타내시더니,,
Nagle알고리즘까지. 고려하시다니 대단하십니다.
Nagle 알고리즘이 빠른 재전송(Fast Retransmit)의 경우와 같은 걸까요?

1개의 답글