當乙個資料段到達時,該資料段最初會被網絡卡的驅動處理,然後被按序放到ip模組的輸入佇列中,如果是本機資料,ip層再按序傳送給tcp,放置在tcp的接受緩衝區中。
tcp 資料互動過程中,這個是動態的,每次都不一樣的,這取決於tcp的接受和發生模組的實現/接受資料的程序,而程序又收作業系統排程的影響,所以每次連線資料互動都是動態的,都是不一樣的。
從left 到 right , left是向右移動的,right也是向右移動的,left 的移動受著對端的控制,如果對端確認了,那滑動視窗就可以向右移動了。
right的向右移動,也取決於對端,當對端應用讀取了確認的資料後釋放了自己的tcp緩衝區後,對端tcp緩衝區可以容納更多的資料時,此時發生端的窗戶right邊就可以向右移動增加發生端視窗的大小。
接受確認資料和讀取資料是倆回事,接受資料,資料被放到了 tcp緩衝區內,而讀取資料是應用從tcp緩衝區中讀取,所以接受了資料,發生確定ack 時windows的值不一定會往大調,因為 tcp緩衝區的資料不變,當緩衝區的資料被應用讀取走了後,才可以增大視窗的大小。
概念mtu 就是最大單元 (對於資料鏈路層來看的,資料幀中最大有效資料的大小,如果大於這個需要分片,如果ip層設定df選項就會收到 icmp 錯誤)
ip層的 最小重組緩衝區大小 ipv4 576位元組 (對於網路層來看,發生分片後,在目的端重組的每個分片最大值)
mss就是最大載荷 從應用層算的。(它是 mtu - ip+tcp頭部的大小,乙太網是1460 ,它就是為了減少分片的收到)
mtu 跟資料鏈路有關,乙太網是1500,所以最大乙太網幀是 1518。(具體分不分片都看mtu的大小)
路徑mtu
這個就是主要通過ip 包頭 中的不分段選項,然後應用icmp 不斷報錯最終確定 通訊路徑上 的最小mtu。那麼為什麼要路徑mtu呢?
因為每個資料鏈路層 都有乙個佇列,這個佇列滿了,就會把從ip層得到的資料報丟棄,然後從路由器/主機 協議棧上向返回乙個錯誤給 傳送方。 這樣就會造成無謂的開銷。
所以如果我們沒有路徑mtu的話,傳遞的資料段過大,到了ip 層就會被分成很多 資料報,這些過多的資料報在傳送的時候,會佔據大量的佇列,那麼這樣就會造成嚴重的丟包,這個開銷在應用層是看不到的,這個屬於核心協議棧。
如果我們使用了路徑mtu,根據tcp/ip 的規則,未收到ack 前是不會再次傳送資料的,這樣即使每次傳遞的資料可能變少了,但是丟包就不那麼嚴重了。
TCP IP協議詳解
tcp ip協議是乙個比較複雜的協議集,有很多專業書籍介紹。在此,我僅介紹其與程式設計密切相關的部分 乙太網上tcp ip協議的分層結構及其報文格式。我們知道tcp ip協議採用分層結構,其分層模型及協議如下表 傳 輸 層 transport tcp udp 網 間 網層 internet ip a...
tcp ip詳解學習
tcp ip分層 點到點與端到端的區別 下面引用網上某達人的解釋,非常清楚 點到點是物理拓撲,如光纖,就必須是點到點連線,ddn專線也是,即兩頭各乙個機器中間不能有機器。點到點是網路層的,你傳輸層只認為我的資料是從a直接到e的,但實際不是這樣的,打個比方,傳輸層好象領導,他發布命令 要幹什麼什麼事,...
TCP IP協議詳解
一 tcp ip 和 iso osi iso osi模型,即開放式通訊系統互聯參考模型 open system interconnection reference model 是國際標準化組織 iso 提出的乙個試圖使各種計算機在世界範圍內互連為網路的標準框架,簡稱osi。tcp ip協議模型 tr...