소켓 시스템

yo·2021년 2월 27일
0
  1. 주소의 표현: 나
  2. 시스템콜: 현랑
  3. 네트워크 프로그래밍: 나온

학습목표

  • 다양한 소캣 주소 이해
  • 소켓 시스템의 구조와 기능 이해

소켓 주소(1)

소켓: 통신 프로그램을 쉽게 개발할 수 있도록 제공하는 API의 일종.

  • 프로토콜의 종류에 따라 사용하는 소켓 주소 체계가 다름
    - AF_UNIX: 한 호스트에 존재하는 프로세스 사이의 통신을 지원
    - AF_INET: 다른 호스트에(인터넷 사이에서) 존재하는 프로세스 사이의 통신을 지원

  • 유닉스 주소 체계

    • AF_UNIX

      • 한 호스트에 존재하는 프로세스 사이의 통신을 지원
      • 주소 체계는 파일 시스템의 경로명을 기반으로 함
    • 주소 체계(아래 그림)

      108 바이트 길이를 갖는 pathname

소켓 주소(2)

  • 인터넷 주소 체계
    • AF_INET
      • 다른 호스트에 존재하는 프로세스 사이의 통신을 지원(인터넷)
      • 주소 체계는 32비트 IP 주소와 16 비트 포트 번호를 기반으로 함
    • 주소 체계(아래 그림)

소켓 주소(3)

  • 통합 주소 체계
    • 프로토콜마다 주소 체계를 지원하는 문법 구조가 다름
    • 문법 구조상 하나의 함수에서 다양한 주소 체계를 지원하는데 어려움이 있음
    • 따라서 모든 주소 체계를 수용할 수 있는 공통 주소 체계가 필요함
  • 주소 체계(아래 그림 참고)

소켓 주소(4)

  • 통합 주소 체계
    • 사용 예
      - addr: 주소 공간 자체는 해당 프로토콜의 주소체계로 선언(인터넷 주소 체계)
      - bind() 함수의 두 번째 매개 변수는 문법적으로 공통 주소 체계만 수용( 소켓 주소)

소켓 서비스(1)

  • 소켓 유형
    • SOCK_STREAM
      • 연결형 서비스를 지원
      • AF_INET에서는 TCP 프로토콜을 사용
    • SOCK_DGRM(data gram)
      • 비연결형 서비스를 지원
      • AF_INET에서는 UDP 프로토콜을 사용
    • SOCK_RAW
      • IP 프로토콜을 직접 사용(TCP, UDP를 사용하지 않고 직접 전송계층 프로토콜을 개발하는 경우 이걸 사용)

소켓 서비스(2)

  • 소켓 함수(소켓 주요 함수들 소개한다)
    • s = socket(int domain, int type, int protocol)
      • 파라미터 3개 받는 소켓함수고, 정수 리턴
      • 매개 변수로 지정된 유형을 지원하는 소켓을 생성
      • 생성된 소켓을 가리키는 파일 디스크립터(int)를 리턴(소켓도 하나의 파일로 처리한다고 하네요...)
    • bind(int s, struct sockaddr *name, socklen_t *namelen)
      • s가 가리키는 소켓에 소켓 주소를 부여함(앞에서 만들어진 소켓에 주소를 부여하는 역할)
      • name: 소켓 주소
    • listen(int s, int backlog)
      • 소켓을 활성화시킴( = 시스템 내에 버퍼를 준비시킨다)
    • accept (int s, struct sockaddr *addr, socklen_t *addrlen)
      • 클라이언트/서버 환경에서 서버가 대기하는 역할을 함
      • 클라이언트의 connect() 함수와 만나면 소켓 연결을 설정함
    • connect (int s, struct sockaddr *addr, socklen_t *addrlen)
      • 클라이언트/서버 환경에서 클라이언트의 연결 설정 요청을 수행
      • 서버의 accept() 함수와 만나면 소켓 연결을 설정함
    • send ( int s, void *msg, size_t len, int flags)
      • 연결이 설정된 소켓에 데이터를 송신
      • 전송 데이터는 msg가 가리킴
    • recv (int s, void *buf, size_t len, int flags)
      • 연결이 설정된 소켓에서 데이터를 수신
      • 수신 데이터는 buf가 가리키는 공간에 저장됨
profile
Never stop asking why

0개의 댓글