udp发送ip端口发送不可达
众所周知,udp是无连接的,所以忽略udp接收方状态,是否监听对应udp端口以及ip是否存在,直接向udp发送数据,会发生什么?
为了搞清楚这个问题,我们尝试在局域网建立收发设备,然后抓包分析。
从抓包来看,udp数据正常发出。对端设备回复icmp指示端口不可达。
当我们把接收端设备关机,此时udp数据正常发出,直到arp连续三次请求失败。此时抓包显示udp包已经不发送了。
此时,我们跟踪sytem call 确定,发用户空间的sendto 接口仍然显示成功。
此时通过查看arp缓存确定ip状态已经标记为INCOMPLETE。
尝试手动更新arp缓存的mac地址和状态到REACHABLE。
此时udp又重新发了出来。
值得一提的是,在路由器查看arp缓存,发现不管设备断开多久,状态都不会变更为INCOMPLETE而始终是STALE。