Skip to content

Study : socket : 프로토콜 패밀리 | 주소 패밀리

KIM JEONGJUN edited this page Mar 31, 2022 · 1 revision
항목 내용
일자 빈칸
작성자 빈칸
제목 프로토콜 체계와 주소 체계
한줄요약 protocol family와 address family에 대해서 알아보고 차이점을 알아보자

socket() 함수를 넣어줄 때 해당 소켓이 어떤 영역에서 작동되는지 도메인 파라미터에 그 유형을 넣어줄 수 있습니다. 하지만 이를 넣어줄 때에 AF_* 플래그를 사용하기도하고 PF_* 플래그를 사용하기도 합니다.

PF AF 의미
AF_INET PF_INET IPv4 기반의 인터넷 프로토콜 지원
AF_UNIX PF_UNIX 머신 내부 통신 지원, file 기반 통신
AF_LOCAL PF_LOCAL AF_UNIX와 상동
...
    struct sockaddr_in addr;
    int sock_fd;
...
    // 
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
...
    sock_fd = socket(PF_INET, SOCK_STREAM, 0);
...

그렇다면 둘 사이에는 무슨 차이가 있을까요? 사실은 아무것도 차이가 없답니다 :)

// linux/kud/include/linux/socket.h
/* Protocol families, same as address families. */
#define PF_UNSPEC	AF_UNSPEC
#define PF_UNIX		AF_UNIX
#define PF_INET		AF_INET
#define PF_AX25		AF_AX25
#define PF_IPX		AF_IPX
#define PF_APPLETALK	AF_APPLETALK
#define	PF_NETROM	AF_NETROM
#define PF_BRIDGE	AF_BRIDGE
#define PF_AAL5		AF_AAL5

초기 설계시에는 단일 프로토콜이 다양한 주소체계를 지원하고자 하였지만 그런 일은 일어나지 않았고, 지금은 둘 중 어느 하나만 써도 무방합니다.

Linux man에서는 둘 다 섞어 쓰는 게 아니라 AF_*를 쓰는 것을 권고하고 있습니다.

   already the BSD man page promises: "The protocol family generally is the same as the address family", and subsequent standards use AF_* everywhere.
   
   이미 BSD 매뉴얼 페이지에서 서술한 바와 같이 "protocol family는 address family와 동일하며," 이후 표준은 모든 곳에 AF_*를 쓰는 것을 권합니다. 

// uploaded 220330