본문 바로가기
■ Programming /Window Network

[윈도우 네트워크] 빅 엔디안(Big Endian)과 리틀 엔디안(Little Endian)

by Popbox 2018. 5. 15.
반응형

[윈도우 네트워크] 
빅 엔디안(Big Endian)과 리틀 엔디안(Little Endian)

 

 

 

호스트 바이트 순서(Host Byte Order)

 

컴퓨터에서 가장 핵심 중에 하나인 CPU는 데이터를 저장하는 방식이 2가지가 존재합니다.

CPU 데이터 저장방식을 호스트 바이트 순서(Host Byte Order)라 합니다.



CPU 저장방식에 따라 4바이트의 데이터 정수 1을 2진수로 표현하면 다음과 같습니다.

(저장방식이 다르다는 것은 해석순서가 다름을 뜻한다)


[1] Big Endian

00000000 00000000 00000000 00000001


[2] Little Endian

00000001 00000000 00000000 00000000






 


 빅 엔디안(Big Endian)


CPU가 데이터를 메모리에 저장하는 두가지의 방식중 하나인 빅 엔디안(Big Endian)에 대해 설명하겠습니다.






빅 엔디안(Big Endian)은 상위 바이트의 값작은 번지수저장하는 방식을 말합니다.

위 그림은 빅 엔디안(Big Endian)방식으로 데이터를 메모리에 저장한 것을 나타냅니다.


0x100번지를 시작으로 0x01234567의 데이터를 저장한 모습입니다.

정수 0x01234567중에서 0x01최상위 바이트, 0x67최하위 바이트입니다.

따라서 빅 엔디안(Big Endian)방식에서는 최상위 바이트0x01부터 작은 번지에 저장됩니다.





 

 리틀 엔디안(Little Endian)


CPU가 데이터를 메모리에 저장하는 두가지의 방식중 하나인 리틀 엔디안(Little Endian)에 대해 설명하겠습니다.






리틀 엔디안(Little Endian)은 상위 바이트의 값큰 번지수저장하는 방식을 말합니다.

위 그림은 리틀 엔디안(Little Endian)방식으로 데이터를 메모리에 저장한 것을 나타냅니다.


0x100번지를 시작으로 0x01234567의 데이터를 저장한 모습입니다.

정수 0x01234567중에서 0x01최상위 바이트, 0x67최하위 바이트입니다.

따라서 리틀 엔디안(Little Endian)방식에서는 최상위 바이트0x01가장 큰 번지수인 0x103에 저장됩니다.




 

 문제점


대중적으로 사용되고 있는 인텔 CPU의 경우는 리틀 엔디안(Little Endian)방식을 사용하고 있습니다.

그럼 빅 엔디안(Big Endian)방식의 컴퓨터와 데이터를 주고 받으면 어떻게 될까요??


당연히 문제가 발생합니다.

빅 엔디안(Big Endian) 컴퓨터에서 0x0123456의 데이터를 리틀 엔디안(Little Endian)컴퓨터로 전송을 했다고 하면,

리틀 엔디안 컴퓨터는 데이터를 저장할 때, 0x56342301으로 저장을 하기 때문에 예기치 못한 값이 발생하게 됩니다.


그러나 이러한 문제점을 해결하기 위해 약속을 한게 있습니다.

바로, "네트워크 바이트 순서(Network Byte Order)"라고 부릅니다.


네트워크 바이트 순서(Network Byte Order)은 단순히 "빅 엔디안 방식으로 통일!!"을 뜻합니다.

즉, 네트워크상에서 데이터를 전송할 때에는 데이터의 배열을 빅 엔디안(Big Endian) 기준으로 변경해서 송수신하기로 약속한 것입니다.

때문에 모든 컴퓨터는 수신된 데이터가 네트워크 바이트 순서로 정렬되어 있음을 인식해야 하며, 

리틑 엔디안(Little Endian) 시스템에서는 데이터를 전송하기 앞서 빅 엔디안(Big Endian)의 정렬방식으로 데이터를 재정렬해야 합니다.






다음은 바이트 순서 변경하는 함수를 설명하겠습니다. 감사합니다.


 

 감사합니다. 공감 한번 부탁드려요.

[ 다음 장 ]


  





반응형

댓글