名 前
udplite − 軽 量 な ユ ー ザ ー デ ー タ グ ラ ム プ ロ ト コ ル
書 式
#include <sys/socket.h>
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);
説 明
こ れ は RFC 3828 に 書 か れ て い る 軽 量 な ユ ー ザ ー デ ー タ グ ラ ム プ ロ ト コ ル (Lightweight User Datagram Protocol; UDP−Lite) の 実 装 で あ る 。
UDP−Lite は UDP (RFC 768) の 拡 張 で 、 可 変 長 の チ ェ ッ ク サ ム を サ ポ ー ト し て い る 。 こ の プ ロ ト コ ル が 効 果 を 発 揮 す る の は 、 少 し だ け 壊 れ た デ ー タ グ ラ ム が あ っ た 場 合 に 、 そ の デ ー タ グ ラ ム を 下 位 レ イ ヤ ー の プ ロ ト コ ル に 廃 棄 さ せ る の で は な く 、 そ れ を 利 用 す る こ と が で き る よ う な 、 あ る 種 の マ ル チ メ デ ィ ア 転 送 に お い て で あ る 。 可 変 長 の チ ェ ッ ク サ ム の 対 象 範 囲 は setsockopt(2) オ プ シ ョ ン 経 由 で 設 定 さ れ る 。 こ の オ プ シ ョ ン が 設 定 さ れ て い な い 場 合 、 UDP と 異 な る の は 違 う IP プ ロ ト コ ル 識 別 子 (IANA 番 号 136) を 使 用 す る 点 だ け で あ る 。
UDP−Lite
の 実 装 は udp(7) の
完 全 な 拡 張 、
す な わ ち API と API
の 動 作 は 同 じ
で あ る 。 こ れ
に 加 え て 、 2 つ
の ソ ケ ッ ト オ
プ シ ョ ン が チ
ェ ッ ク サ ム の
対 象 範 囲 を 制
御 す る た め に
提 供 さ れ て い
る 。 ア ド レ ス
の フ ォ ー マ ッ
ト
UDP−Litev4 は ip(7) で 説
明 さ れ て い る
sockaddr_in ア ド レ ス
を 使 用 す る 。
UDP−Litev6 は ipv6(7) で 説
明 さ れ て い る
sockaddr_in6 ア ド レ ス
を 使 用 す る 。
ソ ケ ッ ト オ プ
シ ョ ン
UDP−Lite の ソ ケ ッ ト
オ プ シ ョ ン を
設 定 /取 得 す る
に は 、 オ プ シ
ョ ン レ ベ ル 引
き 数 に IPPROTO_UDPLITE を
指 定 し て 、 取
得 時 に は getsockopt(2)
を 、 設 定 時 に
は setsockopt(2) を 呼 び
出 す 。 さ ら に
、 全 て の IPPROTO_UDP
の ソ ケ ッ ト オ
プ シ ョ ン が UDP−Lite
ソ ケ ッ ト で も
使 用 で き る 。
詳 細 は udp(7) を 参
照 の こ と 。 以
下 の 2 つ が UDP−Lite
に 固 有 の オ プ
シ ョ ン で あ る
。
UDPLITE_SEND_CSCOV こ の オ プ
シ ョ ン は 送 信
側 の チ ェ ッ ク
サ ム の 対 象 範
囲 を 設 定 す る
。 int 型 を 引 き
数 と し て 取 り
、 設 定 可 能 な
値 の 範 囲 は 0 か
ら 2^16−1 ま で で あ
る 。 値 0 は デ ー
タ グ ラ ム 全 体
が 常 に チ ェ ッ
ク サ ム の 対 象
と な る こ と を
意 味 す る 。 値
1〜 7 は 不 正 で あ
り (RFC 3828 の 3.1 章 )、
範 囲 の 設 定 と
し て 最 小 値 で
あ る 8 に 切 り 上
げ ら れ る 。
IPv6 の jumbograms (巨 大 な デ ー タ グ ラ ム ; RFC 2675) の 場 合 に は 、 UDP−Litev6 の チ ェ ッ ク サ ム の 対 象 範 囲 は 、 RFC 3828 の 3.5 章 に あ る よ う に 、 先 頭 か ら 2^16−1 オ ク テ ッ ト ま で に 限 定 さ れ る 。 そ の た め 、 そ れ よ り 大 き な 値 は 2^16−1 に 黙 っ て 切 り 詰 め ら れ る 。 現 在 の 対 象 範 囲 の 値 を 知 り た け れ ば 、 い つ で も getsockopt(2) を 使 っ て 値 を 問 い 合 わ せ る こ と が で き る 。
UDPLITE_RECV_CSCOV こ れ は 受 信 側 の チ ェ ッ ク サ ム の 対 象 範 囲 を 設 定 す る も の で 、 使 用 さ れ る 引 き 数 形 式 と 値 の 範 囲 は UDPLITE_SEND_CSCOV と 同 じ で あ る 。 こ の オ プ シ ョ ン は 、 部 分 的 な チ ェ ッ ク サ ム 対 象 範 囲 を 持 つ ト ラ フ ィ ッ ク を 有 効 に す る の に 必 要 な わ け で は な く 、 ト ラ フ ィ ッ ク フ ィ ル タ ー と し て 機 能 す る 。 こ の オ プ シ ョ ン が 有 効 に す る と 、 カ ー ネ ル は 指 定 さ れ た チ ェ ッ ク サ ム 対 象 範 囲 よ り も 「 短 か い 」 対 象 範 囲 を 持 つ パ ケ ッ ト を 全 て 廃 棄 す る よ う に な る 。
UDPLITE_RECV_CSCOV の 値 が 実 際 の パ ケ ッ ト の チ ェ ッ ク サ ム 対 象 範 囲 よ り も 大 き い 場 合 、 受 信 し た パ ケ ッ ト は 黙 っ て 廃 棄 さ れ る 。 た だ し 、 シ ス テ ム ロ グ に 対 し て 警 告 メ ッ セ ー ジ が 生 成 さ れ る か も し れ な い 。
エ ラ ー
udp(7) に つ い て 書 か れ て い る 全 て の エ ラ ー は 返 る 可 能 性 が あ る 。 UDP−Lite 自 体 は 新 た な エ ラ ー は 追 加 し て い な い 。
フ ァ イ ル
/proc/net/snmp
− UDP−Litev4 の 基 本 的
な 統 計 情 報 カ
ウ ン タ ー 。
/proc/net/snmp6 − UDP−Litev6 の
基 本 的 な 統 計
情 報 カ ウ ン タ
ー 。
バ ー ジ ョ ン
UDP−Litev4/v6 は Linux 2.6.20 で 初 め て 登 場 し た 。
バ グ
glibc に よ る サ ポ ー ト が な い 場 合 は 、 以 下 の 定 義 を 行 う 必 要 が あ る 。
#define
IPPROTO_UDPLITE 136
#define UDPLITE_SEND_CSCOV 10
#define UDPLITE_RECV_CSCOV 11
関 連 項 目
ip(7), ipv6(7), socket(7), udp(7)
RFC 3828 for the Lightweight User Datagram Protocol (UDP−Lite).
Linux カ ー ネ ル ソ ー ス 内 の Documentation/networking/udplite.txt
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。