본문 바로가기

분류 전체보기

[2009/06/22] Nagle 예제소스(nagle.c) /* nagle.c */ #include #include #include #include #include #include #include #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); /* 디폴트 nagle 알고리즘 설정 상태 확인 */ state = getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, &opt_len); if(state) { puts("getsockopt() error!"); exit(1); } printf("디폴트 nagle 알고리즘 : .. 더보기
[2009/06/22] Nagle 알고리즘에 대한 이해 1. Nagle 알고리즘에 대한 이해. - 네트워크상의 패킷 수를 줄이기 위해 제안된 알고리즘. - ACK를 수신해야만 다음 전송을 진행하는 알고리즘. 2. Nagle 알고리즘의 장점과 단점. - 장점 : 네트워크의 효율성이 높아진다.(적은 패킷의 양) - 단점 : 전송 속도가 느리다(ACK 수신 후 패킷 전송) - 생각해 볼 문제 : Nagle 알고리즘의 중단이 데이터 전송 속도를 무조건 향상시켜 주는 것은 아니다. 3. TCP_NODELAY - Nagle 알고리즘을 Disable 시키기 위한 옵션의 변경. - TCP 소켓은 생성시 기본적으로 Nagle 알고리즘 적용 더보기
[2009/06/22] TIME-WAIT 예제소스(reuseaddr.c) /* reuseaddr.c */ #include #include #include #include #include #include #include #define TRUE 1 #define FALSE 0 void error_handling(char *message); int main(int argc, char **argv) { int serv_sock; int clnt_sock; char message[30]; int str_len; int option; socklen_t optlen; struct sockaddr_in serv_addr; struct sockaddr_in clnt_addr; int clnt_addr_size; if(argc!=2){ printf("Usage : %s \n", argv[0]).. 더보기
[2009/06/22] TIME-WAIT 상태에 대한 이해 1. TIME-WAIT 상태란 ? - 연결 종료 시 마지막 패킷 전송 실패를 대비하기 위한 상태. 2. 서버의 연결 종료 - 서버에서 먼저 종료 요청 후, 다시 서버를 가동 시키면? 3. TIME-WAIT 타이머의 재시작 - TIME-WAIT 상태는 우리의 생각보다 더 길어 질 수 있다. 4. SO_REUSEADDR - TIME-WAIT 상태에 있는 서버의 IP와 PORT를 재 할당 하도록 옵션 설정. 더보기
[2009/06/22] 옵션 예제소스(sock_type.c, set_buf.c, get_buf.c, get_buf_win.c) /* sock_type.c */ #include #include #include #include #include #include void error_handling(char *message); int main(int argc, char **argv) { int tcp_sock, udp_sock; int sock_type=-1; socklen_t optlen; int state; optlen=sizeof(sock_type); tcp_sock=socket(PF_INET, SOCK_STREAM, 0); udp_sock=socket(PF_INET, SOCK_DGRAM, 0); printf("SOCK_STREAM : %d \n", SOCK_STREAM); printf("SOCK_DGRAM : %d \n", SOC.. 더보기