Manpages

名 前

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) を 参 照 の こ と 。

IP ソ ケ ッ ト は 、 socket(2) 関 数 を socket(AF_INET, socket_type, protocol) の よ う に 呼 び 出 す こ と で 生 成 さ れ る 。 指 定 で き る ソ ケ ッ ト タ イ プ は 3 つ あ り 、 tcp(7) ソ ケ ッ ト を オ ー プ ン す る 場 合 SOCK_STREAMudp(7) ソ ケ ッ ト を オ ー プ ン す る 場 合 SOCK_DGRAM、 IP プ ロ ト コ ル に 直 接 ア ク セ ス す る た め に raw(7) ソ ケ ッ ト を オ ー プ ン す る 場 合 に は SOCK_RAW で あ る 。 protocol は 送 受 信 さ れ る IP ヘ ッ ダ ー に 書 か れ る IP プ ロ ト コ ル で あ る 。 指 定 で き る 値 は 、 TCP ソ ケ ッ ト に は 0 か IPPROTO_TCP、 UDP ソ ケ ッ ト に は 0 か IPPROTO_UDP に 限 ら れ る 。 SOCK_RAW に 対 し て は 、 RFC 1700 で 定 義 さ れ て い る 有 効 な IANA IP プ ロ ト コ ル を 、 割 り 当 て ら れ て い る 番 号 で 指 定 す る こ と が で き る 。 あ る プ ロ セ ス で 、 や っ て く る パ ケ ッ ト を 受 信 し た り 接 続 要 求 を 受 け た り し た い 場 合 に は 、 そ の プ ロ セ ス は ロ ー カ ル な イ ン タ ー フ ェ ー ス ア ド レ ス に 、 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_familiy に は 常 に AF_INET を セ ッ ト す る 。 こ れ は 必 須 で あ る 。 Linux 2.2 で は 、 こ の セ ッ ト を 忘 れ る と ほ と ん ど の ネ ッ ト ワ ー ク 関 数 は EINVAL を 返 す よ う に な っ て い る 。 sin_port に は ポ ー ト 番 号 を ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー で 指 定 す る 。 1024 未 満 の ポ ー ト 番 号 は 特 権 ポ ー ト (privileged ports) と 呼 ば れ る (予 約 ポ ー ト (reserved ports) と も 時 々 呼 ば れ る )。 特 権 プ ロ セ ス (CAP_NET_BIND_SERVICE ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス ) 以 外 の プ ロ セ ス は 、 こ れ ら の ポ ー ト に は bind(2) で き な い 。 IPv4 プ ロ ト コ ル そ の も の に は ポ ー ト に 関 す る 概 念 が な い 。 ポ ー ト が 実 装 さ れ る の は 、 tcp(7)udp(7) と い っ た 、 上 位 の プ ロ ト コ ル に お い て の み で あ る 。

sin_addr は IP ホ ス ト ア ド レ ス で あ る 。 struct in_addrs_addr メ ン バ に は 、 ホ ス ト の イ ン タ ー フ ェ ー ス ア ド レ ス を ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー で 指 定 す る 。 in_addr は 、 INADDR_* の 一 つ (例 え ば INADDR_ANY) を 代 入 す る 、 ラ イ ブ ラ リ 関 数 inet_aton(3), inet_addr(3), inet_makeaddr(3) を 用 い る 、 あ る い は 名 前 解 決 機 構 (name resolver) を 直 接 用 い る 、 の ど れ か で 設 定 す べ き で あ る 。 (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 は 偽 、 そ れ 以 外 は 真 を 意 味 す る 。
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_ifindeximr_multiaddr グ ル ー プ に 参 加 /脱 退 す る イ ン タ ー フ ェ ー ス の interface index で あ る 。 ど の イ ン タ ー フ ェ ー ス で も よ い 場 合 は 0 に す る 。

ip_mreqn 構 造 体 は Linux 2.2 以 降 で の み 利 用 可 能 で あ る 。 互 換 性 の た め 、 古 い ip_mreq 構 造 体 (Linux 1.2 以 降 で 存 在 す る ) も ま だ サ ポ ー ト さ れ て い る 。 ip_mreqn と の 違 い は 、 imr_ifindex フ ィ ー ル ド を 含 ま な い こ と だ け で あ る 。 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_MEMBERSIP の 項 で 説 明 し た ip_mreqn に 似 て い る 。 imr_multiaddr フ ィ ー ル ド に は 、 ア プ リ ケ ー シ ョ ン が 参 加 ま た は 脱 退 し た い マ ル チ キ ャ ス ト グ ル ー プ の ア ド レ ス が 入 る 。 imr_interface フ ィ ー ル ド は 、 マ ル チ キ ャ ス ト グ ル ー プ に 参 加 す る 際 に シ ス テ ム が 使 用 す べ き ロ ー カ ル イ ン タ ー フ ェ ー ス の ア ド レ ス で あ る 。 imr_sourceaddr フ ィ ー ル ド に は 、 ア プ リ ケ ー シ ョ ン が デ ー タ を 受 信 し た い 送 信 元 の ア ド レ ス が 入 る 。 こ の オ プ シ ョ ン を 複 数 回 使 う こ と で 、 複 数 の 送 信 元 か ら の デ ー タ 受 信 を 許 可 す る こ と が で き る 。

IP_BLOCK_SOURCE (since Linux 2.4.22 以 降 / 2.5.68 以 降 ) 指 定 し た グ ル ー プ で 、 指 定 し た 送 信 元 か ら の マ ル チ キ ャ ス ト デ ー タ の 受 信 を 停 止 す る 。 こ の オ プ シ ョ ン は 、 ア プ リ ケ ー シ ョ ン が IP_ADD_MEMBERSHIPIP_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_LEAVE_GROUP を 使 う こ と 。 引 き 数 は 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 以 降 ) 有 効 に な っ て い る と 、 ユ ー ザ ー は IP ヘ ッ ダ ー を ユ ー ザ ー デ ー タ の 前 に 与 え る 。 SOCK_RAW ソ ケ ッ ト で の み 有 効 で あ る 。 詳 細 は raw(7) を 見 よ 。 こ の フ ラ グ が 有 効 に な っ て い る と 、 IP_OPTIONS, IP_TTL, IP_TOS は 無 視 さ れ る 。
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_INCLUDEMCAST_EXCLUDE の 2 つ の マ ク ロ が あ り 、 フ ィ ル タ リ ン グ モ ー ド を 指 定 す る の に 使 用 で き る 。 ま た 、 IP_MSFILTER_SIZE(n) マ ク ロ が あ り 、 送 信 元 リ ス ト に n 個 の 送 信 元 が 入 っ た ip_msfilter 構 造 体 を 格 納 す る の に 必 要 な メ モ リ ー 量 を 判 定 す る こ と が で き る 。 マ ル チ キ ャ ス ト 送 信 元 フ ィ ル タ リ ン グ の 全 容 は RFC 3376 を 参 照 の こ と 。

IP_MTU (Linux 2.2 以 降 ) ソ ケ ッ ト の 、 既 知 の path MTU を 取 得 す る 。 ソ ケ ッ ト が 接 続 し て い る 場 合 の み 有 効 で あ る 。 getsockopt(2) で の み 使 え る 。
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_WANTIP_PMTUDISC_DONT の ど ち ら か に 設 定 す る こ と が で き る 。 設 定 の 変 更 は 、 /proc/sys/net/ipv4/ip_no_pmtu_disc フ ァ イ ル に 、 0 (IP_PMTUDISC_WANT) か 0 以 外 (IP_PMTUDISC_DONT) を 書 き 込 む こ と で 行 う 。

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

MTU discovery の 進 行 中 に は 、 デ ー タ グ ラ ム ソ ケ ッ ト か ら の 初 期 パ ケ ッ ト は 到 着 し な い か も し れ な い 。 UDP を 用 い る ア プ リ ケ ー シ ョ ン で は 、 こ の こ と を 気 に か け て お き 、 パ ケ ッ ト の 再 送 ア ル ゴ リ ズ ム に こ の 分 を 除 外 さ せ る べ き で あ る 。 接 続 し て い な い ソ ケ ッ ト に 対 し て path MTU discovery プ ロ セ ス を 立 ち 上 げ る に は 、 大 き な デ ー タ グ ラ ム サ イ ズ (最 大 64K ヘ ッ ダ ー バ イ ト 長 ) か ら は じ め て 、 path MTU が 更 新 さ れ る ま で サ イ ズ を 縮 め て い く こ と も 可 能 で あ る 。

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

IP_PMTUDISC_PROBE (Linux 2.6.22 以 降 で 利 用 可 能 ) を 設 定 す る こ と で 、 SOCK_DGRAMSOCK_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 以 降 ) ロ ー カ ル デ バ イ ス を マ ル チ キ ャ ス ト ソ ケ ッ ト と し て 設 定 す る 。 引 き 数 は IP_ADD_MEMBERSHIP と 同 様 に ip_mreqn 構 造 体 か ip_mreq 構 造 体 (Linux 3.5 以 降 ) で あ る 。 不 正 な ソ ケ ッ ト オ プ シ ョ ン が 渡 さ れ る と 、 ENOPROTOOPT が 返 さ れ る 。
IP_MULTICAST_LOOP
(Linux 1.2 以 降 ) マ ル チ キ ャ ス ト パ ケ ッ ト を ロ ー カ ル な ソ ケ ッ ト に ル ー プ バ ッ ク す る か ど う か を 定 め る ブ ー ル 値 の 整 数 引 き 数 を 設 定 ・ 取 得 す る 。
IP_MULTICAST_TTL
(Linux 1.2 以 降 ) こ の ソ ケ ッ ト か ら 発 信 さ れ る マ ル チ キ ャ ス ト パ ケ ッ ト の time−to−live 値 を 設 定 ・ 取 得 す る 。 マ ル チ キ ャ ス ト パ ケ ッ ト に 対 し て は 、 で き る だ け 小 さ な TTL に 設 定 す る こ と が と て も 重 要 で あ る 。 デ フ ォ ル ト は 1 で 、 ユ ー ザ ー プ ロ グ ラ ム が 明 示 的 に 要 求 し な い 限 り マ ル チ キ ャ ス ト パ ケ ッ ト は ロ ー カ ル な ネ ッ ト ワ ー ク か ら 出 な い こ と に な る 。 引 き 数 に 整 数 を 取 る 。
IP_NODEFRAG
(Linux 2.6.36 以 降 ) 有 効 (引 き 数 が 0 以 外 の 場 合 ) に な っ て い る と 、 netfilter 層 で の 出 力 パ ケ ッ ト の 再 構 築 (reassembly) が 行 わ れ な く な る 。 こ の オ プ シ ョ ン は SOCK_RAW ソ ケ ッ ト に お い て の み 有 効 で あ る 。 引 き 数 は 整 数 で あ る 。
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_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_PKTINFOsendmsg(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_typeee_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_ERRQUEUESOCK_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 以 降 ) こ の フ ラ グ が セ ッ ト さ れ て い る と 、 IP_TTL コ ン ト ロ ー ル メ ッ セ ー ジ が 受 信 パ ケ ッ ト の time−to−live フ ィ ー ル ド の バ イ ト デ ー タ と と も に 渡 さ れ る 。 SOCK_STREAM ソ ケ ッ ト で は サ ポ ー ト さ れ て い な い 。
IP_RETOPTS

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

IP_ROUTER_ALERT (Linux 2.2 以 降 ) フ ォ ワ ー ド す べ き パ ケ ッ ト を IP Router Alert オ プ シ ョ ン を つ け て こ の ソ ケ ッ ト に 渡 す 。 raw ソ ケ ッ ト に 対 し て の み 有 効 で あ る 。 こ れ は た と え ば ユ ー ザ ー 空 間 の RSVP デ ー モ ン に 対 し て 便 利 で あ る 。 タ ッ プ さ れ た パ ケ ッ ト は カ ー ネ ル に よ っ て は フ ォ ワ ー ド さ れ な い の で 、 こ れ ら を 再 送 す る の は ユ ー ザ ー の 責 任 と な る 。 ソ ケ ッ ト の バ イ ン ド は 無 視 さ れ 、 こ の よ う な パ ケ ッ ト は プ ロ ト コ ル に よ っ て の み フ ィ ル タ リ ン グ さ れ る 。 整 数 値 の フ ラ グ を 取 る 。
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 ケ ー パ ビ リ テ ィ ) が 必 要 と な る か も し れ な い 。 優 先 度 は (SOL_SOCKET, SO_PRIORITY) ソ ケ ッ ト オ プ シ ョ ン を 用 い れ ば 、 プ ロ ト コ ル に 依 存 し な い 形 で も 設 定 で き る (socket(7) を 見 よ )。
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 の 項 に 説 明 が あ る 。

/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 カ ー ネ ル サ ブ シ ス テ ム が 設 定 さ れ て い な い 。

ENOPROTOOPTEOPNOTSUPP 無 効 な ソ ケ ッ ト オ プ シ ョ ン が 渡 さ れ た 。
ENOTCONN
接 続 さ れ て い な い ソ ケ ッ ト に 対 し て 、 接 続 状 態 で し か 定 義 さ れ て い な い 操 作 を 行 お う と し た 。

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

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

ESOCKTNOSUPPORT ソ ケ ッ ト が 未 設 定 で あ る か 、 知 ら な い ソ ケ ッ ト タ イ プ が 要 求 さ れ た 。 他 の エ ラ ー が 上 層 の プ ロ ト コ ル に よ っ て 生 じ る か も し れ な い 。 tcp(7), raw(7), udp(7), socket(7) な ど を 参 照 の こ と 。

注 意

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

SO_BROADCAST オ プ シ ョ ン の 利 用 に は 、 く れ ぐ れ も 注 意 す る こ と 。 こ れ は Linux で は 特 権 操 作 で は な い 。 不 注 意 な ブ ロ ー ド キ ャ ス ト を 行 う と 、 ネ ッ ト ワ ー ク は 簡 単 に 過 負 荷 状 態 に な る 。 新 し い ア プ リ ケ ー シ ョ ン プ ロ ト コ ル に は 、 ブ ロ ー ド キ ャ ス ト で は な く マ ル チ キ ャ ス ト グ ル ー プ を 用 い る ほ う が よ い 。 ブ ロ ー ド キ ャ ス ト は 推 奨 さ れ な い 。 他 の BSD の ソ ケ ッ ト 実 装 で は 、 IP_RCVDSTADDRIP_RECVIF と い っ た ソ ケ ッ ト オ プ シ ョ ン が サ ポ ー ト さ れ て お り 、 宛 先 ア ド レ ス や 受 信 デ ー タ グ ラ ム の イ ン タ ー フ ェ ー ス が 取 得 で き る よ う に な っ て い る こ と も あ る 。 Linux で 同 じ こ と を や ら せ る に は 、 よ り 一 般 的 な IP_PKTINFO が 使 え る 。 い く つ か の BSD の ソ ケ ッ ト 実 装 で は IP_RECVTTL オ プ シ ョ ン も 提 供 さ れ て い る が 、 タ イ プ IP_RECVTTL の 補 助 メ ッ セ ー ジ は 受 信 パ ケ ッ ト と と も に 渡 さ れ る 。 こ れ は Linux で 使 わ れ て い る IP_TTL オ プ シ ョ ン と は 異 な る 動 作 で あ る 。

SOL_IP ソ ケ ッ ト オ プ シ ョ ン レ ベ ル は 移 植 性 が な い 。 BSD ベ ー ス の プ ロ ト コ ル ス タ ッ ク で は IPPROTO_IP レ ベ ル が 使 用 さ れ て い る 。 移 植 性
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_nameMSG_ERRQUEUE を 指 定 し て 、 受 信 パ ケ ッ ト に 入 っ て い た 宛 先 ア ド レ ス を 取 得 す る 方 法 は 2.2 カ ー ネ ル の 一 部 で う ま く 動 か な い 。

関 連 項 目

recvmsg(2), sendmsg(2), byteorder(3), ipfw(4), capabilities(7), icmp(7), ipv6(7), netlink(7), raw(7), socket(7), tcp(7), udp(7)

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

こ の 文 書 に つ い て

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