01. TCP 소켓의 연결설정 과정인 Three-way handshaking에 대해서 설명해 보자. 특히 총 3회의 데이터 송수신이 이뤄지는데, 각각의 데이터 송수신 과정에서 주고 받는 데이터에 포함된 내용이 무엇인지 설명해보자.
TCP의 내부 동작 원리 1: 상대 소켓과의 연결
TCP 소켓은 연결설정 과정에서 총 세 번의 대화를 주고 받는데, 이를 가리켜 Three-way handshaking 이라 한다. [Three-way handshaking과정]
[SYN] SEQ : 8000, ACK : -
처음 연결요청에 사용되는 메시지 이기에 이 메시지를 가리켜 ‘SYN’이라 한다.
데이터 송수신에 앞서 전송되는 ‘동기화 메시지’
[SYN + ACK] SEQ : 15000, ACK : 8001
처음 client가 전송한 패킷에 대한 응답 메시지(ACK 8001)과 함께 호스트 B의 데이터 전송을 위한 동기화 메시지(SEQ 15000)을 함께 묶어서 보낸다. 이런 유형의 메시지를 SYN+ACK라 한다.
[ACK] SEQ : 8000 ACK : 15001
15001 패킷을 전송하길 요청.
02. TCP는 데이터의 전송을 보장하는 프로토콜이다. 그러나 인터넷을 통해서 전송되는 데이터는 소멸될 수 있다. 그렇다면 TCP는 어떠한 원리로 중간에 소멸되는 데이터의 전송까지 보장을 하는 것인지 ACK와 SEQ를 대상으로 설명해 보자.
ACK 번호 -> SEQ 번호 A+ 전송된 바이트 크기 + 1
! 중간에 패킷이 소멸되는 경우
= > 데이터 손실에 대한 재전송을 위해서, TCP 소켓은 ACK 응답을 요구하는 패킷 전송 시에 타이머를 동작시킨다. 그리하여 해당 타이머가 Time-Out 되었을 때 패킷을 재전송한다.
03. TCP 소켓을 기반으로 write함수와 read 함수가 호출되었을 때의 데이터 이동을 입력버퍼와 출력버퍼의 상태와 더불어 설명해 보자.
TCP 소켓에 존재하는 입출력 버퍼
TCP 소켓의 데이터 송수신에는 경계가 없다. 즉, 서버가 한번의 write 함수 호출을 통해서 40바이트를 전송해도 클라이언트는 네 번의 read 함수 호출을 통해서 10바이트씩 데이터를 수신하는 것이 가능하다. 이러한 것이 가능하게 해 주는 것이 바로 ‘버퍼’이다.
write 함수가 호출되는 순간 데이터는 출력버퍼로 이동을 하고, read 함수가 호출되는 순간 입력버퍼에 저장된 데이터를 읽어 들이게 된다.
※입출력 버퍼의 특성