今天,來分享下TCP-UART透傳示例,源碼開放,可根據(jù)實(shí)際需求靈活應(yīng)用。
一、TCP協(xié)議概述
TCP(Transmission Control Protocol,傳輸控制協(xié)議)——是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它主要用于在不可靠的網(wǎng)絡(luò)環(huán)境中提供穩(wěn)定的數(shù)據(jù)傳輸服務(wù),確保數(shù)據(jù)能夠按照順序、無錯誤地到達(dá)接收端。
TCP通過三次握手建立連接,使用滑動窗口進(jìn)行流量控制,以及通過校驗(yàn)和確認(rèn)應(yīng)答、超時重傳等機(jī)制來保證數(shù)據(jù)的可靠性。它是互聯(lián)網(wǎng)協(xié)議套件(TCP/IP協(xié)議族)的核心組成部分,廣泛應(yīng)用于各種網(wǎng)絡(luò)應(yīng)用中。
▼ TCP工作原理 ▼
連接建立:
TCP協(xié)議使用三次握手協(xié)議來建立連接。
客戶端發(fā)送一個SYN(同步序列編號)報(bào)文給服務(wù)端,并攜帶一個隨機(jī)生成的初始序列號。
服務(wù)端收到SYN報(bào)文后,發(fā)送一個SYN+ACK(同步序列編號 + 確認(rèn)應(yīng)答)報(bào)文給客戶端,表示確認(rèn)收到了客戶端的SYN報(bào)文,并攜帶自己的初始序列號。
客戶端收到服務(wù)端的SYN+ACK 報(bào)文后,發(fā)送一個ACK(確認(rèn)應(yīng)答)報(bào)文給服務(wù)端,表示確認(rèn)收到了服務(wù)端的SYN+ACK報(bào)文。至此,TCP連接建立完成。
數(shù)據(jù)傳輸:
在連接建立后,雙方就可以開始傳輸數(shù)據(jù)了。TCP協(xié)議會將應(yīng)用層發(fā)送的數(shù)據(jù)分割成適當(dāng)長度的報(bào)文段(通常受該計(jì)算機(jī)連接的網(wǎng)絡(luò)的數(shù)據(jù)鏈路層的最大傳輸單元MTU的限制),并為每個報(bào)文段分配一個序號。
接收端在收到報(bào)文段后,會按照序號進(jìn)行排序,并發(fā)送確認(rèn)應(yīng)答(ACK)給發(fā)送端。如果發(fā)送端在合理的往返時延(RTT)內(nèi)未收到確認(rèn)應(yīng)答,則會重傳對應(yīng)的報(bào)文段。
連接釋放:
TCP協(xié)議使用四次揮手協(xié)議來終止連接。
客戶端發(fā)送一個FIN(結(jié)束)報(bào)文給服務(wù)端,表示自己想要關(guān)閉連接。
服務(wù)端收到FIN報(bào)文后,發(fā)送一個ACK報(bào)文給客戶端,表示確認(rèn)收到了客戶端的FIN報(bào)文。此時,客戶端到服務(wù)端的連接關(guān)閉,但服務(wù)端到客戶端的連接仍然打開。
服務(wù)端在發(fā)送完所有剩余數(shù)據(jù)后,也發(fā)送一個FIN報(bào)文給客戶端,表示自己也想要關(guān)閉連接。
客戶端收到服務(wù)端的FIN報(bào)文后,發(fā)送一個ACK報(bào)文給服務(wù)端,表示確認(rèn)收到了服務(wù)端的FIN報(bào)文。至此,TCP連接完全關(guān)閉。
二、TCP-UART透傳示例
本小節(jié)教你使用LuatOS腳本語言,讓Air201模組連接上一個TCP服務(wù)器,并且實(shí)現(xiàn)模組和服務(wù)器之間數(shù)據(jù)的雙向傳輸。
軟硬件相關(guān)準(zhǔn)備工作及最新示例源碼下載詳見:
https://docs.openluat.com/air201/luatos/app/socket/tcp/
2.1 本教程實(shí)現(xiàn)的功能定義:
通過網(wǎng)頁端啟動一個TCP服務(wù)器;
Air201模組插卡開機(jī)后,連接上TCP服務(wù)器;
Air201模組向TCP服務(wù)器發(fā)送:TCP CONNECT,服務(wù)器可以收到數(shù)據(jù)并且在網(wǎng)頁端顯示;
TCP服務(wù)器網(wǎng)頁端向Air201模組發(fā)送:data from TCP server,Air201模組可以收到數(shù)據(jù)并且通過串口輸出顯示。
2.2 核心腳本代碼詳解
2.2.1 串口初始化
本文示例:串口使用MAIN_UART(uart1)。
2.2.2 數(shù)據(jù)接收回調(diào):搭建響應(yīng)橋梁
這里使用uart.rx接口,和以zbuff的方式存儲從uart1外部串口收到的數(shù)據(jù)--收取數(shù)據(jù)會觸發(fā)回調(diào)。
注意:這里的"receive"是固定值不要修改。
2.2.3 TCP網(wǎng)絡(luò)配置:鋪就數(shù)據(jù)通道
2.2.4 TCP至串口透傳:數(shù)據(jù)無縫流轉(zhuǎn)
2.2.5 串口至TCP反透傳:信息雙向傳遞
2.3 完整代碼及運(yùn)行結(jié)果
2.3.1 完整代碼
2.3.2 運(yùn)行結(jié)果
使用TCP/UDP web測試工具及SSCOM串口工具,運(yùn)行結(jié)果如下圖所示:
今天的內(nèi)容就分享到這里了~
審核編輯 黃宇
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7067瀏覽量
89110 -
TCP
+關(guān)注
關(guān)注
8文章
1362瀏覽量
79108 -
透傳
+關(guān)注
關(guān)注
0文章
10瀏覽量
6831
發(fā)布評論請先 登錄
相關(guān)推薦
評論