본문 바로가기
IT/데이터베이스_네트워크

윤성우의 열혈 tcp/ip 소켓 프로그래밍 5장 연습문제 솔루션

by nutrient 2021. 5. 23.
728x90
728x170

 

답안 1.
Three-way handshaking은 다음의 형태로 진행된다.



먼저 호스트 A가 호스트 B에게 전달하는 메시지를 가리켜 SYN이라 한다. 이렇듯 호스트 A가 호스트 B에게 전송하는 데이터의 동기화를 위해서 처음 보내는 '동기화 메시지'를 가리켜 SYN이라 한다. 이어서 호스트 B가 호스트 A에게 전달하는 메시지를 가리켜 SYN+ACK라 한다. 이는 처음 보내는 동기화 메시지와 앞서 수신한 메시지에 대한 응답의 내용까지 포함되어 있기 때문이다. 그리고 마지막으로 호스트 A가 호스트 B에게 전달하는 메시지에는 동기화 정보가 포함되어 있기 때문에 ACK라 한다.


답안 2.
SEQ는 메시지에 번호를 부여하는데 사용된다. 반면 ACK는 번호가 부여된 메시지의 응답에 사용된다. 즉, 메시지를 보낼 때마다 SEQ 정보를 함께 보내는데, 이를 수신한 호스트는 이를 전송한 호스트에게 SEQ 정보를 바탕으로 ACK 메시지를 보내야 한다. 이러한 기본적인 형태로 데이터의 송수신을 확인하기 때문에 데이터를 전송한 호스트는 데이터의 전송여부를 확인할 수 있다. 따라서 데이터의 전송이 실패하는 경우에는 재전송을 진행할 수 있다. 


답안 3.
write 함수가 호출되는 순간 데이터는 소켓의 출력버퍼로 이동이 된다. 그리고 이렇게 이동이 된 데이터는 TCP 프로토콜을 기반으로 상대방 호스트 소켓의 입력버퍼로 전송이 되며, 이렇게 해서 입력버퍼에 저장된 데이터는 read 함수의 호출을 통해서 읽혀지게 된다. 


답안 4.
수신할 상대 호스트의 입력버퍼에 저장 가능한 데이터 크기는 데이터를 전송하는 호스트에게 전달된다. 따라서 여유공간이 50byte인 상황에서는 70byte의 데이터 전송이 요청되더라도, 50byte 이상 전송이 이뤄지지 않는다. 나머지는 전송 측의 출력버퍼에 저장된 상태에서 상대 호스트의 입력버퍼에 여유가 생기기를 기다리게 된다. 그리고 이렇게 버퍼의 여유공간 정보를 교환하는 프로토콜을 가리켜 슬라이딩 윈도우라 하며, 이 역시 TCP의 일부분으로 존재하는 프로토콜이다.

728x90
그리드형

댓글