본문 바로가기

Study/TCP/IP

주소 정보의 표현

모든 프로토콜은 자신만의 고유한 주소 포멧이 있다. 예를 들어 IPv4에서는 32비트 주소 체계를 사용하지만, IPv6에서는 128비트 주소 체계를 사용한다. 그러므로 프로토콜에 따라 주소 정보를 나타내는 데이터 타입이 독립적으로 존재한다. 여기서는 IPv4를 중심으로 살펴본다.

IPv4의 주소 체계를 나타내는 구조체
struct sockaddr_in {
    sa_family_t      sin_family;            /* 주소 체계(address family) */
    unit16_t            sin_port;               /* 16비트 TCP / UDP Port */
    struct in_addr   sin_addr;              /* 32비트 IPv4 주소 */
    char                sin_zero[8];          /* 사용되지 않음 */
};

struct in_addr {
    unit32_t            s_addr;                 /* 32비트 IPv4 인터넷 주소 */
};

구조체 안에 사용되고 있는 데이터 타입들은 POSIX에서 찾을 수 있고 POSIX(Portable Operationg System Interface) 란 유닉스 계열의 운영 체제를 위해 표준화 해 놓은 인터페이스(API)다.

이는 확장성을 고려한 결과로 int32_t라는 데이터 타입을 사용한다면, 어떠한 경우에도 4바이트 데이터 타입이라는 것을 보장받을 수 있다.

sockaddr_in 구조체 정보
- sin_family : 프로토콜 체계마다 주소 체계가 다르다고 하였다. sin_family 변수에는 사용되는 주소 체계에 대한 정보를 대입해 준다. 아래 표는 표현 될수 있는 주소 체계 정보를 보여 준다.
주소체계(Address Family)           정의
AF_INET                                        IPv4 인터넷 프로토콜
AF_INET6                                       IPv6 인터넷 프로토콜
AF_LOCAL                                     Local 통신을 위한 UNIX 프로토콜

- sin_port : 16비트 Port 정보를 대입해 준다. 네트워크 바이트 순서로 대입해야 한다.
- sin_addr : 32비트 IP 주소 정보를 대입해 준다. 역시 네트워크 바이트 순서로 저장해야 한다.
- sin_zero : 특별한 의미 없이 단순한 채워주기(padding)을 위한 목적으로 사용되는 구조체 멤버이다.

'Study > TCP/IP' 카테고리의 다른 글

인터넷 주소 조작하기  (0) 2008.02.16
네트워크 바이트 순서  (0) 2008.02.16
Port란,  (0) 2008.02.16
Internet Address  (0) 2008.02.16
소켓의 생성과 프로토콜의 설정  (0) 2008.02.16