반응형
  • Nagle 알고리즘

: 네트워크상에서 돌아다니는 패킷들의 흘러 넘침을 막기 위해 1984에 제안된 알고리즘

: 앞서 전송한 데이터에 대한 ACK메시지를 받아야 다음 데이터를 전송

 

- TCP socket의 데이터 송수신 방법: Nagle알고리즘

Nagle ON

- N이 출력 버퍼에 들어오고 첫문자이므로 받아야할 ACK없어서 바로 전송, 나머지 agle은 N송신에 대한 ACK메시지를 기다리면서 출력버퍼로 들어감, 'N' ACK 메시지를 받은 후 agle을 패킷으로 구성해 전송

- 하나의 문자열 전송에 4개의 패킷이 송수신

 

Nagle OFF

- ACK의 수신에 상관없이 패킷이 전송

- 출력버퍼에 데이터가 전달되는 즉시 전송 

- 하나의 문자열 전송에 10개의 패킷이 송수신 

 

→ 네트워크 트래픽을 고려하는 Nagle 알고리즘 (시간 간격을 두고 출력 버퍼에 출력 데이터가 채워지는 경우 유리, 패킷의 헤더정보 크기가 수십 바이트에 이르므로)

 

※ 하지만 데이터의 특성에 따라 Nagle알고리즘의 적용 여부에 따른 트래픽의 차이가 크지 않으면서 Nagle 알고리즘을 적용하지 않는 것이 데이터의 전송 속도를 높일 수 있는 경우도 존재

: 용량이 큰 파일 데이터의 전송하는 경우 파일 데이터를 출력버퍼로 채우는 과정은 많은 시간이 걸리는 작업이 아니기 때문에, ... 데이터를 하나의 패킷으로 한번에 전송 가능하므로 패킷의 수가 크게 증가하지 않고 ACK 메시지를 기다리는 Nagle 알고리즘보다 전송속도도 빠름

→ 용량이 큰 데이터 전송의 경우 Nagle 알고리즘을 적용하지 않았을 때 속도의 향상

 

  • Nagle 알고리즘의 중단
int option=1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&option, sizeof(option));

// Nagle 알고리즘의 설정 상태 확인 (0: Nagle 알고리즘의 설정, 1: Nagle 알고리즘의 설정되지 않음)

int option;
int opt_len;
opt_len=sizeof(option);
getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&option, opt_len);

 

반응형

'프로그래밍의 기초 > TCP | IP' 카테고리의 다른 글

CreateProcess 함수  (0) 2022.01.17
프로세스 이해와 활용  (0) 2022.01.14
SO_REUSEADDR  (0) 2022.01.14
socket의 옵션과 입출력 버퍼의 크기  (0) 2022.01.14
IP주소와 도메인 이름 사이의 변환  (0) 2022.01.13

+ Recent posts