2009-06-24 2 views
1

나는 놀고 싶은 호기심에서 Nagle의 알고리즘에 대한 연구를 해왔다. 그 뒤에있는 기본 개념을 이해합니다 (TCP 패킷은 특히 작은 페이로드를 처리 할 때 상당한 양의 오버 헤드를 포함합니다).하지만 구현을 잘 모르겠습니다.Nagle의 알고리즘에 대해 명확하지 않다

나는 위키 피 디아에서 this article을 읽었지 만, 나는 아직도 어떻게 작동하는지 잘 모르고있다. 텔넷 연결의 예를 들어 봅시다. 연결이 설정되고 타이핑을 시작합니다. 예를 들어, 3 자 (예 : cat)를 입력하고 돌아 오는 경우를 가정 해 보겠습니다. 이제 우리는 여전히 단지 5 바이트 인 cat\r\n을 말하고 있습니다. 우리가 보내기에 충분한 바이트를 대기열에 올릴 때까지이 메시지가 전송되지 않을 것이라고 생각합니다. - 은 즉각적으로 (사용자 입장에서) 전송됩니다. cat은 즉시 반환됩니다.

알고리즘이 작동하는 방식에 대한 근본적인 오해가 있다고 생각합니다. 특히 "확인되지 않은 데이터가 파이프에 남아 있으면 즉시 대기열에 넣습니다."라는 비트와 관련이 있습니다.

+0

이 기사에서는 문제가되는 텔넷 세션에 대해 이야기하므로 즉시 보내 드리겠습니다. – cloudhead

답변

5

서버가 이미 이전 메시지에 응답 한 경우에만 데이터가 즉시 전송됩니다 (또는이 세션에서 처음으로 서버에 접속 한 경우). 따라서 서버가 복잡 해지고 응답 속도가 느려지면서 너무 많은 패킷이 발생하는 것을 피하기 위해 데이터는 전송되기 전에 최대 패킷 크기까지 큐에 저장됩니다.

따라서 데이터가 즉시 전송되는지 아닌지는 이전 메시지의 컨텍스트에서 확인할 수 있습니다 (있는 경우).

+0

그래서 Nagle의 알고리즘이 SYN/ACK 패킷에 적용되지 않는다고 생각합니다. 즉, 지연없이 알고리즘을 전송합니다. – FreeMemory

+0

setsockopt를 호출 할 때 TCP_NODELAY 옵션을 사용하여 nagle 알고리즘을 비활성화 할 수 있습니다. – bill

0

this post을 읽으십시오. 상당히 심오하고 많은 것을 알 수 있습니다.

관련 문제