本地curl主机IP:81时流量不经过lo设备的原因咨询
本地curl主机IP:81时流量不经过lo设备的原因咨询
嗨,这个问题其实涉及到Linux系统的路由决策逻辑和网络接口绑定规则,我来给你掰扯清楚:
先看用
curl http://127.0.0.1:81的情况:系统一看到127.0.0.1这个地址,就知道这是**回环地址段(127.0.0.0/8)**的内容,默认路由规则会直接把流量导向lo回环接口。数据包完全在内核内部完成收发,根本不会碰物理网卡,所以用tcpdump -i lo能抓到包是理所当然的。再看
curl http://hostip:81的情况:这里的hostip是你主机物理网卡(比如eth0、ens33这类)绑定的IP。系统处理请求时会先查路由表,发现目标IP是绑定在物理网卡上的公网/局域网IP,对应的路由规则是把流量发往物理网卡接口,而不是lo。哪怕你是在本地发起请求,数据包也会走物理网卡的链路(内核会做内部转发,不会真的发出去,但路径是物理网卡),所以你在lo接口上用tcpdump自然抓不到流量。
如果想验证的话,你可以试试用tcpdump -i 你的物理网卡名,就能抓到这个请求的数据包了;或者执行ip route get 你的hostip,返回结果里会明确显示流量走的是物理网卡,而不是lo。
备注:内容来源于stack exchange,提问作者jiawei




