■ 시스템이 내부적으로 데이터를 표현하는 방법


(1) 바이트 순서
: 바이트 순서는 데이터가 바이트 단위로 메모리에 저장되는 순서를 의미한다.

- 크게 Big Endian과 Little Endian 방식이 존재하며, 각 CPU 벤더 의존적인 특징을 가지고 있다. 
- Little Endian을 사용하는 대표적인 벤더가 '인텔(AMD)'계열의 80x86시스템이고,
- Big Endian을 사용하는 대표적인 벤더가 '모토로라 or IBM'계열의 Power PC 시스템이다.
- Network Protocol은 Big Endian, ARM은 대부분 Little Endian이다.


(2) Big Endian
: 데이터가 상위 바이트 부터 메모리에 적재(Network Ordering)
  가장 최상위 바이트(0A)가 가장 낮은 메모리 주소에 저장되는 방식

(ex) 0x12345678의 32비트 값을 Big Endian으로 표현하면 :
                     0x12    0x34    0x56    0x78
                    낮은 주소    -->      높은주소


(3) Littel Endian
:
데이터가 하위 바이트 부터 메모리에 적재(Host Ordering)
  가장 최상위 바이트(0A)가 가장 높은 메모리 주소에 저장되는 방식

(ex) 0x12345678의 32비트 값을 Little Endian으로 표현하면 :
                     0x78    0x56    0x34    0x12
                    낮은 주소    -->      높은주소


(4)  정리

- 네트워킹을 통해 데이터를 송수신할 때 올바른 데이타를 받기 위에서는 시스템에 맞게 바이트 오더링 과정이 필요하다.

- Microsoft Visual C++에서 제공하는 Library 에는 이런 바이트 오더링을 위한 네트워크 함수를 지원한다.
- WS2_32.lib에 있는 htons(), htonl(), ntohs(), ntohl()
: 이 함수들의 이름 중 'n'은 네트워크를 의미하고, 'h' 는 호스트를 의미한다.
  's'는 short (2바이트) 데이타 타입, ' l '은 long (4바이트) 데이타 타입을 의미한다.

=>
그래서, htonl() 같은 경우는.. 호스트가 네트워크로(h to n) 데이터를 전송하기 전에 4바이트( l ) 데이터에 대한
    바이트 오더링을 해주는 함수이다.


(5) 
Byte Ordering 함수

unsigned long int ntohl ( unsigned long int x)
{
    return(
                    ( ( x & 0x000000ffU ) << 24 ) |
                    ( ( x & 0x0000ff00U ) << 8   ) |
                    ( ( x & 0x00ff0000U ) >> 8   )  |
                    ( ( x & 0xff000000U ) >> 24 )  )
    );
}

※ 네트워크 바이트 순서 변환 함수 관련 포스팅 자료
  2011/04/13 - [[ C laguage ]/Function] - Network Byte Ordering 변환 함수 (ntohl, ntohs, htonl, htons)


'T heory > Network' 카테고리의 다른 글

Network / 용어설명  (0) 2011.07.15
서브넷 / 서브넷마스크  (0) 2011.07.08
네트워크 바이트 순서 (Byte Ordering)  (4) 2011.06.20
포트 (Port)  (0) 2011.05.11
네트워크 주소체계 (Internet Address)  (0) 2011.05.11
라우터, 공유기, 허브, 스위치  (0) 2011.05.11
by 하늘이도우사 2011. 6. 20. 16:40
  • UnKnown 2016.10.06 13:52 ADDR EDIT/DEL REPLY

    (2) (3) ex)설명이 잘못되었습니다
    빅은 78654321 이고 리틀은 12345678 입니다

  • Unknown 2016.10.10 11:01 ADDR EDIT/DEL REPLY

    죄송합니다 제가이해를 똑바로못해서....
    설명이맞으십니다 제가잘알지도못하면서
    함부로 지적했네요 죄송합니다