1 / 63

Chapter 16

Chapter 16. Socket Interface. CONTENTS. SOME DEFINITIONS SOCKETS BYTE ORDERING ADDRESS TRANSFORMATION BYTE MANIPULATION FUNCTIONS INFORMATION ABOUT REMOTE HOST SOCKET SYSTEM CALLS CONNECTIONLESS ITERATIVE SERVER. CONTENTS (continued). UDP CLIENT-SERVER PROGRAMS

marina
Télécharger la présentation

Chapter 16

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 16 SocketInterface

  2. CONTENTS • SOME DEFINITIONS • SOCKETS • BYTE ORDERING • ADDRESS TRANSFORMATION • BYTE MANIPULATION FUNCTIONS • INFORMATION ABOUT REMOTE HOST • SOCKET SYSTEM CALLS • CONNECTIONLESS ITERATIVE SERVER

  3. CONTENTS (continued) UDP CLIENT-SERVER PROGRAMS CONNECTION-ORIENTED CONCURRENT SERVER TCP CLIENT-SERVER PROGRAMS

  4. 16.1 SOME DEFINITIONS

  5. 16.1 정의 • 소켓 • 소켓 인터페이스는 UNIX BSD의 일환으로 개발 • UNIX에 기반을 두고 있으며 UNIX 에서 파일을 엑세스하기 위해서 사용되는 시스템 콜의 확장(System Call) • 어떤 통신망의 특정 노드상의 특정 서비스를 식별하는 식별자, 소켓은 노드 주소와 서비스를 식별하는 포트번호로 구성된다. • 인터넷 노드상의 포트 80은WWW(World Wide Web)서버를 표시한다.

  6. 16.1 정의 • 데이터 유형

  7. 16.1 정의 • 인터넷 주소 구조

  8. 16.1 정의 • 소켓 주소

  9. 16.2 SOCKETS

  10. 16.2 소켓 • 소켓 구조

  11. 16.2 소켓 • 인터넷 소켓 주소 구조

  12. 16.2 소켓 • 소켓 구조 • 계열(Family) IPv4, IPv6, UNIX 도메인 프로토콜과 같은 그룹정으 • 유형(Type) Stream Socket, DataGram Socket, Raw Socket • 프로토콜(Protocol) TCP, UDP의 경우 0 • 로컬 소켓 주소 sockaddr_in의 구조체로 이루어진 로컬 소켓주소 • 원격지 소켓 주소 sockaddr_in의 구조체로 이루어진 원격지 소켓 주소

  13. 16.2 소켓 • 소켓 유형

  14. 16.2 소켓 • 소켓 유형 • 스트림 소켓(Stream Socket) • TCP와 같은 연결지향 프로토콜을 사용 • 데이터 그램 소켓(Datagram Socket) • UDP와 같은 비연결성 프로토콜을 사용 • 미 소켓(Raw Socket) • ICMP 또는 OSPF 와 같이 직접 IP 서비스를 이용하는 프로토콜

  15. 16.3 BYTE ORDERING

  16. 16.3 바이트 순서화 • Big-endian 바이트 순서

  17. 16.3 바이트 순서화 • Little-endian 바이트 순서

  18. 16.3 바이트 순서화 The byte order for the TCP/IPprotocol suite is big endian.

  19. 16.3 바이트 순서화 • 바이트-순서 변환 • 응용프로그램에서 이식성을 용이하게 하기 위하여, TCP/IP 소프트웨어는 호스트 바이트 순서(big-endian 또는 little-endian) 으로 이루어진 정수를 네트워크 바이트 순서(big-endian)으로 변환하는 기능을 제공한다.

  20. 16.3 바이트 순서화 • 바이트-순서 변환에 대한 선언

  21. 16.3 바이트 순서화 • Htons 16bit의 정수를 호스트바이트 순서에서 네트워크 바이트 순서로 바꾼다. • Htonl 32bit의 정수를 호스트 바이트 순서에서 네트워크 바이트 순서로 바꾼다. • Htohs 16bit의 정수를 네트워크 바이트 순서에서 호스트바이트 순서로 바꾼다. • Htonl 32bit 의 정수를 전체 네트워크 바이트 순서에서 호스트 바이트 순서로 바꾼다.

  22. 16.4 ADDRESSTRANSFORMATION

  23. 16.4 주소 변환 • 네트워크 소프트웨어는 ASCII의 점으로 구분되는 10진수 형태의 IP 주소를 32비트의 2진 형태로 변환하거나 그 반대의 기능을 제공하는 함수를 제공

  24. 16.4 주소 변환 • 주소 변한 함수 선언 • Inet_aton 점에 의해 분리되는 4개의 세그먼트를 포함하는 ASCII 스트링을 네트워크 바이트 순서의 32비트 2진수 변환 • Inet_ntoa 네트워크 바이트 순서의 32비트의 2진수를 점으로 분리되는 4개의 세그먼트로 이루어진 ASCII 스트링을 변환

  25. 16.5 BYTEMANIPULATIONFUNCTIONS

  26. 16.5 바이트 조정 함수 • 바이트 조정 함수 선언 • 네트워크 프로그래밍에서는 한 필드를 초기화하거나 한 필드의 내용을 다른 필드로 복사, 두 필드 내용으 비교 기능 필요 • 네트워크 프로그래밍에서는 strcpy 나 strcmp와 같은 스트링함수를 사용할 수 없음(함수는 필드가 null 문자로 끝남)

  27. 16.5 바이트 조정 함수 • Memset 정의된 수만큼 바이트를 특정한 값으로 설정 • Example) memset(&x,0,sizeof(x)); x라는 필드에 0 저장 • 첫 번째 변수는 목적지 포인터, 두 번째 변수는 설정하고자 하는 값, 세 번째 변수는 바이트 수 • Memcpy 한 필드값을 다른 필드로 복사 • Example) memcpy(&x,&y,sizeof(x));y필드의 값을 x필드로 복사 • 첫 번째 변수는 목적지 포인터, 두 번째 변수는 발신지 포인터, 세 번째 변수는 복사하고자 하는 바이트 수 • Memcmp 두개의 필드를 비교 • Example) memcmp(&x,&y,10); x와 y 필드의 처음 10바이트를 비교 • 첫 번째 변수는 첫 번째 필드의 포인터, 두 번째 변수는 두 번째 필드의 포인터, 비교하고자 하는 바이트 수

  28. 16.6 INFORMATIONABOUT REMOTE HOST

  29. 16.6 원격 호스트에 대한 정보 • Gethostbyname 선언 • Gethostname() – DNS에 대한 Call • 호스트의 도메인 이름을 수신하고자 자원레코드 내용인 hostent라는 구조체 정보를 리턴한다.

  30. 16.6 원격 호스트에 대한 정보 • Hostent 구조

  31. 16.6 원격 호스트에 대한 정보 • 첫 번째 필드 : 호스트 이름 • 두 번째 필드 : 호스트의 별칭(alias)을 나타내는 각 포인터에 대한 열(array) 포인터 • 세 번째 필드 : 주소유형(AF_INET) • 네 번째 필드 : 주소의 길이 (IPv4는 4바이트) • 마지막 필드 : 각각의 포인터가 호스트 주소중의 하나를 가리키는 포인터 열(array)의 포인터(호스트가 여러 개의 주소를 가지고 있는 경우)

  32. 16.7 SOCKET SYSTEM CALLS

  33. 16.7 소켓 시스템 콜 • 소켓 함수 선언 • 프로세스가 소켓을 만들기 위해서 사용 • 계열(family), 유형, 프로토콜 필드

  34. 16.7 소켓 시스템 콜 • Bind 함수 선언 • 미리 개설된 소켓에 로컬 소켓 주소를 추가함으로써 로컬 소켓 주소와 소켓을 결합 • Sockfd 소켓 기술자, localaddr 로컬 컴퓨터의 소켓 주소에 대한 포인터, localaddrlen 지역소켓 주소의 길이

  35. 16.7 소켓 시스템 콜 • Connect 함수 선언 • 원격지 프로세스(일반적으로 서버)와 능동적으로 설정하고자 하는 프로세스(주로 클라이언트)에 의해 사용 • Sockfd socket 함수에 의해서 리턴되는 소켓 기술자, serveraddr 원격지 소켓 주소 포인터, serveraddrlen 그 주소의 길이

  36. 16.7 소켓 시스템 콜 • Listen 함수 선언 • TCP server에서만 불려진다. 비 연결 소케승로 부터 수동 소켓을 개설 • 운영체제에게 서버가 이 소켓을 통하여 수락할 준비가 되어있다는 것을 알림 • Sockfd는 socket 함수로부터 리턴되는 소켓 기술자, backlog는 이 연결을 위해서 저장될 수 있는 요구의 수 • 성공의 경우 0, 오류의 경우 1을 반환

  37. 16.7 소켓 시스템 콜 • accept 함수 선언 • 해당 큐로부터 첫 번째 연결 요구를 읽어들이기 위해서 TCP 서버에 의해 불려진다. • 큐가 비게 되면 휴면 상태로 들어간다. • Sockfd 소켓 기술자, clientaddr 연결을 요구한 클라이언트의 주소 포인터, clientaddrlen 클라이언트 주소 길이에 대한 포인터 • 새로운 소켓 개설, 자식 서버가 클라이언트에게 접속

  38. 16.7 소켓 시스템 콜 • Sendto 함수 선언 • UDP를 사용하는 프로세스가 원격지 시스템에서 시행되는 다른 프로세스에게 메시지 전송 • Sockfd 소켓 기술자, buf 전송메시지 버퍼 포인터, buflen 버퍼의 길이, flag out-of-band 또는 lookahead 메시지, toaddr 수신측 소켓 주소 포인터

  39. 16.7 소켓 시스템 콜 • Recvfrom 함수 선언 • 소켓에 도착하는 다음 메시지 추출, 송신측의 소켓 주소 추출 • 주로 UDP 프로세스에 의해 사용 • Sockfd 소켓 기술자, buf 전송 메시지 버퍼 포인터, lookahead 메시지, fromaddr 송신측 소켓 주소 포인터, fromaddrlen 소켓 주소 길이 포인터

  40. 16.7 소켓 시스템 콜 • Read 함수 선언 • 원격지 기기에서 실행되는 다른 프로세스로부터 데이터를 수신하기 위해서 하나의 프로세스에 의해서 사용 • 두 기기사이의 이미 연결이 개설되어야 함 • Sockfd 소켓 기술자, buf 데이터가 저장되는 버퍼 포인터, bufflen 버퍼의 길이

  41. 16.7 소켓 시스템 콜 • Write 함수 선언 • 원격지 기기에서 실행되는 다른 프로세스로부터 데이터를 전송 • 두 기기사이의 이미 연결이 개설되어야 함 • Sockfd 소켓 기술자, buf 전송할 데이터 보관 버퍼 포인터, buflen 버퍼의 길이

  42. 16.7 소켓 시스템 콜 • Close 함수 선언 • 소켓을 닫고 TCP 연결을 종료하기 위해 사용

  43. 16.8 CONNECTIONLESSITERATIVE SERVER

  44. 16.8 비연결 반복 서버 • 비연결 반복 서버에서의 소켓 인터페이스

  45. 16.8 비연결 반복 서버 • UDP를 이용하는 서버는 비연결 반복 방식으로 동작한다. • 데이터그램 요구를 처리하는 동안 서버는 다른 데이터 그램을 전혀 처리하지 않는다. • 한 클라이언트 또는 여러 클라이언트로부터 발생하여 도착하는 데이터 그램은 큐에 저장되며 순서대로 하나씩 처리된다. • 단일 포트인 잘 알려진 포트를 이용하며 도착하는 모든 데이터그램은 서비스를 받기 위해 일렬로 기다린다.

  46. 16.8 비연결 반복 서버 • 서버 • 소켓 개설 • Socket call 발생(family, 유형, 프로토콜 전달) • 운영체제는 소켓 기술자(socket descriptor) 리턴 • 바인딩 • 소켓 구조에 대한 정보를 입력하도록 bind 콜 발생 • 로컬 소켓 주소 구성 • 단계의 반복 • 수신(receiving) • 입력큐로부터 데이터 그램을 읽기위해 recvfrom 콜 발생 • 전송(sending) • 데이터그램처리후 출력큐로 결과를 포함하는 데이터그램을 전송하기 위하여 sendto 콜 발생

  47. 16.8 비연결 반복 서버 • 클라이언트 • 소켓 개설 • 소켓 개설을 위해 socket call 발생 • 운영체제는 소켓 기술자( socket descriptor) 리턴 • 단계의 반복 • 전송 • 서버로 자신의 요구를 전송하기 위해 sendto 콜 발생 • 수신 • 자신의 요구에 대한 응답을 얻기 위하여 recvfrom 콜 발생 • 종료 • close

  48. 16.9 UDP CLIENT-SERVER PROGRAMS

  49. 서버 프로그램 1-6 헤더파일 8 버퍼크기 17 소켓 개설 18 서버의 소켓 주소 초기화 19-21 서버 소켓주소 값 22 소켓 바인딩 24 버퍼 초기화 25 무한루프 시작 27 클라이언트 메시지 수신 30 데이터 처리 32클라이언트로 결과 전송 34 버퍼의 재초기화 16.9 UDP 클라이언트-서버 프로그램

  50. 클라이언트 프로그램 1-6 헤더파일 8 버퍼크기 18 소켓 개설 19 원격지 소켓주소 초기화 20-24 원격지 소켓주소를 위한 값을 설정 25 서버 연결 26 버퍼 초기화 30 버퍼내용을 서버 전송 33 서버로부터 응답수신 35 수신된 메시지 프린트 36 다음 반복을 위해 버퍼 재초기화 38 연결 종료 16.9 UDP 클라이언트-서버 프로그램

More Related