ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 주소체계와 데이터 정렬
    IOT네트워크프로그래밍 2021. 9. 14. 20:22

    네트워크 바이트 순서

    바이트 순서(Byte Order)

    상위 바이트의 값을 메모리에서 어느쪽으로 두느냐에 따라서 구분한다.

    Big-Endian

    • 상위 바이트 값이 메모리상에 먼저(번지수가 작은 위치) 표시
    • 호스트 바이트 순서(Host Byte Order)

    Little-Endian

    • 하위 바이트 값이 메모리상에 먼저(번지수가 작은 위치) 표시
    • 호스트 바이트 순서(Host Byte Order)

     데이터 표현 방식에 따라 문제점이 발생한다. 그래서 네트워크 상에서는 Big-endian을 쓴다.

    바이트 순서 변환 (Endian Conversion)

     unsigned short htons(unsigned short);   /*Port 정보의 바이트 순서 변경*/
     unsigned short ntohs(unsigned short);  /*Port 정보의 바이트 순서 변경*/
     unsigend long htonl(unsigned long);    /*IP 주소의 바이트 순서 변경*/
     unsigned long ntohl(unsigned long);    /*IP 주소의 바이트 순서 변경*/
    • ‘h’ : host byte order 
    • ‘n’ : network byte order
    • ‘s’ : short (16 bit) 
    • ‘l’ : long (32 bit)

    인터넷 주소 조작하기

     inet_addr 함수

    Dotted-Decimal Notation(10진수)을 Big-Endian 32 비트 정수형 데이터로 표현

    unsigned long inet_addr(const char * string)
    //성공시 : Big_Endian 32비트 값  , 실패시 : INNADDR_NONE

    inet_aton 함수

    • inet_addr 함수 보다 개선된 함수
    • inet_addr 함수의 리턴된 값을 주소 정보 구조체 sockaddr_in 안에 선언되어 있는 in_addr 구조체의 포인터로 전달
     int inet_aton (const char * string, struct in_addr  * addr)
    //성공시 : 0이 아닌 값(true), 실패시 : 0(false)

    inet_ntoa 함수

    Big-Endian 32비트 정수형 데이터(네트워크 바이트 순서) Dotted-Decimal Notation(10진수)로 표현

     char * inet_ntoa(struct in_addr addr)
    성공시 : 변환된 해당 문자의 포인터, 실패시 : -1

    inet_lnaof() 함수

    • 네트워크 바이트 순서로 된 소켓 주소의 IP 번호를 네트워크 ID를 삭제한 호스트 ID 번호로 변환한다.
    • 이 함수 이용하면 IP 번호의 클래스를 결정할 필요도 없고, 호스트 ID 부분을 추출할 필요가 없다.

    EX)

    IP 번호 클래스 16진수 Dotted-quad
    44.135.86.12 A 0087560C 0.135.86.12
    127.0.0.1 A 00000001 0.0.0.1
    172.16.23.95 B 0000175F 0.0.23.95
    192.168.9.1 C 00000001 0.0.0.1

    inet_netof() 함수

    • Inet_lanof() 함수와 짝을 이루고 있으며, 호스트 ID 값 대신 네트워크 ID 를 반환하는것 이외에 다른차이점 없음

    EX)

    IP 번호 클래스 16진수 Dotted-quad
    44.135.86.12 A 0000002C 0.0.0.44
    127.0.0.1 A 0000007F 0.0.0.127
    172.16.23.95 B 0000AC10 0.0.172.16
    192.168.9.1 C 00C0A809 0.192.168.9

     

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

    다중 접속 서버  (0) 2021.10.05
    UDP기반의 Client/Server  (0) 2021.09.28
    TCP 기반의 Client / Server  (0) 2021.09.28
    도메인 이름과 IP 주소 변환  (0) 2021.09.28
    Socket  (0) 2021.09.14

    댓글

Designed by Tistory.