<연습문제>
1. 소켓에 이름을 부여하는 방법은 프로토콜 종류에 따라 다양하다. 프로그래밍 환경에서는 주로 두 개의 주소 체계가 사용된다. 즉, 호스트 내부에서 실행되는 프로세스 사이의 통신을 지원하는 AF_UNIX 와 서로 다른 호스트에서 실행되는 프로세스 사이의 통신을 지원하는 AF_INET가 있다.
2. 인터넷 주소 체계에서 사용되는 구체인 struct sockaddr_in 의 sin_family 필드에는 AF_INET이 지정되어야 한다. 또한 소켓의 주소 역할을 하는 호스트의 IP 주소와 포트 번호는 각각 sin_addr 필드와 sin_ port에 보관된다.
3. bind (sock, struct sockaddr &addr, sizeof(addr));
4. 소켓의 유형 중에서 SOCK_STREAM은 연결형 서비스를 제공하고, SOCK_DGRAM은 비연결형 서비스를 제공한다. 일반적인 응용 환경에서 자주 사용되지는 않지만 SOCK_RAW 유형은 IP 프로토콜을 직접 사용하는 경우를 위해 정의되었다.
5. 운영체제에서 구현되는 전송 계층 프로토콜 TCP와 UDP를 사용하려면 소켓 시스템 콜이라는 라이브러리 함수를 이용해여 한다. 일반적으로 소켓은 포트라는 용어로 호칭되며, 소켓 주소는 포트번호 라고도 부른다.
6. 소켓 함수를 이용하여 소캣을 생성할 수 있다. 첫 번째 줄의 인터넷 프로토콜인 TCP 소켓이 할당되고, 두 번째 줄의 경우는 UDP용 소켓이 할당된다.
sd = socket( AF_INET, SOCK_STREAM, 0);
sd = socket( AF_INET, SOCK_DGRAM, 0);
7. 소켓 관련 함수들 중에서 listen()는 소켓에서 대기할 수 있는 클라이언트 요청 개수를 지정하고, accept() 는 클라이언트의 연결 요청을 받아주는 역할을 한다. 이때, 클라이언트의 연결 요청은 connect() 함수에 의해 이루어진다.
8. 일반적으로 연결형 소켓을 이용하는 경우에 데이터 송신은 send() 함수에 의하여 이루어지고, 데이터 수신은 recv() 함수에 의하여 이루어진다. 비연결형 서비스의 경우는 secdto() 함수가 데이터를 송신하고, recvfrom() 함수가 데이터를 수신한다.
9. 인터넷을 활용하는 상용 프로그램이 여러 컴퓨터에서 실행되는 경우, 각 실행 파일에 개별 서버 호스트의 IP 주소를 지정하여 컴파일하기는 현실적으로 불가능하다. 이와 같은 상황을 고려해 INADDR_ANY 라는 호스트 주소 표기 방법을 제공한다. 이는 프로그램이 실행되는 로컬 호스트 자체를 의미하기 때문에 프로그램이 실행되는 호스트의 IP주소로 자동 대체된다.
10. 서버 - 클라이언트 모델에서 서버 프로세스는 다수의 클라이언트에 공개되는 Well-known포트 로 자신의 소켓 주소를 설정한 후에, 클라이언트의 연결 요청에 대기한다. Well-known포트 의 주소는 서버 호스트의 IP주소와 포트번호의 조합으로 구성되며, 인터넷 환경에서 임의의 호스트에서 실행되는 프로세스의 디스크립터 역할을 한다.
11. 소켓 주소 체계에 대한 설명으로 올바른 것을 모두 고르시오. 1, 2, 4, 5
- AF_UNIX로 표시되는 유닉스 주소 체계는 한 호스트 내부에서 실행되는 프로세스 사이의 통신을 지원한다.
- AF_INET으로 표시되는 인터넷 주소 체계는 서로 다른 호스트에서 실행되는 프로세스 사이의 통신을 지원한다.
- 인터넷 주소 체계를 지원하는 sockaddr_un 구조체는 32비트의 IP 주소와 16비트의 포트 번호를 저장할 수 있다. v
- 통합 주소 체계인 sockaddr 구조체는 단순히 프로그래밍 환경에서의 문법적인 측면을 고려하여 정의된 것이다.
- sockaddr 구조체의 sa_family 필드 값을 해석하면 어느 주소 체계를 사용하는지 판단할 수 있다.
12. 소켓 주소 체계를 지원하는 구조체에 대한 설명으로 올바른 것을 모두 고르시오. 1, 2, 3, 4, 5
- struct sockaddr_in 구조체는 인터넷 주소 체계를 지원한다.
- struct sockaddr_in 구조체의 sin_port 필드에는 포트 번호를 저장한다.
- struct sockaddr_in 구조체의 sin_addr필드에는 IP 주소를 저장한다.
- struct sockaddr_un 구조체는 유닉스 주소 체계를 지원한다.
- struct sockaddr 구조체는 공통 주소 체계를 지원한다.
13. 소켓 함수의 개요에 대한 설명으로 올바른 것을 모두 고르시오. 1, 2, 4
- socket() 함수는 매개변수로 지정된 유형에 따라 소켓을 생성한다. 프로세스는 이 소켓을 사용하여 다른 프로세스와 통신할 수 있다.
- bind() 함수는 소켓에 주소를 부여하는 기능을 수행한다.
- accept() 함수는 보통 서버 프로그램에서 실행되며, 클라이언트의 연결 요구가 들어올 때까지 대기한다. listen()함수에서 대기 중이던 서버는 클라이언트의 연결 요구가 들어오면 accept()함수가 이를 처리한다. v
- connect() 함수는 클라이언트가 서버와 연결을 시도할 때 실행된다.
- send()와 recv()는 데이터를 보내고 받는 기능을 수행하는데, 주로 비연결형 서비스에서 사용된다. v
14. 소켓 함수에 대한 상세 설명으로 잘못된 것을 모두 고르시오. 1, 5
- bind() 함수는 소켓에 주소를 부여하는 기능을 수행한다. 예를 들어서 AF_UNIX 도메인에서는 호스트의 IP 주소와 포트 번호 조합의 주소를 소켓에 부여한다. v
- INADDR_ANY 기능을 사용하면 임의의 임너텟 서버 프로그램이 여러 호스트에서 실행되는 경우에도, 서버마다 자신의 IP 주소를 지정하여 재컴파일하는 번거로움을 피할 수 있다.
- 호스트마다 정수형 데이터를 저장하는 기억 장소 공간의 바이트 순서가 다를 수 있다. 이 차이를 극복하기 위해 네트워크 바이트 순서라는 전송 문법 데이터 유형이 필요하다.
- accept() 함수에서 기다리던 서버는 클라이언트의 connect() 요구에 의하여 연결이 성공적으로 이루어지면 원래의 소켓과는 별도의 소켓이 새로 만들어진다. 보통 클라이언트와 통신 할 때는 새로 생성된 소켓을 이용한다.
- 일반 사용자를 위해 인터넷 주소 표기는 211.223.201.30 등과 같은 형식을 취한다. 그러나 컴퓨터 내부에서는 32비트 크기의 이진수를 사용하므로 변환 과정이 필요하다. htonl(), ntohl()등의 함수는 이러한 목적으로 사용한다. v
15. 소켓을 이용한 네트워크 프로그래밍에 대한 설명으로 올바른 것을 모두 고르시오. 1, 4, 5
- 소켓은 네트워크 통신을 위한 클라이언트와 서버 프로그램의 교신점이라 할 수 있다.
- 서버 프로세스는 소켓에 포트 번호를 부여하는데, 이 번호는 인터넷에서 유일하다. v
- 일반적으로 클라이언트와 서버의 동작 과정에서 클라이언트가 먼저 연결 요청을 하고, 그에 따라 서버가 대기 상태에 진입하여 연결이 설정된다. v
- 대부분의 인터넷 서비스는 임의의 클라이언트에 대한 서비스가 종료되어도 서버는 종료되지 않고 무한 반복하여 서비스를 진행한다.
- 일반적으로 데이터를 송수신하는 과정에서 연결형 서비스는 send(), recv() 함수를 사용하고, 비연결형 서비스는 sendto(), recvfrom() 함수를 사용한다.
16. TCP를 이용한 클라이언트와 서버의 통신 절차에 대한 설명으로 잘못된 것을 모두 고르시오. 2
- 클라이언트와 서버는 둘 다 가잗ㅇ 먼저 소켓을 생성해야 한다.
- 클라이언트는 생성된 소켓에 주소 부여 절차를 수행하지만, 서버는 이 절차를 생략할 수 있다.
- 둘을 연결하려면 서버의 accept() 함수와 클라이언트의 connect() 함수를 결합해야 한다.
- 클라이언트와 서버의 accept() 함수와 클라이언트의 connect() 함수를 결합해야 한다.
- 가장 마지막 절차는 소켓을 닫는 과정인데, 프로그래머가 생략해도 시스템에서 자동으로 실행해준다.
17. 소켓 주소 표기와 관련해서 공통의 통합 주소체계가 필요한 이유를 설명하시오.
-소켓 주소 체계는 사용하는 프로토콜의 종류에 따라 달라진다. 따라서 운영체 제에서 제공하는 통신 프로토콜의 수가 증가하면 이에 비례하여 주소 체계의 표현 방식도 증가한다. 소켓 주소의 사용은 동일한 소켓 시스템 콜을 통해 이루어 지는데 의미는 같으나 형식이 다른 여러 구조체를 하나의 함수에서 수용하는것은 문법적으로 불가능하다. 따라서 여러 소켓 구조체를 통합해 일반 구조체 하나로 정의할 필요가 있다.
18. 소켓 함수의 기능을 간단히 설명하시오.
• socket() : 매개변수로 지정한 유형에 따라 소켓을 생성한다. 시스템 콜이 성공적으로 실행되어 소켓이 만들어지면 해당 소켓의 디스크립터를 반환한다.
• bind() : socket() 함수로 생성한 소켓에 bind() 함수가 주소를 부여한다.
• listen() : 첫 번째 매개변수로 표시한 소켓을 활성 화하는 역할을 하며, 보통 서버 프로그 램에서 실행된다. 시스템에서 연결을 거부하지 않고 대기할 수 있는 연결 설정 요구의 최대 수를 지정하는데 사용한다.
• accept() : 보통 서버 프로그램에서 실행되며, 첫 번째 매개변수로 지정한 소켓으로 클라이언트의 연결 요구가 들어올 때까지 대기한다.
• connect() : 클라이언트 프로그램에서 사용하며, 두 번째 매개변수가 가리키는 서버와 연결 설정을 시도한다. 해당 주소의 서버가 존재하지 않으면 오류 처리되고, 서버가 연결 대기 중이면 연결이 설정된다.
• send() : 연결형 서비스를 제공하는 환경에서 데이터를 전송하는 역할을 수행한 다. 즉, 첫 번째 매개변수로 표시한 소켓을 통해 상대 방 프로세스에게 두 번째 매개변수에 보관된 데이터를 전송한다.
• recv() : 연결형 서비스에서 데이터를 수신하는 역할을 한다. 첫 번째 매개변수로 표시되는 소켓을 통해 데이터를 수신하고, 수신한 데이터를 두 번째 매개변수에 보관한다.
21. INADDR_ANY의 필요성을 설명하시오.
-개발된 프로그램이 여러 컴퓨터에서 실행되는 경우, 각 실행 파일에 개별 호스트의 IP 주소를 지정하여 컴파일하기는 현실적으로 불가능하다. 따라서 이와 같은 상황을 고려해 INADDR_ANY라는 호스트 주소 표기 방법을 제공한다. 이는 프로그램이 실행되는 로컬호스트 자체를 의미하기 때문에 프로그램이 실행되는 호스트의 IP 주소가 자동으로 대체된다. 결과적으로 동일한 프로그램을 여러 호스트에서 실행시키는 경우에도 호스트마다 주소 변경과 재컴파일 작업을 하지 않아도 된다.
22. IP주소와 포트번호의 바이트 순서 문제를 위해 사용하는 주소 변환 함수를 설명하시오.
-컴퓨터마다 정수형 데이터를 저장하는 기억 장소 공간의 바이트 순서가 다를 수 있다. 이 차이를 극복하기 위해 네트워크 바이트 순서라는 전송 문법 데이터 유형이 필요하다. 데이터를 전송하기 전에 개별 컴퓨터의 바이트 순서를 네트워크 바이트 순서로 변환해야 하는데, htonl()과 htons() 함수가 이를 담당한다.
데이터를 수신할 때는 반대로 네트워크 바이트 순서를 개별 컴퓨터의 바이트 순서로 변환해야 하며, ntohl()과 ntohs()함수가 담당한다.
'Network > 쉽게 배우는 데이터 통신과 컴퓨터 네트워크(개정판)' 카테고리의 다른 글
쉽게 배우는 데이터 통신과 컴퓨터 네트워크(개정판) 13장 연습문제 (1) | 2022.12.14 |
---|---|
쉽게 배우는 데이터 통신과 컴퓨터 네트워크(개정판) 11장 연습문제 (2) | 2022.12.08 |
쉽게 배우는 데이터 통신과 컴퓨터 네트워크(개정판) 10장 연습문제 (3) | 2022.12.07 |
쉽게 배우는 데이터 통신과 컴퓨터 네트워크(개정판) 9장 연습문제 (2) | 2022.12.05 |
쉽게 배우는 데이터 통신과 컴퓨터 네트워크(개정판) 8장 연습문제 (0) | 2022.12.05 |