Man page - ip(7)

Packages contains this manual

Available languages:

en fr es pl ja zh_TW zh_CN

Manual

IP

名 前
書 式
説 明
ア ド レ ス の フ ォ ー マ ッ ト
ソ ケ ッ ト オ プ シ ョ ン
/proc イ ン タ ー フ ェ ー ス
ioctl
エ ラ ー
注 意
移 植 性
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

ip - Linux IPv4 プ ロ ト コ ル の 実 装

書 式

#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
/* 上 記 の ス ー パ ー セ ッ ト */

tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
udp_socket
= socket(AF_INET, SOCK_DGRAM, 0);
raw_socket
= socket(AF_INET, SOCK_RAW, protocol );

説 明

Linux は RFC 791 と RFC 1122 で 記 述 さ れ て い る Internet Protocol, version 4 を 実 装 し て い る 。 ip に は RFC 1112 に 準 拠 し た level 2 マ ル チ キ ャ ス ト の 実 装 が 含 ま れ て い る 。 ま た パ ケ ッ ト フ ィ ル タ 機 能 を 含 む IP ル ー タ ー も 実 装 さ れ て い る 。

プ ロ グ ラ ミ ン グ イ ン タ ー フ ェ ー ス は BSD ソ ケ ッ ト と 互 換 で あ る 。 ソ ケ ッ ト に 関 す る よ り 詳 細 な 情 報 は socket (7) を 参 照 の こ と 。

An IP socket is created using socket (2):

socket(AF_INET, socket_type, protocol);

Valid socket types include SOCK_STREAM to open a stream socket, SOCK_DGRAM to open a datagram socket, and SOCK_RAW to open a raw (7) socket to access the IP protocol directly.

protocol is the IP protocol in the IP header to be received or sent. Valid values for protocol include:

0 and IPPROTO_TCP for tcp (7) stream sockets;

0 and IPPROTO_UDP for udp (7) datagram sockets;

IPPROTO_SCTP for sctp (7) stream sockets; and

IPPROTO_UDPLITE for udplite (7) datagram sockets.

For SOCK_RAW you may specify a valid IANA IP protocol defined in RFC 1700 assigned numbers.

あ る プ ロ セ ス で 、 や っ て く る パ ケ ッ ト を 受 信 し た り 接 続 要 求 を 受 け た り し た い 場 合 に は 、 そ の プ ロ セ ス は ロ ー カ ル な イ ン タ ー フ ェ ー ス ア ド レ ス に 、 bind (2) を 用 い て ソ ケ ッ ト を バ イ ン ド し な け れ ば な ら な い 。 こ の 場 合 、 ロ ー カ ル の 「 ア ド レ ス と ポ ー ト 」 の ペ ア に 対 し て バ イ ン ド で き る IP ソ ケ ッ ト は 一 つ だ け で あ る 。 bind (2) の 呼 び 出 し で INADDR_ANY が 指 定 さ れ て い た 場 合 は 、 ソ ケ ッ ト は す べ て の ロ ー カ ル イ ン タ ー フ ェ ー ス に バ イ ン ド さ れ る 。 listen (2) が バ イ ン ド さ れ て い な い ソ ケ ッ ト に 対 し て コ ー ル さ れ る と 、 そ の ソ ケ ッ ト は 、 ロ ー カ ル ポ ー ト は ラ ン ダ ム に 選 択 さ れ た 空 い て い る ポ ー ト で 、 ロ ー カ ル ア ド レ ス は INADDR_ANY で 自 動 的 に バ イ ン ド さ れ る 。 connect (2) が バ イ ン ド さ れ て い な い ソ ケ ッ ト に 対 し て コ ー ル さ れ る と 、 そ の ソ ケ ッ ト は 、 ロ ー カ ル ポ ー ト は ラ ン ダ ム に 選 択 さ れ た 空 い て い る ポ ー ト か 未 使 用 の 共 有 ポ ー ト で 、 ロ ー カ ル ア ド レ ス は INADDR_ANY で 自 動 的 に バ イ ン ド さ れ る 。

SO_REUSEADDR フ ラ グ が セ ッ ト さ れ て い な い 場 合 に は 、 バ イ ン ド さ れ て い た TCP ロ ー カ ル ソ ケ ッ ト ア ド レ ス は ク ロ ー ズ さ れ た 後 し ば ら く の 間 使 え な く な る 。 SO_REUSEADDR フ ラ グ を 使 う と TCP の 信 頼 性 を 低 下 さ せ る の で 、 使 う と き に は 注 意 が 必 要 で あ る 。

ア ド レ ス の フ ォ ー マ ッ ト

IP ソ ケ ッ ト ア ド レ ス は 、 IP イ ン タ ー フ ェ ー ス ア ド レ ス と 16ビ ッ ト の ポ ー ト 番 号 の 組 み 合 わ せ で 定 義 さ れ る 。 IP プ ロ ト コ ル そ の も の は ポ ー ト 番 号 を 扱 わ な い 。 ポ ー ト 番 号 は 、 udp (7) や tcp (7) と い っ た 、 上 位 の プ ロ ト コ ル で 実 装 さ れ る 。 raw ソ ケ ッ ト で は 、 sin_port が IP プ ロ ト コ ル に セ ッ ト さ れ る 。

struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};

/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};

sin_family is always set to AF_INET . This is required; in Linux 2.2 most networking functions return EINVAL when this setting is missing. sin_port contains the port in network byte order. The port numbers below 1024 are called privileged ports (or sometimes: reserved ports ). Only a privileged process (on Linux: a process that has the CAP_NET_BIND_SERVICE capability in the user namespace governing its network namespace) may bind (2) to these sockets. Note that the raw IPv4 protocol as such has no concept of a port, they are implemented only by higher protocols like tcp (7) and udp (7).

sin_addr is the IP host address. The s_addr member of struct in_addr contains the host interface address in network byte order. in_addr should be assigned one of the INADDR_* values (e.g., INADDR_LOOPBACK ) using htonl (3) or set using the inet_aton (3), inet_addr (3), inet_makeaddr (3) library functions or directly with the name resolver (see gethostbyname (3)).

IPv4 ア ド レ ス に は 、 ユ ニ キ ャ ス ト ア ド レ ス 、 ブ ロ ー ド キ ャ ス ト ア ド レ ス 、 マ ル チ キ ャ ス ト ア ド レ ス が あ る 。 ユ ニ キ ャ ス ト ア ド レ ス は 、 あ る ホ ス ト の 一 つ の ア ド レ ス を 指 定 す る 。 ブ ロ ー ド キ ャ ス ト ア ド レ ス は 、 あ る ネ ッ ト ワ ー ク 上 の 全 て の ホ ス ト を 指 定 す る 。 マ ル チ キ ャ ス ト ア ド レ ス は 、 マ ル チ キ ャ ス ト グ ル ー プ に 所 属 す る 全 て の ホ ス ト を 指 定 す る 。 ブ ロ ー ド キ ャ ス ト ア ド レ ス へ の デ ー タ グ ラ ム は 、 SO_BROADCAST ソ ケ ッ ト フ ラ グ が セ ッ ト さ れ て い な い と 送 信 ・ 受 信 で き な い 。 現 在 の 実 装 で は 、 接 続 指 向 の ソ ケ ッ ト に は ユ ニ キ ャ ス ト ア ド レ ス し か 使 え な い 。

ア ド レ ス と ポ ー ト は 常 に ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー で 格 納 さ れ る こ と に 注 意 せ よ 。 具 体 的 に は 、 ポ ー ト を 指 定 す る 数 値 に は htons (3) を 呼 び 出 す 必 要 が あ る 。 標 準 ラ イ ブ ラ リ に あ る ア ド レ ス /ポ ー ト 操 作 関 数 は す べ て ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー で 動 作 す る 。

特 別 な ア ド レ ス が い く つ か 存 在 す る : INADDR_LOOPBACK (127.0.0.1) は loopback デ バ イ ス を 通 し て 常 に ロ ー カ ル な ホ ス ト を 参 照 す る 。 INADDR_ANY (0.0.0.0) は 任 意 の ア ド レ ス を 意 味 し 、 バ イ ン ド 用 で あ る 。 INADDR_BROADCAST (255.255.255.255) は 任 意 の ホ ス ト を 意 味 し 、 歴 史 的 理 由 か ら 、 バ イ ン ド の 際 に は INADDR_ANY と 同 じ 効 果 に な る 。

ソ ケ ッ ト オ プ シ ョ ン

IP に は プ ロ ト コ ル 固 有 の ソ ケ ッ ト オ プ シ ョ ン が い く つ か 存 在 し 、 setsockopt (2) で 設 定 が 、 getsockopt (2) で 取 得 が で き る 。 IP の ソ ケ ッ ト オ プ シ ョ ン レ ベ ル は IPPROTO_IP で あ る 。 ブ ー ル 整 数 値 の フ ラ グ で は 、 0 は 偽 、 そ れ 以 外 は 真 を 意 味 す る 。

When an invalid socket option is specified, getsockopt (2) and setsockopt (2) fail with the error ENOPROTOOPT .
IP_ADD_MEMBERSHIP
(Linux 1.2 以 降 )

マ ル チ キ ャ ス ト グ ル ー プ に 参 加 す る 。 引 数 は ip_mreqn 構 造 体 で あ る 。

struct ip_mreqn {
struct in_addr imr_multiaddr; /* IP multicast group
address */
struct in_addr imr_address; /* IP address of local
interface */
int imr_ifindex; /* interface index */
};

imr_multiaddr に は 、 ア プ リ ケ ー シ ョ ン が 参 加 ま た は 脱 退 し た い マ ル チ キ ャ ス ト グ ル ー プ の ア ド レ ス が 入 る 。 指 定 す る ア ド レ ス は 有 効 な マ ル チ キ ャ ス ト ア ド レ ス で な け れ ば な ら な い (さ も な け れ ば setsockopt (2) が エ ラ ー EINVAL で 失 敗 す る )。 imr_address は シ ス テ ム が マ ル チ キ ャ ス ト グ ル ー プ に 参 加 す る 際 に 用 い る ロ ー カ ル な イ ン タ ー フ ェ ー ス の ア ド レ ス で あ る 。 こ れ が INADDR_ANY で あ っ た 場 合 に は 、 適 切 な イ ン タ ー フ ェ ー ス が シ ス テ ム に よ っ て 選 択 さ れ る 。 imr_ifindex imr_multiaddr グ ル ー プ に 参 加 /脱 退 す る イ ン タ ー フ ェ ー ス の interface index で あ る 。 ど の イ ン タ ー フ ェ ー ス で も よ い 場 合 は 0 に す る 。

The ip_mreqn structure is available only since Linux 2.2. For compatibility, the old ip_mreq structure (present since Linux 1.2) is still supported; it differs from ip_mreqn only by not including the imr_ifindex field. (The kernel determines which structure is being passed based on the size passed in optlen .)

IP_ADD_MEMBERSHIP is valid only for setsockopt (2).

IP_ADD_SOURCE_MEMBERSHIP (Linux 2.4.22 以 降 / 2.5.68 以 降 )

マ ル チ キ ャ ス ト グ ル ー プ に 参 加 、 指 定 さ れ た 送 信 元 か ら の デ ー タ の 受 信 の み を 許 可 す る 。 引 数 は ip_mreq_source 構 造 体 で あ る 。

struct ip_mreq_source {
struct in_addr imr_multiaddr; /* IP multicast group
address */
struct in_addr imr_interface; /* IP address of local
interface */
struct in_addr imr_sourceaddr; /* IP address of
multicast source */
};

ip_mreq_source 構 造 体 は IP_ADD_MEMBERSHIP の 項 で 説 明 し た ip_mreqn に 似 て い る 。 imr_multiaddr フ ィ ー ル ド に は 、 ア プ リ ケ ー シ ョ ン が 参 加 ま た は 脱 退 し た い マ ル チ キ ャ ス ト グ ル ー プ の ア ド レ ス が 入 る 。 imr_interface フ ィ ー ル ド は 、 マ ル チ キ ャ ス ト グ ル ー プ に 参 加 す る 際 に シ ス テ ム が 使 用 す べ き ロ ー カ ル イ ン タ ー フ ェ ー ス の ア ド レ ス で あ る 。 imr_sourceaddr フ ィ ー ル ド に は 、 ア プ リ ケ ー シ ョ ン が デ ー タ を 受 信 し た い 送 信 元 の ア ド レ ス が 入 る 。

こ の オ プ シ ョ ン を 複 数 回 使 う こ と で 、 複 数 の 送 信 元 か ら の デ ー タ 受 信 を 許 可 す る こ と が で き る 。

IP_BIND_ADDRESS_NO_PORT (Linux 4.2 以 降 )

Inform the kernel to not reserve an ephemeral port when using bind (2) with a port number of 0. The port will later be automatically chosen at connect (2) time, in a way that allows sharing a source port as long as the 4-tuple is unique.

IP_BLOCK_SOURCE (since Linux 2.4.22 以 降 / 2.5.68 以 降 )

指 定 し た グ ル ー プ で 、 指 定 し た 送 信 元 か ら の マ ル チ キ ャ ス ト デ ー タ の 受 信 を 停 止 す る 。 こ の オ プ シ ョ ン は 、 ア プ リ ケ ー シ ョ ン が IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP の い ず れ か を 使 っ て マ ル チ キ ャ ス ト グ ル ー プ に 参 加 し た 後 で の み 有 効 で あ る 。

引 数 は ip_mreq_source 構 造 体 で あ る 。 IP_ADD_SOURCE_MEMBERSHIP の 項 に 説 明 が あ る 。

IP_DROP_MEMBERSHIP (Linux 1.2 以 降 )

マ ル チ キ ャ ス ト グ ル ー プ か ら 抜 け る 。 引 数 は IP_ADD_MEMBERSHIP と 同 様 に ip_mreqn ま た は ip_mreq 構 造 体 で あ る 。

IP_DROP_SOURCE_MEMBERSHIP (Linux 2.4.22 以 降 / 2.5.68 以 降 )

送 信 元 を 指 定 し て グ ル ー プ か ら 抜 け る 。 つ ま り 、 指 定 し た マ ル チ キ ャ ス ト グ ル ー プ の 指 定 さ れ た 送 信 元 か ら の デ ー タ 受 信 を 停 止 す る 。 ア プ リ ケ ー シ ョ ン は 同 じ マ ル チ キ ャ ス ト グ ル ー プ で 複 数 の 送 信 元 を 購 読 (subscribe) し て い る 場 合 に は 、 残 り の 送 信 元 か ら の デ ー タ の 受 信 は 引 き 続 き 配 信 さ れ る 。 す べ て の 送 信 元 か ら の デ ー タ 受 信 を 一 度 で 停 止 す る に は IP_DROP_MEMBERSHIP を 使 う こ と 。

引 数 は ip_mreq_source 構 造 体 で あ る 。 IP_ADD_SOURCE_MEMBERSHIP の 項 に 説 明 が あ る 。

IP_FREEBIND (Linux 2.4 以 降 )

こ の ブ ー ル 値 の オ プ シ ョ ン を 有 効 に す る と 、 ロ ー カ ル で は な い IP ア ド レ ス や 存 在 し な い IP ア ド レ ス を バ イ ン ド で き る よ う に な る 。 こ れ を 使 う と 、 対 応 す る ネ ッ ト ワ ー ク イ ン タ ー フ ェ イ ス が な か っ た り 、 ア プ リ ケ ー シ ョ ン が ソ ケ ッ ト を バ イ ン ド し よ う と す る 時 点 で 特 定 の 動 的 IP ア ド レ ス が 有 効 に な っ て い な か っ た り し て も 、 ソ ケ ッ ト を 接 続 待 ち 状 態 (listening) に で き る よ う に な る 。 こ の オ プ シ ョ ン は 、 下 記 に 説 明 が あ る ip_nonlocal_bind /proc イ ン タ ー フ ェ イ ス の ソ ケ ッ ト 単 位 の 設 定 で あ る 。

IP_HDRINCL (Linux 2.0 以 降 )

If enabled, the user supplies an IP header in front of the user data. Valid only for SOCK_RAW sockets; see raw (7) for more information. When this flag is enabled, the values set by IP_OPTIONS , IP_TTL , and IP_TOS are ignored.

IP_MSFILTER (since Linux 2.4.22 以 降 / 2.5.68 以 降 )

こ の オ プ シ ョ ン を 使 う と 、 高 度 な フ ィ ル タ リ ン グ API へ ア ク セ ス で き る 。 こ の API で は す べ て の 状 態 に ア ク セ ス で き る 。 引 数 は ip_msfilter 構 造 体 で あ る 。

struct ip_msfilter {
struct in_addr imsf_multiaddr; /* IP multicast group
address */
struct in_addr imsf_interface; /* IP address of local
interface */
uint32_t imsf_fmode; /* Filter-mode */

uint32_t imsf_numsrc; /* Number of sources in
the following array */
struct in_addr imsf_slist[1]; /* Array of source
addresses */
};

MCAST_INCLUDE MCAST_EXCLUDE の 2 つ の マ ク ロ が あ り 、 フ ィ ル タ リ ン グ モ ー ド を 指 定 す る の に 使 用 で き る 。 ま た 、 IP_MSFILTER_SIZE (n) マ ク ロ が あ り 、 送 信 元 リ ス ト に n 個 の 送 信 元 が 入 っ た ip_msfilter 構 造 体 を 格 納 す る の に 必 要 な メ モ リ ー 量 を 判 定 す る こ と が で き る 。

マ ル チ キ ャ ス ト 送 信 元 フ ィ ル タ リ ン グ の 全 容 は RFC 3376 を 参 照 の こ と 。

IP_MTU (Linux 2.2 以 降 )

Retrieve the current known path MTU of the current socket. Returns an integer.

IP_MTU is valid only for getsockopt (2) and can be employed only when the socket has been connected.

IP_MTU_DISCOVER (Linux 2.2 以 降 )

ソ ケ ッ ト の Path MTU Discovery の 設 定 を セ ッ ト ・ 取 得 す る 。 有 効 に な っ て い る と 、 Linux は SOCK_STREAM ソ ケ ッ ト に 対 し て RFC 1191 で 定 義 さ れ て い る Path MTU Discovery を 行 う 。 SOCK_STREAM で な い ソ ケ ッ ト に つ い て は 、 IP_PMTUDISC_DO を セ ッ ト す る と 、 全 て の 送 信 パ ケ ッ ト で フ ラ グ メ ン ト 不 許 可 フ ラ グ (don’t-fragment flag) が 必 ず セ ッ ト さ れ る よ う に な る 。 SOCK_STREAM で な い ソ ケ ッ ト で は 、 パ ケ ッ ト を MTU の サ イ ズ の 塊 に 分 割 し た り 、 必 要 に 応 じ て 再 送 し た り す る の は 、 ユ ー ザ ー が 責 任 を 持 っ て 行 う 必 要 が あ る 。 既 知 の Path MTU よ り も 大 き な デ ー タ グ ラ ム の 送 信 が 要 求 さ れ る と 、 カ ー ネ ル は ( EMSGSIZE で ) 送 信 を 拒 否 す る 。 IP_PMTUDISC_WANT の 場 合 は 、 Path MTU に 基 づ い て 必 要 で あ れ ば デ ー タ グ ラ ム の 分 割 が 行 わ れ 、 そ れ 以 外 の 場 合 は フ ラ グ メ ン ト 不 許 可 フ ラ グ が セ ッ ト さ れ る 。

シ ス テ ム 全 体 の デ フ ォ ル ト は IP_PMTUDISC_WANT IP_PMTUDISC_DONT の ど ち ら か に 設 定 す る こ と が で き る 。 設 定 の 変 更 は 、 /proc/sys/net/ipv4/ip_no_pmtu_disc フ ァ イ ル に 、 0 ( IP_PMTUDISC_WANT ) か 0 以 外 ( IP_PMTUDISC_DONT ) を 書 き 込 む こ と で 行 う 。

Image grohtml-4193987-1.png

path MTU discovery が 有 効 に な っ て い る と 、 カ ー ネ ル は 宛 先 ホ ス ト ご と に 自 動 的 に path MTU を 処 理 す る 。 特 定 の 相 手 に connect (2) で 接 続 し た 場 合 に は 、 IP_MTU ソ ケ ッ ト オ プ シ ョ ン を 用 い れ ば 、 既 知 の path MTU の 取 得 に 便 利 で あ る (た と え ば EMSGSIZE エ ラ ー が 起 き た 後 な ど )。 path MTU は 時 間 と と も に 変 化 す る か も し れ な い 。 宛 先 が た く さ ん あ る コ ネ ク シ ョ ン レ ス な ソ ケ ッ ト で は 、 与 え ら れ た 宛 先 に 対 す る 新 し い MTU に も 、 エ ラ ー キ ュ ー を 用 い て ア ク セ ス す る こ と が で き る ( IP_RECVERR を 見 よ )。 MTU 更 新 が 到 着 す る ご と に 、 新 た な エ ラ ー が キ ュ ー イ ン グ さ れ る 。

MTU discovery の 進 行 中 に は 、 デ ー タ グ ラ ム ソ ケ ッ ト か ら の 初 期 パ ケ ッ ト は 到 着 し な い か も し れ な い 。 UDP を 用 い る ア プ リ ケ ー シ ョ ン で は 、 こ の こ と を 気 に か け て お き 、 パ ケ ッ ト の 再 送 ア ル ゴ リ ズ ム に こ の 分 を 除 外 さ せ る べ き で あ る 。

To bootstrap the path MTU discovery process on unconnected sockets, it is possible to start with a big datagram size (headers up to 64 kilobytes long) and let it shrink by updates of the path MTU.

path MTU の 値 を ま ず 見 積 も っ て み る に は 、 宛 先 ア ド レ ス に connect (2) を 使 っ て デ ー タ グ ラ ム ソ ケ ッ ト を 接 続 し 、 getsockopt (2) を IP_MTU オ プ シ ョ ン と と も に 呼 び 、 MTU を 取 得 す る こ と で あ る 。

IP_PMTUDISC_PROBE (Linux 2.6.22 以 降 で 利 用 可 能 ) を 設 定 す る こ と で 、 SOCK_DGRAM SOCK_RAW の ソ ケ ッ ト で RFC 4821 の MTU 探 索 を 実 装 す る こ と が 可 能 で あ る 。 ま た 、 こ の 機 能 は 、 tracepath (8) の よ う な 診 断 ツ ー ル で 特 に 有 用 で あ る 。 こ れ ら の ツ ー ル で は 、 観 測 さ れ た Path MTU よ り も 大 き な 探 索 パ ケ ッ ト を 意 図 的 に 送 信 し よ う と す る 。

IP_MULTICAST_ALL (Linux 2.6.31 以 降 )

こ の オ プ シ ョ ン を 使 っ て 、 マ ル チ キ ャ ス ト メ ッ セ ー ジ の 、 ワ イ ル ド カ ー ド の INADDR_ANY ア ド レ ス に バ イ ン ド さ れ て い る ソ ケ ッ ト へ の 配 送 ポ リ シ ー を 変 更 す る こ と が で き る 。 引 数 は ブ ー ト 値 の 整 数 で 、 デ フ ォ ル ト 値 は 1 で あ る 。 こ の オ プ シ ョ ン を 1 に 設 定 さ れ て い る 場 合 、 そ の ソ ケ ッ ト で は 、 こ の シ ス テ ム で 参 加 し て い る す べ て の グ ル ー プ か ら の メ ッ セ ー ジ が 受 信 さ れ る 。 そ れ 以 外 の 場 合 は 、 そ の ソ ケ ッ ト で は 、 そ の ソ ケ ッ ト に 対 し て ( IP_ADD_MEMBERSHIP な ど を 使 っ て ) 明 示 的 に 参 加 が 指 定 さ れ た グ ル ー プ か ら の メ ッ セ ー ジ だ け が 受 信 さ れ る 。

IP_MULTICAST_IF (Linux 1.2 以 降 )

Set the local device for a multicast socket. The argument for setsockopt (2) is an ip_mreqn or (since Linux 3.5) ip_mreq structure similar to IP_ADD_MEMBERSHIP , or an in_addr structure. (The kernel determines which structure is being passed based on the size passed in optlen .) For getsockopt (2), the argument is an in_addr structure.

IP_MULTICAST_LOOP (Linux 1.2 以 降 )

マ ル チ キ ャ ス ト パ ケ ッ ト を ロ ー カ ル な ソ ケ ッ ト に ル ー プ バ ッ ク す る か ど う か を 定 め る ブ ー ル 値 の 整 数 引 数 を 設 定 ・ 取 得 す る 。

IP_MULTICAST_TTL (Linux 1.2 以 降 )

こ の ソ ケ ッ ト か ら 発 信 さ れ る マ ル チ キ ャ ス ト パ ケ ッ ト の time-to-live 値 を 設 定 ・ 取 得 す る 。 マ ル チ キ ャ ス ト パ ケ ッ ト に 対 し て は 、 で き る だ け 小 さ な TTL に 設 定 す る こ と が と て も 重 要 で あ る 。 デ フ ォ ル ト は 1 で 、 ユ ー ザ ー プ ロ グ ラ ム が 明 示 的 に 要 求 し な い 限 り マ ル チ キ ャ ス ト パ ケ ッ ト は ロ ー カ ル な ネ ッ ト ワ ー ク か ら 出 な い こ と に な る 。 引 数 に 整 数 を 取 る 。

IP_NODEFRAG (Linux 2.6.36 以 降 )

If enabled (argument is nonzero), the reassembly of outgoing packets is disabled in the netfilter layer. The argument is an integer.

This option is valid only for SOCK_RAW sockets.

IP_OPTIONS (Linux 2.0 以 降 )

こ の ソ ケ ッ ト か ら 送 ら れ る パ ケ ッ ト 全 て に 付 随 す る IP オ プ シ ョ ン を 設 定 ・ 取 得 す る 。 オ プ シ ョ ン を 保 存 し て い る メ モ リ ー バ ッ フ ァ ー へ の ポ イ ン タ ー と オ プ シ ョ ン の 長 さ と を 引 数 に 取 る 。 setsockopt (2) を 呼 び 出 す と 、 ソ ケ ッ ト に 関 連 づ け ら れ る IP オ プ シ ョ ン を 設 定 で き る 。 IPv4 に お け る オ プ シ ョ ン の サ イ ズ の 最 大 値 は 40 バ イ ト で あ る 。 用 い る こ と の で き る オ プ シ ョ ン に つ い て は RFC 791 を 見 よ 。 SOCK_STREAM ソ ケ ッ ト に 対 す る 初 期 接 続 要 求 パ ケ ッ ト に IP オ プ シ ョ ン が 含 ま れ て い る と 、 ル ー テ ィ ン グ ヘ ッ ダ ー を 付 け て 戻 さ れ て く る 初 期 パ ケ ッ ト の IP オ プ シ ョ ン に 同 じ オ プ シ ョ ン が セ ッ ト さ れ る 。 接 続 が 確 立 さ れ た 後 、 や っ て き た パ ケ ッ ト の オ プ シ ョ ン を 変 更 す る こ と は で き な い 。 デ フ ォ ル ト で は 。 外 部 か ら 受 信 し た パ ケ ッ ト の 全 て の source routing オ プ シ ョ ン の 処 理 は 無 効 と な っ て お り 、 /proc イ ン タ ー フ ェ ー ス の accept_source_route を 使 う と こ れ を 有 効 に で き る 。 こ れ を 無 効 に し て い て も timestamps な ど の 他 の オ プ シ ョ ン の 処 理 は 行 わ れ る 。 デ ー タ グ ラ ム ソ ケ ッ ト で は 、 IP オ プ シ ョ ン は ロ ー カ ル ユ ー ザ ー し か 設 定 で き な い 。 getsockopt (2) を IP_OPTIONS を つ け て 呼 ぶ と 、 現 在 送 信 に 用 い ら れ て い る IP オ プ シ ョ ン を 引 数 に 与 え た バ ッ フ ァ ー に 取 得 で き る 。

IP_PASSSEC (Linux 2.6.17 以 降 )

If labeled IPSEC or NetLabel is configured on the sending and receiving hosts, this option enables receiving of the security context of the peer socket in an ancillary message of type SCM_SECURITY retrieved using recvmsg (2). This option is supported only for UDP sockets; for TCP or SCTP sockets, see the description of the SO_PEERSEC option below.

The value given as an argument to setsockopt (2) and returned as the result of getsockopt (2) is an integer boolean flag.

The security context returned in the SCM_SECURITY ancillary message is of the same format as the one described under the SO_PEERSEC option below.

Note: the reuse of the SCM_SECURITY message type for the IP_PASSSEC socket option was likely a mistake, since other IP control messages use their own numbering scheme in the IP namespace and often use the socket option value as the message type. There is no conflict currently since the IP option with the same value as SCM_SECURITY is IP_HDRINCL and this is never used for a control message type.

IP_PKTINFO (Linux 2.2 以 降 )

IP_PKTINFO 補 助 メ ッ セ ー ジ を 渡 す 。 こ れ に は 到 着 パ ケ ッ ト に 関 す る 情 報 を 提 供 す る pktinfo 構 造 体 が 含 ま れ て い る 。 デ ー タ グ ラ ム 指 向 の ソ ケ ッ ト で し か 動 作 し な い 。 引 数 は IP_PKTINFO メ ッ セ ー ジ を 通 過 さ せ る か ど う か を ソ ケ ッ ト に 知 ら せ る フ ラ グ で あ る 。 メ ッ セ ー ジ 自 身 は recvmsg (2) ま た は sendmsg (2) を 用 い た パ ケ ッ ト の 制 御 メ ッ セ ー ジ と し て の み 送 受 信 で き る 。

struct in_pktinfo {
unsigned int ipi_ifindex; /* Interface index */
struct in_addr ipi_spec_dst; /* Local address */
struct in_addr ipi_addr; /* Header Destination
address */
};

ipi_ifindex は パ ケ ッ ト が 受 信 さ れ た イ ン タ ー フ ェ ー ス の 、 他 と 重 な ら な い イ ン デ ッ ク ス で あ る 。 ipi_spec_dst は パ ケ ッ ト の ロ ー カ ル ア ド レ ス で あ る 。 ipi_addr は パ ケ ッ ト ヘ ッ ダ ー に あ る 宛 先 ア ド レ ス で あ る 。 IP_PKTINFO sendmsg (2) に 渡 さ れ て 、 か つ ipi_spec_dst が 0 以 外 の 場 合 、 ipi_spec_dst は ル ー テ ィ ン グ テ ー ブ ル を 検 索 す る 際 に ロ ー カ ル な 送 信 元 ア ド レ ス と し て 使 用 さ れ 、 IP source route オ プ シ ョ ン を 設 定 す る の に も 使 用 さ れ る 。 ipi_ifindex が 0 以 外 の 場 合 、 こ の イ ン デ ッ ク ス に よ っ て 指 定 さ れ る イ ン タ ー フ ェ ー ス の プ ラ イ マ リ ロ ー カ ル ア ド レ ス で ipi_spec_dst を 上 書 き し 、 ル ー テ ィ ン グ テ ー ブ ル を 検 索 す る 。

IP_RECVERR (Linux 2.2 以 降 )

エ ラ ー メ ッ セ ー ジ の 受 け 渡 し に 、 信 頼 性 の 高 い 拡 張 さ れ た 方 法 を 有 効 に す る 。 デ ー タ グ ラ ム ソ ケ ッ ト に 対 し て 有 効 に な っ て い る と 、 発 生 し た エ ラ ー は 全 て ソ ケ ッ ト ご と の エ ラ ー キ ュ ー に 保 存 さ れ る 。 ユ ー ザ ー は ソ ケ ッ ト 操 作 か ら エ ラ ー を 受 け 取 っ た と き 、 recvmsg (2) を MSG_ERRQUEUE フ ラ グ と と も に 呼 べ ば そ の エ ラ ー を 取 得 で き る 。 そ の エ ラ ー を 記 述 す る sock_extended_err 構 造 体 が 、 タ イ プ IP_RECVERR ・ レ ベ ル IPPROTO_IP の 補 助 メ ッ セ ー ジ と し て 渡 さ れ る 。 こ れ は 接 続 志 向 で な い ソ ケ ッ ト で 信 頼 性 の 高 い エ ラ ー 処 理 を 行 い た い 場 合 に 有 用 で あ る 。 エ ラ ー キ ュ ー の 受 信 デ ー タ フ ラ グ メ ン ト に は エ ラ ー パ ケ ッ ト が 含 ま れ る 。

IP_RECVERR 制 御 メ ッ セ ー ジ に は sock_extended_err 構 造 体 が 含 ま れ る :

#define SO_EE_ORIGIN_NONE 0
#define SO_EE_ORIGIN_LOCAL 1
#define SO_EE_ORIGIN_ICMP 2
#define SO_EE_ORIGIN_ICMP6 3

struct sock_extended_err {
uint32_t ee_errno; /* error number */
uint8_t ee_origin; /* where the error originated */
uint8_t ee_type; /* type */
uint8_t ee_code; /* code */
uint8_t ee_pad;
uint32_t ee_info; /* additional information */
uint32_t ee_data; /* other data */
/* More data may follow */
};

struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

ee_errno に は キ ュ ー に 入 っ て い る エ ラ ー の errno 番 号 が 入 る 。 ee_origin に は エ ラ ー が 発 生 し た 場 所 を 示 す コ ー ド が 入 る 。 そ の 他 の フ ィ ー ル ド は プ ロ ト コ ル 依 存 で あ る 。 SO_EE_OFFENDER マ ク ロ は 与 え ら れ た 補 助 メ ッ セ ー ジ へ の ポ イ ン タ ー か ら エ ラ ー の 発 生 し た ネ ッ ト ワ ー ク オ ブ ジ ェ ク ト の ア ド レ ス へ の ポ イ ン タ ー を 返 す 。 ア ド レ ス が 不 明 な 場 合 、 sockaddr 構 造 体 の sa_family フ ィ ー ル ド は AF_UNSPEC と な り 、 そ の 他 の フ ィ ー ル ド 値 は 不 定 で あ る 。

IP は 以 下 の よ う な sock_extended_err 構 造 体 を 用 い る : ee_origin は 、 エ ラ ー が ICMP パ ケ ッ ト と し て 受 信 さ れ た 場 合 に は SO_EE_ORIGIN_ICMP に セ ッ ト さ れ 、 ロ ー カ ル で 起 こ っ た 場 合 に は SO_EE_ORIGIN_LOCAL に セ ッ ト さ れ る 。 不 明 な 値 は 無 視 さ れ る 。 ee_type ee_code は ICMP ヘ ッ ダ ー の type フ ィ ー ル ド と code フ ィ ー ル ド の 値 に セ ッ ト さ れ る 。 ee_info に は EMSGSIZE エ ラ ー に 対 す る discover さ れ た MTU が 入 る 。 メ ッ セ ー ジ に は エ ラ ー を 引 き 起 こ し た ノ ー ド の sockaddr_in 構 造 体 も 含 ま れ る 。 こ れ に は SO_EE_OFFENDER マ ク ロ を 使 っ て ア ク セ ス で き る 。 ソ ー ス が 不 明 の 場 合 、 SO_EE_OFFENDER ア ド レ ス の sin_family フ ィ ー ル ド は AF_UNSPEC と な る 。 エ ラ ー が ネ ッ ト ワ ー ク で 起 き た 場 合 に は 、 ソ ケ ッ ト で 有 効 に な っ て い た す べ て の IP オ プ シ ョ ン ( IP_OPTIONS , IP_TTL な ど ) と エ ラ ー パ ケ ッ ト に 含 ま れ て い た す べ て の IP オ プ シ ョ ン と が 、 制 御 メ ッ セ ー ジ と し て 渡 さ れ る 。 エ ラ ー を 起 こ し た パ ケ ッ ト の ペ イ ロ ー ド (payload) は 普 通 の ペ イ ロ ー ド と し て 返 さ れ る 。 TCP に は エ ラ ー キ ュ ー が な い こ と に 注 意 し て ほ し い 。 MSG_ERRQUEUE SOCK_STREAM ソ ケ ッ ト に 対 し て は 使 え な い 。 TCP で は IP_RECVERR だ け が 有 効 だ が 、 ソ ケ ッ ト 関 数 か ら 返 さ れ る エ ラ ー は SO_ERROR だ け に な る 。

raw ソ ケ ッ ト に 対 し て IP_RECVERR を 指 定 す る と 、 受 信 し た す べ て の ICMP エ ラ ー を ア プ リ ケ ー シ ョ ン に 渡 す よ う に な る 。 指 定 し な い と 、 接 続 済 み の ソ ケ ッ ト に 対 す る エ ラ ー だ け を 報 告 す る 。

こ の オ プ シ ョ ン は ブ ー ル 値 の フ ラ グ を 設 定 ・ 取 得 す る 。 IP_RECVERR は デ フ ォ ル ト で は オ フ に な っ て い る 。

IP_RECVOPTS (Linux 2.2 以 降 )

到 着 し た 全 て の IP オ プ シ ョ ン を IP_OPTION コ ン ト ロ ー ル メ ッ セ ー ジ に 入 れ て ユ ー ザ ー に 渡 す 。 ル ー テ ィ ン グ ヘ ッ ダ ー と そ の 他 の オ プ シ ョ ン と は 、 ロ ー カ ル ホ ス ト に 対 し て は あ ら か じ め 記 入 さ れ て い る 。 SOCK_STREAM ソ ケ ッ ト で は サ ポ ー ト さ れ て い な い 。

IP_RECVORIGDSTADDR (Linux 2.6.29 以 降 )

こ の ブ ー ル 値 の オ プ シ ョ ン が セ ッ ト さ れ る と 、 recvmsg (2) で IP_ORIGDSTADDR 補 助 メ ッ セ ー ジ が 有 効 に な る 。 カ ー ネ ル は デ ー タ グ ラ ム を 受 信 し た 元 の 宛 先 ア ド レ ス を こ の 補 助 メ ッ セ ー ジ で 返 す 。 こ の 補 助 メ ッ セ ー ジ に は struct sockaddr_in が 格 納 さ れ る 。

IP_RECVTOS (Linux 2.2 以 降 )

有 効 に な っ て い る と 、 IP_TOS 補 助 メ ッ セ ー ジ が 到 着 パ ケ ッ ト と と も に 渡 さ れ る 。 こ れ に は パ ケ ッ ト ヘ ッ ダ ー の Service/Precedence フ ィ ー ル ド の タ イ プ を 指 定 す る バ イ ト デ ー タ が 含 ま れ て い る 。 ブ ー ル 整 数 値 の フ ラ グ を と る 。

IP_RECVTTL (Linux 2.2 以 降 )

When this flag is set, pass a IP_TTL control message with the time-to-live field of the received packet as a 32 bit integer. Not supported for SOCK_STREAM sockets.

IP_RETOPTS

IP_RETOPTS (Linux 2.2 以 降 ) IP_RECVOPTS と 等 価 だ が 、 未 処 理 の 生 の オ プ シ ョ ン を 、 こ の hop で は 記 入 さ れ な い timestamp レ コ ー ド と route レ コ ー ド と と も に 返 す 。

IP_ROUTER_ALERT (Linux 2.2 以 降 )

Pass all to-be forwarded packets with the IP Router Alert option set to this socket. Valid only for raw sockets. This is useful, for instance, for user-space RSVP daemons. The tapped packets are not forwarded by the kernel; it is the user’s responsibility to send them out again. Socket binding is ignored, such packets are filtered only by protocol. Expects an integer flag.

IP_TOS (Linux 1.0 以 降 )

こ の ソ ケ ッ ト か ら 送 信 さ れ る す べ て の IP パ ケ ッ ト に 適 用 さ れ る Type-Of-Service (TOS) フ ィ ー ル ド を 設 定 ・ 取 得 す る 。 こ れ は ネ ッ ト ワ ー ク 上 で の パ ケ ッ ト の 優 先 度 を 決 め る た め に 用 い ら れ る 。 TOS は バ イ ト デ ー タ で あ る 。 標 準 の TOS フ ラ グ が い く つ か 定 義 さ れ て い る 。 IPTOS_LOWDELAY は イ ン タ ラ ク テ ィ ブ な ト ラ フ ィ ッ ク の 遅 延 を 最 小 に す る 。 IPTOS_THROUGHPUT は ス ル ー プ ッ ト を 最 大 に す る 。 IPTOS_RELIABILITY は 信 頼 性 を 最 高 に す る 。 IPTOS_MINCOST は 転 送 速 度 が 遅 く て も か ま わ な い と き 、 「 デ ー タ を 詰 め 込 む 」 の に 用 い ら れ る 。 こ れ ら の う ち 、 1 つ ま で だ け を 設 定 で き る 。 他 の ビ ッ ト は 無 効 で 、 ク リ ア さ れ る 。 Linux は デ フ ォ ル ト で は IPTOS_LOWDELAY デ ー タ グ ラ ム を 最 初 に 送 信 す る 。 し か し 、 正 確 な 振 る 舞 い は キ ュ ー 処 理 の 設 定 に 依 存 す る 。 高 い 優 先 度 に す る に は ス ー パ ー ユ ー ザ ー 権 限 ( CAP_NET_ADMIN ケ ー パ ビ リ テ ィ ) が 必 要 と な る か も し れ な い 。

IP_TRANSPARENT (Linux 2.6.24 以 降 )

こ の ブ ー ル 値 の オ プ シ ョ ン を 有 効 に す る と 、 こ の ソ ケ ッ ト で 透 過 プ ロ キ シ (transparent proxy) が で き る よ う に な る 。 こ の ソ ケ ッ ト オ プ シ ョ ン を 使 う と 、 呼 び 出 し た ア プ リ ケ ー シ ョ ン は 、 ロ ー カ ル で は な い IP ア ド レ ス を バ イ ン ド し て 、 ロ ー カ ル の 端 点 と し て 自 分 以 外 の ア ド レ ス (foreign address) を 持 つ ク ラ イ ア ン ト や サ ー バ の 両 方 と し て 動 作 で き る よ う に な る 。 注 意 : こ の 機 能 が 動 作 す る た め に は 、 自 分 以 外 の ア ド レ ス 宛 の パ ケ ッ ト が 透 過 プ ロ キ シ が 動 作 す る マ シ ン (す な わ ち ソ ケ ッ ト オ プ シ ョ ン IP_TRANSPARENT を 利 用 す る ア プ リ ケ ー シ ョ ン が 動 作 し て い る シ ス テ ム ) 経 由 で 転 送 さ れ る よ う に 、 ル ー テ ィ ン グ が 設 定 さ れ る 必 要 が あ る 。 こ の ソ ケ ッ ト オ プ シ ョ ン を 有 効 に す る に は 、 ス ー パ ー ユ ー ザ ー 特 権 ( CAP_NET_ADMIN ケ ー パ ビ リ テ ィ ) が 必 要 で あ る 。

iptables の TPROXY タ ー ゲ ッ ト で 透 過 プ ロ キ シ リ ダ イ レ ク シ ョ ン (TProxy redirection) を 行 う に は 、 リ ダ イ レ ク ト さ れ る ソ ケ ッ ト に 対 し て こ の オ プ シ ョ ン を 設 定 す る 必 要 が あ る 。

IP_TTL (Linux 1.0 以 降 )

time-to-live フ ィ ー ル ド の 値 を 設 定 ま た は 取 得 す る 。 こ の 値 は こ の ソ ケ ッ ト か ら 送 信 さ れ る す べ て の パ ケ ッ ト に 用 い ら れ る 。

IP_UNBLOCK_SOURCE (Linux 2.4.22 以 降 / 2.5.68 以 降 )

そ れ 以 前 は ブ ロ ッ ク さ れ て い た マ ル チ キ ャ ス ト の 送 信 元 の ブ ロ ッ ク を 解 除 す る 。 指 定 し た 送 信 元 が ブ ロ ッ ク さ れ て い な い 場 合 は EADDRNOTAVAIL を 返 す 。

引 数 は ip_mreq_source 構 造 体 で あ る 。 IP_ADD_SOURCE_MEMBERSHIP の 項 に 説 明 が あ る 。

SO_PEERSEC (Linux 2.6.17 以 降 )

If labeled IPSEC or NetLabel is configured on both the sending and receiving hosts, this read-only socket option returns the security context of the peer socket connected to this socket. By default, this will be the same as the security context of the process that created the peer socket unless overridden by the policy or by a process with the required permissions.

The argument to getsockopt (2) is a pointer to a buffer of the specified length in bytes into which the security context string will be copied. If the buffer length is less than the length of the security context string, then getsockopt (2) returns -1, sets errno to ERANGE , and returns the required length via optlen . The caller should allocate at least NAME_MAX bytes for the buffer initially, although this is not guaranteed to be sufficient. Resizing the buffer to the returned length and retrying may be necessary.

The security context string may include a terminating null character in the returned length, but is not guaranteed to do so: a security context "foo" might be represented as either {’f’,’o’,’o’} of length 3 or {’f’,’o’,’o’,’\0’} of length 4, which are considered to be interchangeable. The string is printable, does not contain non-terminating null characters, and is in an unspecified encoding (in particular, it is not guaranteed to be ASCII or UTF-8).

The use of this option for sockets in the AF_INET address family is supported since Linux 2.6.17 for TCP sockets, and since Linux 4.17 for SCTP sockets.

For SELinux, NetLabel conveys only the MLS portion of the security context of the peer across the wire, defaulting the rest of the security context to the values defined in the policy for the netmsg initial security identifier (SID). However, NetLabel can be configured to pass full security contexts over loopback. Labeled IPSEC always passes full security contexts as part of establishing the security association (SA) and looks them up based on the association for each packet.

/proc イ ン タ ー フ ェ ー ス

IP プ ロ ト コ ル で は 、 い く つ か の グ ロ ー バ ル パ ラ メ ー タ ー を 設 定 す る た め の /proc フ ァ イ ル 群 が 用 意 さ れ て い る 。 こ れ ら の パ ラ メ ー タ ー に は 、 /proc/sys/net/ipv4/ デ ィ レ ク ト リ 内 の フ ァ イ ル の 読 み 書 き で ア ク セ ス で き る 。 Boolean と 書 か れ た イ ン タ ー フ ェ ー ス は 整 数 値 を と り 、 0 以 外 の 値 ("true") は 対 応 す る オ プ シ ョ ン が 有 効 、 0 値 ("false") は 無 効 、 で あ る こ と を 意 味 す る 。
ip_always_defrag
(Boolean; Linux 2.2.13 以 降 )

[2.2.13 で 新 規 登 場 。 以 前 の バ ー ジ ョ ン の カ ー ネ ル で は 、 こ の 機 能 は コ ン パ イ ル 時 に CONFIG_IP_ALWAYS_DEFRAG オ プ シ ョ ン に よ っ て 制 御 さ れ て い た ; こ の フ ァ イ ル は 2.4.x 以 降 で は 存 在 し な い ]

こ の ブ ー ル 値 の フ ラ グ が 有 効 に な っ て い る (0 以 外 に な っ て い る ) と 、 到 着 し た フ ラ グ メ ン ト (IP パ ケ ッ ト の 一 部 で 、 発 信 元 と 発 信 先 の 間 の ど こ か の ホ ス ト で 、 そ の パ ケ ッ ト が 大 き す ぎ る と 判 断 さ れ 、 分 割 さ れ た 場 合 に 生 じ る ) は 、 た と え フ ォ ワ ー ド さ れ る 場 合 で あ っ て も 処 理 前 に 再 構 築 (デ フ ラ グ メ ン ト ) さ れ る 。

フ ァ イ ア ウ ォ ー ル が ロ ー カ ル 側 の ネ ッ ト ワ ー ク に 唯 一 の リ ン ク を 持 っ て い る 場 合 や 、 透 過 プ ロ ク シ の 場 合 に 限 っ て 有 効 に す べ き で あ る 。 通 常 の ル ー タ ー や ホ ス ト で は 決 し て 使 用 す る こ と の な い よ う に 。 さ も な い と フ ラ グ メ ン ト が 別 の リ ン ク を 経 由 し て 伝 わ る 場 合 に 、 通 信 の フ ラ グ メ ン ト 化 が で き な く な っ て し ま う 。 ま た フ ラ グ メ ン ト 再 構 築 処 理 は メ モ リ ー と CPU 時 間 の コ ス ト が 非 常 に 大 き い 。

こ れ は マ ス カ レ ー ド や 透 過 プ ロ ク シ が 設 定 さ れ る と 、 不 思 議 な 仕 組 み に よ っ て 自 動 的 に 有 効 に な る 。

ip_autoconfig (Linux 2.2 以 降 2.6.17 ま で )

ま だ 記 述 し て い な い 。

ip_default_ttl (integer; default: 64; Linux 2.2 以 降 )

送 出 さ れ る パ ケ ッ ト の time-to-live 値 の デ フ ォ ル ト を セ ッ ト す る 。 こ れ は IP_TTL オ プ シ ョ ン を 用 い れ ば 、 パ ケ ッ ト ご と に 変 え る こ と も で き る 。

ip_dynaddr (ブ ー ル 値 ; デ フ ォ ル ト : 無 効 ; Linux 2.0.31 以 降 )

動 的 ソ ケ ッ ト ア ド レ ス と 、 イ ン タ ー フ ェ ー ス ア ド レ ス が 変 更 さ れ た 際 の マ ス カ レ ー ド エ ン ト リ ー の 再 書 き 込 み を 有 効 に す る 。 ダ イ ア ル ア ッ プ イ ン タ ー フ ェ ー ス で 、 IP ア ド レ ス が 変 更 さ れ る 場 合 に 便 利 で あ る 。

ip_forward (ブ ー ル 値 ; デ フ ォ ル ト : 無 効 ; Linux 1.2 以 降 )

IP forwarding を 有 効 に す る か ど う か の ブ ー ル 値 フ ラ グ 。 IP forwarding す る か ど う か は イ ン タ ー フ ェ ー ス ご と に も 設 定 で き る 。

ip_local_port_range (Linux 2.2 以 降 )

こ の フ ァ イ ル に は 、 ポ ー ト 番 号 に 明 示 的 に バ イ ン ド さ れ な い ソ ケ ッ ト に 割 り 当 て ら れ る デ フ ォ ル ト の ロ ー カ ル ポ ー ト の 範 囲 — つ ま り 「 一 時 ポ ー ト ( ephemeral ports )」 に 使 用 さ れ る 範 囲 — を 定 め る 2 つ の 整 数 が 入 っ て い る 。 一 時 ポ ー ト は 以 下 の 場 合 に ソ ケ ッ ト に 割 り 当 て ら れ る 。

*

bind (2) の 呼 び 出 し 時 に ソ ケ ッ ト ア ド レ ス の ポ ー ト 番 号 に 0 が 指 定 さ れ て い る 。

*

バ イ ン ド さ れ て い な い ス ト リ ー ム ソ ケ ッ ト に 対 し て listen (2) が 呼 び 出 さ れ た 。

*

バ イ ン ド さ れ て い な い ソ ケ ッ ト に 対 し て connect (2) が 呼 ば れ た 。

*

バ イ ン ド さ れ て い な い デ ー タ グ ラ ム ソ ケ ッ ト に 対 し て sendto (2) が 呼 ば れ た 。

一 時 ポ ー ト に 割 り 当 て ら れ る ポ ー ト 番 号 の 範 囲 は 、 ip_local_port_range の 最 初 の 数 字 か ら 始 ま り 、 2 番 目 の 数 字 で 終 わ る 。 一 時 ポ ー ト の 範 囲 を 使 い 切 っ た 場 合 、 関 連 す る シ ス テ ム コ ー ル は エ ラ ー を 返 す (バ グ の 節 を 参 照 )。

ip_local_port_range で 指 定 す る ポ ー ト 番 号 の 範 囲 は 、 マ ス カ レ ー ド で 用 い ら れ て い る ポ ー ト と 重 な っ て は な ら な い (そ の 場 合 も 取 り 扱 わ れ る が )。 フ ァ イ ア ウ ォ ー ル の パ ケ ッ ト フ ィ ル タ ー が 「 利 用 中 の ロ ー カ ル ポ ー ト 」 に つ い て 何 ら か の 仮 定 を し て い る 場 合 に は 、 番 号 を 勝 手 に 決 め て し ま う と 問 題 が 起 き る か も し れ な い 。 1 番 目 の 番 号 は 少 な く と も 1024 よ り 大 き く す べ き で あ る 。 良 く 使 わ れ る ポ ー ト と の 衝 突 を 避 け た り 、 フ ァ イ ア ウ ォ ー ル の 問 題 を 回 避 し た け れ ば 、 4096 よ り も 大 き く す る ほ う が 良 い だ ろ う 。

ip_no_pmtu_disc (ブ ー ル 値 ; デ フ ォ ル ト : 無 効 ; Linux 2.2 以 降 )

有 効 に な っ て い る と 、 デ フ ォ ル ト で TCP ソ ケ ッ ト に 対 す る Path MTU Discoverty を 行 わ な い 。 Path MTU Discovery は 、 正 し く 設 定 さ れ て い な い (ICMP パ ケ ッ ト を 全 て ド ロ ッ プ す る ) フ ァ イ ア ウ ォ ー ル や 、 (point-to-point リ ン ク で 双 方 の MTU が 一 致 し て い な い 場 合 な ど ) 正 し く 設 定 さ れ て い な い イ ン タ ー フ ェ ー ス が 経 路 上 に 存 在 す る と 失 敗 し て し ま う 。 Path MTU Discovery を グ ロ ー バ ル に 無 効 に す る よ り は 、 壊 れ て い る ル ー タ ー を 直 す ほ う が 良 い 。 Path MTU Discovery を 無 効 に す る と ネ ッ ト ワ ー ク の コ ス ト が 大 き く な っ て し ま う か ら で あ る 。

ip_nonlocal_bind (ブ ー ル 値 ; デ フ ォ ル ト : 無 効 ; Linux 2.4 以 降 )

セ ッ ト さ れ て い れ ば 、 プ ロ セ ス が 自 分 以 外 の IP ア ド レ ス を bind (2) で き る よ う に な る 。 こ れ は か な り 便 利 だ が 、 う ま く 動 か な い ア プ リ ケ ー シ ョ ン も あ る 。

ip6frag_time (integer; default: 30)

IPv6 フ ラ グ メ ン ト を メ モ リ ー に 保 持 し て お く 時 間 (秒 単 位 )。

ip6frag_secret_interval (integer; default: 600)

IPv6 フ ラ グ メ ン ト の hash secret の 生 成 間 隔 (hash secret の 寿 命 ) (秒 単 位 )。

ipfrag_high_thresh (integer), ipfrag_low_thresh (integer)

キ ュ ー イ ン グ さ れ て い る IP フ ラ グ メ ン ト の 量 が ipfrag_high_thresh に 達 す る と 、 キ ュ ー の 内 容 は ipfrag_low_thresh に ま で 切 り 捨 て ら れ る 。 そ れ ぞ れ の 大 き さ を バ イ ト 単 位 で 表 す 整 数 値 が 入 っ て い る 。

neigh/*

arp (7) を 見 よ 。

ioctl

socket (7) に 記 述 さ れ て い る ioctl は 、 す べ て ip に も 適 用 さ れ る 。

ジ ェ ネ リ ッ ク デ バ イ ス の パ ラ メ ー タ ー を 設 定 す る ioctl に つ い て は netdevice (7) に 記 述 さ れ て い る 。

エ ラ ー

EACCES

必 要 な 権 限 の な い ユ ー ザ ー が 操 作 を 実 行 し よ う と し た 。 以 下 の よ う な 場 合 が 考 え ら れ る : SO_BROADCAST フ ラ グ を 設 定 し て い な い 状 態 で ブ ロ ー ド キ ャ ス ト ア ド レ ス に パ ケ ッ ト を 送 ろ う と し た 。 prohibit な ル ー ト を 通 し て パ ケ ッ ト を 送 ろ う と し た 。 ス ー パ ー ユ ー ザ ー 権 限 ( CAP_NET_ADMIN ケ ー パ ビ リ テ ィ ) な し で フ ァ イ ア ウ ォ ー ル の 設 定 を 変 更 し よ う と し た 。 ス ー パ ー ユ ー ザ ー 権 限 ( CAP_NET_BIND_SERVICE ケ ー パ ビ リ テ ィ ) な し で 特 権 ポ ー ト に バ イ ン ド し よ う と し た 。

EADDRINUSE

既 に 使 用 さ れ て い る ア ド レ ス に バ イ ン ド し よ う と し た 。

EADDRNOTAVAIL

存 在 し な い イ ン タ ー フ ェ ー ス が 要 求 さ れ た 。 ま た は 要 求 さ れ た ソ ー ス ア ド レ ス が ロ ー カ ル で な い 。

EAGAIN

非 ブ ロ ッ キ ン グ ソ ケ ッ ト に 対 し て ブ ロ ッ ク す る 操 作 を 行 っ た 。

EALREADY

非 ブ ロ ッ キ ン グ ソ ケ ッ ト に 対 す る 接 続 操 作 が 既 に 実 行 中 で あ る 。

ECONNABORTED

accept (2) の 途 中 で 接 続 が ク ロ ー ズ さ れ た 。

EHOSTUNREACH

宛 先 ア ド レ ス に マ ッ チ す る 有 効 な エ ン ト リ ー が ル ー テ ィ ン グ テ ー ブ ル に 存 在 し な い 。 こ の エ ラ ー は リ モ ー ト ル ー タ ー か ら の 、 あ る い は ロ ー カ ル ル ー テ ィ ン グ テ ー ブ ル へ の ICMP メ ッ セ ー ジ に よ っ て 引 き 起 こ さ れ る こ と が あ る 。

EINVAL

不 正 な 引 数 が 渡 さ れ た 。 送 信 操 作 に お い て 、 blackhole ル ー ト に 送 信 し よ う と す る と こ の エ ラ ー が 起 こ る こ と が あ る 。

EISCONN

接 続 済 み の ソ ケ ッ ト に 対 し て connect (2) が 呼 ば れ た 。

EMSGSIZE

デ ー タ グ ラ ム が path MTU よ り も 大 き く 、 フ ラ グ メ ン ト 化 も で き な い 。

ENOBUFS , ENOMEM

空 き メ モ リ ー が 足 り な い 。 こ の エ ラ ー は 、 メ モ リ ー ア ロ ケ ー シ ョ ン が ソ ケ ッ ト バ ッ フ ァ ー の 大 き さ に よ っ て 制 限 さ れ て い る こ と を 意 味 し て い る の が 通 常 で あ る が 、 100% そ う だ と い う わ け で は な い 。

ENOENT

パ ケ ッ ト が 到 着 し て い な い ソ ケ ッ ト に 対 し て SIOCGSTAMP が 呼 ば れ た 。

ENOPKG

カ ー ネ ル サ ブ シ ス テ ム が 設 定 さ れ て い な い 。

ENOPROTOOPT EOPNOTSUPP

無 効 な ソ ケ ッ ト オ プ シ ョ ン が 渡 さ れ た 。

ENOTCONN

接 続 さ れ て い な い ソ ケ ッ ト に 対 し て 、 接 続 状 態 で し か 定 義 さ れ て い な い 操 作 を 行 お う と し た 。

EPERM

高 い 優 先 度 を 設 定 し た り 、 設 定 を 変 更 し た り 、 要 求 さ れ た プ ロ セ ス や プ ロ セ ス グ ル ー プ に シ グ ナ ル を 送 っ た り す る の に 必 要 な 権 限 を 、 ユ ー ザ ー が 持 っ て い な い 。

EPIPE

接 続 が 接 続 相 手 に よ っ て 、 予 期 し な い や り 方 で ク ロ ー ズ ま た は シ ャ ッ ト ダ ウ ン さ れ た 。

ESOCKTNOSUPPORT

ソ ケ ッ ト が 未 設 定 で あ る か 、 知 ら な い ソ ケ ッ ト タ イ プ が 要 求 さ れ た 。

他 の エ ラ ー が 上 層 の プ ロ ト コ ル に よ っ て 生 じ る か も し れ な い 。 tcp (7), raw (7), udp (7), socket (7) な ど を 参 照 の こ と 。

注 意

IP_FREEBIND , IP_MSFILTER , IP_MTU , IP_MTU_DISCOVER , IP_RECVORIGDSTADDR , IP_PASSSEC , IP_PKTINFO , IP_RECVERR , IP_ROUTER_ALERT , IP_TRANSPARENT は Linux 固 有 で あ る 。

SO_BROADCAST オ プ シ ョ ン の 利 用 に は 、 く れ ぐ れ も 注 意 す る こ と 。 こ れ は Linux で は 特 権 操 作 で は な い 。 不 注 意 な ブ ロ ー ド キ ャ ス ト を 行 う と 、 ネ ッ ト ワ ー ク は 簡 単 に 過 負 荷 状 態 に な る 。 新 し い ア プ リ ケ ー シ ョ ン プ ロ ト コ ル に は 、 ブ ロ ー ド キ ャ ス ト で は な く マ ル チ キ ャ ス ト グ ル ー プ を 用 い る ほ う が よ い 。 ブ ロ ー ド キ ャ ス ト は 推 奨 さ れ な い 。

他 の BSD の ソ ケ ッ ト 実 装 で は 、 IP_RCVDSTADDR IP_RECVIF と い っ た ソ ケ ッ ト オ プ シ ョ ン が サ ポ ー ト さ れ て お り 、 宛 先 ア ド レ ス や 受 信 デ ー タ グ ラ ム の イ ン タ ー フ ェ ー ス が 取 得 で き る よ う に な っ て い る こ と も あ る 。 Linux で 同 じ こ と を や ら せ る に は 、 よ り 一 般 的 な IP_PKTINFO が 使 え る 。

い く つ か の BSD の ソ ケ ッ ト 実 装 で は IP_RECVTTL オ プ シ ョ ン も 提 供 さ れ て い る が 、 タ イ プ IP_RECVTTL の 補 助 メ ッ セ ー ジ は 受 信 パ ケ ッ ト と と も に 渡 さ れ る 。 こ れ は Linux で 使 わ れ て い る IP_TTL オ プ シ ョ ン と は 異 な る 動 作 で あ る 。

SOL_IP ソ ケ ッ ト オ プ シ ョ ン レ ベ ル は 移 植 性 が な い 。 BSD ベ ー ス の プ ロ ト コ ル ス タ ッ ク で は IPPROTO_IP レ ベ ル が 使 用 さ れ て い る 。

INADDR_ANY (0.0.0.0) and INADDR_BROADCAST (255.255.255.255) are byte-order-neutral.
This means htonl (3) has no effect on them.

移 植 性

Linux 2.0 と の 互 換 性 の た め に 、 obsolete な socket(AF_INET, SOCK_PACKET, protocol ) と い う 書 式 で も packet (7) を オ ー プ ン で き る よ う に な っ て い る が 、 こ れ は お 勧 め で き な い 。 今 後 は socket(AF_PACKET, SOCK_RAW, protocol ) を 代 わ り に 用 い る べ き で あ る 。 主 な 違 い は 、 ジ ェ ネ リ ッ ク な リ ン ク 層 用 の sockaddr_ll ア ド レ ス 構 造 体 が 、 古 い sockaddr_pkt に 変 わ っ て 用 い ら れ る よ う に な っ た こ と で あ る 。

バ グ

エ ラ ー の 値 が ま っ た く 首 尾 一 貫 し て い な い 。

一 時 ポ ー ト の 範 囲 の 枯 渇 を 示 す の に 使 わ れ る エ ラ ー は 、 一 時 ポ ー ト の 割 り 当 て を 行 え る シ ス テ ム コ ー ル ( connect (2), bind (2), listen (2), sendto (2)) に よ り 異 な る 。

IP 固 有 の イ ン タ ー フ ェ ー ス オ プ シ ョ ン を 指 定 す る た め の ioctl と ARP テ ー ブ ル の こ と が 記 述 さ れ て い な い 。

recvmsg (2) で msg_name MSG_ERRQUEUE を 指 定 し て 、 受 信 パ ケ ッ ト に 入 っ て い た 宛 先 ア ド レ ス を 取 得 す る 方 法 は 2.2 カ ー ネ ル の 一 部 で う ま く 動 か な い 。

関 連 項 目

recvmsg (2), sendmsg (2), byteorder (3), capabilities (7), icmp (7), ipv6 (7), netdevice (7), netlink (7), raw (7), socket (7), tcp (7), udp (7), ip (8)

The kernel source file Documentation/networking/ip-sysctl.txt .

RFC 791: 元 々 の IP 仕 様 。 RFC 1122: IPv4 ホ ス ト の 要 件 。 RFC 1812: IPv4 ル ー タ ー の 要 件 。

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。