'TCP/IP 소켓Prog/tcp/ip 연습문제'에 해당되는 글 12건

  1. 2011.07.21 [TCP/IP] 3장.
  2. 2011.07.21 [TCP/IP] 2장. 소켓의 타입과 프로토콜 설정
2011. 7. 21. 17:05
01. IP주소 체계인 IPv4와 IPv6의 차이점은 무엇인가? 그리고 IPv6의 등장 배경은 어떻게 되는가?
IPv4(Internet Protocol version 4) 4바이트 주소체계
IPv6(Internet Protocol version 6) 16바이트 주소체계

IPv6는 2010년을 전후로 IP주소가 모두 고갈될 것으로 염려하여 만들어진 표준

02. 회사의 로컬 네트워크에 연결되어 있는 개인 컴퓨터에 데이터가 전송되는 과정을, IPv4의 네트워크 ID와 호스트 ID, 그리고 라우터의 관계를 기준으로 설명하여라.
네트워크 주소(네트워크 ID)만을 참조하여 라우터로 전송. 해당 네트워크(네트워크를 구성하는 라우터는)는 전송된 데이터의 호스트 주소(호스트ID)를 참조하여 개인 컴퓨터로ㅗ 데이터를 전송해 준다.



03. 소켓의 주소는 IP와 PORT 번호 두 가지로 구성된다. 그렇다면 IP가 필요한 이유는 무엇이고, PORT번호가 필요한 이유는 또  무엇인가? 다시 말해서, IP를 통해서 구분되는 대상은 무엇익고, PORT번호를 통해서 구분되는 대상은 또 무엇인가?
IP - 개인 컴퓨터에는 NIC(네트워크 인터페이스 카드)이라 불리는 데이터 송수신 장치가 하나씩 달려있는데, IP는 데이터를 NIC를 통해 컴퓨터 내부로 전송하는데 사용된다.
PORT번호 - 소켓의 구분에 활용됨


04.  IP주소의 클래스를 결정하는 방법을 설명하고, 이 근거로 다음 IP주소들이 속하는 클래스를 판단해 보자.
클래스 A의 첫 번째 바이트 범위     0 이상 127 이하
클래스 B의 첫 번째 바이트 범위  128 이상 191 이하
클래스 C의 첫 번째 바이트 범위  192 이상 223 이하

211.121.212.102 ( 클래스 C )
120.101.122.89  ( 클래스 A )
129.78.102.211  ( 클래스 B )



05. 컴퓨터는 라우터 또는 스위치라 불리는 물리적인 장치를 통해서 인터넷과 연결되다. 그렇다면 라우터  또는 스위치의 역할이 무엇인지 설명해 보자.
네트워크를 구성하려면 외부로부터 수신된 데이터를 호스트에 전달하고, 호스트가 전달하는 데이터를 외부로 송수신 해주는 물리적 장치가 필요한데, 이를 가리켜 라우터 또는 스위치라 한다.(라우터보다 기능적으로 작은 것을 가리켜 스위치라 부르는데, 사실상 이 둘은 같은 의미로 사용이 된다.)

06. '잘 알려진 PORT(Well-kown PORT)'는 무엇이며, 그 값의 범위는 어떻게 되는가? 그리고 잘 알려진 PORT중에서 대표적인 HTTP와 FTP의 PORT번호가 어떻게 되는지 조사해 보자.
0~ 1023 까지 Well-known PORT라 한다.
HTTP : 80
20, 21(FTP data, control) 
23(Telnet)


07. 소켓에 주소를 할당하는 bind 함수의 프로토타입은 다음과 같다.
  int bind(int sockfd, struct sockaddr * my addr, socklen_t addrlen);
 
 그런데 호출은 다음의 형태로 이뤄진다. 
 bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr);

 여기서 serv_addr은 구조체 sockaddr_in 변수이다. 그렇다면 bind함수의 프로토타입과 달리 구조체 sockaddr_in의 변수를 사용하는 이유는 무엇인지 간단히 설명해 보자.



08. 빅 엔디안과 리틀 엔디안에 대해서 설명하고, 네트워크 바이트 순서가 무엇인지 그리고 이것이 필요한 이유는 무엇인지 설명해 보자. 

09. 빅 엔디안을 사용하는 컴퓨터에서 4바이트 정수 12를 리틀 엔디안을 사용하는 컴퓨터에게 전송하려 한다. 이때 데이터의 전송과정에서 발생하는 엔디안의 변환과정을 설명해 보자.


10. '루프백 주소(loopback address)'는 어떻게 표현되며, 의미하는 바가 무엇인가? 그리고 루프백 주소를 대상으로 데이터를 전송하면 어떠한 일이 벌어지는가? 
 
 
Posted by Triany
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