TCPIP Socket Socket life cycle Copyright 2005 Thin

  • Slides: 21
Download presentation
TCP/IP Socket 조태문

TCP/IP Socket 조태문

Socket life cycle Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 2

Socket life cycle Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 2

Simultaneous Open • 양쪽 모두 Active하게 접속을 하려고 할 때 서로가 SYN을 보내어서 각각

Simultaneous Open • 양쪽 모두 Active하게 접속을 하려고 할 때 서로가 SYN을 보내어서 각각 교차해서 연결이 성립 되는 경우를 Simultaneous Open이라고 한다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 5

Simultaneous Close • 양쪽 모두 Active하게 Close를 시도 Copyright © 2005 Thin Multimedia, Inc.

Simultaneous Close • 양쪽 모두 Active하게 Close를 시도 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 6

Server socket의 생성과정 1 – socket() • 소켓(통신 종단점)을 생성하여 socket의 file descriptor를 반환한다.

Server socket의 생성과정 1 – socket() • 소켓(통신 종단점)을 생성하여 socket의 file descriptor를 반환한다. • int socket(int domain, int type, int protocol); – domain ( socket address famly ) • UNIX : 유닉스 도메인 소켓, IPC용으로 많이 사용됨. • INET : TCP/IP 프로토콜을 이용한 인터넷주소 패밀리, 보통의 네트웍프 로그래밍시 주로 사용 • IPX : 노벨의 IPX 프로토콜 • AX 25아마추어 라디오 X. 25 • X 25 X. 25 프로토콜 – type • SOCK_STREAM ( TCP ) • SOCK_DGRAM ( UDP ) • SOCK_RAW ( RAW ) – protocol • 0(IPPROTO_IP) : system defualt protocol • 6(IPPROTO_TCP) : tcp • 17(IPPROTO_UDP) : user datagram protocol Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 8

Server socket의 생성과정 2 – bind() • • 소켓에 특성을 부여(소켓과 특성을 묶는다(bind))한다. int

Server socket의 생성과정 2 – bind() • • 소켓에 특성을 부여(소켓과 특성을 묶는다(bind))한다. int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); – struct sockaddr *my_addr struct sockaddr{ u_short sa_family; char sa_data[14]; }; • struct sockaddr_in { short sin_family; // AF_INET u_short sin_port; //네트웍 바이트 오더로 이루어진 포트 번호 struct in_addr sin_addr; // 네트웍 바이트 오더로 이루어진 아이피 번호 char sin_zero[8]; }; Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 9

Server socket의 생성과정 3 – listen() • • socket을 listen(연결대기) 상태로 만든다. int listen(int

Server socket의 생성과정 3 – listen() • • socket을 listen(연결대기) 상태로 만든다. int listen(int socket, int backlog); – socket : socket file descriptor – backlog : 연결이 완료되지 않은 요청 대기열(que)의 갯수. 3 -way hand shaking 기법 중 최초의 SYN이 대기하게 된다. Linux 계열의 경우 커널마다 차이가 있지만 주로 해당 값이 아닌 ‘/proc/sys/net/ipv 4/tcp_max_syn_backlog’의 값을 참조하여 대기열 크기 를 조절한다. 이는 3 -way hand shaking의 보완상 취약점인 SYN flooding 공격을 막기 위함. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 10

socket() 수행 후 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 11

socket() 수행 후 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 11

listen() 수행 후 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 12

listen() 수행 후 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 12

accept() 수행 후 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 13

accept() 수행 후 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 13

close() 수행 전 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 14

close() 수행 전 Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 14

Socket의 주요 옵션 - 1 • TIME_WAIT 상태의 Socket에 Bind()가 가능한 소켓으 로 속성을

Socket의 주요 옵션 - 1 • TIME_WAIT 상태의 Socket에 Bind()가 가능한 소켓으 로 속성을 변경한다. • setsockopt(serv_sock, SOL_SOCKET, SO_REUSEADDR, (int *)&optval, sizeof(optval)); Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 15

Socket의 주요 옵션 - 2 • Nagle 알고리즘을 사용하지 않도록 설정한다. • setsockopt(serv_sock, IPPROTO_TCP,

Socket의 주요 옵션 - 2 • Nagle 알고리즘을 사용하지 않도록 설정한다. • setsockopt(serv_sock, IPPROTO_TCP, TCP_NODELAY, (int *)&optval, sizeof(optval)); Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 16

Read Timeout : socket system call • SO_RCVTIMEO and SO_SENTIMEO • time structure 사용

Read Timeout : socket system call • SO_RCVTIMEO and SO_SENTIMEO • time structure 사용 struct timeval{ long tv_sec; /*second*/ long tv_usec; /*microsecond*/ }; • struct timeval time; time. tv_sec = 1; time. tv_usec = 10; setsockopt( int sock, SOL_SOCKET, SO_RCVTIMEO, &time, sizeof(time) ); Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 19

Read Timeout : select() • fcntl()를 이용해서 listen socket을 NON_BLOCK상태로 만든다. • 이를 select()로

Read Timeout : select() • fcntl()를 이용해서 listen socket을 NON_BLOCK상태로 만든다. • 이를 select()로 감시하여 검출한다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 20

서울특별시 서초구 반포동 59 -4 송원빌딩 3, 4층 Tel 02 536 2840 Fax 02

서울특별시 서초구 반포동 59 -4 송원빌딩 3, 4층 Tel 02 536 2840 Fax 02 536 3601 Homepage www. thinmultimedia. co. kr Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved. 21