기본 색인 | 섹션 4 | English | 日本語 | 옵션 |
네트워크 프로토콜은, 모두 특정의 프로토콜 패밀리 (와)과 관련 지을 수 있고 있습니다. 프로토콜 패밀리는, 프로토콜이 특정의 네트워크 환경하에서 기능할 수 있도록(듯이) 하기 위한(해), 프로토콜의 실장에 대해서의 기본적인 서비스를 제공합니다. 이러한 서비스는 패킷의 분할 및 통합, 루팅, 애드레싱, 그리고 기본적인 전송 등도 포함되겠지요. 현재의 프로토콜의 실장에서는 서포트되고 있지 않습니다 하지만, 프로토콜 패밀리는, 복수의 애드레싱 방법을 제공 할지도 모릅니다. 프로토콜 패밀리에게는, 통상 각 socket(2) 타입에 1 개씩과 같이, 다수의 프로토콜이 포함되어 있습니다. 프로토콜 패밀리는, 모든 소켓 타입을 서포트할 필요는 없습니다. 프로토콜 패밀리에게는, 동일한 소켓트아브스트라크션을 서포트 하기 위해서, 복수의 프로토콜이 포함되는 일이 있습니다.
프로토콜은, socket(2) 그리고 자세하게 결정할 수 있던 소켓트아브스트라크션의 1 개를 서포트합니다. 특정의 프로토콜에는, 적절한 프로토콜 패밀리와 타입의 소켓을 작성하는지, 소켓을 작성할 때에 명시적으로 그 프로토콜을 요구 하는 것에 의해 액세스 할 수가 있습니다. 프로토콜은, 통상 1 종류의 주소 포맷만을 받습니다. 통상, 그 주소 포맷은, 프로토콜 패밀리와 네트워크 아키텍쳐의 디자인에 필요한 애드레싱 구조체를 이용해 정의되고 있습니다. 어느 기본적인 소켓트아브스트라크션의 시멘틱스는, 프로토콜에 특유의 것입니다. 프로토콜은 모두 각각 특유의 소켓 타입에 대한 기본 모델 (을)를 서포트하게 되어 있습니다. 그러나, 게다가 그 메카니즘에 대해서, 표준적이 아닌 기구나 확장 기능을 제공하는 일도 있습니다. 예를 들면, SOCK_STREAM (을)를 서포트하는 프로토콜이, 각 대역외 (out-of-band) 메세지에 대해 1 바이트 이상의 대역외 메세지를 송신할 수가 있습니다.
네트워크 인터페이스는, 디바이스 인터페이스와 닮아 있습니다. 네트워크 인터페이스는, 네트워크 하부조직의 최하정도층 (을)를 구성합니다. 이것은, 실제의 송신용 하드웨어와 서로 영향을 줍니다. 네트워크 인터페이스는, 1 개(살) 이상의 프로토콜 패밀리나 주소 포맷을 서포트 가능합니다. 각 네트워크 인터페이스의 엔트리의 서식 (SYNOPSIS)의 섹션 에는, config(8) 프로그램에 시스템의 상세를 제공할 때에 사용되는, 관련 드라이버의 사양의 예가 있습니다. 진단 (DIAGNOSTICS)의 섹션의 메세지 일람은, 디바이스를 조작중에 일어나는 에러에 기인해, 콘솔이나 시스템 우류 로그 /var/log/messages ( syslogd(8) (을)를 참조) 안에 출력되는 것입니다.
struct sockaddr { u_char sa_len; u_char sa_family; char sa_data[14]; };
sa_len 필드에는, 이 구조체 전체의 길이가 들어갑니다. 이 길이는 16 바이트를 넘을지도 모릅니다. 다음에 나타낸다 sa_family 용무의 주소치는, 시스템측에서 기존인 물건입니다 (장래 실장될지도 모르는 포맷도 더해, 여기서 정의하고 있습니다).
#define AF_UNIX 1 /* 로컬 호스트 (파이프, 포트) */ #define AF_INET 2 /* 인터넷: UDP, TCP 등 */ #define AF_NS 6 /* Xerox NS 프로토콜 */ #define AF_CCITT 10 /* CCITT 프로토콜, X. 25 등 */ #define AF_HYLINK 15 /* NSC 하이퍼 채널 */ #define AF_ISO 18 /* ISO 프로토콜 */
유저 프로세스 (혹은, 복수의 서로 서로 협조한 프로세스)는, 특별한 종류의 소켓을 통해 메세지를 보내는 것으로, 이 데이타베이스를 관리하고 있습니다. 이 방법이, 이전의 릴리스로 사용되고 있던 고정장의 ioctl(2) 에 취해 대신했습니다.
이 기구에 대해서는, route(4) 에 설명이 있습니다.
다음의 ioctl(2) 콜은, 네트워크 인터페이스를 조작하는데 사용됩니다. ioctl() 함수는, 소망한 도메인의 소켓 (특히 SOCK_DGRAM 형) 위에서 실행합니다. 이전의 릴리스로 서포트되고 있던 리퀘스트의 상당수는, 파라미터에 ifreq 구조몸을 잡고 있었습니다. 이 구조체는, 다음의 형식입니다
struct ifreq { #define IFNAMSIZ 16 char ifr_name[IFNAMSIZ]; /* if 명이며, 예를 들면 "en0" */ union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; short ifru_flags; int ifru_metric; int ifru_mtu; int ifru_phys; caddr_t ifru_data; } ifr_ifru; #define ifr_addr ifr_ifru.ifru_addr /* 주소 */ #define ifr_dstaddr ifr_ifru.ifru_dstaddr /* p-to-p 링크의 이제(벌써) 한편의 종단 */ #define ifr_broadaddr ifr_ifru.ifru_broadaddr /* 브로드캐스트 어드레스*/ #define ifr_flags ifr_ifru.ifru_flags /* 플래그 */ #define ifr_metric ifr_ifru.ifru_metric /* 시학 */ #define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ #define ifr_phys ifr_ifru.ifru_phys /* 물리적인 선 */ #define ifr_data ifr_ifru.ifru_data /* 인터페이스가 사용 */ };
현재는비추천의 시스템 콜은 다음과 같습니다.
SIOCSIFADDR | 프로토콜 패밀리용의 인터페이스 주소를 설정합니다. 주소의 할당에 이어, 인터페이스용의 ``초기화''routine가 불립니다. |
SIOCSIFDSTADDR | |
프로토콜 패밀리 및 인터페이스용의, point to point 주소를 설정합니다. | |
SIOCSIFBRDADDR | |
프로토콜 패밀리 및 인터페이스용의, 브로드캐스트 어드레스를 설정합니다. | |
주소를 취득하기 위한 ioctl() 리퀘스트와 주소 이외의 데이터를 설정하거나 검색하거나하기 위한 리퀘스트에 대해서는, 지금도 완전하게 서포트하고 있어, ifreq 구조체를 사용하고 있습니다.
SIOCGIFADDR | 프로토콜 패밀리용의, 인터페이스 주소를 취득합니다. |
SIOCGIFDSTADDR | |
프로토콜 패밀리 및 인터페이스용의, point to point 주소를 취득합니다. | |
SIOCGIFBRDADDR | |
프로토콜 패밀리 및 인터페이스용의, 브로드캐스트 어드레스를 취득합니다. | |
SIOCSIFFLAGS | 인터페이스 플래그의 필드를 세트 합니다. 만약, 인터페이스가 동작 하고 있지 않다고 하는 표 (down)가 붙여지면(자), 현재 그 인터페이스를 통해 패킷을 루팅 하고 있는 모든 프로세스는 통지를 받습니다. 인터페이스에 따라서는, 새롭게 들어 오는 패킷을 이제 받지 않게 하기 위해서 리셋트 하는 것이 있습니다. 다시 동작하고 있다고 하는 표 (up) 하지만 붙여지면(자), 인터페이스는 재초기화됩니다. |
SIOCGIFFLAGS | 인터페이스 플래그를 취득합니다. |
SIOCSIFMETRIC | 인터페이스의 routing metric를 설정합니다. 이 시학은, 유저 레벨의 라우터만으로 사용됩니다. |
SIOCGIFMETRIC | 인터페이스 시학을 취득합니다. |
새로운 구조체를 사용하는 리퀘스트는 2 개 있습니다.
SIOCAIFADDR | 프로토콜에 따라서는, 단일의 인터페이스에 대해서 복수의 주소를 관련지을 수 있는 것이 있습니다. 이 리퀘스트는, 새로운 주소를 추가한다 수단을 제공합니다 (혹은, 주소 패밀리용의 디폴트 주소가 지정되어 있으면, 프라이머리 주소의 특징을 변경합니다). 종점 주소, 브로드캐스트 어드레스 혹은 네트워크 마스크를 설정하기 위해서 다른 시스템 콜을 만드는 것이 아니라 (현재는, 복수의 프로토콜로 필요 불가결한 특징입니다), 이러한 3 개의 것을 동시에 지정하기 위해서 다른 구조체를 이용합니다 (아래와 같이 참조). 각 패밀리 전용에, 이 구조체를 조금 수정한 버젼을 사용하는 일도 있겠지요 ( 각 sockaddr 구조체를 패밀리 특유의 것에 바꾸는 등). sockaddr 구조체 자신이 디폴트의 크기보다 큰 경우에는, ioctl() 로 말한 것처럼, ioctl() 식별자 자체를 전체가 들어가도록(듯이) 변경할 필요가 있습니다. |
SIOCDIFADDR | 이 리퀘스트는, 인터페이스에 관련지을 수 있었던 리스트로부터, 지정한 주소를 삭제합니다. 이 리퀘스트는 if_aliasreq 구조체도 사용하는 것으로써, 복수의 네트워크 마스크나 종점 주소를 프로토콜이 허가하는 일도 가능하게 합니다. 또, 디폴트 주소를 지정하는 것은, 이 주소 패밀리에 속하는 것의 집에서, 이 소켓을 최초로 열었을 때의 최초의 인터페이스 주소를 삭제하는 것을 의미한다고 하는 약속한 일의 형태를, 이 리퀘스트는 채용하고 있습니다. |
SIOCGIFCONF | 인터페이스의 설정 리스트를 취득합니다. 이 리퀘스트는 값과 결과의 양용의 파라미터 (value-result parameter)로서 ifconf 구조몸을 잡습니다 (아래와 같이 참조). ifc_len 필드에는, 최초로, ifc_buf 그리고 지시해진 버퍼의 크기를 세트 해 두지 않으면 안됩니다. 돌아올 때, 이 필드에는 설정 리스트의 바이트 단위의 크기가 들어갑니다. |
/* * SIOCAIFCONF 로 사용되는 구조체 */ struct ifaliasreq { char ifra_name[IFNAMSIZ]; /* if 명이며, 예를 들면 "en0" */ struct sockaddr ifra_addr; struct sockaddr ifra_broadaddr; struct sockaddr ifra_mask; };
/* * SIOCGIFCONF 리퀘스트로 사용되는 구조체. * 머신의 인터페이스의 설정을 검색하는데 사용됩니다 * (액세스 가능한 네트워크를 모두 알아 두지 않으면 안 된다 * 프로그램에 유용합니다). */ struct ifconf { int ifc_len; /* 관련 버퍼의 크기 */ union { caddr_t ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; #define ifc_buf ifc_ifcu.ifcu_buf /* 버퍼 주소 */ #define ifc_req ifc_ifcu.ifcu_req /* 돌려주어지는 구조체의 배열 */ };
BSD 4.2 | NETINTRO (4) | November 30, 1993 |
기본 색인 | 섹션 4 | English | 日本語 | 옵션 |
Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.
“ | The number of UNIX installations has grown to 10, with more expected. | ” |
— UNIX Programming Manual, 1972 |