lesson3 簡單網路連線-網路資料的收發
這節課,我們簡述下網路中的資料收發過程。
1.網路包的形成
在完成網路連線後,就進入到資料收發階段。
使用Socket中的Write(…)介面將資料寫到傳送緩衝區中。寫進緩衝區的資料並不會立即被髮送出去。而是等到緩衝區資料到達一定的長度或者傳送時間限制後才將包轉交給IP層。這樣做的原因是因為應用程式一次寫入的資料是無法確定長度的,如果每次都直接封裝成包傳送出去,就會造成網路上有大量的小包,導致網路效率下降,但如果一直因為資料不夠而不傳送,又會造成較大的延遲。所以協議棧就規定了一個稱為MTU的標準來確定發包的大小。
MTU表示一個網路包的最大長度,在乙太網中一般為1500位元組。MTU是包含所有頭部和資料的總長度。其中,資料的最大長度叫做MSS。如下圖:
所以,緩衝區一般到達MSS規定的長度就會被髮送出去。
但如果緩衝區資料過長,就需要進行資料拆分。在拆分出來的各個資料的前面加上各種頭部。見下圖:
2.使用ACK號確認網路包已收到
TCP是一種可靠的資料傳送,發出去的包要收到響應進行確認,丟包後會重新傳送。這個確認原理分為幾個步驟:
- 首先,TCP模組在拆分資料時,會先計算好每一塊資料相當於頭部開始的第幾個位元組(累加),接下來在傳送這一塊資料時,將計算好的位元組數寫在TCP頭部中,“序號”這個欄位就是用來幹這個的。
- 然後,傳送資料的長度也需要告知對方,不過這個並不是放在TCP頭部裡面的,因為用這個網路包的長度減去頭部的長度就可以得到資料的長度,所以接收方可以用這種方式來進行計算。
假設上次收到第1460位元組(接收方計算),那麼接下來如果收到的是序號(ACK序號)為1461的包,說明中間沒有遺漏;但如果收到的包序號為2921,那就說明中間有包遺漏了。
在實際過程中,ACK號並不是從1開始的(隨機正整數),在連線階段傳送的ACK號就是這裡的起始序號。
同理,伺服器向客戶端傳送資料包的時候也是使用ACK號進行確認的。
3.TCP包的一些控制
TCP傳輸除了具體可靠性外,還可以調節傳送包的平均時間。
當網路傳輸繁忙時就會發生阻塞,ACK號的返回就會變慢,我們需要將等待時間(Timeout指標)設定得稍微長些,否則可能因為ACK號的姍姍來遲導致包重發的浪費。TCP採用了動態調整等待時間的方法,這個等待時間是根據ACK號返回所需的時間來判斷的。具體來說,TCP會在傳送資料包的過程中持續測量ACK號的返回時間,如果ACK號返回變慢,則相應延長等待時間;相應地,如果ACK號馬上就能返回,則相應縮短等待時間。
多包的同時傳送:如果發出了TCP包後只是在等待ACK包的返回,這樣就浪費了很多網路資源。為了避免這種情況,TCP採用了滑動視窗方式進行發包操作。
使用視窗滑動方式傳送資料包要注意傳送包的個數限制,如果傳送包比接收方處理包的速度快,在將資料儲存到接收緩衝時,造成緩衝區溢位。緩衝區溢位後,後面的資料就進不來了,因此接收方就收不到後面的資料了。
可以通過以下方式解決:
- 首先,接收方需要告訴傳送方自己最多能接收多少位元組資料。
- 然後,傳送方根據這個值對資料傳送操作進行控制。
這也就是TCP頭中視窗欄位的作用。
傳送方的資料到達接收方,在接收完成後就需要向傳送方返回ACK號,再經過一段時間,當資料傳遞給應用程式之後才需要更新視窗大小。這樣,時間上就有一定的間隔。所以,接收方收到包後不會立馬返回ACK包給到傳送方,而是要等待一段時間,在這個過程中很有可能會出現其他的通知操作,這樣就可以把兩個值寫在同一個ACK包裡了。
4.接收HTTP響應訊息
傳送HTTP請求訊息後,接下來還需要等待Web伺服器返回響應訊息。之後的操作分為以下幾個步驟:
- 瀏覽器在傳送訊息後,會呼叫read(…)介面來獲取響應訊息。這個過程是阻塞的,直到接收緩衝區有資料後,通過系統中斷方式通知到瀏覽器進行資料讀取。
- 控制流程會通過read轉移到協議棧,然後協議棧執行接下來的操作。
相關文章
- Android連線網路資料庫的方式Android資料庫
- 簡單介紹網路(伺服器)線路伺服器
- Docker容器的網路連線Docker
- 網路 保證在關閉連線前, 把資料發出去
- VirtualBox網路連線方式
- RPC連線btcd網路RPC
- STM32與物聯網02-網路資料收發
- 網際網路是如何連線的:計網概述
- 使用iwctl連線無線網路
- 連線上網路無法上網
- 使用 Charles 簡單解決微信開發者工具網路連線失敗的問題
- Android多個網路連線Android
- 判斷網路是否連線
- Docker網路雙向連線Docker
- 網路連線總超時?從四層模型上解析網路是怎麼連線的模型
- win10無線網路連線步驟_win10怎麼連線無線網路Win10
- 解讀 ip 命令展示的網路連線資訊
- VMware連線網路的幾種方式
- Linux網路連線的三種方式Linux
- 2022年全球移動網際網路連線量(附原資料表)
- (四)卷積神經網路 -- 12 稠密連線網路(DenseNet)卷積神經網路SENet
- win10網路連線如何開啟_win10開啟網路連線的步驟Win10
- 千萬併發連線下,如何保障網路效能
- 手機網路連線效能API介面:查詢手機網路連線效能狀態API
- 簡單的神經網路測試神經網路
- [ kvm ] 四種簡單的網路模型模型
- SSL連線,搭建網路安全道路
- liunx 檢視網路連線數
- 檢視網路連線數netstat -an
- 最簡單的網路圖片的爬取 --Pyhon網路爬蟲與資訊獲取爬蟲
- win10網路印表機怎麼連線 win10連線網路印表機的步驟Win10
- 判斷是否能連線網際網路
- 【產業網際網路】原始碼資本眼中的產業網際網路:連線賦能構建生態產業原始碼
- 網路 IO 模型簡單介紹模型
- 【計算機網路】資料鏈路層——無線區域網與VLAN計算機網路
- 網路連線斷開如何解決 win10系統網路連線經常斷開Win10
- 2015年-2022年全球移動網際網路連線量(附原資料表)
- IS-IS網路收斂