네이글 알고리즘은 네트워크에서 작은 데이터 패킷이 과도하게 전송되는 것을 방지하여 대역폭 사용을 최적화하고
혼잡을 줄이기 위한 알고리즘이다.

 

앞서 언급했듯이 소켓은 본질적으로 파일이라고 생각할 수 있다.

그러므로 소켓도 버퍼를 사용하게 되는데, 소켓에는 입력 버퍼와 출력 버퍼 2가지가 있다.

 

소켓에 send를 호출하면 우리가 보내고자 하는 내용이 소켓의 출력 버퍼에 복사된다.

복사된 데이터가 TCP 레이어에서 Segment가 되고, IP 레이어에서 Packet이 된다. 

 

Packet은 인터엣에서의 유통의 단위다. 네트워크에서 속도를 2가지로 정의 하는데, 하나는 bps고 다른 하나는 pps다.

bps는 초당 비트가 얼마만큼 전송이 되즌지를 나타내고, pps는 초당 패킷이 얼마만큼 전송 되는지를 나타낸다.

pps보다는 bps가 높아야 좋은 상황이라고 생각하면 된다.

 

packet은 Header와 payload로 구성되는데, 여기서 Header가 대략 40바이트의 크기를 갖는다.

만약 hello라는 문자열을 전송한다고 생각하면, 겨우 5바이트를 전송하려고 40바이트를 붙이는 아이러니한 상황이 생기게된다.

 

버퍼에 데이터를 많이 담아서 전송하면 bps가 증가하게 되는 것이므로 해당 알고리즘을 만들게 되었는데 이를 Nagle 이라 한다.

 

📌 네이글 알고리즘 동작 원리

네이글 알고리즘의 핵심 아이디어는 이전 패킷에 대한 ACK를 받기 전까지는 작은 패킷을 계속해서 모으는 것이다.

동작 과정

  1. 전송할 데이터가 MSS보다 크면 즉시 전송한다.
  2. 전송할 데이터가 MSS보다 작은데 이전 패킷에 대한 ACK를 받지 않았으면, 현재 데이터를 버퍼에 저장하고 추가 데이터를 기다린다. ACK를 받았으면, 즉시 새로운 패킷을 보낸다.

위처럼 동작하면 작은 데이터가 여러 개 있을 때, 첫 번째 데이터가 전송된 후 ACK을 받을 때까지 기다렸다가 한꺼번에 보낼 수 있어 네트워크 부하를 줄일 수 있다.

 

📌 네이글 알고리즘 단점

네이글 알고리즘이 항상 유리한 것은 아니다. 일부 환경에서 문제가 될 수 있다.

 

대기 시간이 중요한 프로그램에서의 문제

  • 실시간 프로그램( 게임, 금융 거래 등 )
    • 네이글 알고리즘이 적용되면 작은 데이터가 즉시 전송되지 않기 때문에 지연이 증가할 수 있다.

+ Recent posts