반응형

바이트 순서와 네트워크 바이트 순서

 

 

CPU에 따라 4byte 정수 1 메모리 공간에 저장하는 방식이 달라질 수 있다.

 

4byte 정수 1 2진수로 표현하면 아래의 사진과 같다.

 

-

 

 

-

 

이 순서 그대로 메모리에 저장하는 CPU가 있고,

 

아래의 사진과 같이 거꾸로 저장하는 CPU도 있다.

 

-

 

 

-

 

그렇기에, 이러한 부분을 고려하지 않고 데이터를 송수신하면 문제가 생길 수 있다.

 

저장 순서가 다르다는 것은 전송되어온 데이터의 해석 순서가 다르다는 것이다.

 

-

 

CPU가 데이터를 메모리에 저장하는 방식은 아래의 사진과 같이 두 가지로 나뉜다.

 

참고로 CPU가 데이터를 메모리에 저장하는 방식이 두 가지로 나뉜다는 것은

 

CPU가 데이터를 해석하는 방식도 두 가지로 나뉜다는 의미이다.

 

-

 

 

-

 

이 둘은 말로만으로는 이해하기 어렵다.

 

그래서 아래의 사진의 내용을 가지고 예시를 들어보면

 

-

 

 

-

 

20번지를 시작으로 4byte int형 정수 12345678을 저장한다고 가정하면

 

빅 엔디안 방식의 CPU는 위 사진의 내용처럼 

 

순차적으로 작은 값에서 큰 값 작은 번지부터 큰 번지로 저장된다

 

즉, 위 사진의 내용 중에 0x12가 최상위 바이트, 0x78이 최하위 바이트이다.

 

따라서 빅 엔디안 방식의 CPU에서는 최상위 바이트가 작은 번지수에 저장된다는 걸 고려하면

 

최상위 바이트 0x12 작은 번지수 0x20번지로 저장된다.

 

-

 

반면 리틀 엔디안 방식의 CPU는 아래의 사진과 같이 반대의 순서로 저장된다.

 

-

 

 

-

 

리틀 엔디안 방식의 CPU 최상위 바이트가 큰 번지수에 저장하므로

 

최상위 바이트 0x12 큰 번지수 0x23번지로 저장된다.

 

-

 

이렇듯 데이터 저장 방식은 CPU마다 다르다.

 

그래서 CPU의 데이터 저장방식을 의미하는

 

호스트 바이트 순서(Host Byte Order) CPU에 따라서 차이가 있다.

 

 

참고로 사용자들이 주로 사용하는 인텔계열 CPU 리틀 엔디안 방식으로 데이터를 저장한다.

 

그럼 이렇게 호스트 바이트 순서 다른 두 CPU가 데이터를 주고받을 때 발생할 수 있는 문제점

 

다음 포스팅에서 알아보자.

반응형

+ Recent posts