觀前提醒:本文主要內容為使用Python在局域網內建立TCP連接并傳輸圖片信息,計算機為一塊旭日X3和一塊英偉達Orin NX。
一、什么是TCP
TCP(傳輸控制協議)是一種可靠的、面向連接的協議,它確保數據包的順序傳輸和完整性。當需要確保數據完全無誤地傳送到目的地時,TCP 是一個不錯的選擇。在我們的示例中,一臺計算機將作為服務器來接收圖片,另一臺計算機作為客戶端來發送圖片。
那TCP通信的流程是什么呢?
1.1??三次握手(Three-Way Handshake)
在傳輸任何數據之前,客戶端和服務器之間首先進行連接建立的過程,客戶端會和服務端進行三次握手。
分別是:
- SYN:客戶端發送一個帶有 SYN(同步序列編號)標志的數據包,以初始化一個連接。
- SYN-ACK:服務器接收到 SYN 請求后,發送一個帶有 SYN 和 ACK(確認)標志的數據包作為響應。
- ACK:客戶端收到服務器的 SYN-ACK 響應后,再發送一個帶有 ACK 標志的數據包來確認,并且連接就此建立。
1.2??數據傳輸
一旦三次握手完成,連接就建立了,數據可以在客戶端和服務器之間傳輸。
- 數據段:客戶端和服務器可以開始交換數據段。TCP 保證了數據的順序和完整性。
- 確認:接收方在收到一個或多個數據段后,會發送 ACK 來確認收到。
1.3 流量控制
TCP 使用窗口大小(window size)來進行流量控制,確保發送方不會溢出接收方的緩沖區。
窗口調整:如果接收方處理數據的速度跟不上發送方的發送速度,它可以通過調整窗口大小來告知發送方減慢發送速度。
1.4 擁塞控制
當網絡擁塞時,TCP 會自動降低數據的發送速率。
下面是 TCP 中用于控制網絡擁塞的一些算法:
慢啟動、擁塞避免、快速重傳、快速恢復。
1.5 錯誤檢測和重傳
TCP 提供了校驗和,用來檢測數據傳輸中的錯誤。如果檢測到錯誤,或者某個數據段未被確認,會觸發重傳機制。
1.6. 四次揮手(Four-Way Handshake)
當數據傳輸完成,任一方都可以發起連接的終止。
- FIN:發起關閉連接的一方會發送一個帶有 FIN 標志的數據包。
- ACK:接收到 FIN 的另一方會發送 ACK 來確認。
- FIN:之后,接收 FIN 的一方也發送一個 FIN 來表示它也準備關閉連接。
- ACK:最初發起 FIN 的一方發送 ACK 確認,然后連接關閉。
1.7 時間等待(TIME_WAIT)
最終關閉連接之前,TCP 保持一個時間等待狀態,以確保所有的數據包都已經被確認,防止在網絡中延遲的數據包在連接關閉后到達。
通過上述步驟,TCP 保證了在不可靠的網絡環境中可靠的、按序的和無差錯的數據傳輸。
TCP通信流程
得益于我們站在了巨人肩膀上,我們不需要專注于上述的流程,可以使用一些封裝之后的函數來實現我們的目標
二、服務端實現(接收端)
服務器端程序將在等待接收圖片的計算機上運行。它將監聽一個 TCP 端口并等待客戶端的連接。一旦建立連接,服務器就準備接收文件。
王子公主們請看代碼:
?點擊旭日X3與英偉達Orin NX通過TCP傳輸圖片 - 古月居可查看全文