inet_ntoa, inet_addr, htons, htonl 함수들은 바이트 순서를 호스트 바이트 순서에서 네트워크 바이트 순서로 바꾸는 역활을 한다. 이유는 시스템마다 바이트 순서가 다른데 예를 들어 인텔계열 x86 CPU에서는 숫자 3을 2바이트로 표시한다면 "03 00"이다. 하지만 모토롤라 6800 계열 CPU에서는 "00 03"이 된다. 전자가 리틀 엔디안, 후자가 빅 엔디안 이다. 네트워크에서는 이런 시스템간의 바이트 순서를 통일시키기 위해 빅 엔디안으로 표기한다. 그런데 우리는 보통 인텔 계열의 CPU를 쓰기 때문에 리틀 엔디안이다. 그래서 이 함수들의 도움을 받아 값을 변환하여 네트워크로 전달한다.

  • inet_ntoa: 32비트 정수형으로 된 네이트워크 바이트 순서의 주소를 문자열로 된 주소로 반환한다.
  • inet_addr: 문자열로 된 주소를 네트워크 바이트 순서의 32비트 정수형 주소로 반환해 준다.
  • htons: 호스트 바이트 순서의 16비트 정수를 네트워크 바이트 순서로 반환해 준다.
  • htonl: 호스트 바이트 순서의 32비트 정수를 네트워크 바이트 순서로 반환해 준다.

자바와 C/C++같은 이종언어 간의 네트워크 통신에서도 엔디안 문제가 발생할수 있다. 자바의 경우 빅엔디안으로 고정되어 있지만 C/C++의 경우에는 위의 예에서 처럼 CPU에 따라 달라질수 있기 때문이다. 

'프로그래밍 > 네트워크' 카테고리의 다른 글

MTU와 MSS  (0) 2010.03.29
IMAP과 POP의 비교  (0) 2010.01.27
Post Office Protocol(POP3)  (0) 2009.09.21
Active Object 패턴  (0) 2009.09.08
소켓 상태 전이  (2) 2009.07.29
Windows I/O 모델  (0) 2009.07.29
리틀엔디안(Little endian)과 빅엔디안(Big endian)  (0) 2009.07.29
Posted by devop

댓글을 달아 주세요