방프리

20.02.16 TCP/IP 연습문제 Chapter 02 본문

Server&Network/TCP&IP

20.02.16 TCP/IP 연습문제 Chapter 02

방프리 2020. 2. 16. 15:44

1. 프로토콜이란 무엇을 의미하는가? 그리고 데이터의 송수신에 있어서 프로토콜을 정의한다는 것은 어떠한 의미가 있는가?

  • 데이터를 주고 받기 위해 정의한 약속, 규칙을 가지고 있다는 것은 새로운 시스템끼리 연결할 때에도 서로 호환이 되며 데이터가 손상되거나 파손되지 않고 안전하게 주고 받을 수 있는 환경을 조성한다.

 

2. 연결지향형 소켓인 TCP 소켓의 전송 특성 세가지를 나열하여라.

  • 중간에 데이터가 소멸되지 않고 목적지로 전송
  • 전송 순서대로 데이터가 수신
  • 전송되는 데이터의 경계가 존재하지 않음

 

3. 디음 중 비 연결지향형 소켓의 특성에 해당하는 것을 모두 고르면?

  • a, c, e

4. 다음 유형의 데이터 송수신에 적합한 타입의 소켓은 무엇인지 결정하고, 그러한 결정을 하게 된 이유를 설명해보자.

  • a/UDP/라이브 방송은 데이터를 최대한 빠르게 처리하는 것이 목표
  • b/TCP/파일은 데이터가 없어지면 파손되기 때문에 정확한 데이터 연결이 중요
  • c/TCP/데이터가 누락되면 인증의 절차에서 문제가 생길 수 있다.

5. 데이터의 경계(Boundary)가 존재하지 않는 소켓은 어떠한 타입의 소켓인가? 그리고 이러한 소켓은 데이터를 수신할 때 무엇을 주의해야 하는지 서술해보자.

  • read와 write 함수 호출의 횟수가 큰 의미를 가지지 못한다. 즉, 어떠한 타이밍에 데이터를 읽거나 호출할 지 모른다는 뜻

6. tcp_server.c와 tcp_client.c에서는 서버가 한번의 write 함수호출을 통해서 전송한 문자열을 여러 차례의 read 함수호출을 통해서 읽어 들였다. 그럼 이번에는 서버가 여러 차례의 write 함수호출을 통해서(횟수는 여러분이 결정!) 전송한 문자열을 클라이언트에서 한번의 read 함수호출을 통해서 읽어 들이는 형태로 예제를 변경해 보자. 단, 이를 위해서 클라이언트는 read 함수의 호출 시기를 다소 늦출 필요가 있다. 서버가 데이터를 모두 전송할 때까지 기다려야 하기 때문이다. 그럼 이를 위해서 리눅스와 윈도우 양쪽 모두에서 다음 유형의 문장을 이용해서 read 또는 recv 함수의 호출시기를 늦추기로 하자.

for (i =0; i<3000;i++)

      printf("Wait time %d \n", i);

이렇게 CPU에게 불필요한 일을 시켜가면서 실행의 흐름을 지연시키는 것을 가리켜 'Busy Waiting'이라 하는데, 이를 적절히 활용하면 우리에게 필요한 만큼 함수의 호출시기를 늦출 수 있다.

Comments