自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux網(wǎng)絡編程之無連接和面向連接協(xié)議的區(qū)別

網(wǎng)絡 網(wǎng)絡管理
網(wǎng)絡編程中最基本的概念就是面向連接(connection-oriented)和無連接(connectionless)協(xié)議。盡管本質(zhì)上來說,兩者之間的區(qū)別并不難理解,但對那些剛剛開始進行網(wǎng)絡編程的人來說,卻是個很容易混淆的問題。

網(wǎng)絡編程中最基本的概念就是面向連接(connection-oriented)和無連接(connectionless)協(xié)議。盡管本質(zhì)上來說,兩者之間的區(qū)別并不難理解,但對那些剛剛開始進行網(wǎng)絡編程的人來說,卻是個很容易混淆的問題。這個問題與上下文有些關聯(lián):很顯然,如果兩臺計算機要進行通信,就必須以某種形式“連接”起來,那“無連接通信”又是什么意思呢?

答案是:面向連接和無連接指的都是協(xié)議。也就是說,這些術語指的并不是物理介質(zhì)本身,而是用來說明如何在物理介質(zhì)上傳輸數(shù)據(jù)的。面向連接和無連接協(xié)議可以,而且通常也確實會共享同一條物理介質(zhì)。

如果兩者的區(qū)別與承載數(shù)據(jù)的物理介質(zhì)無關,又和什么有關呢?它們的本質(zhì)區(qū)別在于,對無連接協(xié)議來說,每個分組的處理都獨立于所有其他分組,而對面向連接的協(xié)議來說,協(xié)議實現(xiàn)則維護了與后繼分組有關的狀態(tài)信息。

無連接協(xié)議中的分組被稱為數(shù)據(jù)報(datagram),每個分組都是獨立尋址,并由應用程序發(fā)送的。從協(xié)議的角度來看,每個數(shù)據(jù)報都是一個獨立的實體,與在兩個相同的對等實體之間傳送的任何其他數(shù)據(jù)報都沒有關系,這就意味著協(xié)議很可能是不可靠的。也就是說,網(wǎng)絡會盡***努力傳送每一個數(shù)據(jù)報,但并不保證數(shù)據(jù)報不丟失、不延遲或者不錯序傳輸。

另一方面,面向連接的協(xié)議則維護了分組之間的狀態(tài),使用這種協(xié)議的應用程序通常都會進行長期的對話。記住這些狀態(tài),協(xié)議就可以提供可靠的傳輸。比如,發(fā)送端可以記住哪些數(shù)據(jù)已經(jīng)發(fā)送出去了但還未被確認,以及數(shù)據(jù)是什么時候發(fā)送的。如果在某段時間間隔內(nèi)沒有收到確認,發(fā)送端可以重傳數(shù)據(jù)。接收端可以記住已經(jīng)收到了哪些數(shù)據(jù),并將重復的數(shù)據(jù)丟棄。如果分組不是按序到達的,接收端可以將其保存下來,直到邏輯上先于它的分組到達為止。

典型的面向連接協(xié)議有三個階段。***階段,在對等實體間建立連接。接下來是數(shù)據(jù)傳輸階段,在這個階段中,數(shù)據(jù)在對等實體間傳輸。***,當對等實體完成數(shù)據(jù)傳輸時,連接被拆除。

一種標準的類比是:使用無連接協(xié)議就像寄信,而使用面向連接的協(xié)議就像打電話。

給朋友寄信時,每封信都是一個獨立尋址且自包含的實體。郵局在處理這些信件時不會考慮到兩個通信者之間的任何其他信件。郵局不會維護以往通信者的歷史記錄--也就是說,它不會維護信件之間的狀態(tài)。郵局也不保證信件不丟失、不延遲、不錯序。這種方式就對應于無連接協(xié)議發(fā)送數(shù)據(jù)報的方式。(用明信片進行類比會更合適一些,因為寫錯地址的信件會被退回發(fā)信人,而(和典型的無連接協(xié)議數(shù)據(jù)報一樣)明信片則不會。)

現(xiàn)在來看看不是給朋友寄信,而是打電話時會發(fā)生些什么事情。

首先,撥朋友的號碼來發(fā)起呼叫。朋友應答,會說“嗨”之類的話,然后我們回應:“嗨,Lucy。我是 Mike。”我們和朋友聊一會兒,然后互說再見并掛機。這是面向連接協(xié)議中發(fā)生的典型狀況。在連接建立階段,一端與其對等實體聯(lián)系,交換初始問候信息,對會話中要用到的一些參數(shù)和選項進行溝通,然后連接進入數(shù)據(jù)傳輸階段。

在電話交談的過程中,兩端用戶都知道他們在和誰說話,因此沒必要不停地說“這是 Mike 在跟 Lucy 說話”。也沒必要在每次說話之前都撥一次朋友的電話號碼——我們的電話已經(jīng)連接起來了。同理,在面向連接協(xié)議的數(shù)據(jù)傳輸階段,也沒必要說明我們自己或?qū)Φ葘嶓w的地址。連接為我們維護的狀態(tài)中包含了這些地址。我們只要發(fā)送數(shù)據(jù)就行了,不需要考慮尋址或其他與協(xié)議相關的問題。

就像用電話交談一樣,連接的任一端完成數(shù)據(jù)的傳輸時,都要通知其對等實體。兩端都完成傳輸時,要依次將連接拆除。

既然無連接協(xié)議有這么多的缺點,大家可能會奇怪,為什么還要使用這種協(xié)議呢?我們會看到,在很多情況下,使用無連接協(xié)議構建應用程序都是有意義的。比如,使用無連接協(xié)議可以很方便地支持一對多和多對一通信,而面向連接協(xié)議通常都需要多個獨立的連接才能做到。但更重要的是,無連接協(xié)議是構建面向連接協(xié)議的基礎。TCP/IP 是基于一個4層的協(xié)議棧,如下圖所示:

 

[[129978]]

 

如圖所示,TCP 和 UDP 都是構建在 IP 之上的。因此,IP 是構建整個 TCP/IP 協(xié)議族的基礎。但 IP 提供的是一種盡力而為的、不可靠的無連接服務。它接收來自其上層的分組,將它們封裝在一個 IP 分組中,根據(jù)路由為分組選擇正確的硬件接口,從這個接口將分組發(fā)送出去。一旦將分組發(fā)送出去了,IP 就不再關心這個分組了。和所有無連接協(xié)議一樣,它將分組發(fā)送出去之后就不再記得這個分組了。

這種簡單性也是 IP 的主要優(yōu)點。因為它對底層的物理介質(zhì)沒有作任何假設,所以在任何能夠承載分組的物理鏈路上都可以運行 IP。例如,IP 可以運行在簡單的串行鏈路、以太網(wǎng)和令牌環(huán) LAN、X.25 和使用 ATM(Asychronous Transfer Mode,異步轉(zhuǎn)移模式)的 WAN、CDPD(Cellular Digital Packet Data,無線蜂窩數(shù)字分組數(shù)據(jù))網(wǎng),以及很多其他網(wǎng)絡上。盡管這些網(wǎng)絡技術之間有很大的差異,但 IP 對它們一視同仁,除了認為它們可以轉(zhuǎn)發(fā)分組之外沒有對其作任何假設。這種機制隱含了很深的意義。IP 可以運行在任何能夠承載分組的網(wǎng)絡上,所以整個 TCP/IP 協(xié)議族也可以。

現(xiàn)在我們來看看 TCP 是怎樣利用這種簡單的無連接服務來提供可靠的面向連接服務的。TCP 的分組被稱為段(segment),是放在 IP 數(shù)據(jù)報中發(fā)送的,因此,根本無法假定這些分組會抵達目的地,更不用說保證分組無損壞且以原來的順序到達了。

為了提供這種可靠性,TCP 向基本的 IP 服務中添加了三項功能:

首先,它為 TCP 段中的數(shù)據(jù)提供了校驗和。這樣有助于確保抵達目的地的數(shù)據(jù)在傳輸過程中不會被網(wǎng)絡損壞。

第二,它為每字節(jié)分配了一個序列號,這樣,如果數(shù)據(jù)抵達目的地時真的錯序了,接收端也能夠按照恰當?shù)捻樞驅(qū)⑵渲匮b起來。當然,TCP 并沒有為每字節(jié)都附加一個序列號。實際上,每個 TCP 段的首部都包含了段中***字節(jié)的序列號。這樣,就隱含地知道了段中其他字節(jié)的序列號。

第三,TCP 提供了一種確認-重傳機制,以確保最終每個段都會被傳送出去。

另一方面,UDP 為編寫應用程序的程序員提供了一種不可靠的無連接服務。事實上,UDP 只向底層的 IP 協(xié)議中添加了兩項功能。

首先,它提供了一個可選的校驗和來檢測數(shù)據(jù)的損壞情況。盡管 IP 也有校驗和,但它只對 IP 分組首部進行計算,所以,TCP 和 UDP 也都提供了校驗和來保護它們自己的首部和數(shù)據(jù)。

其次,UDP 向 IP添加的第二項特性就是端口的概念。

回到與電話/寄信的類比中來,我們可以把 TCP 連接中的網(wǎng)絡地址當作一個辦公室總機的電話號碼,把端口號當作辦公室中某臺正被呼叫的特定電話的分機號。同理,可以將UDP網(wǎng)絡地址當作一座公寓樓的地址,并把端口號當作公寓樓大廳中的個人郵箱。

責任編輯:藍雨淚 來源: CSDN博客
相關推薦

2022-07-30 23:41:53

面向過程面向?qū)ο?/a>面向協(xié)議編程

2020-11-06 18:51:17

LinuxTCP服務器

2013-07-30 09:42:41

實現(xiàn)編程接口編程對象編程

2010-04-15 17:38:52

無線AP連接

2014-06-27 09:10:23

UDPTCP

2010-04-19 14:36:28

無線路由連接設置

2009-07-02 13:25:00

消除實現(xiàn)繼承面向接口編程Java

2009-06-22 11:27:59

反向控制原理面向切面編程Spring

2016-12-12 15:22:41

編程

2010-09-10 12:44:59

CLNP無連接網(wǎng)絡協(xié)議

2023-04-26 00:15:32

python面向?qū)ο?/a>java

2010-07-08 12:42:34

UDP協(xié)議

2010-06-23 15:19:35

eMule協(xié)議

2023-02-22 18:06:35

函數(shù)javascript面向?qū)ο缶幊?/a>

2017-02-07 18:34:16

Linux編程PING

2021-03-17 09:51:31

網(wǎng)絡編程TCP網(wǎng)絡協(xié)議

2010-11-08 15:47:01

SQL Server外

2010-11-11 13:51:36

SQL Server內(nèi)

2021-06-04 09:01:27

Cocoa 協(xié)議編程 Swift

2021-06-03 08:55:58

面向協(xié)議編程
點贊
收藏

51CTO技術棧公眾號