본문 바로가기
카테고리 없음

AF_INET / PF_INET 차이점

by Hide­ 2016. 2. 16.
반응형

책을 보다보면 소켓생성 시 어떤 책엔 PF_INET을 쓰고 어떤책은 AF_INET을 사용합니다.


   

정확히 PF_INET과 AF_INET의 뜻을 알아야겠죠?


   

PF_INET은 프로토콜 체계(프로토콜 패밀리)중 하나이고, AF_INET은 주소 체계(주소 패밀리)중 하나입니다.


   

프로토콜 패밀리는 아래와 같은 종류가 있습니다.


   

프로토콜 체계 (Protocol Family)

정의

PF_INET

IPv4 인터넷 프로토콜

PF_INET6

IPv6 인터넷 프로토콜

PF_LOCAL

Local 통신을 위한 UNIX 프로토콜

PF_PACKET

Low level socket을 위한 인터페이스

PF_IPX

IPX 노벨 프로토콜


   

소켓을 만들 때는 소켓이 사용될 환경을 고려해 프로토콜을 설정해 주어야 합니다.


   

다시 말해 프로토콜 패밀리는 소켓을 생성할 때 이 소켓이 어떤 프로토콜을 사용해 통신을 할지 정해줍니다.


   

참고로 소켓은 반드시 네트워크를 통해 통신할 때만 사용되는 것은 아닙니다.


   

유닉스 계열의 시스템에서 시스템 내부의 프로세스들끼리 통신을 하기 위해서도 사용됩니다.


   

자주 사용되는 PF_INET은 프로토콜 패밀리중 하나입니다.

   

   

AF_INET은 주소 패밀리중 하나입니다. 종류는 아래와 같은 것이 있습니다.

   


주소 체계 (Address Family)

정의

AF_INET

IPv4 인터넷 프로토콜

AF_INET6

IPv6 인터넷 프로토콜

AF_LOCAL

Local 통신위한 UNIX 프로토콜


   

이놈들은 주소 구조체 안에 주소 패밀리를 정의할 때 사용합니다.

   

   

프로토콜 체계를 나타내는 PF_INET과 주소 체계를 나타내는 AF_INET은 같은 상수 값을 가지고 있습니다.



그렇다고 해서 주소 정보를 설정하는 부분에 PF_INET을 사용하고 프로토콜 정보를 설정하는 부분에



AF_INET을 넣는것은 좋지 않습니다. 결과적으로 프로토콜 체계를 설정하는 부분은 PF로 시작하는 상수를



사용하고 주소 체계를 설정하는 부분은 AF로 시작하는 상수를 사용하는 것이 좋습니다.

   

   

실제 코딩 부분에서 socket()함수에 프로토콜 패밀리에 AF_INET을 넣어도 되지만 PF_INET을 넣는게



바람직 하고 struct sockaddr_in 구조체에 주소 체계를 넣을 때도 PF_INET을 넣어도 되지만 AF_INET을 넣는것



이 바람직합니다. 인터넷이나 책을 보면 아무거나 넣어도 된다고 나오는 경우도 많이 보았는데


   

개념적인 차이점이 있기 때문에 적절하게 사용하셔야 합니다.



출처 : http://blog.naver.com/ifkiller/70081338273