分类: WINDOWS
2011-04-28 09:27:44
摘自2011-03-22 的个人日志:
处理为什么登录不上192.168.1.22 webserver的问题,最后诊断出是本人有多张虚拟网卡,有两张设定了192.168.1.xxx, 结果发出ping 192.168.1.22时,ip包路由到这些虚拟网卡上,所以没有回应。
1. 发出ping 命令时的流程说明一下:
1.1 ping命令会产生一个icmp的报文,然后把icmp报文流到ip包封装,ip包有dst addr: 192.168.1.22信息,然后就向下层分发给link level设备,(这里有多个,Marvell Youkon ether card(真实的网卡),VMnet1(VMware虚拟机的Host模式网卡), VMnet8 (VMware虚拟机的NAT模式网卡),VirtualBox Net(Sun公司VBox虚拟机的网卡))
由于本人在移植TCP/IP到pc时,使用到VMware 的Host模式,就是VMnet1网卡配置了192.168.1.xxx这样的网址,所以这里当ip包路由时,就与某种策略(这里路由策略不清楚,在S80 POS机器,是以太网优先级第一的)路由到VMnet1网卡上,所以本人在拦截包时,什么arp包的数据都找不到,于是就不能连通192.168.1.22主机。
1.2 正常的情况是这样的,当ip包到选定网卡(假如是Marvell Youkon Ether card),如果我的arp缓冲里没有192.168.1.22 XX:XX:XX:XX:XX:XX这样的map地址(可以通过arp -d 192.168.1.22清除),那么tcpip协议栈会发出一个ARP广播包查询谁是192.168.1.22的主机,再收到主机ARP包的回应,然后把应答的主机192.168.1.22的Mac地址填充到Ether的eth.dst头部,最后发出去(这样一个正常的ping包发出去)。
1.3 如果相应主机(192.168.1.22)的防火墙没屏蔽ping报文,那么就自动回应ping reply包,于是就表示两台主机通讯成功。