kakasoo

[TCP/IP] 소켓의 프로토콜과 그에 따른 데이터 전송 특징 본문

프로그래밍/네트워크

[TCP/IP] 소켓의 프로토콜과 그에 따른 데이터 전송 특징

카카수(kakasoo) 2020. 7. 14. 16:07
반응형

네트워크 프로그래밍에서 프로토콜을 빼면 할 말이 없다. - 열혈 TCP/IP 소켓 프로그래밍

나는 이 책을 보면서 공부하는 중인데, 책의 내용을 내가 이해하기 쉽게 내 언어로 정리하고 있다.

아주 좋은 책이므로, 공부하는 사람들은 직접 책을 사서 보는 것을 추천하고 싶다. (나는 서버를 만드는 중이다.)

 


 

프로토콜(Protocol)이란?

두 통신 대상 간의 통신 방법, 즉 통신 규약을 의미로, 컴퓨터에서는 "컴퓨터 상호간의 대화에 필요한 통신규약"이다.

어렵게 생각할 것 없이, 우리가 사용하는 socket() 함수 자체가 이미 프로토콜을 쓰고 있었기 때문이다.

프로토콜에는, IPv4, IPv6와 로컬 통신을 위한 유닉스 프로토콜, Low Level 소켓을 위한 프로토콜, IPX 프로토콜이 있다.

각각의 명칭은 또, PF_INET과 같이 PF_xxxx의 꼴을 지니고 있는데, 당장은 PF_INET만 기억해두자.

(사실, 다른 것들은 이 책이 끝날 때 까지 등장하지 않을 것으로 보인다.)

 

  • int socket(int domain, int type, int protocol); -> 성공 시 파일 디스크립터(FD) 반환, 실패 시 -1 반환.

우리가 배운 함수 중, socket() 함수의 리눅스 version이다.

이 함수를 토대로 설명할 때, 매개변수는 아래와 같은 의미를 지닌다.

 

  • doamin : 소켓이 사용할 프로토콜 체계 (Protocol Family) 정보를 전달
  • type : 소켓의 데이터 전송방식에 대한 정보 전달
  • protocol : 두 컴퓨터 통신 간에 사용될 프로토콜 정보 전달

세번째 매개변수의 이름이 protocol이라서 헷갈릴 수 있는데, 첫번째 domain이 프로토콜 체계, 즉 종류에 해당한다.

따라서 여기에 앞서 말한 IPv4 값을 넣어줘야 하기 때문에, PF_INET (프로토콜 패밀리, INET)을 넣어주어야 한다.

 

소켓의 타입은 소켓의 데이터 전송 방식이라고 되어 있는데, (PF는 결국, 일종의 '망'에 해당하기 때문에 방법은 아니다.)

프로토콜 체계 내에서 데이터를 어떠한 방식으로 전달할 것인가를, 더 상세하게 결정해주는 역할을 한다.

대표적으로, 소켓은 두 가지의 데이터 전달 방식을 가지는데,

하나는 연결지향형(SOCK_STREAM) 소켓이고, 두번째는 비(非) 연결지향형(SOCK_DGRAM) 소켓이다.

세부적인 특징을 보면,

 

연결지향형의 경우는 중간에 데이터를 소멸시키지 않고, 전송 순서대로 수신되며, 데이터의 경계가 존재하지 않는다.

이미 우리가 hello 라는 메세지를 전송하는 코드를 보았을 텐데,

말하자면 char data[] = "hello, world!" 라는 데이터를 전송했을 때 배열 자체를 전송하고 버퍼를 통해 읽는 셈이다.

따라서 다시 특징을 볼 때, 전체 데이터를 보냈으니 소멸될 것이 없을 것이고, 차례대로 읽힐 것이며, 경계도 없다.

(소켓에는 자체적으로 버퍼가 존재한다, 버퍼가 가득찰 경우에는 송신을 멈추기 때문에 데이터 손실이 없다.)

 

비 연결지향형은 전송 순서와 무관하게, 가장 빠르게 전달할 수 있는 경우를 지향한다, 마치 택배 배달처럼.

그러다 보니 데이터가 한번에 (또는 버퍼의 크기 단위로) 전달되지 않아서 경계가 생겨나고, 수신도 호출이 많아진다.

당연히, 데이터를 분할해서라도 빠르게 보내는 게 목적이다보니 의미없이 데이터가 분할되어 손실될 수도 있다.

 

마지막으로 세번째 인자인, Protocol을 보자.

 

사실 여기까지 왔으면 더 필요한가 싶을 것이다, 어떤 프로토콜 체계에서, 어떤 데이터 전송 방법을 고를 것인지 선정하였는데도 다시 프로토콜을 인자로 받는다는 게 이해되지 않을 수 있다, 솔직히 나도 이해가 안 갔다.

하지만 책에 나오길,

"하나의 프로토콜 체계 안에 데이터의 전송방식이 동일한 프로토콜이 둘 이상 존재하는 경우" 라고 설명한다.

다만 IPv4에서 데이터 전송방식이 연결지향형인 경우는 단 1개 뿐이다.

또한 데이터 전송방식이 비연결지향형인 경우도 단 1개 뿐인데,

IPv4에서 데이터 전송방식이 연결지향형인 경우를 TCP라고 하고, 비연결지향형인 경우를 UDP라고 한다!

 

반응형