Linux网络编程 之 无连接和有连接通信(二)
目錄
1. 無連接和有連接通信的區別
2. 有連接和無連接通信的實現
無連接和有連接通信的區別
使用無連接協議就像寄信,而使用面向連接的協議就像打電話。
無連接協議中的分組被稱為數據報(datagram),每個分組都是獨立尋址,并由應用程序發送的。從協議的角度來看,每個數據報都是一個獨立的實體,與在兩個相同的對等實體之間傳送的任何其他數據報都沒有關系,這就意味著協議很可能是不可靠的。也就是說,網絡會盡最大努力傳送每一個數據報,但并不保證數據報不丟失、不延遲或者不錯序傳輸。
另一方面,面向連接的協議則維護了分組之間的狀態,使用這種協議的應用程序通常都會進行長期的對話。記住這些狀態,協議就可以提供可靠的傳輸。比如,發送端可以記住哪些數據已經發送出去了但還未被確認,以及數據是什么時候發送的。如果在某段時間間隔內沒有收到確認,發送端可以重傳數據。接收端可以記住已經收到了哪些數據,并將重復的數據丟棄。如果分組不是按序到達的,接收端可以將其保存下來,直到邏輯上先于它的分組到達為止。
有連接和無連接通信的實現
首先TCP 和 UDP 都是構建在 IP 之上的。因此,IP 是構建整個 TCP/IP 協議族的基礎。但 IP 提供的是一種盡力而為的、不可靠的無連接服務。它接收來自其上層的分組,將它們封裝在一個 IP 分組中,根據路由為分組選擇正確的硬件接口,從這個接口將分組發送出去。一旦將分組發送出去了,IP 就不再關心這個分組了,和所有無連接協議一樣。
而UDP協議只向底層的IP協議添加了兩項功能,
- 它提供了一個可選的校驗和來檢測數據的損壞情況。盡管 IP 也有校驗和,但它只對 IP 分組首部進行計算,所以,TCP 和 UDP 也都提供了校驗和來保護它們自己的首部和數據。
- UDP 向 IP添加的第二項特性就是端口的概念。
為了提供可靠性,TCP 添加了分組,被稱為段(segment),放在 IP 數據報中發送的,其中TCP 向基本的 IP 服務中添加了三項功能:
它為 TCP段中的數據提供了校驗和。這樣有助于確保抵達目的地的數據在傳輸過程中不會被網絡損壞。
它為每個段(segment)分配了一個序列號,這樣,如果數據抵達目的地時真的錯序了,接收端也能夠按照恰當的順序將其重裝起來。
TCP 提供了一種確認-重傳機制,以確保最終每個段都會被傳送出去。
總結
以上是生活随笔為你收集整理的Linux网络编程 之 无连接和有连接通信(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux网络编程 之 网络协议概述(一
- 下一篇: Linux 网络编程——网络字节序(三)