Endianness
컴퓨터의 메모리에 여러 바이트로 구성된 데이터를 저장하는 방법
Byte Order라고도 함
컴퓨터의 바이트 순서는 프로세서 아키텍처에 의해 결정, 호스트 바이트 정렬이라고 부름
x86 : little-endian
네트워크 통신 중 이종 컴퓨터 사이의 바이트 정렬 문제를 해결하기 위해 빅 엔디안 방식의 네트워크 바이트 정렬 사용
멀티 바이트 데이터 타입에서 중요함
바이트 정렬 함수
Linux / Unix
u_short htons(u_short hostshort); // host to network short
u_long htonl(u_long hostlong); // host to network long
u_short ntohs(u_short netshort); // network to host short
u_long ntohl(u_long netlong); // network to host long
SOCKADDR_IN / SOCKADDR_IN6 구조체 내 변환되는 값
IPv4
네트워크 바이트 정렬 : sin_port, sin_addr
호스트 바이트 정렬 : sin_family, sin_zero
IPv6
네트워크 바이트 정렬 : sin6_port, sin6_flowinfo, sin6_addr
호스트 바이트 정렬 : sin6_family, sin6_scope_id
IP Address 변환
IPv4
문자열 형태로 IP Address를 32bit 숫자(네트워크 바이트 정렬)로 변환
unsigned long inet_addr (const char *cp);
32bit 숫자(네트워크 바이트 정렬)로 IPv4를 문자열로 변환
char *inet_ntoa (struct in_addr in);
ex)
struct sockaddr_in addr;
char *svr_ip="123.123.123.123";
char *svr_port="7890";
memset(&addr,0,sizeof(addr_len)); // memory setting
addr.sin_family=AF_INET; // IPv4
addr.sin_addr.s_addr = inet_addr(srv_ip);
addr.sin_port=htons(atoi(srv_port));
'Computer Science > Network' 카테고리의 다른 글
Network] 시그널 종류 (0) | 2017.07.15 |
---|---|
Network] 도메인 네임의 주요 함수 (0) | 2016.07.21 |
Network] UDP 주요 함수 (0) | 2016.07.21 |
Network] TCP 상태 전이 (0) | 2016.07.21 |
Network] TCP 소켓 데이터 전송 특징 (0) | 2016.07.21 |