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