Nagle 알고리즘
기존에 전송한 패킷이 있을 경우 그 패킷에 대한 ACK를 받아야 하지만 다음 전송을 진행하는 알고리즘
Nagle 알고리즘을 적용하지 않으면 전송할 데이터가 있는 경우 ACK를 기다리지 않고 바로 전송해버리 때문이다.
따라서 네트워크의 효율적인 사용을 위해 Nagle알고리즘은 반드시 필요하다. Nagle 알고리즘을 적용하지 않으면 네트워크에 상당한 부하를 주게되어 더 좋지 않은 결과를 얻게 될 수도 있다..(빠르긴하다..)
TCP_NODELAY 옵션이 1인 경우 Nagle 알고리즘을 적용하지 않겠다는 의미이고 0인경우는 적용한다는 의미가 된다.
//
// Nagle test
//
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/tcp.h>
#include <netinet/ip.h>
#define TRUE 1
#define FALSE 0
int main(int argc, char *argv[])
{
int sock;
int state, opt_val, opt_len;
sock = socket(PF_INET, SOCK_STREAM, 0);
state = getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, &opt_len);
if(state)
{
puts("getsockopt() error!");
exit(1);
}
printf("default nagle algorithm : %s \n", opt_val ? "disabled":"enabled");
// nagle algorithm disabled
opt_val = TRUE;
state = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, sizeof(opt_val));
if(state)
{
puts("setsockopt() error!");
exit(1);
}
// changed nagle algorithm
getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, &opt_len);
printf("changed nagle algorithm : %s \n", opt_val ?"diabled":"enabled");
close(sock);
return 0;
}
기존에 전송한 패킷이 있을 경우 그 패킷에 대한 ACK를 받아야 하지만 다음 전송을 진행하는 알고리즘
Nagle 알고리즘을 적용하지 않으면 전송할 데이터가 있는 경우 ACK를 기다리지 않고 바로 전송해버리 때문이다.
따라서 네트워크의 효율적인 사용을 위해 Nagle알고리즘은 반드시 필요하다. Nagle 알고리즘을 적용하지 않으면 네트워크에 상당한 부하를 주게되어 더 좋지 않은 결과를 얻게 될 수도 있다..(빠르긴하다..)
TCP_NODELAY 옵션이 1인 경우 Nagle 알고리즘을 적용하지 않겠다는 의미이고 0인경우는 적용한다는 의미가 된다.
//
// Nagle test
//
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/tcp.h>
#include <netinet/ip.h>
#define TRUE 1
#define FALSE 0
int main(int argc, char *argv[])
{
int sock;
int state, opt_val, opt_len;
sock = socket(PF_INET, SOCK_STREAM, 0);
state = getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, &opt_len);
if(state)
{
puts("getsockopt() error!");
exit(1);
}
printf("default nagle algorithm : %s \n", opt_val ? "disabled":"enabled");
// nagle algorithm disabled
opt_val = TRUE;
state = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, sizeof(opt_val));
if(state)
{
puts("setsockopt() error!");
exit(1);
}
// changed nagle algorithm
getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, &opt_len);
printf("changed nagle algorithm : %s \n", opt_val ?"diabled":"enabled");
close(sock);
return 0;
}
'Etc > TCP/IP' 카테고리의 다른 글
입출력 분할한 에코 서버 (0) | 2013.09.25 |
---|---|
프로세스 기반에 다중 접속 에코 서버 (0) | 2013.09.25 |
TIME WAIT STATUS (0) | 2013.09.25 |
ip 주소를 이용해서 도메인 이름 알아내기 (0) | 2013.09.25 |
도메인 이름을 이용해서 ip주소 얻어내기 (0) | 2013.09.25 |