INET(4)

명칭
inet - 인터넷 프로토콜 패밀리

서식
#include <sys/types.h> #include <netinet/in.h>

해설
인터넷 프로토콜 패밀리는 Internet Protocol (IP) 트랜스폴트층 위에 위치해, 인터넷 주소 포맷을 이용하는 프로토콜군입니다. 인터넷 패밀리는, SOCK_STREAM, SOCK_DGRAM 및 SOCK_RAW 소켓 타입을 위한 프로토콜의 서포트를 제공합니다. SOCK_RAW 인터페이스는 IP 프로토콜에의 액세스를 제공합니다.

애드레싱
인터넷 주소는 4 바이트의 크기이며, 네트워크 표준 포맷으로 격납되고 있습니다 ( VAX 그럼, 워드, 바이트의 순서를 반대로 한 것입니다). 인클루드 파일 <netinet/in.h> 그럼, 이 주소를 구분된 공용체로서 정의하고 있습니다.

인터넷 프로토콜 패밀리에게 결합된 소켓은, 다음의 애드레싱 구조체를 이용합니다.

    struct sockaddr_in {
    	u_char	sin_len;
    	u_char	sin_family;
    	u_short	sin_port;
    	struct	in_addr sin_addr;
    	char	sin_zero[8];
    };

도착 메세지에 대한다 “와일드 카드” 매칭의 효과를 얻는 경우, INADDR_ANY 로컬 주소를 이용해, 소켓을 생성할 수가 있습니다. connect(2) 혹은 sendto(2) 의 호출로 주는 주소로서 “이 호스트” (을)를 의미하기 위해서, INADDR_ANY (을)를 주어도 상관하지 않습니다. 만약 최초부터 네트워크가 브로드캐스트를 서포트하도록(듯이) 설정 되고 있으면, 특별한 주소이다 INADDR_BROADCAST 하지만, 프라이머리 네트워크상의 브로드캐스트 어드레스를 나타내는 약기로서 용서되고 있습니다.

프로토콜
인터넷 프로토콜 패밀리는, IP 네트워크 프로토콜, 인터넷 컨트롤 메세지 프로토콜 (ICMP) , 인터넷 그룹 매니지먼트 프로토콜 (IGMP) , 트랜스미션 컨트롤 프로토콜 (TCP) , 및 유저 데이터 그램 프로토콜 (UDP) (으)로부터 됩니다. TCP 하 SOCK_STREAM 아브스트라크션을 서포트하기 위해서 사용되어 UDP 하 SOCK_DGRAM 아브스트라크션을 서포트하기 위해서 사용됩니다. IP 에 대한 raw 인터페이스가, SOCK_RAW 타입의 인터넷 소켓을 생성하는 것으로써 이용 가능합니다. ICMP 메세지 프로토콜이 raw 소켓으로부터 액세스 가능합니다.

32 비트의 인터넷 주소는 네트워크부와 호스트부의 양쪽 모두를 포함하고 있습니다. 그렇지만, 주소에 대해서 직접 검사하는 것은 추천 되지 않습니다. 아무래도 주소를 그 2 개의 부분에 분할할 필요가 있는 프로그램의 위해(때문에), 다음의 ioctl(2) 명령이 인터넷 도메인의 데이터 그램 소켓전용으로 제공되고 있습니다. 그것들은 SIOCIFADDR 명령 ( intro(4) (을)를 참조 )와 같은 형식을 가집니다.

SIOCSIFNETMASK
    인터페이스의 네트워크 마스크를 설정합니다. 네트워크 마스크는 주소의 네트워크부를 정의합니다. 만약 그것이 주소 타입이 가리키는 것보다도 많은 주소를 포함한다면, 서스네트워크가 사용되고 있습니다.

SIOCGIFNETMASK
    인터페이스의 네트워크 마스크를 얻습니다.

루팅
인터넷 프로토콜의 현재의 실장은, 트랜잭션(transaction) TCP (Transaction TCP) 및 경로의 MTU 검출 (Path MTU Discovery) 에 필요한 어떤 종류의 엔드 투 엔드 정보에 대한 강력한 캐싱을 제공하기 위해서, routing table에 대한다 몇개의 조정을 포함하고 있습니다. 다음에 나타내는 변경이 가장 중요합니다 :

1.  RTF_CLONING 플래그 붙어 혹은 멀티 캐스트의 종점앞 이외의 IP 경로는 RTF_PRCLONING 플래그를 강제적으로 세울 수 있습니다 (이것은 “프로토콜 클로닝” (으)로 불립니다. )

2.  어느 IP 경로에의 마지막 참조가 결핍 하고 있는 경우, 그 경로가, 그러한 경로를 카피하는 것으로써 생성되었는지 어떠했는지가 검사됩니다. 만약 그렇다면, RTF_PROTO3 플래그를 세울 수 있어 net.inet.ip.rtexpire 초이내에 소거되도록(듯이) 무효화를 위한 타이머가 초기화됩니다. 그러한 경로가 다시 참조되면(자), 플래그와 타이머는 리셋트 됩니다.

3.  10 분에 1 회, 혹은 커널의 routing table에 기한 마감 직전의 경로가 존재하자마자 커널 타임 아웃이 실행되어 기한 마감의 경로를 삭제합니다.

캐쉬되고 있는 경로가 너무 커졌을 경우, net.inet.ip.rtexpire 의 값을 변경하기 위한 동적인 처리가 실행됩니다. 기한 마감 소거의 실행 후에, net.inet.ip.rtmaxcache 보다 많은 수의 경로가 참조되지 않은 채 남아 있는 경우, rtexpire 가 3/4 로 되어 이것보다 긴 기한을 가진다 모든 경로의 기한이 조정됩니다. 최소의 rtexpire 치 (net.inet.ip.rtminexpire)의 지정 및 이 삭감을 10 분에 1 회 간격으로 일어나도록(듯이) 제한하는 것으로써, 이 프로세스의 효과는 얼마인가 작아집니다.

어떠한 외부 프로세스가, 프로토콜 클론으로 만들어진 경로의 오리지날의 경로를 삭제했을 경우, 「아이의 경로」는 삭제됩니다. (실제의 곳, 이것은, 프로토콜 요구 클로닝을 서포트한다 루팅 코드에 있어서의 일반적인 메카니즘입니다. )

프로토콜 클로닝에 의해 생성된 것은 아닌 경로를 관리한다 시도 하행인 깨지지 않습니다. 그것들은 정적이고, 외부의 루팅 프로세스나, 혹은 링크층 (예를 들어 이더넷(ethernet)에 있어서의 ARP) 의 관리하에 있으면(자) 상정됩니다.

어떤 종류의 네트워크 활동만이, 이 메카니즘을 이용해 경로의 클로닝 (을)를 행합니다. 특별히 있는 행선지를 가져, 오랫동안 계속하는 경로의 참조를 자기 자신으로 캐쉬 하는 프로토콜 ( TCP (이)나 UDP (와)과 같은 ) (은)는, 이 메카니즘을 기동하는 계기가 됩니다. 한편, 로컬에 생성된 것이든 포워드 된 것이든, 생의 IP 패킷이라고, 이 메카니즘은 기동하지 않습니다.

MIB 변수
sysctl(3) MTB 의 net.inet 브랜치(branch)에는, 많은 변수가 실장되고 있습니다. 트랜스폴트 프로토콜에 의해 서포트되는 변수 (각각의 메뉴얼 페이지를 참조해 주세요) 에 가세해 다음의 일반적인 변수가 정의되고 있습니다.

IPCTL_FORWARDING
    (ip.forwarding) 불리언 값: IP 패킷의 forwarding를 가능하게 하는 / 억제한다 (디폴트에서는 커널 설정 옵션 GATEWAY 에 의합니다).

IPCTL_SENDREDIRECTS
    (ip.redirect) 불리언 값: 포워드 할 수 없다 IP 패킷에 대해 ICMP 리디렉트를 송출하는 / 송출하지 않는다 (디폴트는 진).

IPCTL_DEFTTL
    (ip.ttl) 정수치: 외에 나간다 IP 패킷의 디폴트의 생존 시간.

IPCTL_SOURCEROUTE
    (ip.sourceroute) 불리언 값: 시점 경로 제어된 IP 패킷의 포워드를 가능하게 하는 / 억제한다 (디폴트는 가짜).

IPCTL_RTEXPIRE
    (ip.rtexpire) 정수치: 프로토콜 클론 되었다 IP 경로의, 마지막 참조가 종료한 후의 초단위의 생존 시간 (디폴트는 1 시간). 상기와 같이, 이 값은 동적으로 변화합니다.

IPCTL_RTMINEXPIRE
    (ip.rtminexpire) 정수치: ip.rtexpire 의 최소치 (디폴트는 10 초). 이 값은 유저에 의한 변경에 대해서는 효과가 없고, 상기와 같은 동적 조정에 한정되어 있습니다.

IPCTL_RTMAXCACHE
    (ip.rtmaxcache) 정수치: 캐쉬되어 한편 참조되지 않고, 한편 프로토콜 클론 된 경로의, 동적인 조정을 개시하는 방아쇠 레벨 (디폴트는 128).

관련 항목
ioctl(2), socket(2), sysctl(3), icmp(4), igmp(4), intro(4), ip(4), tcp(4), ttcp(4), udp(4) An Introductory 4.3 BSD Interprocess Communication Tutorial, PS1, 7. An Advanced 4.3 BSD Interprocess Communication Tutorial, PS1, 8.

경고
인터넷 프로토콜의 서포트는, 인터넷 프로토콜의 발전에 종속되고 있습니다. 유저는 현재의 실장의 상세하게 의존해 안되어, 오히려 export 된 서비스에 의존해야 합니다.

역사
inet 프로토콜 인터페이스는 4.2BSD 그리고 등장했습니다. “프로토콜 클로닝” 의 코드는 FreeBSD 2.1 그리고 등장했습니다.