大家都知道ping是無狀态的三層封包,而telnet是有狀态的四層以上的封包。下面從一個現象來說明問題。
環境:
CISCO7609上面配置了多個vlan包括vlan100和vlan109,并且7609上面配置了3個VRF,vlan100屬于vlan31,vlan109屬于vlan32。不同vrf之間通過fwsm互聯。有2台伺服器,其一(指令為SerA)的ip分别為123.37.109.15。另外一台(指令為SerB)比較特别,其網口配置成了trunk模式,不同子接口ip包括123.37.100.246,123.37.108.246以及123.37.109.246等,其路由表如下:
<a href="http://ipneter.blog.51cto.com/attachment/200810/20/341177_12244682915RX8.jpg"></a>
測試結果:
從123.37.109.15 ping 123.37.100.246,結果通訊正常;但是從123.37.109.15 telnet 123.37.100.246 22(此端口本地測試通訊正常)卻不通。
分析:
1,從123.37.109.15 ping 123.37.100.246:
經過fwsm轉發後,SerB從接口bond0.100上面接收到123.37.109.15的echo request的資料包,然後查找路由表發現傳回到123.37.109.15的資料包需要通過bond0.109接口轉發,是以從bond0.109轉發資料包,經過fwsm轉發到源伺服器SerA,通訊正常。如下SerB上bond0.100和bond0.109的抓包:
<a href="http://ipneter.blog.51cto.com/attachment/200810/20/341177_1224468293BZdw.jpg"></a>
2,從123.37.109.15 telnet 123.37.100.246 的 22端口:
經過fwsm轉發後,SerB從接口bond0.100上面接收到123.37.109.15的syn的資料包,然後查找路由表發現傳回到123.37.109.15的資料包需要通過bond0.109接口轉發,是以從bond0.109轉發ack資料包,經過fwsm轉發到源伺服器SerA,但是通訊卻失敗。于是抓包如下:
在SerB上抓從123.37.109.15過來的ssh資料包:
在SerB上抓到123.37.109.15的傳回資料包:
在SerA上抓到從123.37.100.246傳回的資料包:
<a href="http://ipneter.blog.51cto.com/attachment/200810/20/341177_1224468296T460.jpg"></a>
分析結論:
是以根據上面截圖可以分析出源伺服器SerA收到了發往123.37.100.246的22端口的傳回資料包,而且源和目的端口都正确,但是為什麼就是不通呢?而ping包為什麼又是通的呢?這就需要從ping和telnet上面來分析了。首先大家都知道ping是無狀态的三層資料包,而telnet是有狀态的四層以上的資料包,是以在針對這些資料包的處理方式上肯定存在差別。當ping包經過了fwsm後,由于其為無狀态封包,是以fwsm制作簡單處理後轉發資料包;然後當telnet的封包經過fwsm後,由于其為有狀态封包,是以fwsm需要做序列号的重新編号和狀态檢測處理,然後轉發資料包。雖然源伺服器貌似接收到了telnet的傳回資料包,但是與自己發送的syn封包的序列号不比對,是以此telnet程序就失敗了。
本文轉自 chris_lee 51CTO部落格,原文連結:http://blog.51cto.com/ipneter/106634,如需轉載請自行聯系原作者