★프로토콜: 컴퓨터 상호간의 대화에 필요한 통신규약
int socket(int domain, int type, int protocol);
- domain: socket이 사용할 프로토콜 체계 정보 전달
- type: socket의 데이터 전송방식에 대한 정보 전달
- protocol: 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달
- 프로토콜 체계
이름 | 프로토콜 체계 (Protocol Family) |
PF_INET | IPv4 인터넷 프로토콜 체계 |
PF_INET6 | IPv6 인터넷 프로토콜 체계 |
PF_LOCAL | 로컬 통신을 위한 UNIX 프로토콜 체계 |
PF_PACKET | Low Level socket을 위한 프로토콜 체계 |
PF_IPX | IPX 노벨 프로토콜 체계 |
지정한 프로토콜 체계의 범위내에서 세번째 인자가 결정
- socket의 데이터 전송 방식
- 연결지향형 socket (SOCK_STREAM)
- 중간에 데이터가 소멸되지 않고 목적지로 이동
- 전송 순서대로 데이터가 수신
- 연결지향형 socket 대 연결지향형 socket의 연결은 반드시 1대 1이어야 함
- 전송되는 데이터의 경계(boundary)가 존재하지 않음
→ socket으로 전송되는 데이터는 내부 버퍼에 저장되므로 데이터가 수신되고 바로 read함수를 호출해야 하는 것은 아님. 버퍼 용량을 초과하지 않는 한 데이터가 채워진 후에 한번의 read함수 호출로 데이터를 읽을 수 있고 한 번의 write함수로 전송된 데이터를 여러 번의 read함수로 저장할 수 있음.
≪입력 버퍼가 수신되는 데이터로 채워지면 데이터를 전송하는 영역의 socket이 데이터를 전송하지 않으며 전송된 데이터가 소멸되지 않는다. 즉 연결지향형 socket은 상대 socket의 상태를 파악해가면서 데이터를 전송한다.≫
2. 비 연결지향형 socket (SOCK_DGRAM)
- 전송된 순서에 상관없이 가장 빠른 전송 지향
- 전송된 데이터는 손실의 우려가 있고 파손의 우려가 있음
- 전송되는 데이터의 경계(boundary)가 존재
→ write 함수를 여러번 호출했을 경우 read함수도 여러번 호출돼야 함
- 한 번에 전송할 수 있는 데이터의 크기가 제한됨
- 프로토콜 정보
: 하나의 포로토콜 체계 안에서 데이터 전송 방식이 동일한 프로토콜이 둘 이상 존재하는 경우, 원하는 프로토콜 정보를 구체화하기 위해 사용
ex) TCP socket: IPv4 인터넷 프로토콜 체계에서 동작하는 연결지향형 데이터 전송 socket
int tcp_socket=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)
ex) UDP socket: IPv4 인터넷 프로토콜 체계에서 동작하는 비 연결자향형 데이터 전송 socket
int udp_socket=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)
'프로그래밍의 기초 > TCP | IP' 카테고리의 다른 글
주소 정보의 표현 (0) | 2022.01.06 |
---|---|
socket에 할당하는 IP주소와 PORT번호 (0) | 2022.01.06 |
윈도우 기반 socket 관련 함수 (0) | 2022.01.06 |
윈도우 기반 구현 (0) | 2022.01.05 |
리눅스 기반 파일 조작하기 (0) | 2022.01.05 |