1. 소켓의 프로토콜과 그에 따른 데이터 전송 특성

* 프로토콜(Protocol)이란 무엇인가?

: 컴퓨터 상호간의 대화에 필요한 통신규약

* 소켓의 생성

* 프로토콜 체계 (Protocol Family)

: 생성되는 소켓이 사용할 프로토콜 부류정보를 프로토콜 체계라고 한다.

: IPv4 인터넷 프로토콜 체계가 이 책에서 주로 설명하는 프로토콜 체계이다. 

* 소켓의 타입(Type)

: 소켓의 데이터 전송 방식을 뜻한다. 프로토콜 체계에도 둘 이상의 전송 방식이 있기 때문에 결정해야 한다.

: 대표적인 타입

1. 연결 지향형 소켓(SOCK_SREAM) : 신뢰성 있는 순차적인 바이트 기반의 연결지향 데이터 전송방식의 소켓

: 중간에 데이터가 소멸되지 않고 목적지로 전송된다.

: 전송 순서대로 데이터가 수신된다

: 전송되는 데이터의 경계가 존재하지 않는다.(여러번에 걸쳐 보낸걸 한번에 받거나, 한번에 보낸걸 여러번에 걸쳐 받을 수 있다.)

: 소켓대 소켓의 연결을 반드시 1대 1이어야 한다.

Tip 소켓에 존재하는 버퍼가 꽉차면 데이터가 소멸되나요?

: 버퍼가 꽉 찰경우 데이터를 전송하는 소켓이 더이상 데이터를 전송하지 않기 때문에 데이터 손실은 특별한 경우가 아니면 발생하지 않는다.

: 뿐만아니라 소켓은 상대 소켓의 상태까지 파악하면서 데이터를 전송하기 때문에 데이터 전송이 제대로 되지 않으면 재전송하기도 한다.

2. 비 연결 지향형 소켓(SOCK_DGRAM) : 신뢰성과 순차적 데이터 전송을 보장하지 않는, 고속의 데이터 전송을 목적으로 하는 소켓

: 전송 순서에 상관없이 가장 빠른 전송을 지향한다.

: 전송된 데이터는 손실의 우려가 있고, 파손의 우려가 있다.

: 전송되는 데이터 경계가 존재한다

: 한번에 전송할 수 있는 데이터의 크기가 제한된다.

* 프로토콜의 최종 선택

: 하나의 프로토콜 체계 안에 데이터의 전송방식이 동일한 프로토콜이 둘 이상 존재하는 경우 사용한다.

: IPPROTO_TCP(연결지향형 TCP 소켓) 이나 IPPROTO_UDP(비 연결지향형 UDP 소켓)을 정한다.

윤성우의 열혈 TCP/IP 소켓 프로그래밍
국내도서
저자 : 윤성우
출판 : 오렌지미디어 2009.12.01
상세보기


1. 네트워크 프로그래밍과 소켓의 이해

* 네트워크 프로그래밍과 소켓에 대한 매우 간단한 이해

: 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고 받을 수 있도록 하는 것이 네트워크 프로그램이다.

: 물리적 연결을 기반으로하는 소프트웨어적인 데이터 송수신 방법을 고민해야 한다.

: 이는 운영체제에서 소켓(Socket)을 제공하기 때문에 고민할 필요 없다.

: 소켓은 소프트웨어적인 연결, 두 컴퓨터 연결을 의미하기도 한다.

* 전화 받는 소켓의 구현

: 소켓은 크게 두가지로 나뉜다.

: TCP 소켓은 전화기에 비유할 수 있다. 

: 전화를 거는 소켓과, 받는 소켓을 다르게 완성된다.

: 소켓 생성 과정

- 1. 소켓 생성 socket 함수 호출

- 2. IP주소와 PORT번호 할당 bind 함수 호출

- 3. 연결 요청 가능상태로 변경 listen 함수 호출

- 4. 연결요청에 대한 수락    accept 함수 호출

* Hello World! 서버 프로그램의 구현

: 소켓을 생성하는 순간에는 서버 소켓과 클라이언트 소켓으로 나뉘지 않는다. bind, listen 함수의 호출이 이어지면 서버 소켓이 되는 것이고 connect 함수의 호출로 이어지면 클라이언트 소켓이 되는 것이다.

2. 리눅스 기반 파일 조작하기

: 리눅스에서의 소켓조작은 파일 조작과 동일하게 간주되기 대문에 파일에 대해서 자세히 알 필요가 있다. 리눅스는 소켓을 파일의 일종으로 구분한다.

: 파일 입출력 함수를 네트워크 상에서의 데이터 송수신에 사용할 수 있다.

* 저수준 파일 입출력(Low-level File Access)과 파일 디스크립터(File Descriptor)

: 저수준이란 뜻은 표준에 상관없이 운영체제가 독립적으로 제공하는~ 라는 의미이다.

: 파일 디스크립터란 시스템으로부터 할당받은 파일 또는 소켓에 부여된 정수를 의미한다.

: 파일 디스크립터는 운영체제가 파일 또는 소켓을 편하게 지칭하기 위해 부여한 숫자이다. Windows의 핸들과 비슷한 개념이다.


3. 윈도우 기반으로 구현하기

: 윈도우 소켓은 상당부분 BSD 계열 유닉스 소켓을 참고하여 설계되었다. 따라서 많은 부분이 리눅스 소켓과 유사하다.

* 리눅스와 윈도우 기반으로 동시에 공부해야 하는 이유

: 상당수 프로젝트에서 리눅스 기반으로 서버를 만들지만, 클라이언트는 윈도우에 있는 경우가 많고, 운영체제를 변경해야 하는 경우도 발생하기도 한다.

: 이 둘은 매우 유사하기 때문에 묶어서 공부하는 것이 효과적이다.

* 윈도우 소켓을 위한 헤더와 라이브러리의 설정

: winsock2.h를 포함시킨다, ws2_32.lib 라이브러리를 링크시켜야 한다.

: Clion(IDE) 을 사용하는 경우 이 작업이 필요 없었다.

* 윈속(winsock)의 초기화

: 윈속프로그래밍을 할 때에는 반드시 WSAStartup 함수를 호출해서 프로그램에서 요구하는 윈도우 소켓의 버전을 알리고 해당 버전을 지원하는 라이브러리의 초기화 작업을 진행해야 한다.


: 윈도우와 리눅스의 차이는 크게 없으며, 라이브러리 초기화 및 해제관련 코드와 자료형 정보에서만 조금 차이날 뿐이다.


윤성우의 열혈 TCP/IP 소켓 프로그래밍
국내도서
저자 : 윤성우
출판 : 오렌지미디어 2009.12.01
상세보기


'독후감 > 소켓프로그래밍' 카테고리의 다른 글

2. 소켓의 타입과 프로토콜의 설정  (0) 2017.03.15

+ Recent posts