使用者資料報協議(user datagram protocol, udp)只是做了傳輸層協議能夠做的最少工作,除了復用、分用功能及少量的差錯檢測外,它幾乎沒有對 ip 增加別的東西,因此與 ip 一樣,提供的也是盡力而為的交付服務(報文段可能丟失、非按需到達)。
雖然 udp 不能提供可靠資料傳輸服務,但是很許多應用更適合使用 udp,原因如下:
雖然 udp 不能提供可靠的資料傳輸服務,但是使用 udp 的應用是可以實現可靠資料傳輸的,這可以通過在應用程式自身中建立可靠性機制來完成,但這增加了應用開發難度。
udp 報文段的首部有 4 個字段,每個欄位由兩個位元組組成:通過埠號可以使目的主機將應用資料交給執行在目的端系統中的相應程序(多路分用);長度字段指示了在 udp 報文段中的位元組數(首部加資料);校驗和字段用於檢測 udp 報文段在傳輸中是否發生錯誤。
應用層資料占用 udp 報文段的資料字段。
傳送方的 udp 將報文段中的內容視為 16 位元的整數,進行校驗和計算:計算所有整數的和,進製加在和的後面(溢位回卷),將得到的值按位求返,得到校驗和,將校驗和放入報文段的校驗和字段。
接收方將所有的 16 位元的整數(包括校驗和)加在一起,如果該報文段中沒有引入差錯,則顯然在接收方處該和將是1111111111111111
(雖然和為1111111111111111
也可能有錯誤);如果這些位元中存在 0,那麼在傳輸過程中肯定出現了差錯。
雖然 udp 提供差錯檢測,但它對差錯恢復無能為力。
應用程式開發者在研發階段最先做的乙個決定是,應用程式是執行在 tcp 上還是 udp 上。應用程式開發者可以控制應用層一側的所有東西,但是基本無法控制傳輸層一側。
由於 udp 是無連線的,因此使用 udp 套接字的兩個程序進行通訊時,在傳送程序將資料分組推出 socket 之前,需要將目的位址附在該分組之上,目的位址包括目的主機的 ip 位址和目的套接字的埠號。
下面是乙個簡單的 cs 架構的使用 udp 實現的簡單應用程式,實現了小寫字母轉大寫字母的功能。
客戶端應用程式**如下:
from socket import
*servername =
'hostname'
# 伺服器的 ip 位址(網域名稱)
serverport =
12000
# 伺服器相應應用程序的埠號
clientsocket = socket(af_inet, sock_dgram)
# 建立客戶端 socket,指定 socket 型別(udp),埠號由作業系統分配
message =
raw_input
('input lowercase sentence:'
)# 用鍵盤輸入一行放入 message 中
clientsocket.sendto(message,
(servername, serverport)
)modifiedmessage, serveraddress = clientsocket.recvfrom(
2048
)# 從伺服器接收返回訊息,和伺服器的位址
print modifiedmessage
clientsocket.close(
)
伺服器端應用程式**如下:
from socket import
*serverport 12000
serversocket = socket(af_inet, sock_dgram)
# 建立伺服器端 udp socket
serversocket.bind((''
, serverport)
)# 伺服器端 socket 繫結 12000 埠號
print
"the server is ready to receive"
while true:
message, clientaddress = serverport.recvfrom(
2048
)# 提取訊息,客戶的 ip 和埠號
modifiedmessage = message.upper(
) serversocket.sendto(modifiedmessage, clientaddress)
# 同樣需要指定資料分組的目的位址(指客戶的位址)
udp socket 程式設計時,使用 socket 傳送訊息時,應用程序需要手動新增上所傳送資料分組的目的 ip 位址和目的埠號。但是源位址也附在了分組上,儘管這是自動而不是顯示地由**完成的。 計算機網路 傳輸層
為什麼要劃分傳輸層?既然網路層已經能把源主機上發出的資料傳送給目的主機,那麼為什麼還需要加上乙個傳輸層呢?這就需要我們理解主機使用者應用層通訊的主體,位於兩台網路主機中真正的資料通訊主體並不是這兩台主機,而是兩台主機中的各種網路應用程序.同一時間一台主機上可能有多個程序同時執行,這時候就需要為應用程...
計算機網路(傳輸層)
網路層提供了主機之間的邏輯通訊,運輸層為運輸在不同主機上的程序之間提供了邏輯通訊。運輸層協議是在端系統中而不是在路由器中實現的。運輸協議能夠提供的服務常常受制於底層網路層協議的服務模型。底層無法提供時延或頻寬保證,運輸層協議也無法提供。但是即使底層網路協議不可靠,運輸協議也可以提供可靠的資料傳輸服務...
計算機網路 傳輸層
運輸層最重要的兩種協議 tcp協議,udp協議 真正的通訊 兩個主機之間應用程序的通訊 運輸層的重要功能 1 復用 傳送方的不同應用程序使用同乙個運輸層協議傳輸資料 應用層 運輸層 2 分用 接收方的運輸層在剝去報文首部後把資料真正交付到目的應用程序 運輸層 應用層 網路層和運輸層的區別 網路層說明...