1. 程式人生 > >為什麼ESP8266 TCP透傳過程會丟包?8266流控原理以及如何設定

為什麼ESP8266 TCP透傳過程會丟包?8266流控原理以及如何設定

1.為什麼ESP8266 TCP透傳過程會丟包?

因為沒有設定硬體流控。如果需要避免丟包,請設定硬體流控。透傳功能使用的是 TCP 協議,每包資料是 1460 (取決於協議棧),只要網路良好,buffer 空間沒有被消耗完,就可以不停地傳輸資料。對於透傳,串列埠接收資料間隔超過約 20 ms,就會認為資料接收結束,將已經接受的資料傳輸到網路。如果網路不好,就可能會丟棄一些資料,因此,為避免這種情況,可以將串列埠設定為流控模式。

2.8266流控原理

這裡寫圖片描述

A和C之間可能只是因為距離遠,無法收到對方的無線電波。從A的角度來看,C屬於隱藏節點。如果使用簡單的transmit-and-pray 協議,A與C有可能在同一時間傳送資料,這會造成節點B無法辨識任何資訊。此外,A與C將無從得知錯誤發生,因為只有節點B才知道有衝突發生。在無線網路中,由隱藏節點所導致的碰撞問題相當難以監聽,因為無線收發器通常是半雙工工作模式,即無法同時收發資料。為了防止碰撞發生,802.11 允許工作站使用請求傳送(RTS)和允許傳送(CTS)幀來清空傳送區域。由於RTS 與CTS 幀會延長資料交易過程,因此RTS幀、CTS 幀、資料幀以及最後的應答幀均被視為相同基本連線的一部分。(通俗地說,就是存在AC同時訪問中間的B,B無法正確接收他們的資訊。所以就多了個請求和允許,讓B決定誰先說話,然後就沒有衝突了)

RTS/CTS機制的使用是可選的,每個802.11節點必須實現該功能。通過RTS/CTS機制,明確預留通道。其原理如下:

n 傳送者傳送RTS(請求傳送),包括接收者地址,傳送資料幀時間,傳送ACK時間。
n 接收者用CTS迴應,CTS為傳送者預留頻寬同時通告所有站點(包括隱藏的)保持靜默。
n 由於RTS和CTS長度很短,其本身衝突的概率減少,因此RTS/CTS機制可以有效執行。
這裡寫圖片描述

3.如何設定8266流控

這裡寫圖片描述

如果不是AT指令的自己找手冊,上面應該有寫