오늘은 바이트 순서를 파헤쳐보는 시간이 되겠다.
처음 듣도보도 못했던 개념이었기에 파면 팔수록 뭔가 많이 나오리라! 했는데..
기본적인 개념인가봉가 :-0
1. 바이트 순서(Byte order)
: 바이트 순서 또는 바이트 오더라고도 불린다.
이 바이트 오더는 바이트를 배열하는 방법을 말하는 것이며, 자세히 말하자면 1바이트를 넘어가는 일련의 바이트를 어떻게 조합해서 실제 정수 등으로 나타낼지를 나타내는 것이다.
"그럼 1바이트는!! 1바이트가 서운해쟈나" 라고 한다면 과감히 말할 수 있다. 괜찮다~!!!
1바이트 자체가 하나의 완전한 값이다. 따라서 1바이트만 읽으면 값이 바뀔 우려 없이 쉽게 값을 구할 수 있기 때문이다.
이 바이트 오더는 주로 네트워크 프로그래밍에서 중요한 기초 개념이라고 할 수 있다.
시스템마다 내부적으로 1바이트 이상의 데이터를 처리하는 방식, 바이트 오더가 다르기 때문에 서로 다른 값으로 인식할 수 있기 때문이다. 같은 시스템 내부에서는 처리 방식이 당연히 같으니 신경 쓰지 않아도 된다 :-)
보통 인텔(AMD) 계열의 80x86 시스템과 Network protocol은 리틀엔디안을 사용한다.
반면에 Power PC 시스템이나 ARM의 경우에는 빅엔디안을 사용한다.
( * 참고로 JAVA 역시 빅엔디안을 사용한다. )
* 80x86 시스템
: x86 또는 80x86은 인텔이 개발한 마이크로프로세서(CPU) 계열을 부르는 말이자, 이들과 호환되는 프로세서들에서 사용한 명령어 집합 구조(CPU가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어)들을 통칭하는 말이다. x86 또는 80x86이라는 이름은 여기에 속하는 초기의 프로세서들 이름이 모두 80으로 시작해 86으로 끝났기 때문에 붙여졌다. 여기에는 8086, 80186, 80286, 386, 486이 포함되며, 숫자로 상표를 등록할 수 없었기 때문에 그 뒤로는 펜티엄과 같은 별도의 이름을 사용하게 되었다.
* Power PC(Performance Optimization With Enhanced RISC-Performance Computing) 시스템
: 파워PC는 1991년 애플, IBM, 모토로라 등이 제휴한 AIM 연합에서 발표한 RISC 방식의 명령 집합 아키텍쳐를 말한다.
* ARM
: 임베디드 기기에 많이 사용되는 32-bit RISC 프로세서
* RISC(Reduced Instruction Set Computer)
: CPU 명령의 갯수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식으로 마이크로프로세서를 설계하는 방법 가운데 하나
2. 빅엔디안(Big-endian)
: 빅엔디안은 상위바이트부터 순차적으로 저장하는 방식을 말한다.
(참조 : en.wikipedia.org/wiki)
위의 그림만 봐서는 감이 잘 안 올수도 있기에 설명을 덧붙인다.
4바이트의 정수를 나타낸 바이트가 0A0B0C0D라고 해보자.
각각 바이트로 표현하면 0A 0B 0C 0D 이고 총 4바이트가 된다.
또, 저장되는 주소의 초기 번지가 1번지라고 해보자. 그렇다면 이렇게 저장된다.
0A |
0B |
0C |
0D |
1번지 |
2번지 |
3번지 |
4번지 |
3. 리틀엔디안(Little-endian)
: 리틀엔디안은 빅엔디안과 다르게 하위바이트부터 순차적으로 저장하는 방식을 말한다.
(참조 : en.wikipedia.org/wiki)
리틀엔디안은 어떻게 저장되겠는가? 빅엔디안과 반대로 생각하면 된다.
위의 상황과 똑같이 0A0B0C0D 라는 4바이트의 정수가 있고, 저장되는 주소의 초기 번지가 1번지라고 가정하자. 그렇다면 이렇게 저장된다.
0D |
0C |
0B |
0A |
1번지 |
2번지 |
3번지 |
4번지 |
위의 빅엔디언과 리틀엔디언을 보다시피 바이트순서가 정 반대이다보니 통신을 할 때 자칫 바이트 순서를 신경쓰지 않게 되면 듣도보도못한 생각치도 못한 값이 나올 수 있다는 것을 명심해야 한다!
'PROGRAMMING > 전산학 기초' 카테고리의 다른 글
UDP(User Datagram Protocol) 파헤치기 (126) | 2014.03.25 |
---|---|
TCP(Transmission Control Protocol) 파헤치기 (126) | 2014.03.25 |
IP, subnet, gateway, DNS_기본 용어 정리 (126) | 2013.08.06 |