TCP 協議 特點

2021-09-05 12:06:52 字數 3085 閱讀 5697

tcp介紹

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) 流量控制和阻塞管理

流量控制用來避免主機傳送得過快而使接收方來不及完全收下。

tcp與udp的不同點

from socket import *

# 建立socket

tcp_client_socket = socket(af_inet, sock_stream)

# 目的資訊

server_ip = input("請輸入伺服器ip:")

server_port = int(input("請輸入伺服器port:"))

# 鏈結伺服器

tcp_client_socket.connect((server_ip, server_port))

# 提示使用者輸入資料

send_data = input("請輸入要傳送的資料:")

tcp_client_socket.send(send_data.encode("gbk"))

# 接收對方傳送過來的資料,最大接收1024個位元組

recvdata = tcp_client_socket.recv(1024)

print('接收到的資料為:', recvdata.decode('gbk'))

# 關閉套接字

tcp_client_socket.close()

tcp伺服器

socket建立乙個套接字

bind繫結ip和port

listen使套接字變為可以被動鏈結

accept等待客戶端的鏈結

recv/send接收傳送資料

乙個很簡單的tcp伺服器如下:

from socket import *

# 建立socket

tcp_server_socket = socket(af_inet, sock_stream)

# 本地資訊

address = ('', 7788)

# 繫結

tcp_server_socket.bind(address)

# 使用socket建立的套接字預設的屬性是主動的,使用listen將其變為被動的,這樣就可以接收別人的鏈結了

tcp_server_socket.listen(128)

# 如果有新的客戶端來鏈結伺服器,那麼就產生乙個新的套接字專門為這個客戶端服務

# client_socket用來為這個客戶端服務

# tcp_server_socket就可以省下來專門等待其他新客戶端的鏈結

client_socket, clientaddr = tcp_server_socket.accept()

# 接收對方傳送過來的資料

recv_data = client_socket.recv(1024) # 接收1024個位元組

print('接收到的資料為:', recv_data.decode('gbk'))

# 傳送一些資料到客戶端

client_socket.send("thank you !".encode('gbk'))

# 關閉為這個客戶端服務的套接字,只要關閉了,就意味著為不能再為這個客戶端服務了,如果還需要服務,只能再次重新連線

client_socket.close()

tcp注意點

tcp伺服器一般情況下都需要繫結,否則客戶端找不到這個伺服器

tcp客戶端一般不繫結,因為是主動鏈結伺服器,所以只要確定好伺服器的ip、port等資訊就好,本地客戶端可以隨機

tcp伺服器中通過listen可以將socket建立出來的主動套接字變為被動的,這是做tcp伺服器時必須要做的

當客戶端需要鏈結伺服器時,就需要使用connect進行鏈結,udp是不需要鏈結的而是直接傳送,但是tcp必須先鏈結,只有鏈結成功才能通訊

當乙個tcp客戶端連線伺服器時,伺服器端會有1個新的套接字,這個套接字用來標記這個客戶端,單獨為這個客戶端服務

listen後的套接字是被動套接字,用來接收新的客戶端的鏈結請求的,而accept返回的新套接字是標記這個新客戶端的

關閉listen後的套接字意味著被動套接字關閉了,會導致新的客戶端不能夠鏈結伺服器,但是之前已經鏈結成功的客戶端正常通訊。

關閉accept返回的套接字意味著這個客戶端已經服務完畢

當客戶端的套接字呼叫close後,伺服器端會recv解堵塞,並且返回的長度為0,因此伺服器可以通過返回資料的長度來區別客戶端是否已經下線

運輸層協議 TCP和UDP協議的特點

內容來自計算機網路 第六版 謝希仁編著 電子工業出版社 tcp協議 transmission control protocol 傳輸控制協議。udp協議 user datagram protocol 使用者資料報協議。按照osi的術語,兩個對等運輸實體在通訊時傳送的資料單位叫做運輸協議資料單元tpd...

TCP協議的十大特點

tcp協議 傳輸控制協議 transmission control protocol 是當今使用最廣泛的協議之一,首先我們要明確tcp協議是乙個 1 有連線 2 可靠傳輸 3 面向位元組流的乙個協議。現在就來細數以下他具有的幾大特點。1.確認應答機制 這是tcp協議可靠性的核心機制,接收方在收到傳送...

HTTP協議特點

協議特點 協議是基於tcp ip協議之上的應用層協議.基於請求 響應 的模式 http協議規定,請求從客戶端發出,最後伺服器端響應該請求並 返回。換句話說,肯定是先從客戶端開始建立通訊的,伺服器端在沒有 接收到請求之前不會傳送響應 無狀態儲存 http是一種不儲存狀態,即無狀態 stateless ...