icmp, IPPROTO_ICMP - Linux IPv4 ICMP 核心模組.
本網路核心協議模組實現了基於
RFC792
協議中定義的《網際網路控制報文協議》
。它針對網路主機間通訊出錯的情況作出回應並給出診斷資訊。
使用者不能直接使用本模組。相反本模組需與核心中的其他協議進行通訊,而這
些協議將 ICMP
出錯資訊返回到網路協議的應用層。ICMP
核心模組也回應 ICMP
請求。
如果用 IPPROTP_ICMP
開啟原始套接字(raw
socket)時,
使用者協議有可以收到任意本地套接字
ICMP 包。
IPPROTO_ICMP. 請參閱
raw(7) 傳遞到套接字的 ICMP
包可以用
ICMP_FILTER
套接字選項進行過濾。核心會處理所有
ICMP
包,包括傳遞到使用者的套接字去的。
Linux
對可以到達每個目標主機出錯資訊包的比率設立了限制。
ICMP_REDIRECT 及
ICMP_DEST_UNREACH
也受進入包的目標路由的限制。
ICMP 支援透過 sysctl
介面來設定一些全域性
IP 引數。對 Sysctl
的訪問可以透過讀、寫
/proc/sys/net/ipv4/* 下的檔案透過
sysctl(2) 介面進行.
大多數這些 sysctls 對特定 ICMP
型別的資料包數量進行了限制。
Linux 2.2
使用記號單元過濾器對
ICMP 包進行限制。
此值表示超時錯誤,以秒計,直到到頂後記號單元過濾器被清除為止。
- icmp_destunreach_rate
- 傳送目的地不可到達
ICMP
訊息包的最大資料包比率。這限制了傳送到任意一個
路由或目的地的資料包的比率。
這個限制不影響傳送用來發現資料鏈路最大傳送單位(MTU)的
ICMP_FRAG_NEEDED包 資料包。
- icmp_echo_ignore_all
- 如果該值不為零,Linux將忽略所有的
ICMP_ECHO 請求。
- icmp_echo_ignore_broadcasts
- 如果該值不為零,Linux將忽略所有傳送到廣播地址的
ICMP_ECHO 資料包。
- icmp_echoreply_rate
- 傳送響應 ICMP_ECHOREQUEST
請求的 ICMP_ECHOREPLY
資料包比率的最大值。
- icmp_paramprob_rate
- 傳送 ICMP_PARAMETERPROB
資料包比率的最大值。當一個具有非法
IP
報頭資料包到達時將傳送這些包。
- icmp_timeexceed_rate
- 傳送 ICMP_TIME_EXCEEDED
包比率的最大值。當一個數據包透過太多網段時,這些包用作防止路由迴環。
由於在許多其他實現中不支援
IPPROTO_ICMP 原始套接字(raw
socket),可移植程式不能依靠這一特性。
當Linux不作為路由器時,將不被髮送
ICMP_REDIRECT
包。核心也只有在路由表中的舊閘道器和路由重新定向超時時才接受這些包。
ICMP_TIMESTAMP 返回的 64
位毫秒為單位的時間戳是自1970年1月1日以來的時間.
Linux 的 ICMP
在內部使用原始套接字(raw
socket)來發送ICMP包。
這個原始套接字可能在
netstat(8)
訊息輸出中出現,帶著一個“zero
inode”資訊。
在2.2版本中將再不支援
ICMP_ADDRESS 請求。
在2.2版本中將不再支援
ICMP_SOURCE_QUENCH
ip(7)
RFC792
對ICMP協議進行了詳細的敘述。
LetBright <[email protected]>
2000/10/30
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh