本帖最后由 adds 于 2018-10-15 14:11 编辑  
 
    如果你没有听说过wireshark,说明你还不懂网络。 
 
   由一个问题引起的思索     一、问题:两台服务器A和B的网络配置如下,B的子网掩码本应该是255.255.255.0,被不小心配成了255.255.255.224。它们还能正常通信吗?     服务器A:                                                         
    服务器B:  
  二、你可能会想到的答案   答案1:“A和B不能通信,因为------如果这样都行的话,子网掩码还有什么用?”(这位的反证法听上去很有道理!)   答案2:“A和B能通信,因为它们可以通过ARP广播获得对方的MAC地址。”(那子网掩码还有什么用?楼下的反证法用来反驳这位正好。)   答案3:“A和B能通信,但所有包都要通过默认网关192.168.1.254转发。”(请问这么复杂的结果你是怎么想到的?)   答案4:“A和B不能通信,因为ARP不能跨越子网。”(这个答案听上去像是经过认真思考的)  
 
   三、答案只有一个(借用柯南的名言'真相只有一个')    2、启动Wireshark软件,点击需要抓取数据包的网卡。  
   3、在服务器B上Ping A的IP地址,结果是通的。  
   4、收集每台设备的MAC地址    服务器A:54:E1:AD:CD:3F:55    服务器B:18:03:73:6D:FB:8B    网关:38:83:45:72:bd:10  
   5、分析相关数据包    第1列是包的序号,前27号包在按下Capture键后,在ping包发起前就已经完成了交互。    第28列。    可以看到服务器B通过ARP广播查询默认网关192.168.1.254的MAC地址。为什么我ping的是服务器A的IP,B却去查默认网关的MAC地址呢?这是因为B根据自己的子网掩码,计算出A属于不同子网,跨子网通信需要默认网关的转发。崦要和默认网关通信,就需要获得其MAC地址。  
   第29列。      默认网关192.168.1.254向B回复了自己的MAC地址。为什么这个MAC地址开头明明是“38:83:45”,而Wireshark上显示出来却是以“Tp-Link”开头的字符呢?这是因为MAC地址的前3个字节表示厂商,而38:83:45被分配了TP-Link公司。这是全球统一的标准,所以WireShark干脆直接显示出厂商名了。    下面的“Dell_6d:fb:8b”同理。  
   第30列。     B发出ping的request包,指定Destination IP为A,即192.168.1.1。但Destination MAC却是默认网关的38:83:45:72:bd:10。表明B希望网关把包转发给A。  
  第31列。    A发出ping的replye包。这是因为在A看来,B属于相同子网,相同子网通信无需默认网关参与,只要通过ARP获得对方的MAC地址就行。这个包也表明默认网关成功地把B发出的ping请求转发给了A,否则A不会回应ping的request包。   从该数据包的源MAC地址54:E1:AD:CD:3F:55可以看出,这个包是A直接发送过来的,而不是通过默认网关的转发。  
  答案:B先把Ping包请求交给默认网关,默认网关再转发给A。而A收到请求后直接把ping包回复给B,形成了三角形环路,和AD的三角传输相似。  
  四、逆向思维下    如果不是B主动发包,而是A主动发包,,那能ping通吗??    我们抓包看一下。    抓包前,先将ARP清除下。    DOS下使用arp -d *清除,使用该命令后,还需要使用arp -d 192.168.1.254手动清除网关的ARP绑定关系,因为该绑定关系是动态的,arp -d *命令无法清除动态的ARP绑定关系。    实际测试中,跟操作系统有关,发现Win10的清除不掉,而Win7某些情况可以清除掉。  
   结果:不可以。  
   在A服务器上抓包。由于包比较多,我们使用filter工具过滤,在搜索栏里输入:arp    可以看到,服务器A发出ARP请求,询问服务器B的MAC地址,服务器B回应ARP响应包。  
 
   然后输入:ip addr == 192.168.1.240,搜索服务器B的相应包。  
   可以看到,A服务器直接向B服务器发起ICMP的Request请求,但一直没有收到响应包。  
   在B服务器上抓包,输入:ip.src == 192.168.1.1 and ip.dst == 192.168.1.240  
   可以看到,服务器B回应了服务器A的ping request包,但为什么A没有收到ping的reply呢?    打开二层帧,可以看到服务器B的目的MAC是TP-Link_72:bd:10,这时,我们可以推断出来,服务器B回包ping的请求包,但因为服务器B认为服务器A和自己不在同一个网段,其ping的回应包交给了网关处理,但网关并没有将这个包转交给服务器A。  
    由于网关是一台路由器,不支持抓包,不好判定是什么原因导致的不转发该数据包。有可能路由器查看目的MAC是自己,而自己与服务器B没有交互,就将数据包丢弃了。  
  四、其他   win10系统启动Wireshark后会发现不了物理网卡。  
  原因是NPF没有启动,需要在DOS下运行:net start npf  |