文章出处:http://blog.youkuaiyun.com/s_k_yliu/article/details/6676183
这两天要针对客户的修改做一些验证,发现不行,于是乎,各种网上找原因。
问题的关键就是本机对本机发送的IP数据包是如何处理的。一个现象就是,用wireshark抓包,在A、B两台电脑上装FTP server,如果在A访问本机的FTP服务器,则wireshark并不会显示相应的数据包,而A访问B的FTP服务器wireshark就会出现IP数据包。那么对于访问本机的IP数据包在系统中是怎么处理的呢?
首先是关于127.0.0.1和本机IP的区别。
对于ping 127.0.0.1,这条命令是不经过网卡的,ping本地回环是测试tcp/ip协议栈,在协议栈的IP层就进行了回环。
而对于ping host ip,需要网卡支持,如果禁用网卡或把网线拔掉,则ping 就会fail,可见这种方式可以检查网卡或网络工作是否正常。
那么这个数据包怎么走的呢?
1)主机发送ping自身ip地址的包;
2)系统在FIB路由表中尝试查找路由;
3)发现找到的路由项类型为RTN_LOCAL;
4)把数据包的dev_out设置为loopback_dev;
5)利用环回接口发送数据包;
根据这些信息,就可以下结论:对于TCP/IP的某些服务,都需要网卡的支持,但是对于本机的访问,网卡驱动判断是否环回,如果环回的话网卡不会将IP数据包发到以太网,我们的抓包工具也就抓不到包了。