2011. 7. 21. 17:05
01. 프로토콜이란 무엇을 의미하는가? 그리고 데이터 송수신에 있어서 프로토콜을 상의한다는 것은 어떠한 의미가 있는가?
:컴퓨터 상호간의 대화에 필요한 통신규약. 즉 약속


02. 연결지향형 소켓인 TCP 소켓의 전송 특성 세가지를 나열하여라
-중간에 데이터가 소멸되지 않고 목적지로 전송
-전송 순서대로 데이터가 수신
-전송되는 데이터의 경계(Boundary)가 존재하지 않는다.
  => "데이터를 전송하는 컴퓨터가 세 번의 write 함수호출을 통해서 총 100바이트를 전송하였다. 그런데 데이터를 수신하는 컴퓨터는 한 번의 read 함수호출을 통해서 100바이트를 전부 수신하였다.
"신뢰성 있는 순차적인 바이트 기반의 연결지향 데이터 전송 방식의 소켓"
int tcp_socket=socket(PF_INET, SOCk_STREAM, IPPROTO_TCP);


03. 비연결지향형 소켓의 특성 서술.
- 전송된 순서에 상관없이 가장 빠른 전송을 지향
- 전송된 데이터는 손실의 우려가 있고, 파손의 우려가 있다.
- 전송되는 데이터의 경계(Boundary)가 존재한다.
- 한번에 전송할 수 있는 데이터의 크기가 제한된다.
"신뢰성과 순차적 데이터 전송을 보장하지 않는, 고속의 데이터 전송을 목적으로 하는 소켓"
int udp_socket=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);


04. 다음 유형의 데이터 송수신에 가장 적합한 타입의 소켓이 무엇인지 결정, 그렇게 결정을 하게 된 이유를 설명
 a. 서태지와 아이들의 실시간 라이브 방송 멀티미디어 데이터(UDP소켓) _ 약간의 데이터 손상보다 빠른 속도를 우선시 하므로
 b. 철수가 압축한 텍스트 파일의 전송 ( TCP소켓 ) - 압축파일은 조금이라도 데이터 손상시 압축해제시 에러 발생
 c. 인터넷 뱅킹을 이용하는 고객과 은행 사이에서의 데이터 송수신 ( TCP소켓 ) 데이터가 손실되면 안됨

05. 데이터의 경계(Boundary)가 존재하지 않는 소켓은 어떠한 타입의 소켓인가? 그리고 이러한 소켓은 데이터를 수신할 때 무엇을 주의해야 하는지 서술해보자.
TCP소켓 _ read함수와 write함수 호출 횟수에 큰 의미 없음 _ 단 read 함수 호출로 읽혀지는 데이터의 양보다 많은 데이터가 수신되면 버퍼가 꽉 찰 수 있다.


06. 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'이라 하는데, 이를 적절히 활용하면 우리에게 필요한 만큼 함수의 호출시기를 늦출 수 있다.

Posted by Triany