공부이야기/Network
Nagle 알고리즘_2
coyotek
2008. 5. 21. 15:19
Nagle 알고리즘
- 작은 data를 tcp layer차원에서 모으고 있다가 ACK에 같이 실려서 보낸다.
- 이 알고리즘은 ACK가 빠르게오면 올수록 packet을 빨리 보낼 수가 있기 때문에
LAN에 적합하다.
이것은 TCP의 동작 메카니즘에서 발생하는 문제이다. TCP에서 interactive data flow인 경우에 하나의 TCP 연결 속에서 클라이언트와 서버 사이에 서로 주고받고 하는 패킷 교환이 일어나게 된다. 이때 1 바이트의 데이타와 20 바이트의 헤더로 구성되는 매우 작은 TCP 패킷들로서 상호간 동작이 연속적으로 일어난다면 트래픽의 혼잡을 가중시킬 수 있다.
이러한 문제를 해결하기 위한 방법이 Nagle 알고리즘이라 하는 것이다. 이미 전송한 패킷이 있을 때 이 패킷에 대한 수신 성공을 알리는 ack 패킷이 도착하기 전까지는 다른 패킷을 전송하지 않고 버퍼에 대기시키도록 한다. 이렇게 기다리는 동안에 몇 개의 패킷이 전송을 위해 대기하게 될 수 있고, ack가 도착했을 때 이들 전송 대기 패킷들을 하나의 세그먼트로 묶어서 전달하도록 할 수 있다.
이러한 메카니즘은 파이프라인 동작에서 문제를 일으킬 수 있다. 왜냐하면 파이프라인을 통해 연속적으로 요구 메시지가 전달되어야 하는데 Nagle 알고리즘에 의해 즉시 전송되지 못하고 잠깐 대기해야 하는 문제가 생기기 때문이다. 이의 해결책은 Nagle 알고리즘을 사용하지 않는 것으로 TCP 동작을 설정하고 패킷 전송을 하면 된다.
TCP_NODELAY는 Nagle 버퍼링 알고리즘을 중지시킬 특별한 목적으로 사용된다. 이것은 전송은 작은 단위로 자주 이루어 지지만 즉각적인 응답은 필요 없는 어플리케이션에서만 사용 되어야 한다.(마우스 움직임 같은)
- 작은 data를 tcp layer차원에서 모으고 있다가 ACK에 같이 실려서 보낸다.
- 이 알고리즘은 ACK가 빠르게오면 올수록 packet을 빨리 보낼 수가 있기 때문에
LAN에 적합하다.
이것은 TCP의 동작 메카니즘에서 발생하는 문제이다. TCP에서 interactive data flow인 경우에 하나의 TCP 연결 속에서 클라이언트와 서버 사이에 서로 주고받고 하는 패킷 교환이 일어나게 된다. 이때 1 바이트의 데이타와 20 바이트의 헤더로 구성되는 매우 작은 TCP 패킷들로서 상호간 동작이 연속적으로 일어난다면 트래픽의 혼잡을 가중시킬 수 있다.
이러한 문제를 해결하기 위한 방법이 Nagle 알고리즘이라 하는 것이다. 이미 전송한 패킷이 있을 때 이 패킷에 대한 수신 성공을 알리는 ack 패킷이 도착하기 전까지는 다른 패킷을 전송하지 않고 버퍼에 대기시키도록 한다. 이렇게 기다리는 동안에 몇 개의 패킷이 전송을 위해 대기하게 될 수 있고, ack가 도착했을 때 이들 전송 대기 패킷들을 하나의 세그먼트로 묶어서 전달하도록 할 수 있다.
이러한 메카니즘은 파이프라인 동작에서 문제를 일으킬 수 있다. 왜냐하면 파이프라인을 통해 연속적으로 요구 메시지가 전달되어야 하는데 Nagle 알고리즘에 의해 즉시 전송되지 못하고 잠깐 대기해야 하는 문제가 생기기 때문이다. 이의 해결책은 Nagle 알고리즘을 사용하지 않는 것으로 TCP 동작을 설정하고 패킷 전송을 하면 된다.
TCP_NODELAY는 Nagle 버퍼링 알고리즘을 중지시킬 특별한 목적으로 사용된다. 이것은 전송은 작은 단위로 자주 이루어 지지만 즉각적인 응답은 필요 없는 어플리케이션에서만 사용 되어야 한다.(마우스 움직임 같은)