4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1
4장. 소켓 유형과 프로토콜 목차 4.1 소켓 도메인 지정 4.2 socket(2) 함수 이용하기 4.3 소켓 유형 선택하기 4장. 소켓 유형과 프로토콜 목차 4.1 소켓 도메인 지정 4.2 socket(2) 함수 이용하기 4.3 소켓 유형 선택하기 4.4 프로토콜 선택하기 4.5 소켓 도메인과 유형 4.6 리눅스 지원 프로토콜
용어 정리 PF_ : Protocol Family(프로토콜 체계) AF_ : Address Family(주소 체계) _un(un_) : unsigned integer
소켓 정리 그림 1. 소켓 인터페이스 위치 TCP/IP 네트워크 드라이버 응용 1 응용 2 응용 3 소켓 1 소켓 2 소켓 3 4 5 7 - 그림 1. 소켓 인터페이스 위치
소켓 정리 그림 2. 파일기술자와 소켓기술자 파일기술자 Family : PF_INET 포인터 3 파일기술자 또는 소켓기술자 포인터 3 4 5 파일기술자 Family : PF_INET Service : SOCK_STREAM Local IP : Remote IP : Remote port : Local port : 소켓 파일 그림 2. 파일기술자와 소켓기술자
그림 3. 응용 프로그램과 소켓 그리고 TCP/IP 소켓 정리 응용 1 Fd=3 응용 2 응용 3 응용 4 TCP UDP IP TCP/IP sd=3 3000 3001 3002 3003 203.247.39.35 연결형 서비스 비연결형 서비스 응용 프로그램 (소켓 번호) 소켓 전송 계층 (포트 번호) 인터넷 계층 (IP 주소) sd=4 그림 3. 응용 프로그램과 소켓 그리고 TCP/IP
소켓 정리 그림 4. TCP 소켓 프로그래밍 절차 서버 클라이언트 socket() bind() listen() accept() send() recv() connect() close() 연결 요청 데이터 송수신 종료 그림 4. TCP 소켓 프로그래밍 절차
소켓 정리 그림 5. UDP 소켓 프로그래밍 절차 서버 클라이언트 socket() bind() recfrom() sendto() close() 데이터 송수신 종료 그림 5. UDP 소켓 프로그래밍 절차
그림 6. socket() 호출시 소켓번호와 소켓 인터페이스와의 관계 소켓 정리 프로토콜 자신의 IP 주소 자신의 포트번호 TCP/IP 응용 프로그램 socket() 소켓 번호 상대방의 IP 주소 상대방의 포트번호 네트워크 소켓 인터페이스 반환 호출 그림 6. socket() 호출시 소켓번호와 소켓 인터페이스와의 관계
그림 6. connect() 호출시 소켓번호와 소켓 주소와의 관계 소켓 정리 프로토콜 자신의 IP 주소 자신의 포트번호 TCP/IP 응용 프로그램 (클라이언트) socket() connect() 상대방의 IP 주소 상대방의 포트번호 네트워크 소켓 인터페이스 소켓 번호 그림 6. connect() 호출시 소켓번호와 소켓 주소와의 관계
4장. 소켓 유형과 프로토콜 이 장의 목표 socket 함수의 인수 socket(2) 함수 도메인 인수 소켓 유형 인수 4장. 소켓 유형과 프로토콜 int socket (int domain, int type, int protocol); 이 장의 목표 socket(2) 함수 socket 함수의 인수 도메인 인수 소켓 유형 인수 프로토콜 인수
4.1 소켓 도메인 지정 목차 4.1.1 PF_INET 또는 AF_INET 중 선택하기 4.1 소켓 도메인 지정 목차 4.1.1 PF_INET 또는 AF_INET 중 선택하기 4.1.2 PF_LOCAL과 AF_LOCAL 이용하기
4.1.1 PF_INET 또는 AF_INET 선택하기 도메인 지정 인터넷 프로토콜 체계 표준에서는 PF_INET 이용을 권장 도메인 인수 AF_UNIX AF_LOCAL AF_INET AF_UNIX = PF_UNIX AF_LOCAL = PF_LOCAL AF_INET = PF_INET
4.1.2 PF_LOCAL과 AF_LOCAL 이용하기 이 외에도, PF_UNIX : UNIX 방식의 프로토콜 체계 사용 PF_NS : XEROX 네트워크 시스템의 프로토콜 체계 사용) PF_LOCAL 인수 로컬 UNIX 소켓 프로토콜 체계 지정 예제 1 int z; int sp[2] struct sockaddr_un adr_unix; z = socketpair(PF_LOCAL, SOCK_STREAM, 0, sp); adr_unix.sun_family = AF_LOCAL
4.2 socket(2) 함수 이용하기 socket(2) 함수 함수 형식 프로토콜 체계상의 하나의 소켓 생성 int socket(int domain, int type, int protocol); 반환 값 성공시 : 정수값(소켓번호) 반환 실패 : -1 반환
4.3 소켓 유형 선택하기 목차 4.3.1 SOCK_STREAM 소켓 유형 이해하기 4.3 소켓 유형 선택하기 목차 4.3.1 SOCK_STREAM 소켓 유형 이해하기 4.3.2 SOCK_DGRAM 소켓 유형 이해하기 4.3.3 SOCK_SEQPACKET 소켓 유형 이해하기
4.3 소켓 유형 선택하기 소켓 유형 인수 SOCK_STREAM* SOCK_DGRAM* SOCK_SEQPACKET 4.3 소켓 유형 선택하기 소켓 유형 인수 SOCK_STREAM* SOCK_DGRAM* SOCK_SEQPACKET SOCK_RAW
4.3.1 SOCK_STREAM 소켓 유형 이해하기 SOCK_STREAM 소켓 유형 SOCK_STREAM 소켓의 특성 스트림 방식의 소켓 생성 UNIX의 파이프 개념과 동일 비연결형(데이터그램) 서비스 선택 시 사용 SOCK_STREAM 소켓의 특성 메시지 경계가 유지되지 않음 전달된 순서대로 수신됨 전송된 모든 데이터는 에러없이 원격지에 도달
4.3.2 SOCK_DGRAM 소켓 유형 이해하기 SOCK_DGRAM 소켓 유형 SOCK_DGRAM 소켓 유형의 특성 데이터그램 방식의 소켓 생성 개별적으로 주소가 쓰여진 패킷 전송 시 사용 비연결형(데이터그램) 서비스 선택 시 사용 SOCK_DGRAM 소켓 유형의 특성 패킷은 전달된 순서대로 수신되지 않음 에러복구를 하지 않음 (즉, 신뢰성이 없음) 데이터그램 패킷의 크기 제한
4.3.3 SOCK_SEQPACKET 소켓 유형 이해하기 순서화된 패킷 소켓 SOCK_SEQPACKET 소켓 유형의 특성 메시지 경계가 유지됨 전달된 순서대로 수신됨 전송된 모든 데이터는 에러없이 원격지에 도달
4.3.4 SOCK_RAW 소켓 유형 이해하기 SOCK_RAW 소켓 유형 SOCK_RAW 소켓 유형의 특성 네트워크 소켓 통신과 패킷에 대한 직접적인 제어 가능
4.4 프로토콜 선택하기 목차 4.4.1. PF_LOCAL과 SOCK_STREAM 이용하기 4.4 프로토콜 선택하기 목차 4.4.1. PF_LOCAL과 SOCK_STREAM 이용하기 4.4.2 PF_LOCAL과 SOCK_DGRAM 이용하기 4.4.3 PF_INET과 SOCK_STREAM 이용하기 4.4.4 PF_INTET과 SOCK_DGRAM 이용하기
4.4.1 PF_LOCAL과 SOCK_STREAM 이용하기 하나의 프로세스와 같은 호스트 상의 다른 프로세스 간의 통신에 사용 생성 예제 int s; s = socket(PF_LOCAL, SOCK_STREAM, 0); If (s == -1) Perror(“socket()”); 리눅스 커널이 자동으로 프로토콜을 선택함
4.4.2 PF_LOCAL과 SOCK_DGRAM 이용하기 로컬 호스트의 데이터그램 서비스 제공 메시지 경계를 유지하려 할 때 사용 생성 예제 int s; s = socket(PF_LOCAL, SOCK_DGRAM, 0); If (s == -1) Perror(“socket()”);
4.4.3 PF_INET과 SOCK_STREAM 이용하기 인터넷 연결 소켓에 대한 스트림 I/O 서비스 이용 신뢰적인 TCP/IP 이용 생성 예제(1) int s; s = socket(PF_INET, SOCK_STREAM, 0); If (s == -1) Perror(“socket()”);
4.4.3 PF_INET과 SOCK_STREAM 이용하기 생성 예제(2) int s; s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); If (s == -1) Perror(“socket()”);
4.4.4 PF_INTET과 SOCK_DGRAM 이용하기 인터넷 비연결 소켓에 대한 데이터그램 I/O 서비스 사용 비신뢰적인 UDP 이용 생성 예제(1) int s; s = socket(PF_INET, SOCK_DGRAM, 0); If (s == -1) Perror(“socket()”);
4.4.4 PF_INTET과 SOCK_DGRAM 이용하기 생성 예제(2) int s; s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); If (s == -1) Perror(“socket()”);
4.4 프로토콜 선택하기 일반적인 소켓 인수 도메인 소켓 유형 프로토콜 설 명 PF_LOCAL SOCK_STREAM 4.4 프로토콜 선택하기 일반적인 소켓 인수 도메인 소켓 유형 프로토콜 설 명 PF_LOCAL SOCK_STREAM 로컬 스트림 소켓 PF_LOCAL SOCK_DGRAM 로컬 데이터그램 소켓 PF_INET SOCK_STREAM IPPROTO_TCP TCP/IP 스트림 소켓 PF_INET SOCK_DGRAM IPPROTO_UDP UDP 데이터그램 소켓
<그림 4.1 소켓 파라미터 관계 다이어그램> 에서 4.5 소켓 도메인과 유형 <그림 4.1 소켓 파라미터 관계 다이어그램> 에서 SOCK_STREAM PF_LOCAL SOCK_DGRAM IPPROTO_TCP other SOCK_STREAM PF_INET IPPROTO_TCP other SOCK_DGRAM 도메인 소켓 유형 프로토콜
4.6 리눅스 지원 프로토콜 목차 4.6.1 로컬 및 인터넷 socket(2) 파라미터 4.6 리눅스 지원 프로토콜 목차 4.6.1 로컬 및 인터넷 socket(2) 파라미터 4.6.2 그 밖의 socket(2) 파라미터 4.6.3 다른 프로토콜 연구 4.6.4 프로토콜 체계 이해하기 4.6.5 소켓 유형 이해하기
4.6.1 로컬 및 인터넷 socket(2) 파라미터 부록 1 참조
4.6.2 그 밖의 socket(2) 파라미터 부록 2 참조
4.6.3 다른 프로토콜 연구 프로토콜에 대한 정보 제공처 리눅스 HOWTO와 MINI-HOWTO 문서 리눅스 FAQ 문서 4.6.3 다른 프로토콜 연구 프로토콜에 대한 정보 제공처 리눅스 HOWTO와 MINI-HOWTO 문서 리눅스 FAQ 문서 /usr/src/linux/Documetation/networking /usr/src/linux
4.6.4 프로토콜 체계 이해하기 프로토콜 체계 정의 부록 3 참조 #include <sys/socket.h> 4.6.4 프로토콜 체계 이해하기 프로토콜 체계 정의 #include <sys/socket.h> /usr/include/bits/socket.h 부록 3 참조
4.6.5 소켓 유형 이해하기 부록 4 참조
용어 설명 AX25 프로토콜 APPLETALK IPX 프로토콜 IRDA NetROM 프로토콜 PLP1
참고 문헌 참고 문헌 및 사이트 http://fa.dytc.ac.kr/yksuh/internet http://www.ecst/csuchico.edu/~beej/guide/net JAVA 네트워크 프로그래밍, 한빛미디어
요약