本章用途:
處理端到端的網絡問題,如常見的網頁打不開,QQ能上。
網頁顯示不全,如圖片不顯示等。
分支互聯中的訪問問題。
主要理解區域間路由和服務器和客戶端的傳輸過程。
一、應用操作
1.首先說一下如何修改MSS:
進入IP>Firewall>Mangle,點擊+號新建一個規則,如下:
然後在高級選項裏面:
動作選項
PPPOE的MTU是1480
2.結果對比:
未修改前,SYN請求多少MSS,相應的回包也就是多少的載荷payload
SYN請求
這就是回覆的載荷數據大小。
修改1420後,如下三圖:
SYN請求:
對應回傳的:
二、概念理解:
MTU,Maximum Transmission Unit最大傳輸單元,工作數據鏈路層,屬於OSI第二層。
IP,Internet Protocol Address互聯網協議地址,工作在網絡傳輸層,屬於OSI第三層。
TCP,Transmission Control Protocol 傳輸控制協議,工作在傳輸層,屬於OSI第四層。
UDP,User Datagram Protocol用戶數據報協議,工作在傳輸層,屬於OSI第四層。
MSS,Maximum Segment Size,最大報文段長度,是TCP協議一個子項,也是工作在OSI第四層。
MSS=MTU-40 --- 40包含了20字節的IP頭和20字節的TCP頭
三、TCP中MSS原理通俗理解:
服務器有一個貨櫃,空箱40T,載重1460T,連帶貨物剛好也是1500T。,要發給我們!
網絡就好比有許多的傳送轉發站(路由器),連接不同的傳送帶,有1500T的,有1400T的。
1400T傳送帶上面的貨櫃空箱還是40T,但是載重只有1360T。
當服務器的貨從1500T的傳送帶轉發到1400T的傳送帶時候,貨櫃就要拆分重新裝櫃,1460T的貨物就要分爲兩個櫃,一個裝1360T,一個裝100T,這明顯增加了轉發站的工作量,進出都要拆包和重新打包,然後在到我們手上的時候,我們的本地的路由器要把這兩個櫃重新裝成1460T的一個櫃發給我們。我們就能看到頁面了,原理很完美!
但是這個時候就會導致轉發站十分繁忙,因爲一次的事情要做兩次,所以忙中出錯導致沒封裝完整的事情。
另外經過不同的轉發站時候,有些轉發站會限制你的PIR速率(Peak Information Rate,峯值信息速率),達到PIR速率直接丟包,這樣導致了我們本地路由器收到的貨不對板,等待了許久也收到不到剩下的包,所以無法在我們的本地的轉發站上面將這些貨櫃按照相應的順序裝好返給我們,只能丟棄。所以我們就半天都打不開網站頁面,最後除了一些小貨櫃能收到(文字)。
問題來了,TCP不是會重傳嗎?
是的,TCP會重傳,但是服務器端發出的數據給我們就開始等我們說收到了(ACK),但是我們收不到包,沒發回復ACK,服務器等了一會,基於使命必達原因給我們重傳,我沒還是沒有收到包,沒發回復ACK,第一次等1秒,第二次等2秒,第三次等4秒,一般默認重傳15次。如此類推,直到重傳超時RTO,切斷連接。
RTO在Linux最小爲200毫秒,最大120秒,可以在內核中設置該項值。
Router OS也可以在防火牆裏面設置連接追蹤的時間
四、修改MSS的好處
修改了MSS的大小,就是主動向服務器協商發送給我們路由器的每個包有效載荷是多少,這樣可以讓數據包在傳輸路徑中可以一次性傳送回來給我們,降低我們因爲被分片所導致丟包問題,如果丟包的話,也好區分丟分了哪些包。簡單來說就是在外部轉發路徑中儘量減少拆分和封裝的流程,只在我們路由器上面重組。
五、爲什麼只建議修改MSS,不修改MTU
很好的問題,別因爲我們在OSI四層中,不是隻有TCP協議,還有UDP!
MSS是依賴TCP的,修改了MTU可以降低MSS,同時也會降低我們UDP的傳輸效率。我們還有許多也是基於UDP協議的,如QQ,IP電話,和視頻會議等。
所以我們建議修改MSS而不是MTU,除非你的路由不支持MSS修改。