Chapter 07. 소켓 옵션.

Slides:



Advertisements
Similar presentations
TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
Advertisements

12장. Raw 소켓 Raw 소켓의 특징과 사용 방법을 익힌다. Ping 프로그램의 동작 원리를 이해하고 작성 방법을 익힌다.
Part TCP / IP(계속) 3. IP 주소 4. IP 라우팅 5. 응용 프로토콜.
CHAP 22. 블루투스.
한남대학교 컴퓨터공학과 소프트웨어공학실험실 최 용 준
Network Lab. Byoung-Son, Choi
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
10장. 소켓 입출력 모델(I) 블로킹과 넌블로킹 소켓의 특징을 이해한다. Select 소켓 입출력 모델을 이해하고 활용한다.
윈도우 네트워크 프로그래밍 √ 원리를 알면 IT가 맛있다 TCP/IP 소켓 프로그래밍 광주대학교 정보통신학과 조 정 호.
Chapter 06. UDP 서버/클라이언트.
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
Department of Computer Science and Engineering
제 7장 정적 라우팅 프로토콜.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
TCP/IP Socket Cover Slide 조태문.
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
Chapter 03. 소켓 주소 구조체 다루기.
Multimedia & Mobile Communications Lab.
Chapter 11. Raw 소켓.
Internet Group Management Protocol (IGMP)
ARP의 실험 발표자 : 이직수
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
VoIP (Voice Over Internet Protocol)
제 14장 Multicast & Broadcast
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
Chapter 21 Network Layer: ARP, ICMP (IGMP).
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
School of Electronics and Information. Kyung Hee University.
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
제 22 장 TCP Persist Timer.
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
소켓의 옵션 School of Electronics and Information. Kyung Hee University.
Chapter 5 UDP Socket 소켓 프로그래밍.
Chapter 19 솔라리스 네트워크 관리 Solaris1 . TCP/IP 개요
Network Security WireShark를 활용한 프로토콜 분석 I.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
Department of Computer Engineering
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
9 TCP의 이해 학습 목표 전송 계층 프로토콜이 제공하는 기능을 이해한다.
TCP/IP 인터네트워킹 INTERNETWORKING with TCP/IP <vol
Department of Computer Engineering
2 네트워크 모델 학습 목표 모듈 개념을 알아보고 계층 구조의 필요성을 이해한다.
01. 라우팅 및 원격 액세스의 개요 라우팅은 패킷을 송신지부터 수신지까지 어떠한 경로를 통해 보낼 것인지를 결정하는 방법
CHAP 21. 전화, SMS, 주소록.
3 네트워크 기술 학습 목표 회선 교환 시스템과 패킷 교환 시스템의 차이와 원리를 이해한다.
Chapter 26 IP over ATM.
01. 개요 네트워크에 있는 컴퓨터와 그룹에 대한 NetBIOS 이름에 대응되는 IP 주소를 찾아주는 서비스
제 19 장 TCP 대화식 데이터 흐름.
Chapter 04. TCP 서버/클라이언트.
제 13 장 인터넷 그룹 관리 프로토콜 정보통신연구실.
Chapter 02. 윈도우 소켓 시작하기.
제 6 장 IP 패킷 전달과 라우팅 6.1 연결형 서비스와 비연결형 서비스 6.2 직접 전달과 간접 전달 6.3 라우팅 방법
Department of Computer Engineering
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
4. IP 데이터그램과 라우팅 (6장. 인터넷과 IP) IP 데이터그램 : 특정 물리망에 종속되지 않은 가상의 패킷 형식.
Network Lab. Young-Chul Hwang
Department of Computer Science and Engineering
ARP.
Presentation transcript:

Chapter 07. 소켓 옵션

TCP/IP 애플리케이션에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다. 학습 목표 TCP/IP 애플리케이션에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.

소켓 프로그래밍 모델 개요 (1/7) 애플리케이션 TCP IP UDP IrDA Bluetooth ... 소켓 소켓 코드 프로토콜 구현 코드

소켓 옵션(socket options) 소켓 옵션의 종류 소켓 함수의 기본 동작을 변경 ① 소켓 코드가 담당하는 부분 개요 (2/7) 소켓 옵션(socket options) 소켓 함수의 기본 동작을 변경 소켓 코드와 프로토콜 구현 코드에 대한 세부적인 제어 가능 소켓 옵션의 종류 ① 소켓 코드가 담당하는 부분 옵션을 설정하면 소켓 코드에서 해석하고 처리함 ② 프로토콜 구현 코드가 담당하는 부분 옵션을 설정하면 프로토콜 구현 코드에서 해석하고 처리함

소켓 옵션 설정하기 개요 (3/7) int setsockopt ( SOCKET s, int level, int optname, const char* optval, int optlen ) ; 성공: 0, 실패: SOCKET_ERROR

소켓 옵션 얻기 개요 (4/7) int getsockopt ( SOCKET s, int level, int optname, char* optval, int* optlen ) ; 성공: 0, 실패: SOCKET_ERROR

소켓 옵션 - SOL_SOCKET 개요 (5/7) optname SO_BROADCAST SO_DONTROUTE SO_KEEPALIVE SO_LINGER SO_SNDBUF SO_RCVBUF SO_SNDTIMEO SO_RCVTIMEO SO_REUSEADDR optval 타입 BOOL struct linger{} int get set  설명 브로드캐스팅 허용 데이터 전송시 라우팅 테이블 참조 과정 생략 주기적으로 연결 여부 확인 보낼 데이터가 있을 경우 closesocket() 함수 리턴 지연 소켓 송/수신 버퍼 크기 설정 send(), recv() 등의 함수에 대한 타임아웃 설정 지역 주소(IP 주소, 포트 번호) 재사용 허용

소켓 옵션 - IPPROTO_IP 개요 (6/7) optname IP_HDRINCL IP_TTL IP_MULTICAST_IF IP_MULTICAST_TTL IP_MULTICAST_LOOP IP_ADD_MEMBERSHIP IP_DROP_MEMBERSHIP optval 타입 BOOL int IN_ADDR{} struct ip_mreq{} get set    설명 데이터를 보낼 때 IP 헤더를 포함 IP 패킷의 TTL(time-to-live) 변경 멀티캐스트 패킷을 보낼 인터페이스 설정 멀티캐스트 패킷의 TTL 변경 멀티캐스트 패킷의 루프백 여부 설정 멀티캐스트 그룹 가입과 탈퇴

소켓 옵션 - IPPROTO_TCP 개요 (7/7) optname optval 타입 get set 설명 TCP_NODELAY BOOL  Nagle 알고리즘 작동 중지

SO_BROADCAST 옵션 용도 해당 소켓을 이용하여 브로드캐스트 데이터 전송 가능 UDP 소켓에만 사용 가능

SO_DONTROUTE 옵션 용도 데이터 전송시 라우팅 테이블 참조를 생략하고, 곧바로 bind() 함수로 설정한 네트워크 인터페이스로 모든 데이터를 보냄 사용 예 BOOL optval = TRUE; if(setsockopt(listen_sock, SOL_SOCKET, SO_DONTROUTE, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

SO_KEEPALIVE 옵션 용도 TCP 프로토콜 수준에서 연결 여부를 확인하기 위해 상대 TCP에게 주기적으로(약 2시간 간격) TCP 패킷을 보냄 사용 예 BOOL optval = TRUE; if(setsockopt(listen_sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

용도 옵션값 closesocket() 함수의 디폴트 동작 변경 SO_LINGER 옵션 (1/3) send(sock, ...); // 데이터를 보낸다. closesocket(sock); // 소켓을 닫는다. struct linger { u_short l_onoff; /* option on/off */ u_short l_linger; /* linger time */ }; typedef struct linger LINGER;

사용 예 SO_LINGER 옵션 (2/3) LINGER optval; optval.l_onoff = 1; /* linger on */ optval.l_linger = 10; /* linger time = 10초 */ if(setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

옵션값에 따른 closesocket() 함수의 동작 SO_LINGER 옵션 (3/3) 옵션값에 따른 closesocket() 함수의 동작 ① closesocket() 함수는 곧바로 리턴하고 송신 버퍼의 데이터는 백그라운드로 보낸 후 TCP 연결을 정상 종료 ② closesocket() 함수는 곧바로 리턴하고 송신 버퍼의 데이터는 삭제한 후 TCP 연결을 강제 종료 ③ 송신 버퍼의 데이터를 모두 보내고 TCP 연결을 정상 종료한 후 closesocket() 함수 리턴. 일정 시간 내에 송신 버퍼의 데이터를 모두 보내지 못하면 TCP 연결을 강제 종료한 후 closesocket() 함수 리턴. 이때 송신 버퍼에 남은 데이터는 삭제함. struct linger{} closesocket() 함수 동작 추가 설명 l_onoff l_linger 사용 안함 ①과 동일 closesocket() 함수의 디폴트 동작 1 ②와 동일 양수 ③과 동일

SO_SNDBUF, SO_RCVBUF 옵션 용도 소켓의 송신 버퍼와 수신 버퍼 크기 변경 사용 예 int optval; int optlen = sizeof(optval); if(getsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, (char *)&optval, &optlen) == SOCKET_ERROR) err_quit("getsockopt()"); printf("수신 버퍼 크기 = %d 바이트\n", optval); optval *= 2; if(setsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) err_quit("setsockopt()");

SO_SNDTIMEO, SO_RCVTIMEO 옵션 용도 데이터 전송 함수(send(), recv(), sendto(), recvfrom())가 작업 완료와 상관없이 일정 시간 후 리턴하도록 함 사용 예 int optval = 3000; if(setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

용도 목적 사용 중인 IP 주소와 포트 번호를 재사용 SO_REUSEADDR 옵션 용도 사용 중인 IP 주소와 포트 번호를 재사용 사용 중인 IP 주소와 포트 번호로 bind() 함수를 (성공적으로) 호출할 수 있음 목적 ① 서버 종료 후 재실행시 bind() 함수에서 오류가 발생하는 것을 방지 ② 두 개 이상의 IP 주소를 가진 호스트에서 각 IP 주소별로 서버를 따로 운용 ③ 멀티캐스팅 애플리케이션이 동일한 포트 번호를 사용할 수 있도록 함

멀티캐스트 주소 특징 그룹 가입과 탈퇴가 자유롭고, 그룹 구성원 모두가 평등 멀티캐스트 데이터를 받으려면 그룹에 가입해야 함 멀티캐스팅 (1/3) 멀티캐스트 주소 특징 그룹 가입과 탈퇴가 자유롭고, 그룹 구성원 모두가 평등 멀티캐스트 데이터를 받으려면 그룹에 가입해야 함 멀티캐스트 데이터를 보내기 위해 그룹에 가입할 필요는 없음 28 비트 멀티캐스트 그룹 ID 1

멀티캐스팅 (2/3) 멀티캐스트 데이터 전송(1) A B 멀티캐스트 그룹 A B 멀티캐스트 그룹

멀티캐스팅 (3/3) 멀티캐스트 데이터 전송(2) A B C 멀티캐스트 그룹

IP_MULTICAST_IF 옵션 (1/2) 용도 두 개 이상의 IP 주소를 가진 호스트에서 멀티캐스트 데이터를 보낼 네트워크 인터페이스를 설정 사용 예 IN_ADDR localaddr; localaddr.s_addr = inet_addr("147.46.114.70"); if(setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localaddr, sizeof(localaddr)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

IP_MULTICAST_IF 옵션 (2/2) 옵션 설정 결과 애플리케이션 147.46.114.70 147.46.115.38

용도 사용 예 IP 헤더의 TTL 값을 변경 IP_MULTICAST_TTL 옵션 // 멀티캐스트 TTL 설정 int ttl = 2; retval = setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl)); if(retval == SOCKET_ERROR) err_quit("setsockopt()");

용도 사용 예 애플리케이션이 보낸 멀티캐스트 데이터를 자신도 받을 지 여부를 결정 IP_MULTICAST_LOOP 옵션 BOOL optval = FALSE; // 자신이 보낸 데이터는 받지 않는다. if(setsockopt(sock, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP 옵션 (1/3) 용도 멀티캐스트 그룹에 가입 또는 탈퇴 옵션값 #include <ws2tcpip.h> struct ip_mreq { struct in_addr imr_multiaddr; /* IP multicast address of group */ struct in_addr imr_interface; /* local IP address of interface */ };

IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP 옵션 (2/3) 사용 예 struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr("235.7.8.9"); mreq.imr_interface.s_addr = inet_addr("147.46.114.70"); if(setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP 옵션 (3/3) 옵션 설정 결과 애플리케이션 147.46.114.70 147.46.115.38

용도 Nagle 알고리즘 Nagle 알고리즘 작동 여부 결정 IPPROTO_TCP 옵션 (1/2) 용도 Nagle 알고리즘 작동 여부 결정 Nagle 알고리즘 ① 보낼 데이터가 MSS(maximum segment size)로 정의된 크기만큼 쌓이면, 상대편에게 무조건 보냄 ② 보낼 데이터가 MSS보다 작을 경우, 이전에 보낸 데이터에 대한 ACK가 오기를 기다림. ACK가 도달하면 보낼 데이터가 MSS보다 작더라도 상대에게 보냄

IPPROTO_TCP 옵션 (2/2) Nagle 알고리즘의 장단점 장점: 작은 패킷이 불필요하게 많이 생성되는 것을 미연에 방지함으로써 네트워크 트래픽을 감소시킴 단점: 데이터가 충분히 쌓일 때까지 또는 ACK가 도달할 때까지 대기하는 시간 때문에 애플리케이션의 반응 시간(response time)이 길어질 가능성이 있음 사용 예 BOOL optval = TRUE; // Nagle 알고리즘 작동 중지 if(setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }