簡述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。
流程圖
歡迎留言和轉載