소켓주소 구조체
네트워크 프로그램에서 주소 정보를 담고 있는 구조체로, 다양한 소켓 함수의 인자로 사용. ( 기본형 SOCKADDR )
SOCKADDR 구조체
1. 기본형
typedef struct sockaddr {
u_short sa_family; // 2byte > 주소 체계를 나타내는 16비트 정수값 AF_INET or AF_INET6
char sa_data[14]; // 14 byte > 해당 주소 체계에서 사용할 주소 정보 TCP/IP 프로토컬 + ip + port#
2. SOCKADDR_IN (IPv4 전용)
typedef struct sockaddr_in {
short sin_family; // AF_INET (2byte)
u_short sin_port; // port# (2byte)
struct in_addr sin_addr; // ipv4 주소 (4byte)
char sin_zero[8]; // 0으로 설정 (8byte)
}SOCKADDR_IN;
in_addr구조체는 union으로 3개의 주소 표현 방식 중 하나를 정의한다.
3. SOCKADDR_IN6 (IPv6 전용)
typedef struct sockaddr_in6 {
short sin6_family; // AF_INET6
u_short sin6_port; // port#
u_long sin6_flowinfo; // 대부분 0으로 설정
struct in6_addr sin6_addr; // IPv6 주소 (16byte)
u_long sin6_scope_id; // 대부분 0으로 설정
} SOCKADDR_IN;
in6_addr구조체는 union으로 2개의 주소 방식 ( 1byte or 2byte ) 중 하나를 사용한다.
* 소켓 주소 구조체 크기 비교 *
구조체 이름 | 전체 크기 (BYTE) |
SOCKADDR | 16 (기본) |
SOCKADDR_IN | 16 (ipv4) |
SOCKADDR_IN6 | 28 (ipv6) |
각 소켓을 통해서 응용프로그램들간의 통신을 진행하게 되는데 , 이 때 바이트 정렬이 다르다면 올바른 통신이 이루어질 수 없다.
바이트 정렬은 데이터를 메모리에 정렬하는 방식으로 빅엔디안 방식과 리틀엔디안 방식으로 나눌 수 있다.
네트워크 바이트 정렬. ==> 빅엔디안 방식 |
호스트 바이트 정렬. ==> 시스템이 사용중인 고유한 방식 |
따라서 소켓을 통해 통신하는 데이터를 처리하기 위해서는 같은 바이트 정렬 방식을 사용하여 데이터를 처리해야한다.
만약, 송수신간의 바이트 정렬 방식이 다른 경우에 변환시켜서 바이트 정렬을 통일시킬 수 있다.
이때 사용하는 것이 바이트 정렬 함수이다.
SOCKADDR_IN 구조체의 경우 sin_addr, sin_port는 네트워크 정렬을 사용하고 나머지는 호스트 바이트 정렬을 사용한다.
SOCKADDR_IN6은 sin_flowinfo를 추가로 네트워크 정렬로 사용한다.
바이트 정렬 함수 (유닉스 호환) | |
u_short htons(u_short hostshort) | host -> networkt (short) |
u_short ntohs(u_short netshort) | network -> host (short) |
u_long htonl ( u_long hostlong) | host -> network (long) |
u_long ntohl (u_long netlong) | network -> host (long) |
바이트 정렬 함수 (윈속 확장) | |
int WSAHtons(SOCKET s, u_short hosthory, u_short *ipnet.) | host -> networkt (short) |
int WSANtohs(/// ) | network -> host (short) |
int WSAHtonl(..) | host -> networkt (long) |
int WSANtohl(..) | network -> host (long) |
IP 주소 변환
반응형
'Lab & Research > Information Security' 카테고리의 다른 글
네트워크 접근 제어 & 클라우드 보안 (0) | 2022.04.15 |
---|---|
Web : SSL&SSH&SET (0) | 2022.04.13 |
대칭 암호화 & 메세지 기밀성 (0) | 2022.03.17 |
Information Security (0) | 2022.03.17 |
소켓 (0) | 2021.10.31 |