在分布式系統(tǒng)中經(jīng)常需要使用到心跳機(jī)制作為探活的手段捎谨。在java 中InetAdress有個(gè)isReachable功能民效,可以判斷網(wǎng)絡(luò)是否通,與ping類似侍芝。
在非root 用戶下使用isReachable時(shí)研铆,其實(shí)是通過tcp 協(xié)議,向?qū)Χ说?號(hào)端口發(fā)送了一個(gè)報(bào)文州叠。這種情況下有一定隱患棵红,并不是所有機(jī)器的7號(hào)端口都是開啟的(有些環(huán)境為了安全考慮會(huì)關(guān)閉一些著名的端口)
image.png
在root 用戶下執(zhí)行時(shí),是通過ICMP 發(fā)送一個(gè)探活報(bào)文(ping 的實(shí)現(xiàn)就是ICMP)咧栗。這種協(xié)議是一種可靠的協(xié)議逆甜,并且不依賴端口。
image.png
非root 用戶如果用cap_net_raw 權(quán)限致板,可以發(fā)送ICMP協(xié)議交煞。