본문 바로가기
Lab & Research/Information Security

소켓 주소 구조체

by jaeaemin 2021. 11. 1.
소켓주소 구조체

 

네트워크 프로그램에서 주소 정보를 담고 있는 구조체로, 다양한 소켓 함수의 인자로 사용. ( 기본형 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