방프리

20.02.25 TCP/IP 연습문제 Chapter 05 본문

Server&Network/TCP&IP

20.02.25 TCP/IP 연습문제 Chapter 05

방프리 2020. 2. 25. 11:48

01. TCP 소켓의 연결설정 과정인 Three-way handshaking에 대해서 설명해 보자. 특히 총 3회의 데이터 송수신이 이뤄지는데, 각각의 데이터 송수신 과정에서 주고 받는 데이터에 포함된 내용이 무엇인지 설명해보자.

  • 소켓과의 연결, 데이터 송수신 그리고 연결종료의 과정을 Three-way handshaking이라 하며, 통신이 이뤄지는 과정에서 SYN과 ACK라는 데이터를 포함한다. 

 

02. TCP는 데이터의 전송을 보장하는 프로토콜이다. 그러나 인터넷을 통해서 전송되는 데이터는 소멸될 수 있다. 그렇다면 TCP는 어떠한 원리로 중간에 소멸되는 데이터의 전송까지 보장을 하는 것인지 ACK와 SEQ를 대상으로 설명해보자.

  • TCP는 SEQ의 데이터를 통해 패킷이 제대로 송수신되었는지 확인한다. 만약 전송 중 문제가 발생할 수도 있기 때문에 TCP는 ACK 응답을 요구하는 패킷 전송 시에 타이머를 동작시키고 Time-out이 되기 전 응답 패킷을 받지 못한다면 다시 재전송 한다.

 

03. TCP 소켓을 기반으로 write 함수와 read 함수가 호출되었을 때의 데이터 이동을 입력버퍼와 출력버퍼의 상태와 더불어서 설명해보자.

  • write 함수가 호출되는 순간 데이터는 출력버퍼로 이동을 하고, read함수가 호출되는 순간 입력버퍼에 저장된 데이터를 읽어 들이게 된다. 즉, 입출력 버퍼는 소켓을 생성시 자동으로 생성되고 데이터는 각각의 입출력버퍼에 들어가며 write, read 함수를 통해 데이터 송수신이 아닌 버퍼에 있는 데이터를 읽는 것 뿐이다.

 

04. 데이터를 수신할 상대 호스트의 입력버퍼에 남아있는 여유공간이 50byte인 상황에서 write 함수호출을 통해서 70byte의 데이터 전송을 요청했을 때, TCP는 어떻게 이를 처리하는지 설명해보자.

  • TCP에는 슬라이딩 윈도우라는 프로토콜이 존재하여 버퍼크기를 넘어선 데이터는 이후 다시 받기 때문에 소멸되지 않는다.

 

05. Chapter02에서 보인 예제 tcp_server.c(Chapter 01의 hello_server.c)와 tcp_client.c에서는 서버가 전송하는 문자열을 클라이언트가 수신하고 끝낸다. 그런데 이번에는 서버와 클라이언트가 한번씩 문자열을 주고 받는 형태로 예제를 변경해보자. 단! 데이터의 송수신이 TCP 기반으로 진행된다는 사실을 고려하여 문자열 전송에 앞서 문자열의 길이 정보를 4바이트 정수의 형태로 먼저 전송하기로 하자. 즉, 연결이 된 상태에서 서버와 클라이언트는 다음의 유형으로 데이터를 송수신해야 한다.

0 0 0 6 H e l l o ?

문자열 길이, 문자열 데이터

그리고 문자열의 전송 순서는 상관이 없으며 문자열의 종류도 여러분이 임의로 결정해도 된다. 단, 총 3회 문자열을 주고받아야 한다.

윈도우 서버

윈도우 클라이언트

 

06. 파일을 송수신하기 위한 클라이언트와 서버를 구현하되, 다음 순서의 시나리오를 기준으로 구현해보자.

  • 클라이언트는 프로그램 사용자로부터 전송 받을 파일의 이름을 입력 받는다.
  • 클라이언트는 해당 이름의 파일전송을 서버에게 요청한다.
  • 파일이 존재할 경우 서버는 파일을 전송하고, 파일이 존재하지 않을 경우 그냥 연결을 종료한다.
Comments