/**
1699년 걸리버가 표류한 소인국 릴리푸틴(Lilliputin)들은 삶은 달걀을 먹는 방법에 생사를 걸었다. 왕은 달걀의 양끝 중 작은 쪽부터 깨서 먹을 것을 명령했으나 큰 끝부터 깰 것을 고집하는 빅-엔디안(Big-Endians)들이 사생결단해 저항했다.
36 월력(月曆)간 6차례 대 폭동이 일어나고 1만1천명이 작은 끝부터 깨기를 거절하고 죽음을 택했다.
걸리버 여행기 中
*/
네트워크 바이트 순서(Network-byte order)
CPU가 데이터를 처리하기 위해서는 가장 먼저 메모리에 데이터가 적재가 되어 있어야만 한다. 그런데 이 세상에는 CPU의 종류가 한 두 가지가 아니고, CPU를 만들어 내는 회사 또한 한 두군데가 아니다. 그리고 그 회사들은 저마다 각각의 바이트 순서(byte order)를 사용하고 있다.
바이트 순서(byte order)란, 데이터를 메모리에 적재하는 방법이라고 생각하면 된다. 그 방법에는 Big-endian(상위 바이트가 메모리에 먼저 기록 되는 방식)과 Little-endian(하위 바이트가 메모리에 먼저 기록 되는 방식)이다.
big endian and little endian
이렇게 서로 바이트 순서(byte order)가 다른 두 호스트가 통신을 할 경우에는 바이트를 읽어 들이는 순서가 달라 같은 데이터를 가지고도 서로 다르게 인식 하는 경우가 발생한다. 아래의 그림을 보도록 하자.
comunication between Big endian and Little endian
이런 문제를 해결하기 위해서 네트워크 바이트 순서(Network-byte order)라는 것이 만들어 졌고, 네트워크 바이트 순서는 Big-endian만을 사용한다. 따라서 시스템이 Little-endian방식을 사용하고 있다면 반드시 Big-endian방식으로 변경해서 전송을 해야 하고, 받을 때에는 Little-endian으로 변경해서 받아야 한다.
그리고 sockaddr_in 구조체 안에 존재하는 모든 값들은 반드시 네트워크 바이트 순서로 채워 져야 한다.
관련 함수 : hotns, ntohs, htonl, ntonl
참고 : Unix Network Programming
열혈강의 TCP/IP
http://www.terms.co.kr/big-endian.htm
http://blog.naver.com/ssadaegee?Redirect=Log&logNo=110011193494
http://blog.naver.com/process3?Redirect=Log&logNo=20029237790
http://blog.naver.com/cybeagle/4074876