- 주소의 표현: 나
- 시스템콜: 현랑
- 네트워크 프로그래밍: 나온
학습목표
- 다양한 소캣 주소 이해
- 소켓 시스템의 구조와 기능 이해
소켓 주소(1)
소켓: 통신 프로그램을 쉽게 개발할 수 있도록 제공하는 API의 일종.
소켓 주소(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가 가리키는 공간에 저장됨