Computer Science/Network

Network] 네트워크 주소와 호스트 주소 변환 방법

TwinParadox 2016. 7. 21. 13:24
728x90

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));

728x90

'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