source

AF_의 차이점은 무엇입니까?소켓 프로그래밍의 INET 및 PF_INET?

goodcode 2022. 8. 14. 12:00
반응형

AF_의 차이점은 무엇입니까?소켓 프로그래밍의 INET 및 PF_INET?

AF_의 차이점은 무엇입니까?소켓 프로그래밍의 INET 및 PF_INET?

AF_를 사용하는지 헷갈린다.INET 및 PF_INET의 경우socket()그리고.bind().

또한 ip-address를 지정하는 방법sin_addr필드?

Beej의 유명한 네트워크 프로그래밍 가이드는 다음과 같은 훌륭한 설명을 제공합니다.

일부 문서에서는 신비로운 "PF_INET"에 대한 언급을 볼 수 있습니다.이 괴물은 자연에서는 보기 드문 이상한 에테르성 동물이지만, 여기서 좀 더 명확히 하는 것이 좋을 것 같습니다.옛날에는 주소 패밀리("AF_INET"의 "AF"가 나타내는 것)가 프로토콜 패밀리("PF_INET"의 "PF"가 나타내는 것)에 의해 참조되는 여러 프로토콜을 지원할 수 있다고 생각되었습니다.
그런 일은 일어나지 않았다.아, 그렇군요.따라서 올바른 방법은 구조 sockaddr_in에서 AF_INET을 사용하고 socket()에 대한 호출에서 PF_INET을 사용하는 것입니다.그러나 실질적으로 AF_INET은 어디에서나 사용할 수 있습니다.W. 리처드 스티븐스가 그의 책에서 그렇게 했으니까, 내가 여기서 그렇게 할 거야.

Linux 커널 소스 코드에서 PF_를 찾았습니다.INET 및 AF_INET도 똑같아요.다음 코드는 Linux 커널 3.2.21 트리의 include/linux/socket.h, 204행에서 가져온 것입니다.

/* Protocol families, same as address families. */
...
#define PF_INET     AF_INET
  • AF = 주소 패밀리
  • PF = 프로토콜 제품군

의미.AF_INET는, 인터넷으로부터의 주소, 특히 IP 주소를 나타냅니다. PF_INET프로토콜 내의 모든 것(일반적으로 소켓/포트)을 나타냅니다.

소켓 (2) 및 bind(2)man 페이지를 읽어보십시오.를 위해sin_addr필드를 설정하려면 다음과 같은 작업을 수행합니다.

struct sockaddr_in addr;
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr); 

실제로 AF_와 PF_는 동일합니다.위키피디아에는 당신의 혼란을 해소해줄 단어들이 몇 개 있다.

프로토콜 유형(패밀리)과 각각 사용할 수 있는 특정 주소 유형을 구별하는 소켓인터페이스의 원래 설계 개념.프로토콜 패밀리는 여러 가지 주소 유형을 가질 수 있습니다.주소 유형은 PF_ 대신 프리픽스 AF_를 사용하여 추가 심볼 상수에 의해 정의되었습니다.AF_identifier는 프로토콜 패밀리가 아닌 주소 유형을 다루는 모든 데이터 구조를 대상으로 합니다.그러나 프로토콜과 주소 유형의 분리 개념은 구현 지원을 찾지 못했고 AF_정수는 단순히 대응하는 프로토콜 식별자에 의해 정의되었기 때문에 AF_상수와 PF_상수의 구별은 유의미한 실질적인 결과가 없는 기술적 논거가 되었다.실제로, 두 가지 형태의 적절한 사용에는 많은 혼란이 존재한다.

AF_INET = 주소 형식, 인터넷 = IP 주소

PF_INET = 패킷 형식, 인터넷 = IP, TCP/IP 또는 UDP/IP

AF_INET은 작성하는 소켓(이 경우 인터넷 프로토콜 주소)에 사용되는 주소 패밀리입니다.예를 들어 Linux 커널은 UNIX 소켓 및 IPX와 같은 29개의 다른 주소 패밀리와 IRDA 및 블루투스(AF_)와의 통신을 지원합니다.IRDA 및 AF_BLUTOUS는 낮은 레벨에서 사용할 수 있을지 의문입니다).

대부분의 경우 AF_로 고정됩니다.네트워크를 통한 소켓프로그래밍용 INET은 가장 안전한 옵션입니다.

즉, AF_INET 는, 인터넷으로부터의 주소, 특히 IP 주소를 가리킵니다.

PF_INET은 프로토콜 내의 모든 것(일반적으로 소켓/포트)을 나타냅니다.

헤더 파일 해결 방법을 확인하는 것이 문제입니다.시스템 컴파일러가 있는지 확인할 수 있습니다.

시스템의 경우 AF_INET == PF_인넷

AF == Address Family 및 PF == Protocol Family

프로토콜 패밀리 주소 패밀리와 같죠

여기에 이미지 설명 입력

중요한 상황들이 있다.

AF_'INET 'socket()Cygwin에서는 소켓이 랜덤으로 리셋되거나 리셋되지 않을 수 있습니다.PF_INET에 관한 정보입니다.

Sygwin은 소켓프로그래밍에는 큰 혼란이지만 AF_가 존재하는 현실세계의 경우입니다.INET과 PF_INET은 동일하지 않습니다.

언급URL : https://stackoverflow.com/questions/6729366/what-is-the-difference-between-af-inet-and-pf-inet-in-socket-programming

반응형