錯誤設置子網掩碼的結果


今天上午系統聯調時,本地運行Server,Client運行於其它電腦,打開Server后Client總是連接失敗。netstat -ano | findstr 4444發現沒問題,Server正在4444端口處於Listen狀態。

反過來,本地運行Client,Server運行於其它電腦,Client連接Server仍舊失敗。

打開網絡設置,發現本地IP為172.16.29.114,子網掩碼為255.255.255.0;對端IP為172.16.32.254,子網掩碼為255.255.0.0。難道問題出在這里?抱着試試看的想法將本地子網掩碼改為255.255.0.0,再連,果然成功。

圖一

圖一中網絡設置一直都會,但各項參數具體意義是什么不甚了解。

問題總結如下:

  1.子網掩碼設置錯誤產生的影響

  2.網絡設置中各項參數在數據傳輸中扮演的角色

 

經人點撥加WireShark抓包,得出如下結論:

本地主機IP172.16.29.114,子網掩碼255.255.255.0,此刻要向主機172.16.32.254發送數據。本地主機會將DstIP(目標IP)與local subnet mask(本地子網掩碼)作與操作,得到network number(網絡號)+subnet number(子網號),然后主機將local IP與local subnet mask做與操作獲取本地主機所處的network number+subnet number,兩相比較:

  如果相同則本地主機認為自己與目標主機處於同一子網, 此時本地主機將含有local IP+local Mac+DstIP的ARP數據報在當前子網進行廣播,子網中的所有主機均會收到此ARP數據報並查看DSTIP是否就是自己,若否則丟棄,若是則將src IP+src Mac存入ARP緩存表然后將local Mac發送給源主機。

圖二

源主機獲取到Dst Mac后進行數據傳輸。

  如果不同則本地主機認為自己與目標主機處於不同子網,此時本地主機將數據直接發向圖一中網關指定的地址(可能是路由器),由網關進行分組轉發。

 

現在回到原來的問題

1. IP172.16.29.114、子網掩碼255.255.255.0,連接IP172.16.32.254、子網掩碼255.255.0.0,本地主機將172.16.29.114和255.255.255.0相與得自身network number + subnet number = 172.16.29,再172.16.32.254與255.255.255.0相與得對方network number + subnet number = 172.16.32,不相等,自此本地主機獲知對方處於非本地子網中,故將連接請求包發往網關172.16.29.1。網關做如下操作:

    <1>. 從收到的數據報的首部提取目的IP地址 D 。

    <2>. 先判斷是否為直接交付。對路由器直接相連的網絡逐個進行檢查:用各網絡的子網掩碼和 D逐位相“與”(AND操作),看結果是否和相應的網絡地址匹配。若匹配,則把分組進行直接交付(當然還要把 D 轉換成物理地址,把數據報封裝成幀再發送出去),轉發任務結束。否則就是間接交付,執行<3>。

    <3>. 若路由表中有目的地址為 D 的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行<4>。

    <4>. 對路由表中的每一行(目的網絡地址、子網掩碼、下一跳地址),用其中的子網掩碼和 D 逐位相“與”(AND操作),其結果為 N 。若 N 與該行的目的網絡地址匹配,則數據報傳送給指明的下一跳路由器;否則,執行<5>。

    <5>. 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行<6>。

    <6>. 報告轉發分組出錯。

連接請求包成功到達172.16.32.254,一番處理后172.16.32.254給予接收連接應答包,過程同上,將172.16.32.254與255.255.0.0相與得自身network number + subnet number = 172.16,再172.16.29.114與255.255.0.0相與得對方network number + subnet number = 172.16,相等,主機172.16.32.254誤認為對方與自己處於同一子網,故廣發ARP請求包獲取對方Mac。172.16.32子網中所有的機器都會收到該請求包,發現請求IP非自身IP時都會將其丟棄,最終254的ARP請求收不到任何應答,254無法獲取對方Mac地址,過程在此中斷。172.16.29.114長時間得不到應答,連接失敗。

用Ping代替連接請求包,結果如下

主機172.16.32.254發送ICMP,ICMP無應答

圖三

 

主機172.16.32.254收到ICMP后ARP,ARP無應答

圖四

 

 

2. IP172.16.29.114、子網掩碼255.255.0.0,連接IP172.16.32.254、子網掩碼255.255.255.0,本地主機將172.16.29.114和255.255.0.0相與得自身network number + subnet number = 172.16,再172.16.32.254與255.255.0.0相與得對方network number + subnet number = 172.16,想的,本地主機誤認為對方與自己處於同一子網,故廣發ARP請求包獲取對方Mac。172.16.29子網中所有的機器都會收到該請求包,發現請求IP非自身IP時都會將其丟棄,最終本地主機的ARP請求收不到任何應答,因而無法獲取對方Mac地址,過程在此中斷。而對方自始至終未收到本地主機發送的任何連接請求包。

用Ping代替連接請求包,結果如下

圖五

主機172.16.29.114

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM