Man page - ip(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr es pl ja zh_TW zh_CNManual
IP
NAME (名 稱 )SYNOPSIS(總 覽 )
DESCRIPTION(描 述 )
ADDRESS FORMAT(地 址 格 式 )
SOCKET OPTIONS(套 接 字 選 項 )
SYSCTLS
IOCTLS
NOTES(備 註 )
ERRORS(錯 誤 )
VERSIONS(版 本 )
COMPATIBILITY(相 容 性 )
BUGS
AUTHORS(作 者 )
SEE ALSO(另 見 )
[中 文 版 維 護 人 ]
[中 文 版 最 新 更 新 ]
《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :
跋
NAME (名 稱 )
ip - Linux IPv4 協 議 實 現
SYNOPSIS(總 覽 )
#include
<sys/socket.h>
#include <net/netinet.h>
tcp_socket
= socket(PF_INET, SOCK_STREAM, 0);
raw_socket
= socket(PF_INET, SOCK_RAW,
protocol
);
udp_socket
= socket(PF_INET, SOCK_DGRAM,
protocol
);
DESCRIPTION(描 述 )
Linux 實 現 描 述 於 RFC791 和 RFC1122 中 的 Internet 協 議 ,版 本 4. ip 包 括 遵 循 RFC1112 的 第 二 層 的 多 通 道 廣 播 技 術 的 實 現 .它 也 包 括 含 包 過 濾 器 的 IP路 由 器 .
程 式 設 計 師 的 介 面 與 BSD 的 套 接 字 (socket)相 容 . 要 獲 得 關 於 套 接 字 的 更 多 資 訊 ,參 見 socket (7)
建 立 一 個 IP套 接 字 是 透 過 以 socket(PF_INET, socket_type, protocol) 方 式 呼 叫 socket (2) 函 式 來 實 現 的 . 有 效 的 套 接 字 型 別 ( socket_type) 有 : SOCK_STREAM 用 來 開 啟 一 個 tcp (7) 套 接 字 , SOCK_DGRAM 用 來 開 啟 一 個 udp (7) 套 接 字 , 或 者 是 SOCK_RAW 用 來 開 啟 一 個 raw (7) 套 接 字 用 來 直 接 訪 問 IP 協 議 . protocol 指 的 是 要 接 收 或 者 傳 送 出 去 的 包 含 在 IP 頭 標 識 (header)中 的 IP 協 議 . 對 於 TCP套 接 字 而 言 ,唯 一 的 有 效 protocol 值 是 0 和 IPPROTO_TCP 對 於 UDP套 接 字 而 言 ,唯 一 的 有 效 protocol 值 是 0 和 IPPROTO_UDP. 而 對 於 SOCK_RAW 你 可 以 指 定 一 個 在 RFC1700 中 定 義 的 有 效 IANA IP 協 議 程 式 碼 來 賦 值 .
當 一 個 程 序 希 望 接 受 新 的 來 訪 包 或 者 連 線 時 ,它 應 該 使 用 bind (2) 繫 結 一 個 套 接 字 到 一 個 本 地 介 面 地 址 . 任 意 給 定 的 本 地 (地 址 ,埠 )對 只 能 繫 結 一 個 IP套 接 字 . 當 呼 叫 bind 時 中 聲 明 瞭 INADDR_ANY 時 ,套 接 字 將 會 繫 結 到 所 有 本 地 介 面 . 當 在 未 繫 結 的 套 接 字 上 呼 叫 listen (2) 或 者 connect (2) 時 ,套 接 字 會 自 動 繫 結 到 一 個 本 地 地 址 設 定 為 INADDR_ANY 的 隨 機 的 空 閒 埠 上 .
除 非 你 設 定 了 S0_REUSEADDR 標 識 , 否 則 一 個 已 繫 結 的 TCP 本 地 套 接 字 地 址 在 關 閉 後 的 一 段 時 間 內 不 可 用 . 使 用 該 標 識 的 時 候 要 小 心 , 因 為 它 會 使 TCP 變 得 不 可 靠 .
ADDRESS FORMAT(地 址 格 式 )
一 個 IP 套 接 字 地 址 定 義 為 一 個 IP 介 面 地 址 和 一 個 埠 號 的 組 合 . 基 本 IP 協 議 不 會 提 供 埠 號 ,它 們 透 過 更 高 層 次 的 協 議 如 udp (7) 和 tcp (7) 來 實 現 . 對 於 raw套 接 字 , sin_port 設 定 為 IP協 議 .
struct
sockaddr_in {
sa_family_t sin_family; /* 地 址 族 :
AF_INET */
u_int16_t sin_port; /* 按 網 路 位
元 組 次 序 的 埠 */
struct in_addr sin_addr; /* internet地 址 */
};
/*
Internet地 址 . */
struct in_addr {
u_int32_t s_addr; /* 按 網 路 位
元 組 次 序 的 地
址 */
};
sin_family 總 是 設 定 為 AF_INET . 這 是 必 需 的 ; 在 Linux 2.2 中 , 如 果 該 設 定 缺 失 , 大 多 數 聯 網 函 式 會 返 回 EINVAL sin_port 包 含 按 網 路 位 元 組 排 序 的 埠 號 . 埠 號 在 1024以 下 的 稱 為 保 留 埠 . 只 有 那 些 有 效 使 用 者 標 識 為 0 或 者 CAP_NET_BIND_SERVICE 有 功 能 的 程 序 才 可 以 bind (2) 到 這 些 套 接 字 . 注 意 原 始 的 ( raw) IPv4協 議 沒 有 這 樣 的 埠 概 念 ,它 們 只 通 過 更 高 的 協 議 如 tcp (7) 和 udp (7) 來 實 現 .
sin_addr 指 的 是 IP 主 機 地 址 . 在 struct in_addr 中 的 addr 部 分 包 含 按 網 路 位 元 組 序 的 主 機 介 面 地 址 . in_addr 應 該 只 能 透 過 使 用 inet_aton (3), inet_addr (3), inet_makeaddr (3) 庫 函 式 或 者 直 接 透 過 名 字 解 析 器 ( 參 見 gethostbyname (3)) 來 訪 問 . IPv4 地 址 分 成 單 點 廣 播 , 廣 播 傳 送 和 多 點 廣 播 地 址 . 單 點 廣 播 地 址 指 定 了 一 臺 主 機 的 單 一 介 面 , 廣 播 地 址 指 定 了 在 一 個 網 段 上 的 所 有 主 機 , 而 多 點 廣 播 地 址 則 在 一 個 多 點 傳 送 組 中 定 址 所 有 主 機 . 只 有 當 設 定 了 套 接 字 標 識 SO_BROADCAST 時 , 才 能 收 發 資 料 報 到 廣 播 地 址 . 在 當 前 的 實 現 中 , 面 向 連 線 的 套 接 字 只 允 許 使 用 單 點 傳 送 地 址 .
注 意 地 址 和 埠 總 是 按 照 網 路 位 元 組 序 儲 存 的 . 這 意 味 著 你 需 要 對 分 配 給 埠 的 號 碼 呼 叫 htons (3) . 所 有 在 標 準 庫 中 的 地 址 /埠 處 理 函 式 都 是 按 網 路 位 元 組 序 執 行 的 .
有 幾 個 特 殊 的 地 址 : INADDR_LOOPBACK (127.0.0.1) 總 是 代 表 經 由 迴 環 裝 置 的 本 地 主 機 ; INADDR_ANY (0.0.0.0) 表 示 任 何 可 繫 結 的 地 址 ; INADDR_BROADCAST (255.255.255.255) 表 示 任 何 主 機 , 由 於 歷 史 的 原 因 , 這 與 繫 結 為 INADDR_ANY 有 同 樣 的 效 果 .
SOCKET OPTIONS(套 接 字 選 項 )
IP 支
援 一 些 與 協 議
相 關 的 套 接 字
選 項 , 這 些 選
項 可 以 透 過
setsockopt
(2) 設 定 , 並
可 以 透 過
getsockopt
(2)
讀 取 . IP 的 套 接
字 選 項 級 別 為
SOL_IP
這 是 一 個 布
林 整 型 標 識 ,當
值 為 0時 為 假 ,否
則 則 為 真 .
IP_OPTIONS
設 定 或 者 獲 取 將 由 該 套 接 字 傳 送 的 每 個 包 的 IP 選 項 . 該 引 數 是 一 個 指 向 包 含 選 項 和 選 項 長 度 的 儲 存 緩 衝 區 的 指 標 . setsockopt (2) 系 統 呼 叫 設 定 與 一 個 套 接 字 相 關 聯 的 IP 選 項 . IPv4 的 最 大 選 項 長 度 為 40 位 元 組 . 參 閱 RFC791 獲 取 可 用 的 選 項 . 如 果 一 個 SOCK_STREAM 套 接 字 收 到 的 初 始 連 線 請 求 包 包 含 IP 選 項 時 , IP 選 項 自 動 設 定 為 來 自 初 始 包 的 選 項 , 同 時 反 轉 路 由 頭 . 在 連 線 建 立 以 後 將 不 允 許 來 訪 的 包 修 改 選 項 . 預 設 情 況 下 是 關 閉 對 所 有 來 訪 包 的 源 路 由 選 項 的 , 你 可 以 用 accept_source_route sysctl 來 啟 用 . 仍 然 處 理 其 它 選 項 如 時 間 戳 ( timestamp) . 對 於 資 料 報 套 接 字 而 言 , IP 選 項 只 能 由 本 地 使 用 者 設 定 . 呼 叫 帶 IP_OPTIONS 的 getsockopt (2) 會 把 當 前 用 於 傳 送 的 IP 選 項 放 到 你 提 供 的 緩 衝 區 中 .
IP_PKTINFO
傳 遞 一 條 包 含 pktinfo 結 構 (該 結 構 提 供 一 些 來 訪 包 的 相 關 資 訊 )的 IP_PKTINFO 輔 助 資 訊 . 這 個 選 項 只 對 資 料 報 類 的 套 接 字 有 效 .
struct
in_pktinfo
{
unsigned int ipi_ifindex; /* 介 面 索
引 */
struct in_addr ipi_spec_dst; /* 路 由 目
的 地 址 */
struct in_addr ipi_addr; /* 頭 標 識
目 的 地 址 */
};
ipi_ifindex 指 的 是 接 收 包 的 介 面 的 唯 一 索 引 . ipi_spec_dst 指 的 是 路 由 表 記 錄 中 的 目 的 地 址 , 而 ipi_addr 指 的 是 包 頭 中 的 目 的 地 址 . 如 果 給 sendmsg (2)傳 遞 了 IP_PKTINFO, 那 麼 外 發 的 包 會 透 過 在 ipi_ifindex 中 指 定 的 介 面 傳 送 出 去 , 同 時 把 ipi_spec_dst 設 定 為 目 的 地 址 .
IP_RECVTOS
如 果 打 開 了 這 個 選 項 , 則 IP_TOS , 輔 助 資 訊 會 與 來 訪 包 一 起 傳 遞 . 它 包 含 一 個 位 元 組 用 來 指 定 包 頭 中 的 服 務 /優 先 順 序 欄 位 的 型 別 . 該 位 元 組 為 一 個 布 林 整 型 標 識 .
IP_RECVTTL
當 設 定 了 該 標 識 時 , 傳 送 一 條 帶 有 用 一 個 位 元 組 表 示 的 接 收 包 生 存 時 間 ( time to live) 欄 位 的 IP_RECVTTL 控 制 資 訊 . 此 選 項 還 不 支 援 SOCK_STREAM 套 接 字 .
IP_RECVOPTS
用 一 條 IP_OPTIONS 控 制 資 訊 傳 遞 所 有 來 訪 的 IP 選 項 給 使 用 者 . 路 由 頭 標 識 和 其 它 選 項 已 經 為 本 地 主 機 填 好 . 此 選 項 還 不 支 援 SOCK_STREAM 套 接 字 .
IP_RETOPTS
等 同 於 IP_RECVOPTS 但 是 返 回 的 是 帶 有 時 間 戳 的 未 處 理 的 原 始 選 項 和 在 這 段 路 由 中 未 填 入 的 路 由 記 錄 專 案 .
|
IP_TOS |
設 定 或 者 接 收 源 於 該 套 接 字 的 每 個 IP包 的 Type-Of-Service ( TOS 服 務 型 別 ) 欄 位 . 它 被 用 來 在 網 路 上 區 分 包 的 優 先 順 序 . TOS 是 單 位 元 組 的 欄 位 . 定 義 了 一 些 的 標 準 TOS 標 識 : IPTOS_LOWDELAY 用 來 為 互 動 式 通 訊 最 小 化 延 遲 時 間 , IPTOS_THROUGHPUT 用 來 最 佳 化 吞 吐 量 , IPTOS_RELIABILITY 用 來 作 可 靠 性 最 佳 化 , IPTOS_MINCOST 應 該 被 用 作 "填 充 資 料 ", 對 於 這 些 資 料 , 低 速 傳 輸 是 無 關 緊 要 的 . 至 多 隻 能 宣 告 這 些 TOS 值 中 的 一 個 . 其 它 的 都 是 無 效 的 , 應 當 被 清 除 . 預 設 時 ,Linux首 先 發 送 IPTOS_LOWDELAY 資 料 報 , 但 是 確 切 的 做 法 要 看 配 置 的 排 隊 規 則 而 定 . 一 些 高 優 先 順 序 的 層 次 可 能 會 要 求 一 個 有 效 的 使 用 者 標 識 0 或 者 CAP_NET_ADMIN 能 力 . 優 先 順 序 也 可 以 以 於 協 議 無 關 的 方 式 透 過 ( SOL_SOCKET, SO_PRIORITY )套 接 字 選 項 (參 看 socket (7) )來 設 定 . |
||
|
IP_TTL |
設 定 或 者 檢 索 從 此 套 接 字 發 出 的 包 的 當 前 生 存 時 間 欄 位 . |
IP_HDRINCL
如 果 開 啟 的 話 , 那 麼 使 用 者 可 在 使 用 者 資 料 前 面 提 供 一 個 ip 頭 . 這 隻 對 SOCK_RAW 有 效 .參 看 raw (7) 以 獲 得 更 多 資 訊 .當 激 活 了 該 標 識 之 後 ,其 值 由 IP_OPTIONS 設 定 ,並 且 IP_TOS 被 忽 略 .
IP_RECVERR
允 許 傳 遞 擴 充 套 件 的 可 靠 的 錯 誤 資 訊 . 如 果 在 資 料 報 上 激 活 了 該 標 識 , 那 麼 所 有 產 生 的 錯 誤 會 在 每 套 接 字 一 個 的 錯 誤 佇 列 中 排 隊 等 待 . 當 用 戶 從 套 接 字 操 作 中 收 到 錯 誤 時 ,就 可 以 透 過 呼 叫 設 定 了 MSG_ERRQUEUE 標 識 的 recvmsg (2) 來 接 收 . 描 述 錯 誤 的 sock_extended_err 結 構 將 透 過 一 條 型 別 為 IP_RECVERR , 級 別 為 SOL_IP的 輔 助 資 訊 進 行 傳 遞 . 這 個 選 項 對 在 未 連 線 的 套 接 字 上 可 靠 地 處 理 錯 誤 很 有 用 . 錯 誤 佇 列 的 已 收 到 的 資 料 部 分 包 含 錯 誤 包 .
IP 按 照 下 面 的 方 法 使 用 sock_extended_err 結 構 : ICMP 包 接 收 的 錯 誤 ee_origin 設 為 SO_EE_ORIGIN_ICMP , 對 於 本 地 產 生 的 錯 誤 則 設 為 SO_EE_ORIGIN_LOCAL . ee_type 和 ee_code 設 定 為 ICMP 頭 標 識 的 型 別 和 程 式 碼 欄 位 . ee_info 包 含 用 於 EMSGSIZE 時 找 到 的 MTU. ee_data 目 前 沒 有 使 用 . 當 錯 誤 來 自 於 網 路 時 ,該 套 接 字 上 所 有 IP選 項 都 被 啟 用 ( IP_OPTIONS , IP_TTL , 等 . )並 且 當 做 控 制 資 訊 包 含 錯 誤 包 中 傳 遞 .引 發 錯 誤 的 包 的 有 效 載 荷 會 以 正 常 資 料 返 回 .
在 SOCK_STREAM 套 接 字 上 , IP_RECVERR 會 有 細 微 的 語 義 不 同 .它 並 不 儲 存 下 次 超 時 的 錯 誤 ,而 是 立 即 傳 遞 所 有 進 來 的 錯 誤 給 使 用 者 . 這 對 TCP 連 線 時 間 很 短 的 情 況 很 有 用 ,因 為 它 要 求 快 速 的 錯 誤 處 理 . 使 用 該 選 項 要 小 心 :因 為 不 允 許 從 路 由 轉 移 和 其 它 正 常 條 件 下 正 確 地 進 行 恢 復 ,它 使 得 TCP變 得 不 可 靠 ,並 且 破 壞 協 議 的 規 範 . 注 意 TCP沒 有 錯 誤 佇 列 ; MSG_ERRQUEUE 對 於 SOCK_STREAM 套 接 字 是 非 法 的 . 因 此 所 有 錯 誤 都 會 由 套 接 字 函 式 返 回 ,或 者 只 返 回 SO_ERROR .
對 於 原 始 (raw)套 接 字 而 言 , IP_RECVERR 允 許 傳 遞 所 有 接 收 到 的 ICMP錯 誤 給 應 用 程 式 ,否 則 錯 誤 只 在 連 線 的 套 接 字 上 報 告 出 來 .
它 設 定 或 者 檢 索 一 個 整 型 布 林 標 識 . IP_RECVERR 預 設 設 定 為 off(關 閉 ).
IP_PMTU_DISCOVER
為 套 接 字 設 定 或 接 收 Path MTU Discovery setting(路 徑 MTU發 現 設 定 ). 當 允 許 時 ,Linux會 在 該 套 接 字 上 執 行 定 義 於 RFC1191中 的 Path MTU Discovery(路 徑 MTU發 現 ). don’t 段 標 識 會 設 定 在 所 有 外 發 的 資 料 報 上 . 系 統 級 別 的 預 設 值 是 這 樣 的 : SOCK_STREAM 套 接 字 由 ip_no_pmtu_disc sysctl 控 制 , 而 對 其 它 所 有 的 套 接 字 都 被 都 遮 蔽 掉 了 , 對 於 非 SOCK_STREAM 套 接 字 而 言 , 使 用 者 有 責 任 按 照 MTU的 大 小 對 資 料 分 塊 並 在 必 要 的 情 況 下 進 行 中 繼 重 發 .如 果 設 定 了 該 標 識 (用 EMSGSIZE ),核 心 會 拒 絕 比 已 知 路 徑 MTU更 大 的 包 .
當 允 許 PMTU ( 路 徑 MTU) 搜 尋 時 , 核 心 會 自 動 記 錄 每 個 目 的 主 機 的 path MTU(路 徑 MTU).當 它 使 用 connect (2) 連 線 到 一 個 指 定 的 對 端 機 器 時 ,可 以 方 便 地 使 用 IP_MTU 套 接 字 選 項 檢 索 當 前 已 知 的 path MTU(路 徑 MTU)(比 如 , 在 發 生 了 一 個 EMSGSIZE 錯 誤 後 ).它 可 能 隨 著 時 間 的 推 移 而 改 變 . 對 於 帶 有 許 多 目 的 端 的 非 連 線 的 套 接 字 ,一 個 特 定 目 的 端 的 新 到 來 的 MTU 也 可 以 使 用 錯 誤 佇 列 (參 看 IP_RECVERR ) 來 存 取 訪 問 . 新 的 錯 誤 會 為 每 次 到 來 的 MTU 的 更 新 排 隊 等 待 .
當 進 行 MTU 搜 尋 時 ,來 自 資 料 報 套 接 字 的 初 始 包 可 能 會 被 丟 棄 . 使 用 UDP 的 應 用 程 式 應 該 知 道 這 個 並 且 考 慮 其 包 的 中 繼 傳 送 策 略 .
為 了 在 未 連 線 的 套 接 字 上 引 導 路 徑 MTU 發 現 程 序 , 我 們 可 以 用 一 個 大 的 資 料 報 (頭 尺 寸 超 過 64K位 元 組 )啟 動 , 並 令 其 透 過 更 新 路 徑 MTU 逐 步 收 縮 .
為 了 獲 得 路 徑 MTU連 線 的 初 始 估 計 ,可 透 過 使 用 connect (2) 把 一 個 數 據 報 套 接 字 連 線 到 目 的 地 址 ,並 透 過 呼 叫 帶 IP_MTU選 項 的 getsockopt (2) 檢 索 該 MTU.
|
IP_MTU |
檢 索 當 前 套 接 字 的 當 前 已 知 路 徑 MTU.只 有 在 套 接 字 被 連 線 時 才 是 有 效 的 .返 回 一 個 整 數 .只 有 作 為 一 個 getsockopt (2) 才 有 效 . |
IP_ROUTER_ALERT
給 該 套 接 字 所 有 將 要 轉 發 的 包 設 定 IP路 由 器 警 告 ( IP RouterAlert option) 選 項 . 只 對 原 始 套 接 字 ( raw socket) 有 效 ,這 對 使 用 者 空 間 的 RSVP後 臺 守 護 程 式 之 類 很 有 用 . 分 解 的 包 不 能 被 核 心 轉 發 ,使 用 者 有 責 任 轉 發 它 們 .套 接 字 繫 結 被 忽 略 , 這 些 包 只 按 協 議 過 濾 . 要 求 獲 得 一 個 整 型 標 識 .
IP_MULTICAST_TTL
設 定 或 者 讀 取 該 套 接 字 的 外 發 多 點 廣 播 包 的 生 存 時 間 值 . 這 對 於 多 點 廣 播 包 設 定 可 能 的 最 小 TTL很 重 要 . 預 設 值 為 1,這 意 味 著 多 點 廣 播 包 不 會 超 出 本 地 網 段 , 除 非 使 用 者 程 式 明 確 地 要 求 這 麼 做 .引 數 是 一 個 整 數 .
IP_MULTICAST_LOOP
設 定 或 讀 取 一 個 布 林 整 型 引 數 以 決 定 傳 送 的 多 點 廣 播 包 是 否 應 該 被 回 送 到 本 地 套 接 字 .
IP_ADD_MEMBERSHIP
加 入 一 個 多 點 廣 播 組 .引 數 為 struct ip_mreqn 結 構 .
struct ip_mreqn
{
struct in_addr imr_multiaddr; /* IP多 點
傳 送 組 地 址 */
struct in_addr imr_address; /* 本 地 介
面 的 IP地 址 */
int imr_ifindex; /* 介 面 索 引 */
};
imr_multiaddr 包 含 應 用 程 式 希 望 加 入 或 者 退 出 的 多 點 廣 播 組 的 地 址 . 它 必 須 是 一 個 有 效 的 多 點 廣 播 地 址 . imr_address 指 的 是 系 統 用 來 加 入 多 點 廣 播 組 的 本 地 介 面 地 址 ;如 果 它 與 INADDR_ANY 一 致 ,那 麼 由 系 統 選 擇 一 個 合 適 的 介 面 . imr_ifindex 指 的 是 要 加 入 /脫 離 imr_multiaddr 組 的 介 面 索 引 ,或 者 設 為 0表 示 任 何 介 面 .
由 於 相 容 性 的 緣 故 ,老 的 ip_mreq 介 面 仍 然 被 支 援 .它 與 ip_mreqn 只 有 一 個 地 方 不 同 ,就 是 沒 有 包 括 imr_ifindex 欄 位 .這 隻 在 作 為 一 個 setsockopt (2) 時 才 有 效 .
IP_DROP_MEMBERSHIP
脫 離 一 個 多 點 廣 播 組 .引 數 為 ip_mreqn 或 者 ip_mreq 結 構 ,這 與 IP_ADD_MEMBERSHIP 類 似 .
IP_MULTICAST_IF
為 多 點 廣 播 套 接 字 設 定 本 地 裝 置 .引 數 為 ip_mreqn 或 者 ip_mreq 結 構 ,它 與 IP_ADD_MEMBERSHIP 類 似 .
當 傳 遞 一 個 無 效 的 套 接 字 選 項 時 ,返 回 ENOPROTOOPT .
SYSCTLS
IP協
議 支 援 sysctl 介 面 配
置 一 些 全 域 性
選 項 .sysctl可 透 過 讀
取 或 者 寫 入
/proc/sys/net/ipv4/*
檔 案 或
使 用
sysctl
(2) 介 面
來 存 取 訪 問 .
ip_default_ttl
設 定 外 發 包 的 預 設 生 存 時 間 值 .此 值 可 以 對 每 個 套 接 字 透 過 IP_TTL 選 項 來 修 改 .
ip_forward
以 一 個 布 林 標 識 來 啟 用 IP轉 發 功 能 .IP轉 發 也 可 以 按 介 面 來 設 定
ip_dynaddr
開 啟 介 面 地 址 改 變 時 動 態 套 接 字 地 址 和 偽 裝 記 錄 的 重 寫 . 這 對 具 有 變 化 的 IP地 址 的 撥 號 介 面 很 有 用 .0表 示 不 重 寫 ,1開 啟 其 功 能 ,而 2則 啟 用 冗 餘 模 式 .
ip_autoconfig
無 文 件
ip_local_port_range
包 含 兩 個 整 數 ,定 義 了 預 設 分 配 給 套 接 字 的 本 地 埠 範 圍 . 分 配 起 始 於 第 一 個 數 而 終 止 於 第 二 個 數 . 注 意 這 些 埠 不 能 與 偽 裝 所 使 用 的 埠 相 沖 突 (儘 管 這 種 情 況 也 可 以 處 理 ). 同 時 ,隨 意 的 選 擇 可 能 會 導 致 一 些 防 火 牆 包 過 濾 器 的 問 題 ,它 們 會 誤 認 為 本 地 埠 在 使 用 . 第 一 個 數 必 須 至 少 >1024,最 好 是 >4096以 避 免 與 眾 所 周 知 的 埠 發 生 衝 突 , 從 而 最 大 可 能 的 減 少 防 火 牆 問 題 .
ip_no_pmtu_disc
如 果 打 開 了 ,預 設 情 況 下 不 對 TCP套 接 字 執 行 路 徑 MTU發 現 . 如 果 在 路 徑 上 誤 配 置 了 防 火 牆 (用 來 丟 棄 所 有 ICMP包 )或 者 誤 配 置 了 介 面 (例 如 ,設 定 了 一 個 兩 端 MTU不 同 的 端 對 端 連 線 ),路 徑 MTU發 現 可 能 會 失 敗 . 寧 願 修 復 路 徑 上 的 損 壞 的 路 由 器 ,也 好 過 整 個 地 關 閉 路 徑 MTU發 現 , 因 為 這 樣 做 會 導 致 網 路 上 的 高 開 銷 .
ipfrag_high_thresh, ipfrag_low_thresh
如 果 排 隊 等 待 的 IP碎 片 的 數 目 達 到 ipfrag_high_thresh , 佇 列 被 排 空 為 ipfrag_low_thresh . 這 包 含 一 個 表 示 位 元 組 數 的 整 數 .
ip_always_defrag
[kernel 2.2.13中 的 新 功 能 ;在 早 期 核 心 版 本 中 ,該 功 能 在 編 譯 時 透 過 CONFIG_IP_ALWAYS_DEFRAG 選 項 來 控 制 ]
當 該 布 林 標 識 被 啟 用 (不 等 於 0)時 , 來 訪 的 碎 片 (IP包 的 一 部 分 ,這 生 成 於 當 一 些 在 源 端 和 目 的 端 之 間 的 主 機 認 定 包 太 大 而 分 割 成 許 多 碎 片 的 情 況 下 )將 在 處 理 之 前 重 新 組 合 (碎 片 整 理 ), 即 使 它 們 馬 上 要 被 轉 發 也 如 此 .
只 在 執 行 著 一 臺 與 網 路 單 一 連 線 的 防 火 牆 或 者 透 明 代 理 伺 服 器 時 才 這 麼 幹 ; 對 於 正 常 的 路 由 器 或 者 主 機 , 永 遠 不 要 開 啟 它 . 否 則 當 碎 片 在 不 同 連 線 中 透 過 時 碎 片 的 通 訊 可 能 會 被 擾 亂 . 而 且 碎 片 重 組 也 需 要 花 費 大 量 的 記 憶 體 和 CPU 時 間 .
這 在 配 置 了 偽 裝 或 者 透 明 代 理 的 情 況 下 自 動 開 啟 .
neigh/*
參 看 arp (7)
IOCTLS
所 有 在 socket (7) 中 有 描 述 的 ioctl 都 可 應 用 於 ip.
用 於 配 置 防 火 牆 應 用 的 ioctl記 載 在 ipchains 包 的 ipfw (7) 的 文 件 中 .
用 來 配 置 普 通 裝 置 引 數 的 ioctl在 netdevice (7) 中 有 描 述 .
NOTES(備 註 )
使 用 SO_BROADCAST 選 項 要 小 心 - 它 在 Linux 中 沒 有 許 可 權 要 求 . 不 小 心 的 廣 播 很 容 易 導 致 網 路 過 載 .對 於 新 的 應 用 協 議 而 言 ,最 好 是 使 用 多 點 廣 播 組 來 替 代 廣 播 .我 們 不 鼓 勵 使 用 廣 播 .
有 些 其 它 的 BSD套 接 字 實 現 提 供 了 IP_RCVDSTADDR 和 IP_RECVIF 套 接 字 選 項 來 獲 得 目 的 地 址 以 及 接 收 資 料 報 的 介 面 .Linux有 更 通 用 的 IP_PKTINFO 來 完 成 相 同 任 務 .
ERRORS(錯 誤 )
ENOBUFS,EPERM對
EACCES等 .)
ENOTCONN
操 作 只 定 義 於 連 線 的 套 接 字 ,而 該 套 接 字 卻 沒 有 連 線 .
|
EINVAL |
傳 遞 無 效 的 引 數 . 對 於 傳 送 操 作 ,這 可 以 因 傳 送 到 一 個 blackhole(黑 洞 ) 路 由 而 引 發 . |
EMSGSIZE
資 料 報 大 於 該 路 徑 上 的 MTU,並 且 它 不 能 被 分 成 碎 片 .
|
EACCES |
沒 有 必 要 許 可 權 的 使 用 者 試 圖 執 行 一 項 需 要 某 些 許 可 權 的 操 作 . 這 包 括 : 在 沒 有 SO_BROADCAST 標 識 設 定 的 情 況 下 發 送 一 個 包 到 廣 播 地 址 . 透 過 一 條 禁 止 的 路 由 傳 送 包 . 在 沒 有 CAP_NET_ADMIN 或 者 有 效 使 用 者 標 識 不 為 0的 情 況 下 修 改 防 火 牆 設 定 . 在 沒 有 CAP_NET_BIND_SERVICE 能 力 或 者 有 效 使 用 者 標 識 不 為 零 0的 情 況 下 繫 結 一 個 保 留 埠 . |
EADDRINUSE
試 圖 繫 結 到 一 個 已 在 使 用 的 地 址 .
ENOMEM 和 ENOBUFS
沒 有 足 夠 的 記 憶 體 可 用 .
ENOPROTOOPT 和 EOPNOTSUPP
傳 遞 無 效 的 套 接 字 選 項 .
|
EPERM |
使 用 者 沒 有 許 可 權 設 定 高 優 先 順 序 ,修 改 配 置 或 者 傳 送 訊 號 到 請 求 的 程 序 或 組 . |
EADDRNOTAVAIL
請 求 一 個 不 存 在 的 介 面 或 者 請 求 的 源 端 地 址 不 是 本 地 的 .
|
EAGAIN |
在 一 個 非 阻 塞 的 套 接 字 上 進 行 操 作 會 阻 塞 . |
ESOCKTNOSUPPORT
套 接 字 未 配 置 或 者 請 求 了 一 個 未 知 型 別 的 套 接 字 .
EISCONN
在 一 個 已 經 連 線 的 套 接 字 上 呼 叫 connect (2) .
EALREADY
在 一 個 非 阻 塞 的 套 接 字 上 的 連 線 操 作 已 經 在 進 行 中 .
ECONNABORTED
在 一 次 accept (2) 執 行 中 連 線 被 關 閉 .
|
EPIPE |
連 線 意 外 關 閉 或 者 被 對 端 關 閉 . |
|||
|
ENOENT |
在 沒 有 報 到 達 的 套 接 字 上 呼 叫 SIOCGSTAMP . |
EHOSTUNREACH
沒 有 有 效 路 由 表 記 錄 匹 配 目 的 地 址 .該 錯 誤 可 以 被 來 自 遠 端 路 由 器 的 ICMP訊 息 或 者 因 為 本 地 路 由 表 的 緣 故 而 引 發 .
|
ENODEV |
網 路 裝 置 不 可 用 或 者 不 適 於 傳 送 IP. |
|||
|
ENOPKG |
核 心 子 系 統 沒 有 配 置 . |
ENOBUFS, ENOMEM
沒 有 足 夠 的 空 閒 記 憶 體 . 這 常 常 意 味 著 記 憶 體 分 配 因 套 接 字 緩 衝 區 的 限 制 而 受 限 , 而 不 是 因 為 系 統 記 憶 體 的 緣 故 ,但 是 這 也 不 是 100%正 確 .
其 它 錯 誤 可 能 由 重 疊 協 議 族 生 成 ;參 看 tcp (7), raw (7), udp (7) 和 socket (7).
VERSIONS(版 本 )
IP_PKTINFO , IP_MTU , IP_PMTU_DISCOVER , IP_PKTINFO , IP_RECVERR 和 IP_ROUTER_ALERT 是 Linux 2.2中 的 新 選 項 .
struct ip_mreqn 也 是 新 出 現 在 Linux 2.2中 的 .Linux 2.0只 支 援 ip_mreq .
sysctl是 在 Linux 2.2中 引 入 的 .
COMPATIBILITY(相 容 性 )
為 了 與 Linux 2.0相 容 ,仍 然 支 援 用 過 時 的 socket(PF_INET, SOCK_RAW, protocol ) 語 法 開 啟 一 個 packet (7) 套 接 字 .我 們 不 贊 成 這 麼 用 ,而 且 應 該 被 socket(PF_PACKET, SOCK_RAW, protocol ) 所 代 替 .主 要 的 區 別 就 是 新 的 針 對 一 般 連 結 層 資 訊 的 sockaddr_ll 地 址 結 構 替 換 了 舊 的 sockaddr_pkt 地 址 結 構 .
BUGS
有 許 多 不 連 貫 的 錯 誤 碼 .
沒 有 描 述 用 來 配 置 特 定 IP介 面 選 項 和 ARP表 的 ioctl.
AUTHORS(作 者 )
該 man頁 作 者 是 Andi Kleen.
SEE ALSO(另 見 )
sendmsg (2), recvmsg (2), socket (7), netlink (7), tcp (7), udp (7), raw (7), ipfw (7).
RFC791:原
始 IP規 範 .
RFC1122:IPv4主 機 需 求 .
RFC1812:IPv4路 由 器 需 求
.
[中 文 版 維 護 人 ]
riser <boomer@ccidnet.com>
[中 文 版 最 新 更 新 ]
2001/07/19
《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :
http://cmpp.linuxforum.net
跋
本
頁 面 中 文 版 由
中 文 man 手 冊 頁 計
劃 提 供 。
中 文 man 手 冊 頁 計
劃 :
https://github.com/man-pages-zh/manpages-zh