TCP/IP Socket Cover Slide 조태문.

Slides:



Advertisements
Similar presentations
Python Socket/HTTP overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.
Advertisements

TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
Java Socket 통신 이개혁 정대준.
Understanding of Socket and File I/O
TCP/IP Network Experimental Programming [IPv6에 의한 통신 실험]
13장 소켓.
Chapter 06. UDP 서버/클라이언트.
22 장 프로세스간 전달 : UDP와 TCP 22.1 프로세스간 전달 22.2 사용자 데이터그램 프로토콜
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
1. 왜 의사헤더를 추가하나? 1 / 32 UDP 데이터그램이 목적지에 제대로 전송됐는지 확인하기 위해
TCP/IP 소켓 프로그래밍 - C 버전 중에서
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
제 18 장 TCP/IP 연결 확립과 종료 정보통신연구실.
네트워크 보안 TCP/IP 네트워크통신 개념.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
컴퓨터 네트워크 PART 03 프로그래밍 (chapter 01 Socket 프로그래밍) 임효택
Chapter 11. Raw 소켓.
Internet Address Conversion Functions
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
Department of Computer Engineering
PART 02 프로토콜 컴퓨터 네트워크 chapter 06 트랜스포트 계층 임효택.
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Department of Computer Engineering
(Web Programming & Practice)
1. 연결종료 1 / 38 4way handshake와 상태 천이
세미나.. NETWORK??!! 저자 : 장경칩 도전하라 창조의 세계로(SINCE 1992) - 장경칩.
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
Socket Address Structure and Byte Ordering Functions
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Chapter 8 연결형 프로토콜 서버 발표자 : SE Lab 황 성 하
Department of Computer Engineering
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
Advanced Socket Programming
School of Electronics and Information. Kyung Hee University.
Department of Computer Science and Engineering
Socket Address Structure and Byte Ordering Functions
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
소켓의 옵션 School of Electronics and Information. Kyung Hee University.
Chapter 15 Transmission Control Protocol (TCP).
서버 실습 기말과제 게임소프트웨어 b 이도하 Date :2014/12/11(목)
Chapter 07. 소켓 옵션.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
산학협력단 연구지원금 시스템 사용자 매뉴얼 Copyrightⓒ2014 UOSICF. All Rights Reserved. 1.
School of Electronics and Information. Kyung Hee University.
네트워크 프로그래밍의 이해 School of Electronics and Information.
Transmission Control Protocol (TCP)
User Datagram Protocol (UDP)
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
TCP/IP 네트워크 구조 TCP/IP 개요 TCP/IP 프로토콜 한빛미디어(주).
Chapter 16 Socket Interface.
Department of Computer Engineering
Department of Computer Engineering
Department of Computer Engineering
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
Department of Computer Engineering
Chapter 03. 소켓 주소 구조체 다루기.
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
Department of Computer Engineering
Presentation transcript:

TCP/IP Socket Cover Slide 조태문

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

Active & Passive on TCP Socket 먼저 SYN을 보내는 것을 active-open을 수행한다고 하고 이를 받아 다시 SYN을 보내는 것을 passive-open을 수행한다고 한다 Active-open과 passive-open이 동시에 이루어질 수도 있다. SYN이 서로 교차하면서 연결이 이루어진다는 말이다. 이를 simultaneous-open이라고 한다. 반대 개념으로 simultaneous-close가 있다. 일반적인 Client – server 네트워크 모델에서는 open과 close는 Active – passive로 이루어 진다. 즉 client 측에서 연결 요청을 하고 연결 종료도 클라이언트 측에서 먼저 이루어 진다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.

Socket State SYN_SENT : 통신을 하기 위해 최초에 SYN패킷을 보내고 SYN과 ACK of SYN을 기다리는 상태로 3-way handshake의 첫번째 단계, server가 apccet()로 block된 상태에서 client가 connect()을 수행할때 맨처음 패킷이다. SYN_RCVD : SYN_SENT 상태에서 SYN을 받고 ACK of SYN의 패킷을 보낸 상태로 3-way handshake의 두번째 단계. ESTABLISHED : 3-way handshake의 마지막 단계인 ACK를 전송한 후의 양측의 상태로 이 상태에서 데이타 교환을 할 수 있다. 즉 session이 생성된 것. FIN_WAIT1 : active close를 수행(close())후 상태로 FIN Message를 passive close를 수행하여하는 쪽으로 보낸다. FIN_WAIT2 : passive close를 수행하여야 하는 쪽에서 ACK of FIN을 받은 상태이다. 이때 FIN을 다시 받지 못하면 block 상태가 영원히 유지된다. 이를 막기 위해 일반적으로 타이머를 세팅해 두었다가 강제로 끊는다. CLOSE_WAIT : passive close를 수행하여야 하는 쪽이 close() 수행 전까지의 상태. LAST_ACK : passive close를 수행한 쪽에서 다시 FIN을 active close를 수행한 쪽으로 보낸 후에 ACK of FIN을 기다리는 상태. TIME_WAIT(2MSL) : LAST_ACK 상태로 보내는 마지막 ACKfmf 보낸 후 소켓이 소멸되기 직전의 상태. MSL(Maximum Segment Lifetime)이란 이름 그대로, 세그먼트가 네트웍 상에서 돌아다닐 수 있는 최대 시간이며, IP 데이터그램의 TTL과 비슷하다고 보면 된다. 다만 TTL은 시간이 아니라, 홉(노드)을 기준으로 하는 상수값. ack가 하나 drop(유실)되더라도 다시 받을 수 있는 시간이다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.

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

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

2MSL State (TIME_WAIT) MSL(Maximum Segment Lifetime)이란 이름 그대로, 세그먼트가 네트웍 상에서 돌아다닐 수 있는 최대 시간이며, IP 데이터그램의 TTL과 비슷하다고 보면 된다. 다만 TTL은 시간이 아니라, 홉(노드)을 기준으로 하는 상수 Active-close를 수행한 경우, 해당 소켓 페어는 MSL 시간의 2배만큼 TIME_WAIT 상태로 머물러야 한다. ACK가 하나 드랍되더라도 다시 받을 수 있는 시간이다.TIME_WAIT 상태에 있는 소켓은 사용할 수 없다. TIME_WAIT 상태에 있는 포트로 날아오는 패킷은 모두 버려진다. TIME_WAIT 상태가 필요한 이유는, 임의의 소켓 페어 접속이 종료된 이후, 소켓 페어가 다시 생성되어 패킷이 왔다갔다할 때, 이전 연결의 지연된 패킷을 새로운 연결의 패킷으로 오인하지 않도록 하기 위해서이다. 그러므로 TIME_WAIT 상태에 있는 소켓 페어는 2MSL만큼의 시간이 지나기 전에는 절대로 재사용할 수 없다. 간략하게 Session을 구분하기 위해 존재한다. 서버에서 SO_REUSEADDR 옵션을 이용해 포트를 재사용할 수 있는 것은 클라이언트가 사용하는 포트가 이전 연결과는 틀리기 때문이다. 소켓 페어의 유일성을 보장하는 것은 어느 한쪽의 주소:포트가 아니라 양쪽 모두의 주소:포트다. 클라이언트와 서버의 역할을 서로 바꾸는 경우 TIME_WAIT 상태에 있는 소켓 페어도 사용할 수 있다. 클라이언트와 서버의 역할을 바꾼다는 말은, 클라이언트 컴퓨터에서 이전 연결에 썼던 자동으로 바인딩된(ephemeral, 한글로 뭐지...) 포트에다 서버를 띄우고, 서버 컴퓨터에서는 반대로 서버 바인딩할 때 썼던 포트를 클라이언트 프로그램 띄우는데 쓴다는 말이다. 클라이언트와 서버의 역할이 바뀌기는 했지만, 소켓 페어는 분명히 TIME_WAIT 상태에 있는데도 불구하고, 연결이 성립된다. Sequence number가 이전 연결에서 쓰던 것보다 새로운 것이라면 연결을 허락한다, Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.

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 프로토콜 AX25아마추어 라디오 X.25 X25X.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.

Server socket의 생성과정2 – 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.

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

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

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

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

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

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

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

Socket의 주요 옵션 - 3 소켓을 닫을 때 전송되지 않은 데이터의 처리 규칙 setsockopt(serv_sock, SOL_SOCKET, SO_LINGER, (int *)&optval, sizeof(optval)); l_onoff == 0 : 이 경우 l_linger의 영향을 받지 않는다. 소켓의 기본설정으로 소켓버퍼에 남아 있는 모든 데이터를 보낸다. 이때 close()는 바로 리턴을 하게 되므로 백그라운드에서 이러한 일이 일어나게 된다. 우아한 연결 종료를 보장한다. l_onoff > 0 and l_linger == 0 : close()는 바로 리턴을 하며, 소켓버퍼에 아직 남아있는 데이터는 버려 버린다. TCP 연결상태일 경우에는 상대편 호스트에 리셋을 위한 RST 패킷을 보낸다. hard 혹은 abortive 종료라고 부른다. l_onoff > 0 and l_linger > 0 : 버퍼에 남아있는 데이터를 모두 보내는 우아한 연결 종료를 행한다. 이때 close()에서는 l_linger에 지정된 시간만큼 블럭상태에서 대기한다. 만약 지정된 시간내에 데이터를 모두 보냈다면 리턴이 되고, 시간이 초과되었다면 에러와 함께 리턴이 된다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.

Nagle algorithm Nagle 알고리즘이 적용되면, 운영체제는 패킷을 ACK가 오기를 기다렸다가 도착하면, 그 동안 쌓여있던 데이터를 한꺼번에 보내게 된다. 이러한 방식을 사용하게 되면, 대역폭이 낮은 WAN에서 빈번한 전송을 줄이게 됨으로 효과적인 대역폭활용이 가능해진다. 단점으로 연결과 연결해제 빈번하게 일어나는 경우에는 오히려 반응 속도를 줄일 수 있는 요소가 된다는 점이다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.

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.

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

Homepage www.thinmultimedia.co.kr 서울특별시 서초구 반포동 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.