TCP協議,傳輸控制協議(英語:Transmission Control Protocol,縮寫為 TCP)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IETF的RFC 793定義。
TCP通信需要經過創建連接、數據傳送、終止連接三個步驟。
TCP通信模型中,在通信開始之前,一定要先建立相關的鏈接,才能發送數據,類似于生活中,"打電話""
1. 面向連接
通信雙方必須先建立連接才能進行數據的傳輸,雙方都必須為該連接分配必要的系統內核資源,以管理連接的狀態和連接上的傳輸。
雙方間的數據傳輸都可以通過這一個連接進行。
完成數據交換后,雙方必須斷開此連接,以釋放系統資源。
這種連接是一對一的,因此TCP不適用于廣播的應用程序,基于廣播的應用程序請使用UDP協議。
2. 可靠傳輸
1)TCP采用發送應答機制
TCP發送的每個報文段都必須得到接收方的應答才認為這個TCP報文段傳輸成功
2)超時重傳
發送端發出一個報文段之后就啟動定時器,如果在定時時間內沒有收到應答就重新發送這個報文段。
TCP為了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的包發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數據包就被假設為已丟失將會被進行重傳。
3)錯誤校驗
TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。
4) 流量控制和阻塞管理
流量控制用來避免主機發送得過快而使接收方來不及完全收下。
udp通信模型中,在通信開始之前,不需要建立相關的鏈接,只需要發送數據即可,類似于生活中,"寫信""

TCP通信模型
udp通信模型中,在通信開始之前,一定要先建立相關的鏈接,才能發送數據,類似于生活中,"打電話""

tcp的客戶端要比服務器端簡單很多,如果說服務器端是需要自己買手機、查手機卡、設置鈴聲、等待別人打電話流程的話,那么客戶端就只需要找一個電話亭,拿起電話撥打即可,流程要少很多
python創建tcp客戶端的代碼如下:
import socketdef main(): # 1.創建套接字socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.連接服務器 dest_ip = input("請輸入服務器ip:") dest_port = int(input("請輸入服務器port:")) dest_addr = (dest_ip, dest_port) tcp_socket.connect(dest_addr) # 3. 接收/發送數據 send_data = input("請輸入要發送的數據:") tcp_socket.send(send_data.encode("utf-8")) # 接收服務器發送的數據 recv_data = tcp_socket.recv(1024) print(recv_data.decode("utf-8")) # 4. 關閉套接字socket tcp_socket.close()if __name__ == "__main__": main()在ubuntu的終端上執行:

在網絡調試助手中啟動tcp服務器進行交互:

在程序中,如果想要完成一個tcp服務器的功能,需要的流程如下:
import socketdef main(): # 1.創建套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.綁定端口 addr = ("", 8866) tcp_server_socket.bind(addr) # 3.監聽鏈接 tcp_server_socket.listen(128) # 4.接收別人的連接 # client_socket用來為這個客戶端服務 client_socket, client_addr = tcp_server_socket.accept() # 5.接收對方發送的數據 recv_data = client_socket.recv(1024) print("接收到的數據:%s" % recv_data.decode("utf-8")) # 6.給對方發送數據 client_socket.send("hahaha".encode("utf-8")) # 7.關閉套接字 client_socket.close() tcp_server_socket.close()if __name__ == "__main__": main()在ubuntu的終端上執行:

在網絡調試助手中啟動tcp服務器進行交互:

總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答