您的位置:首页 > 其它

对自身IP数据报在网卡处理的一些认识

2011-04-08 11:39 183 查看
在做业务测试的时候,客户提出了一个新的需求。通过实际测试发现,这个需求不可以实现,但是要给出理论分析,于是又学了一些TCP/IP的东西。

问题的关键是对于发送到自身的IP数据包,是否会先经过网卡发出去,然后再经过网卡接收回来。通过用Wireshark抓取网卡收发的数据包发现,对于自身的IP数据包,网卡并没有收发的情况出现。那么,网卡对这种数据包是怎么处理的呢?

关于localhost、127.0.0.1和网络IP

a) localhost : 本地服务器,不经过网卡传输

b) 127.0.0.1 : 本机地址,可以测试TCP/IP服务是否正常,依赖网卡,并受到网络防火墙和网卡相关的限制,只能通过本机访问,可以测试网卡是否工作正常,排除了网络的影响

c) 网络IP : 网络中主机地址,可以测试联网情况

在网上查资料发现,localhost的实现类似于我们在创建socket的时候使用AF_UNIX域,这种方式也就是使用命名管道的方式。



ip输出函数先检查地址是不是环回地址:

1.如果是环回地址,直接交给环回驱动程序处理,返回ip输入函数

2.如果不是环回地址,检查是不是广播地址或者多播地址

3.如果不是广播或者多播地址,才检查是不是本机地址,如果是本机地址,则交给环回驱动程序处理,环回驱动程序返回给ip输入函数

那么,对于ping自身的数据报是怎么走的?

这很简单:

1)主机发送ping自身IP地址的包

2)系统在FIB路由表中尝试查找路由

3)发现找到的路由项类型为RTN_LOCAL

4)把数据包的dev_out设置为loopback_dev

5)利用回环接口发送数据包

需要注意,网上对这种机制的讨论是在linux环境下,这是TCP/IP协议的规定,与OS无关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: