삽질의 현장/- 네트워크 프로그래밍

#016_Window_Network_고정 길이 전송 방식과 가변 길이 전송 방식

shovelman 2015. 10. 7. 16:45


안녕하세요 삽잡이입니다.

이번시간에는 가변 길이 전송 방식에 대해서 알아보려고합니다.



고정 길이 전송 방식이란, 

동일한 길이의 데이터를 날리고 동일한 데이터의 길이를 받는 전송 방식을 말합니다.

예를 들어서 512바이트를 전송하게 되면, 이 바이트를 넘지 않아야된다는 것입니다.


TCP 네트워크 송신은 데이터의 경계가 없기 때문에

우리가 그 경계를 만들어줘야할 필요성이 있어서 이와 같은 방법을 사용하는 것입니다.

즉, 몇 바이트가 보내질지, 우리가 몇 바이트를 받게 될지 모르니깐

오류를 방지하고자... 정확한 데이터 송수신을 하고자 '고정 길이 전송 방식'을 사용한다는 것입니다.


그런데 사실, 데이터의 길이가 얼마나 올지 모를 때는 고정 길이 방식을 잘 사용하지 않습니다.

예를 들어 512 바이트만큼 고정 길이로 사용했는데 사이즈가 넘어서 계속해서 데이터가 날라오면

데이터들을 나누고 조합해야할 수 있기 때문입니다.

따라서, 이와 같은 경우에는 '가변 길이 전송 방식'을 사용합니다.


정리하자면,

고정 길이는 정해놓은 사이즈를 넘지 않는 '일정한 데이터의 크기'를 주고받을 때 사용하고,

가변 길이는 사이즈가 얼마나 오고 갈지 모를 때에 사용하기 훨씬 효율적이라는 것입니다.


데이터 송수신 방법에는 

위에서 언급한 고정 길이 방식과 가변 길이 방식, 가변 길이 중에 표식을 하는 방법 

즉, 끝을 표식하는 방법이 있습니다.


고정 길이는 위에서 언급했듯이, 

데이터를 날리거나 받을 때 항상 동일한 길이의 사이즈를 날리고 받는 방법을 말합니다.


그렇다면 '가변 길이 전송 방식'은 무엇일까요?

단지 주고받을 때 데이터를 '가변적으로' 사이즈를 주고받겠다는 뜻입니다.

예를 들어서 파일같이 길이(파일의 크기)의 차이가 많이 나는 것들을 통신할 때 사용한다 이거죠...


표식은 예를 들어 데이터의 끝마다 #를 붙이겠다, 

앞에는 !로 시작하겠다 등등을 표식하여 데이터를 표현하는 것입니다.

보통 데스크탑이 아닌 CDMA처럼 문자로 데이터를 주고 받거나,

네트워크 송수신중 8bit 컴퓨터에서 주고 받는 방식으로 많이 사용됩니다...


아무튼... 고정 길이와 가변 길이 방식이 많이 쓰이는데,

가변 길이의 경우 데이터의 헤더 앞에 길이를 비롯한 정보들을 우선 보낸 다음

데이터를 보내게 됩니다.


가변 길이는 항상 고정 길이의 헤더를 보낸 다음에 

헤더에 적혀있는 길이 만큼 데이터를 받는 것입니다.

곧, 가변 길이는 고정 길이를 바탕으로 만들어진다는 것입니다.


가변 길이 방식에서 헤더에는 여러가지 정보가 들어갈 것입니다.

즉, 실질적인 프로그램 헤더에는 보안 방식이나 데이터와 관련된 여러 정보를 포함하고 있다는 것입니다.



가변 길이 방식은 데이터 길이를 처리해야하는 코드가 들어가고, 

동적할당 및 헤제의 필요성이 있기 때문에 고정 길이 방식에 비해 코드가 복잡할 수 있습니다.


즉, 고정 길이 보다 가변 길이가 코드의 양도 많고 복잡하다는 것입니다.

하지만, 고정 길이의 경우 고정된 사이즈를 넘어 엄청난 양의 데이터가 날라오면 터질 수 있으나

가변 길이의 경우 해당 PC의 메모리를 넘지 않는 이상 엄청난 양의 데이터를 받을 수 있을 것입니다.


가변 길이 전송 방식이 어렵게 다가가질 수 있습니다.

물론, 필자도 굉장히 어렵게 느끼고 있구요...

하지만... 어쩌겠습니까... 열심히 공부해야겠지요...


다음에 더 질 좋은 내용으로 다가가고싶군요...

오늘은 멘붕입니다 허허...


이상 삽잡이였습니다!