sockaddr 구조체

소켓 주소를 표현하는 구조체.
TCP/IP만 목적으로 만들어진 것이 아니기 때문에, 다양한 주소체계에 맞게 구조체를 가지고 있다.

 

struct sockaddr
{

sa_family_t sa_family; /* 소켓의 주소체계 */

char sa_data[4]; /* 해당 주소체계에서 사용하는 주소정보 */

}

 

sockaddr_in 구조체

:IPv4 주소체계에서 사용하는 구조체.
소켓 프로그램은 범용 주소 구조체로 sockaddr을 사용하지만, 주소체계의 종류에 따라 별도의 전용 구조체를 만들어 사용하는게 편리하다.

* 소켓 라이브러리는 sockaddr을 사용하므로 라이브러리에 주소 정보를 넘길 때는 sockaddr로 형변환을 하여 넘긴다. 그렇기 때문에 구조체의 크기는 동일.

struct sockaddr_in

{

sin_family_t sin_family /* IPv4주소체계에서 사용하므로 항상 AF_INET */
unist16_t sin_port ; /* 포트 번호 */
struct in_addr sin_addr; /* IP주소를 나타내는 32비트 정수 타입 구조체 */

char sin_zero[8]; /* sockaddr과 같은 크기를 유지 하기 위해 필요한 패딩공간 항상 0 */

}

struct in_addr{

unit32_t s_addr; /* 32비트 IPv4 인터넷 주소 */

}

 

PF_INET주소 체계(Protocol Family)

소켓을 만들 때는 소켓이 사용될 환경을 고려해 프로토콜을 설정해 주어야 한다.
다시 말해 프로토콜 패밀리는 소켓을 생성할 때 이 소켓이 어떤 프로토콜을 사용해 통신을 할지 정해준다. 참고로 소켓은 네트워크 통신을 할 때만 사용되는 것은 아니다.
유닉스 계열의 시스템에서 시스템 내부의 프로세스들끼리 통신을 하기 위해서도 사용된다.
자주 사용되는 PF_INET는 프로토콜 패밀리중 하나다.

AF_INET 주소 체계(Address Family)

주소 구조체 안에 주소 패밀리를 정의할 때 사용.
프로토콜 체계를 나타내는 PF_INET 와 주소체계를 나타내는 AF_INET는 같은 상수 값을 갖는다. 그렇다고 해서 주소정보를 설정하는 부분에 PF_INET를 사용하고 프로토콜 패밀리 정보를 설정하는 부분에 AF_INET을 넣는 것은 좋지 않다.

 

 

 

 

 

'미분류' 카테고리의 다른 글

codegate vuln - 300  (0) 2015.11.27
PEDA 튜토리얼  (0) 2015.11.27
LOB fedora  (0) 2015.11.09
socket 통신 개념  (0) 2015.11.01
White hat 2015 [write-up]  (0) 2015.10.30

+ Recent posts