Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

4. 소켓 네트워크 프로그램 개발 - 2. 소켓의 생성(socket 함수) 본문

TCP IP 소켓 프로그래밍

4. 소켓 네트워크 프로그램 개발 - 2. 소켓의 생성(socket 함수)

scarecrow1992 2021. 5. 10. 00:23

학습 목표

  • socket 함수를 이용하여 소켓을 생성하는 방법을 터득

 

앞서 일반적으로 소켓통신에서는 버클리 소켓을 사용한다고 앞서 설명했다.

하지만 이 버클리 소켓은 windows와 linux OS에서 각기 다른 헤더파일에 존재한다.

  • windows : winsock2.h
  • linux : sys/socket.h

docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket

int socket(int domain, int type, int protocol);
cs

 

endpoint 소켓

  • socket 함수에 의해 생성되는 종점 소켓
  • 서버와 클라이언트의 연결을 받기 위함
  • 2가지 용도로 쓰임
    1. client : 연결 요청
    2. server : (client의 요청을) 듣기
  • client와 server의 입장에서 다르게 불림
    • client : 연결 소켓(connected socket)
    • server : 듣기 소켓(listen socket)

 

이제 socket함수의 매개변수에 대해 알아보겠다.


1. 도메인(domain)

  • 어떤 영역에서 통신할 것인지를 지정
  • 도메인 매개변수에 주로 사용하는 값들
매개변수 기능
AF_UNIX 시스템 내부 영역에서 IPC를 위해서 사용됨
자세한 용도는 11장에서 설명
내부 통신용
AF_INET 인터넷 영역에서 물리적으로 떨어진 컴퓨터 사이의 통신에 사용됨
일반적인 네트워크 프로그램에서 사용되는 값
IPv4를 사용
별다른 언급이 없으면 앞으로 이 매개변수를 쓸것
인터넷 통신용
AF_INET6 AF_INET과 같다.
IPv6를 사용
AF_X25 X.25 아마추어 라디오용 프로토콜

주로 AF_UNIX와 AF_INET을 쓸것이다.

 

IP 버전

IP도 프로그램처럼 버전이 있다.
가장 널리 쓰이는 IP 버전은 4로 IPv4라고 표기된다.
현재 6버전 까지 나와있다.

2. 타입(type)

  • 데이터 통신에 쓰일 프로토콜 유형의 지정에 쓰임
매개변수 기능
SOCK_STREAM 연결지향의 TCP/IP 기반 통신에서 사용
SOCK_DGRAM 데이터그램 방식의 UDP/IP 기반 통신에 사용
SOCK_RAW TCP/IP의 복잡함을 감추지 않고, 직접 다룰 수 있는 프로토콜
21장에서 자세히 다룰것

 


3. 프로토콜(protocol)

  • 도메인과 유형에 따라 호스트 간 통신에 사용할 프로토콜을 결정
매개변수 기능
IPPROTO_TCP TCP 프로토콜로 AF_INET 도메인과 SOCK_STREAM 유형과 함께 사용됨
IPPROTO_UDP UDP 프로토콜로 AF_INET 도메인과 SOCK_DGRAM 유형과 함께 사용됨

 

 


return

  • data type : int
  • 의미
    • -1 : 실패
    • 0 이상 : 성공, 소켓 객체를 가리키는 숫자
  • 반환값을 socket descriptor 혹은 소켓 지정 번호라고 부른다.

위 그림은 소켓 지정 번호가 어떻게 사용되는지를 보여준다

소켓지정 번호 4를 이용하여 소켓에 접근한 후, 해당 소켓을 통해 통신이 이루어지게 한다.

 

인터넷을 위한 소켓을 직접 생성하는 법은 아래와 같다.

int sockfd;
if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
    // error 
}
cs

 

 

Comments