為什么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指令的自己找手冊,上面應該有寫


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com