패킷이 전달될 때 버퍼가 사용이 된다는 것은 다들 알고 있을 것이다. 하지만 데이터 순서가 어떻게 되는지 어떤 방식으로 전송이 되는지에 대해서는 잘 모를 수도 있다. TCP와 같이 데이터 전송에 대해 보장하는 프로토콜 같은 경우는 슬라이딩 윈도우 라는 방식을 사용한다. 그럼 이게 무엇인지 부터 알아보자. 아래는 위키 백과에서 긁어온 내용이다.

슬라이딩 윈도

위키백과 ― 우리 모두의 백과사전.

슬라이딩 윈도(Sliding window)는 두 개의 네트워크 호스트간의 패킷의 흐름을 제어하기 위한 방법이다.

TCP와 같이 데이터의 전달을 보증하는 프로토콜에서는 패킷 하나하나가 전달되었음을 확인 신호(acknowledgement, 이하 ACK)를 받아야하며, 만약 패킷이 중도에 잘못되었거나 분실되어 확인받지 못하는 경우, 해당 패킷을 재전송해야하는 필요가 있다. 슬라이딩 윈도는 일단 '윈도(메모리 버퍼의 일정 영역)'에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도를 옆으로 옮김(slide)으로서 그 다음 패킷들을 전송하는 방식이다.

슬라이딩 윈도는 아직 확인을 받지 않고도 여러 패킷을 보내는 것을 가능케 하기 때문에, 매번 전송한 패킷에 대해 확인을 받아야만 그 다음 패킷을 전송하는 방법(stop-and-wait)을 사용하는 것보다 훨씬 네트워크를 효율적으로 사용할 수 있다.

http://ko.wikipedia.org/wiki/슬라이딩_윈도


쉽게 풀어 써보겠다. 우리가 100바이트의 데이터를 전송한다고 가정해 보자. send함수를 호출하면 전송될 데이터가 전송이 되는 것이 아니라 전송측 버퍼에 저장되게 된다. 그리고 수신측 연락을 기다린다. 왜냐면 수신측 버퍼가 비어있어야 데이터를 전송하면 받을 수 있기 때문이다. 수신측에서 버퍼가 30바이트 비었다고 보내라고 하면 송신측에서 30바이트를 전송한다. 또 수신측에서 50바이트를 받을 수 있다고 하면 송신측에서는 50바이트를 보낸다. 이런 식으로 데이터가 전송이 되게 된다. 


이때 송,수신측 버퍼는 모두 커널에 의해 생성된다.

'Programming > 이것저것' 카테고리의 다른 글

사용자 정의 exception (1)  (0) 2010.03.21
Handshking  (0) 2010.03.19
CISC & RISC  (0) 2010.03.18
CISC, RISC, CRISC(EPIC)  (0) 2010.03.18
펜티엄부터 린필드 i5까지, 인텔 어떻게 걸어왔나  (0) 2010.03.18

+ Recent posts