티스토리 뷰

https://youtu.be/j-UOJbAIfs0

 

컴퓨터가 데이터를 저장하는 최소 단위는 바이트 입니다.
이 바이트가 메모리에 저장되는 순서를 byte order라고 부르는데요
바로 이 바이트 오더가 어떤 순서로 메모리에 저장되는지에 따라 
빅 엔디언과 리틀 엔디언이라는 개념으로 나뉘게 됩니다.

메모리에 값이 저장될때 메모리 주소의 값은 낮은곳에서 높은곳으로 저장이 됩니다.
이때 가장 큰 데이터의 바이트가 메모리 주소의 작은 번지에 먼저 저장되고 
그 다음 큰 바이트는 그 보다 높은 주소 번지에 저장되는 아키텍쳐 구조를 빅-엔디안이라고 합니다.
예를 들어 0x1234라는 2바이트 데이터를 메모리에 저장한다고 했을때 0x1234 그대로 저장되는 것이죠.
우리 인간이 사용하는 표기법과 동일한 형태로 메모리에 저장되는 것을 볼 수 있습니다. 
대표적으로 SPARC, ARM, 모토로라 계열의 CPU가 사용하는 아키텍쳐 방식입니다. 

이와는 반대로 가장 작은 데이터의 바이트가 메모리 주소의 작은 번지에 저장되고
가 다음 작은 데이터가 그 보다 높은 주소 번지에 저장되는 아키텍쳐 구조를 리틀 엔디안이라고 합니다.
예를 들어 0x1234라는 2바이트 데이터를 메모리에 저장한다고 했을때 0x3412 형식으로 저장되는 것이죠.
우리 인간이 사용하는 표기법는 반대로 메모리에 저장되는 것을 볼 수 있습니다.
대표적으로 x-86, 우리가 쓰는 인텔 계열의 CPU가 대부분 리틀-엔디안 아키텍쳐 방식으로 동작합니다.

우리가 가지고 있는 PC 환경에서만 어플리케이션을 실행하면
그 PC가 어떤 아키텍쳐를 쓰는지 상관이 없습니다. 왜냐면 읽고 쓰는 방식이 동일할테니까요.
하지만 이 기종간의 네트워크 통신을 할때는 상대방 장비가 어떤 아키텍쳐를 쓰는지에 따라
전혀 엉뚱한 데이터가 전달 될 수 있습니다.

그래서 네트워크 통신시 byte order에 대한 표준이 필요하게 되었고
많은 논의 끝에 network byte order는 빅엔디안 방식으로 통일하기로 결정하였습니다.
 
네트워크 개발자는 자신이 개발하는 장비의 CPU계열과 OS를 잘 이해해야압니다.
예를들어 인텔계열의 리눅스 장비에서 서버 장비를 개발중이라면
데이터를 네트워크로 전송할때는 byte order를 빅엔디안으로 변환해서 전송해야합니다.

* Ref Site
위키피디아 : https://ko.wikipedia.org/wiki/엔디언
JoinC : https://www.joinc.co.kr/w/Site/Network_Programing/Documents/endian

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함