태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
 

 
블로그 이미지
[www.netrain.co.kr]에서 네트워크/보안을 공부하시는 분들을 위해 서비스를 제공하는 블로그입니다 승진아빠
Follow silpir  on Twitter


[Sliding Window] 개념 이해하기

네트워크 기초 | 2010.04.26 14:49 | Posted by 승진아빠

안녕하세요. 이경태입니다.
지난주는 정말 강행군을 했습니다. 체력의 한계를 느낄 수 있었지요. 군대에서 행군하는 심정으로 매일 살고 있는데, 지난주는 유격을 받은 주라고 할까요?

○ 강의 : 월~금 (11시간), 토(14시간), 일(8시간)
○ 컨설팅 : 최종결과보고서 초안작성 (일일 4~5시간)
○ 출퇴근 등 이동시간 : 3시간
○ 식사/세면 등 : 1시간

밥먹는 시간도 아까워 사발면에 김밥한줄로 해결했는데... 그래도, 아직 할 일이 많이 남았네요. ^^
그래도, 금주부터는 메일링 쓸 2-3시간은 여유가 있는거 같네요. 여러분과 자주 뵐 수 있을 것 같습니다.

자~ 오늘도 주저리주러리 떠들며 좀 늦었지만, 월요일 메일링을 시작합니다.
Sliding Window... 오늘 이놈을 설명해 보려 합니다.

우리가 독거노인 분들의 복지를 위해 연탄을 나르러 갔다고 생각해 보시죠. 사람들이 하나씩 하나씩 들고 나르면 너무 시간이 오래 걸리기 때문에 보통 일정한 간격으로 줄을 서서 연탄을 포워딩합니다. 그런데, 쉬지 않고 계속한다고 일을 한다면 얼마가지 않아 모두 쓰러지고 말겁니다. 그래서, 팀장이 '200장씩 나르고 잠시 쉬자!' 라고 제안을 합니다.

그럼, 처음 연탄을 던지는 사람은 200장을 한번에 던지고, 잠시 쉬겠죠. 그리고, 팀장이 '자, 다시 시작!'이라고 하면, 200장을 다시 던지게 될겁니다. 그런데, 중간에 사람들이 지쳐서 자꾸 연탄을 놓쳐 연탄이 깨지는 겁니다. 그런 상태에서 계속 200장을 한꺼번에 던지는 방식을 유지한다면 안되겠죠? 그래서, 팀장이 다시 제안을 합니다. '이제 100장씩 옮기고 쉬자!'라구요. 그럼, 100장을 던지고 팀장이 계속하자고 할 때까지 기다리겠네요.

체력이 회복되면 150장으로 조금 늘려서 던져보고, 다시 체력이 떨어지면 조금 줄여서 던져보고 하면서 양을 조절하겠죠! 자, 상식으로 생각해 보죠! 100장을 던지고 쉬는 것 보다는 200장을 던지고 쉬는게 쉬는 횟수가 적기 때문에 전송 속도가 빨라지겠죠. 하지만, 200장을 한번에 던져서 문제가 발생한다면 적게 던지는 것보다 비효율적일겁니다.

패킷도 마찬가지입니다. 중간에 Traffic이 몰리는 구간이 있어서 데이터가 계속 Drop된다면 천천히 보내서 Drop이 발생하지 않도록 만드는 것이 훨씬 낫겠죠. 한번에 연탄을 날을 수 있는 양을 우리는 Window라고 부르고, 그것을 늘렸다 줄였다 하는 것을 Sliding Window라고 합니다. 그리고, 이 Sliding Window는 전송속도를 제어할 수 있겠군요. 그것을 멋지게 'Flow-Control'이라고 부르는 것이랍니다.

초창기에는 Flow-Contro을 위해 데이터를 1개 보내고 Ack가 오면 다음 데이터를 보내는 방식을 사용했습니다. Data-Link의 Flow-Control 방식으로 'Stop & Wait'라고 불리는 방식이죠. 그런데, 속도가 너무 느려서 여러개를 한꺼번에 보내는 방식을 만들어 냅니다. 즉, Window를 이용하게 된거죠.

상대방의 Window 양만큼 한꺼번에 전송시키니 속도는 향상되었으나, 초창기 Window는 size가 고정식(Fixeed)이였고, 다량의 데이터를 한번에 전송시킬 뿐이였지, 역시 데이터 한개마다 Ack를 보내는 방식을 벗어나지 못했습니다. 

그러다 '뭐하러 데이터를 받을 때마다 Ack를 던지나... 그냥 Window size만큼 다 받으면 다 받았다고 Ack를 보내고, 데이터를 못받으면 해당 데이터를 다시 보내달라고 Ack를 전송하면 좋지 않을까?' 라는 생각을 하게 되고, 그래서, Sliding Window가 나오게 됩니다. 초창기 Sliding Window도 역시 고정된 Size라는 한계를 가지고 있었습니다. 윈도우OS는 8K를 유지했었죠!

그러다가, Window size를 가변적으로 하면 속도를 제어하기 편하겠군! 항상 똑똑한 놈들이 세상을 변화시키죠. 우리는 그 놈들 때문에 공부하느라 머리 아픈거구요. 그래서, 오늘날의 Flow-control을 하는 Silding window가 나오게 되었고 지금도 계속 연구/발전중이죠......


■ 간만에 여유가 생겨 쓰는 [경태 생각]!!

똑똑한 놈들은 세상을 편하게만 만드려고 노력합니다. 자신의 노력들이 얼마나 많은 사람들에게 피해를 주는지 관심이 없습니다.

세상에 이해가 가지 않는 것들이 몇가지 있죠!

1. 돈 : 종이에 숫자 써 놓고 그것을 서로 가지겠다고 피터지게 싸우죠. 생각해보면 좀 웃기지 않습니까? ^^ 똑같이 그리면 위조래요. 왜요?

2. 부동산 : 처음에 어떤 힘 센 놈이 자기 마음대로 여기서 여기까지는 내땅이야.. 라고 했을겁니다. 어떻게 땅주인이 있을 수가 있고, 왜 땅을 돈주고 사야 하나요? 그리고, 지구는 사람이 주인 맞나요?

3. 아파트 : 땅에 20층건물 지어놓고 층당 돈을 받는게 맞나요? 일반주택보다 '1/20'이 되어야 하는게 맞지 않나요? 그럼 왜 연립주택은 1/N을 하는거죠?

4. 산업발전 : 왜 산업발전을 하는거죠? 발전해서 뭐하려구요? 편하게 잘 살려고 하는거죠... 근데 누가요? ^^

우리도 Silding Window 처럼 Flow-Control을 했으면 좋겠습니다. 통신경로중 한군데 문제가 생기면 모두 함께 Window size를 줄이면서 모든 PC에 동등하게 적용되잖아요. QoS 처럼 잘난 놈 먼저 보내주는게 아니라는 뜻입니다. 나라가 어려우면 모두가 허리 졸리매면서 Window size를 줄이고, 나라가 좀 여유있으면 모두가 Window sizw를 높여 잘사는 세상......

언젠가는 오겠죠!
내일 뵙도록 하겠습니다. ^^