데이터 입출력의 이론적인 내용 ---------------------------------------------------------------------------------------------------------------------------




호스트와 호스트간의 연결에서 입출력의 시점은 언제일까?

read()읽는 함수와 write()는 양쪽에서 서로 데이터를 전달받는 함수다. 그렇다면 데이터 전송은 과연 어느때 일어날까?

위의 그림을 보면서 아래의 내용을 비교해보면 좀더 이해가 편할 것이다.


1. A가 Write()함수를 호출

2. A의 출력 버퍼에 Write()에 인자로 들어간 데이터가 저장된다.

3. A의 출력 버퍼는 대기하고 있는데.

4. B가 Read()함수를 호출한다. -> 동시에 A의 출력버퍼에 나 읽을 준비가 있어! 라고 신호를 보낸다.

5. A의 출력 버퍼가 신호를 받고 데이터를 전송한다.

6. B의 입력버퍼가 그 데이터를 받아들인다.

7. 입출력 반복.


의 과정을 거친다.


Write의 함수가 반환되는 시점 ----------------------------------------------------------------------------------------

위에서 설명했던 것을 기억한다면 데이터 전송 함수가 반환하는 시점은 전송이 완료된 시점이다. 그렇다면 전송이 완료된 시점이란 어느때 일까?

일반적으로 출력버퍼에 데이터가 모두 올라가게 되면 전송이 완료된 시점이라고 생각할수 있겠지만(UDP같은 경우) TCP의 기본 개념은 A와 B가 지속적인 연결상태에 있는 것을 의미한다. 즉 지속적으로 연결된 상태에서 전송이완료된 시점이란 출력버퍼에 있는 데이터가 모두 전송된 상태 즉 출력 버퍼가 완전히 비어있는 상태를 의미한다고 보면 된다.


입출력 버퍼 ------------------------------------------------------------------------------------------------------

입출력 버퍼는 다음과 같이 생성된다.

1. 입출력 버퍼는 TCP 소켓 각각에 대해 별도로 존재한다.
2. 입출력 버퍼는 소켓생성시 자동으로 생성된다.
3. 소켓을 닫아도 출력버퍼에 남아있는 데이터는 계속해서 전송이 이루어진다.
4. 소켓을 닫으면 입력버퍼에 남아있는 데이터는 소멸되어 버린다.


TCP의 내부 동작 원리 ----------------------------------------------------------------------------------------------

TCP의 생성부터 소멸까지의 과정은 다음을 거친다.

1. 상대 소켓과의 연결

2. 상대 소켓과의 데이터 송수신.

3. 상대 소켓과의 연결종료.

위의 세가지 과정에서 TCP 프로토콜에서는 모두 신호를 보내준다.

TCP 프로토콜은 서로간의 데이터에 대한 신호를 보냄으로 해서 신뢰성을 획득한다고 설명했다. 즉 신호가 잘 갔는지 아니면 못갔는지 내가 접속 요청을 했는데 받아줬는지 들어가도 되는지. 내가 종료할건데 괜찮은지. 

등등을 모두 신호로서 서로간에 전송하고 확인해야만 그 과정들이 이루어 지게 된다. 


Three way handshaking -------------------------------------------------------------------------------------------

위에서 말했던 과정들을 다음과 같이 표현된다. TCP기반의 송수신에서는 송수신 전에 서로 신호를 보내는 과정이 있다.

쓰리 웨이 핸드쉐이킹이라는 과정이며 요약해서 설명하자면 다음과 같다.


Sender 내가 신호를 보내는데 이름이 1200신호고 접속을 요청한다. 승인된다면 1201신호를 보내달라.

Receiver 알았다 잘 받았다 여기 이름이 4800인 신호로 접속승인신호 1201을 보낸다 다음에는 4801로 신호를 보내라.

Sender 오케이 아까 내가 1200으로 신호 보냈으니 이번에는 1201로 신호 보낸다. 아까 요청했던 4801신호를 보낸다. 다음에는 1202로 보내라 알겠지?

같은 과정에 의해서 데이터가 입출력 된다.


TCP의 신호의 종류 ----------------------------------------------------------------------------------------------


위와 같은 신호를 통해서 TCP는 주기적으로 연락을 하고 만약 신호를 수신했다는 신호가 오지 않으면 지속적으로 같은 신호를 보내서 상대가 받았는지 받지 않았는지 확인합니다.

Posted by JJOREG