TCP 네트워크 통신을위한 Nagle 알고리즘

엔지니어 인 Nagle 씨의 이름을 따서 명명 된 Nagle 알고리즘TCP 어플리케이션의 "작은 패킷 문제"로 인한 네트워크 혼잡을 줄 이도록 설계되었습니다. UNIX 구현은 1980 년대에 Nagle의 알고리즘을 사용하기 시작했으며 현재 TCP의 표준 기능으로 남아 있습니다.

Nagle 알고리즘의 작동 방식

Nagle의 알고리즘은 nagling 이라는 방법으로 TCP 어플리케이션의 송신 측에서 데이터를 처리합니다. 작은 크기의 메시지를 탐지하여 유선을 통해 데이터를 보내기 전에 더 큰 TCP 패킷에 누적하여 불필요하게 많은 수의 작은 패킷이 생성되는 것을 방지합니다. Nagle의 알고리즘에 대한 기술 사양은 1984 년에 RFC 896으로 발표되었습니다. 축적 할 많은 데이터와 전송 사이에서 기다리는 시간은 전반적인 성능에 결정적입니다.

Nagling은 지연 ( 대기 시간 )을 추가하는 대신 네트워크 연결의 대역폭 을보다 효율적으로 활용할 수 있습니다. RFC 896에 설명 된 예는 잠재적 인 대역폭 이점과 그 생성 이유를 보여줍니다.

응용 프로그램은 TCP_NODELAY 소켓 프로그래밍 옵션을 사용하여 Nagle 알고리즘 사용을 제어합니다. Windows, Linux 및 Java 시스템은 일반적으로 기본적으로 Nagle을 활성화하므로 해당 환경 용으로 작성된 응용 프로그램은 알고리즘을 전환하려는 경우 TCP_NODELAY를 지정해야합니다.

제한 사항

Nagle의 알고리즘은 TCP에서만 사용할 수 있습니다. UDP를 포함한 다른 프로토콜은이를 지원하지 않습니다.

Nagle을 사용하면 인터넷 전화 나 1 인칭 슈팅 게임과 같이 빠른 네트워크 응답이 필요한 TCP 응용 프로그램이 제대로 작동하지 않을 수 있습니다. 알고리즘이 더 작은 데이터 덩어리를 함께 조합하는 데 추가 시간이 소요되는 동안 발생하는 지연으로 인해 화면이나 디지털 오디오 스트림에서 눈에 띄게 지연이 발생할 수 있습니다. 이러한 응용 프로그램은 일반적으로 Nagle을 비활성화합니다.

이 알고리즘은 원래 컴퓨터 네트워크가 오늘날보다 훨씬 적은 대역폭을 지원할 때 개발되었습니다. 위에서 설명한 예는 1980 년대 초 포드 에어로 스페이스 (Fortord Aerospace)에서 존 네글 (John Nagle)의 경험을 토대로 한 것인데, 느리고 무겁게로드 된 원거리 네트워크의 처신은 좋은 의미를 갖습니다. 오늘날 네트워크 응용 프로그램이 자신의 알고리즘의 이점을 누릴 수있는 상황이 점차 줄어들고 있습니다.