tcp 與udp 的區別
阿新 • • 發佈:2018-11-23
1.TCP和UDP對比
TCP(Transmission Control Protocol)可靠的、面向連線的協議(eg:打電話)、傳輸效率低全雙工通訊(傳送快取&接收快取)、面向位元組流。使用TCP的應用:Web瀏覽器;檔案傳輸程式。
UDP(User Datagram Protocol)不可靠的、無連線的服務,傳輸效率高(傳送前時延小),一對一、一對多、多對一、多對多、面向報文(資料包),盡最大努力服務,無擁塞控制。使用UDP的應用:域名系統 (DNS);視訊流;IP語音(VoIP)。
TCP和UDP下socket差異對比圖:
2.TCP詳解
服務端示例
1import socket 2 sk = socket.socket() 3 sk.bind(('127.0.0.1',8898)) #把地址繫結到套接字 4 sk.listen() #監聽連結 5 conn,addr = sk.accept() #接受客戶端連結 6 ret = conn.recv(1024) #接收客戶端資訊 7 print(ret) #列印客戶端資訊 8 conn.send(b'hi') #向客戶端傳送資訊 9 conn.close() #關閉客戶端套接字 10 sk.close() #關閉伺服器套接字
客戶端示例
import socket sk = socket.socket() # 建立客戶套接字 sk.connect(('127.0.0.1',8898)) # 嘗試連線伺服器 sk.send(b'hello!') ret = sk.recv(1024) # 對話(傳送/接收) print(ret) sk.close() # 關閉客戶套接字
TCP三次握手流程:
一次揮手:客戶端傳送連線請求報文SYN = 1 ,seq=x
二次揮手:服務端傳送確認報文,同時請求連線客戶端 SYN =1, ACK = 1, ack = x+1, seq = y
三次揮手:客戶端傳送確認報文: ACK = 1,ack = y+1, seq = x+1,連線建立成功
TCP斷開連線的四次揮手
一次揮手: 客戶端向伺服器傳送連線釋放報文,並且停止傳送資料
二次揮手: 伺服器發出確認報文,同意連線釋放
客戶端等待伺服器發出連線釋放報文
三次揮手:伺服器向客戶端傳送連線釋放報文,並且停止傳送資料
四次揮手: 客戶端發出確認報文, SYN = 1,同時開啟 時間等待計時器,等待2倍最長報文段壽命,
若服務端沒接收到客戶端發回的報文,則服務端率先進入closed狀態,若服務端沒有接收到客戶端發來的確認報文,
,則一段時間後服務端會超時重發(即重新進行步驟3和4)
為什麼建立連線需要3次握手
3 udp例項
服務端示例
import socket udp_sk = socket.socket(type=socket.SOCK_DGRAM) #建立一個伺服器的套接字 udp_sk.bind(('127.0.0.1',9000)) #繫結伺服器套接字 msg,addr = udp_sk.recvfrom(1024) print(msg) udp_sk.sendto(b'hi',addr) # 對話(接收與傳送) udp_sk.close() # 關閉伺服器套接字
客戶端示例
import socket ip_port=('127.0.0.1',9000) udp_sk=socket.socket(type=socket.SOCK_DGRAM) udp_sk.sendto(b'hello',ip_port) back_msg,addr=udp_sk.recvfrom(1024) print(back_msg.decode('utf-8'),addr)