IP 주소는 일반적으로 비부호형 32비트 이진수로 표현되지만, 사람이 읽기 쉬운 형식으로는 8비트씩 4부분으로 나누어 10진수로 표현하며, 각 부분은 점으로 구분합니다. (192.168.0.1)
네트워크 프로그램은 IP 주소를 IP 주소 구조체에 저장합니다.
TCP / IP 프로토콜에서 가장 많이 사용되는 프로토콜입니다.
/* IP address structure */
struct in_addr {
uint32_t s_addr; /* Address in network byte order (big-endian) */
};



인터넷 호스트들이 서로 다른 호스트 바이트 순서를 가질 수 있기 때문에 TCP / IP는 네트워크 패킷 헤더에 포함되는 IP 주소와 같은 모든 정수형 데이터 아이템에 대해 통일된 네트워크 바이트 순서를 정의합니다.
Unix는 네트워크와 호스트 바이트 순서 간의 변환을 위해 다음과 같은 함수들을 제공합니다.
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(unit16_t netshort);
자세한 설명은 CSAPP를 참고하세요.
→ 요즘엔 IP고갈 문제로 IPv4(32비트) 주소대신 IPv6(128비트)주소가 도입되고 있습니다. 사실 많이 적용 안됨.