1. 程式人生 > >簡述python中兩種網路傳輸方式(UDP,TCP)

簡述python中兩種網路傳輸方式(UDP,TCP)

簡述python中網路傳輸方式(UDP,TCP)

socket 套接字

socket(簡稱 套接字) 是程序間通訊一個工具,它能實現把資料從一方傳輸到另外一方,完成不同電腦上程序之間的通訊, 它好比資料的搬運工

在建立socket連線時,有TCP和UDP兩種連線方式。

UDP

UDP英文全拼(User Datagram Protocol )簡稱使用者資料報協議,是一種無連線不可靠的網路傳輸協議。

比如生活中的郵寄信件;

UDP的特點

無連線;資源開銷小;傳輸速度快;每個資料包最大是64k。

UDP的優缺點

優點:傳輸速度快;無連線,資源開銷小。

缺點:容易丟資料,傳輸資料不可靠;沒有流量控制,當對方沒有及時接收資料,傳送方一直髮送資料會導致接收方電腦的緩衝區資料過滿,導致電腦出現卡死情況。

UDP的使用場景

對網路通訊質量要求不高並且要求通訊速度儘量快的地方

對講機,廣播,上課用的共屏軟體。

UDP通訊流程

在這裡插入圖片描述

TCP

TCP:英文全拼(Transmission Control Protocol)簡稱傳輸控制協議,它是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議

相當於生活中的打電話

連線步驟

建立連線,資料傳輸,終止連線

TCP特點

2.1面向連線

通訊雙方必須先建立連線才能進行資料的傳輸,雙方都必須為該連線分配必要的系統核心資源,以管理連線的狀態和連線上的傳輸。

雙方間的資料傳輸都可以通過這一個連線進行。

完成資料交換後,雙方必須斷開此連線,以釋放系統資源。

2.2可靠傳輸

1.TCP採用傳送應答機制 :TCP傳送的每個報文段都必須得到接收方的應答才認為這個TCP報文段傳輸成功 。

2.超時重傳 :傳送端發出一個報文段之後就啟動定時器,如果在定時時間內沒有收到應答就重新發送這個報文段 。

3.錯誤校驗 :由傳送端計算,然後由接收端驗證,其目的是為了檢測資料在傳送端到接收端之間是否有改動,如果接收方檢測到校驗和有差錯,則直接丟棄這個資料包。

4.流量控制和阻塞管理 :流量控制用來避免主機發送得過快而使接收方來不及完全收下 。

TCP優缺點

1.優點:可靠、穩定;適合傳輸大量資料

2.缺點:傳輸速度慢,佔用系統資源高。

TCP 使用場景

當對網路通訊質量有要求的時候,比如:整個資料要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸檔案的協議,POP、SMTP等郵件傳輸的協議。

日常中絕大多數資料傳輸方式都是TCP。

TCP網路程式流程

在這裡插入圖片描述

TCP 和 UDP的區別

1.TCP 面向連線; UDP 是不面向連線 ;

2.TCP 提供可靠的資料傳輸,也就是說,通過 TCP 連線傳送的資料,無差錯,不丟失,不重複,且按序到達; UDP 不保證可靠的資料傳輸,容易出現丟包情況 ;

3.TCP 需要連線傳輸速度慢,UDP 不需要連線傳輸速度快;

4.TCP 不支援發廣播; UDP 支援發廣播;

5.TCP 對系統資源要求較多,UDP 對系統資源要求較少 ;

6.TCP 適合傳送大量資料,UDP 適合傳送少量資料;

7.TCP 有流量控制,UDP 沒有流量控制

補充-1.TCP 在建立連線是三次握手的過程

TCP在建立連線時需要通過三次握手過程來完成。

標誌位:

SYN: 表示連線請求 ACK: 表示確認 FIN: 表示關閉連線 seq:表示報文序號 ack: 表示確認序號

第一次握手:Client將標誌位SYN置為1,隨機產生一個值seq=J,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Server確認。

第二次握手:Server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,ack (number )=J+1,隨機產生一個值seq=K,並將該資料包傳送給Client以確認連線請求,Server進入SYN_RCVD狀態。

第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否為1,如果正確則將標誌位ACK置為1,ack=K+1,並將該資料包傳送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸資料了。

流程圖

在這裡插入圖片描述

補充-2 TCP 在斷開連線時四次揮手的過程

TCP在斷開連線時,需要通過四次揮手的過程來完成。

第一次揮手:Client傳送一個FIN,用來關閉Client到Server的資料傳送。

第二次揮手:Server收到FIN後,傳送一個ACK給Client,確認序號為收到序號+1。

第三次揮手:Server傳送一個FIN,用來關閉Server到Client的資料傳送。

第四次揮手:Client收到FIN後,接著傳送一個ACK給Server,確認序號為收到序號+1。

流程圖
在這裡插入圖片描述

歡迎留言和轉載