390 likes | 759 Views
4 장 . 소켓 유형과 프로토콜. Network Lab. 이 원 구. 1. 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.
E N D
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1
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 응용 2 응용 3 소켓 인터페이스 5 - 7 소켓 1 소켓 2 소켓 3 TCP/IP 4 3 네트워크 드라이버 2 1 소켓 정리 그림 1. 소켓 인터페이스 위치
파일기술자 Family : PF_INET Service : SOCK_STREAM 파일 포인터 3 Local IP : 파일기술자 또는 파일 포인터 4 소켓기술자 Local port : 소켓 포인터 5 Remote IP : Remote port : 소켓 정리 그림 2. 파일기술자와 소켓기술자
연결형 서비스 비연결형 서비스 응용 1 응용 2 응용 3 응용 4 응용 프로그램 (소켓 번호) Fd=3 sd=4 sd=3 sd=3 sd=3 소켓 (포트 번호) 3000 3001 3002 3003 TCP UDP 전송 계층 IP 인터넷 계층 TCP/IP (IP 주소) 203.247.39.35 소켓 정리 그림 3. 응용 프로그램과 소켓 그리고 TCP/IP
서버 클라이언트 socket() socket() bind() listen() connect() 연결 요청 accept() accept() 데이터 송수신 send() recv() recv() send() 종료 close() 소켓 정리 그림 4. TCP 소켓 프로그래밍 절차
서버 클라이언트 socket() socket() bind() 데이터 송수신 sendto() recfrom() recfrom() sendto() 종료 close() 소켓 정리 그림 5. UDP 소켓 프로그래밍 절차
응용 프로그램 socket() 호출 반환 소켓 번호 프로토콜 자신의 IP 주소 자신의 포트번호 상대방의 IP 주소 상대방의 포트번호 소켓 인터페이스 TCP/IP 네트워크 소켓 정리 그림 6. socket() 호출시 소켓번호와 소켓 인터페이스와의 관계
응용 프로그램 (클라이언트) socket() connect() 소켓 번호 프로토콜 자신의 IP 주소 자신의 포트번호 상대방의 IP 주소 상대방의 포트번호 소켓 인터페이스 TCP/IP 네트워크 소켓 정리 그림 6. connect() 호출시 소켓번호와 소켓 주소와의 관계
4장. 소켓 유형과 프로토콜 int socket (int domain, int type, int protocol); • 이 장의 목표 • socket(2) 함수 • socket 함수의 인수 • 도메인 인수 • 소켓 유형 인수 • 프로토콜 인수
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.2 SOCK_DGRAM 소켓 유형 이해하기 4.3.3 SOCK_SEQPACKET 소켓 유형 이해하기
4.3 소켓 유형 선택하기 • 소켓 유형 인수 • SOCK_STREAM* • SOCK_DGRAM* • SOCK_SEQPACKET • SOCK_RAW
4.3.1 SOCK_STREAM 소켓 유형 이해하기 • SOCK_STREAM 소켓 유형 • 스트림 방식의 소켓 생성 • UNIX의 파이프 개념과 동일 • 비연결형(데이터그램) 서비스 선택 시 사용 • SOCK_STREAM 소켓의 특성 • 메시지 경계가 유지되지 않음 • 전달된 순서대로 수신됨 • 전송된 모든 데이터는 에러없이 원격지에 도달
4.3.2 SOCK_DGRAM 소켓 유형 이해하기 • SOCK_DGRAM 소켓 유형 • 데이터그램 방식의 소켓 생성 • 개별적으로 주소가 쓰여진 패킷 전송 시 사용 • 비연결형(데이터그램) 서비스 선택 시 사용 • SOCK_DGRAM 소켓 유형의 특성 • 패킷은 전달된 순서대로 수신되지 않음 • 에러복구를 하지 않음 (즉, 신뢰성이 없음) • 데이터그램 패킷의 크기 제한
4.3.3 SOCK_SEQPACKET 소켓 유형 이해하기 • SOCK_SEQPACKET 소켓 유형 • 순서화된 패킷 소켓 • SOCK_SEQPACKET 소켓 유형의 특성 • 메시지 경계가 유지됨 • 전달된 순서대로 수신됨 • 전송된 모든 데이터는 에러없이 원격지에 도달
4.3.4 SOCK_RAW 소켓 유형 이해하기 • SOCK_RAW 소켓 유형 • 네트워크 소켓 • SOCK_RAW 소켓 유형의 특성 • 통신과 패킷에 대한 직접적인 제어 가능
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 이용하기 • 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 이용하기 • 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 이용하기 • 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 이용하기 • 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 0 로컬 스트림 소켓 PF_LOCAL SOCK_DGRAM 0 로컬 데이터그램 소켓 PF_INET SOCK_STREAM IPPROTO_TCP TCP/IP 스트림 소켓 PF_INET SOCK_DGRAM IPPROTO_UDP UDP 데이터그램 소켓
0 0 IPPROTO_TCP IPPROTO_TCP other other 4.5 소켓 도메인과 유형 <그림 4.1소켓 파라미터 관계 다이어그램> 에서 SOCK_STREAM 0 PF_LOCAL SOCK_DGRAM 0 SOCK_STREAM PF_INET SOCK_DGRAM 도메인 소켓 유형 프로토콜
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 문서 • /usr/src/linux/Documetation/networking • /usr/src/linux
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 네트워크 프로그래밍, 한빛미디어