본문 바로가기

ComputerScience/Network

개요

네트워크 프로그래밍은 소켓을 기반으로 한다. 소켓은 송신용과 수신용 따로 존재한다.

소켓에는 주소정보(IP, PORT)를 할당해야된다.

수신용 소켓 생성 순서는 다음과 같다.

1. 소켓의 생성(create)

2. IP와 PORT 할당(bind)

3. 연결요청 가능상태로 변경(listen) 

4. 연결 요청 수락 ( accept)


리눅스의 소켓

 리눅스는 소켓도 파일로 간주한다. (키보드, 콘솔 등등도 파일로 간주) 따라서 입출력 함수를 기반으로 데이터 송수신이 이루어진다.

파일 디스크립터

 운영체제가 만든 파일을 구분하기 위한 숫자이다. 입출력 함수는 파일 디스크립터를 입력으로 받는다. 입출력 함수에 소켓의 파일 디스크립터를 전달하면, 소켓의 입출력을 실행한다.

파일디스크립터, 출처 : 위키


프로토콜

 컴퓨터 간의 데이터 송수신에 따른 통신 규약을 의미한다. 소켓을 생성할 때, 프로토콜 체계, 소켓 타입 그리고 더 세분화된 프로토콜 타입을 지정해주어야 한다.

#include <sys/socket.h>

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

프로토콜 체계

domain에 해당하고, ipv4,ipv6를 의미한다.

대표적인 소켓 타입

1. 연결 지향형(TCP) 소켓 타입

 데이터의 안정성이 보장되며, 순서대로 데이터가 수신된다. 데이터의 경계가 없으며(데이터를 여러 번 나누어서 보냈을 때, 수신하는 측에서 나눠서 읽을 필요 없이 한 번에 읽어도 된다.) 또한, 소켓과 소켓의 연결은 반드시 일대일 대응되어야 한다.

2. 비연결지향형(UDP) 소켓 타입

 전송 순서와 상관없으며 빠른 속도를 가진다. 하지만 데이터 손실 및 파손의 우려가 있고, 데이터를 나눠서 보내면 수신 측에서도 나누어서 받아야 한다. 또한 한 번에 전송할 수 있는 데이터의 크기가 제한된다.

 

'ComputerScience > Network' 카테고리의 다른 글

IP주소와 PORT 번호  (0) 2020.09.06