主要的區(qū)別有兩條佛呻。
其一:面向連接分為三個階段裳朋,第一是建立連接,在此階段吓著,發(fā)出一個建立連接的請求鲤嫡。只有在連接成功建立之后,才能開始數(shù)據(jù)傳輸绑莺,這是第二階段暖眼。接著,當(dāng)數(shù)據(jù)傳輸完畢纺裁,必須釋放連接诫肠。而面向無連接沒有這么多階段,它直接進(jìn)行數(shù)據(jù)傳輸欺缘。
其二:面向連接的通信具有數(shù)據(jù)的保序性栋豫, 而面向無連接的通信不能保證接收數(shù)據(jù)的順序與發(fā)送數(shù)據(jù)的順序一致。
…………………………………………
網(wǎng)絡(luò)編程中最基本的概念就是面向連接(connection-oriented)和無連接(connectionless)協(xié)議谚殊。盡管本質(zhì)上來說丧鸯,兩者之間的區(qū)別并不難理解,但對那些剛剛開始進(jìn)行網(wǎng)絡(luò)編程的人來說嫩絮,卻是個很容易混淆的問題丛肢。這個問題與上下文有些關(guān)聯(lián):很顯然围肥,如果兩臺計(jì)算機(jī)要進(jìn)行通信,就必須以某種形式“連接”起來蜂怎,那“無連接通信”又是什么意思呢穆刻?
答案是:面向連接和無連接指的都是協(xié)議。也就是說杠步,這些術(shù)語指的并不是物理介質(zhì)本身蛹批,而是用來說明如何在物理介質(zhì)上傳輸數(shù)據(jù)的。面向連接和無連接協(xié)議可以篮愉,而且通常也確實(shí)會共享同一條物理介質(zhì)。
如果兩者的區(qū)別與承載數(shù)據(jù)的物理介質(zhì)無關(guān)差导,又和什么有關(guān)呢试躏?它們的本質(zhì)區(qū)別在于,對無連接協(xié)議來說设褐,每個分組的處理都獨(dú)立于所有其他分組颠蕴,而對面向連接的協(xié)議來說,協(xié)議實(shí)現(xiàn)則維護(hù)了與后繼分組有關(guān)的狀態(tài)信息助析。
一犀被、無連接協(xié)議和面向連接協(xié)議的概念
無連接協(xié)議中的分組被稱為數(shù)據(jù)報(datagram),每個分組都是獨(dú)立尋址外冀,并由應(yīng)用程序發(fā)送的寡键。從協(xié)議的角度來看,每個數(shù)據(jù)報都是一個獨(dú)立的實(shí)體雪隧,與在兩個相同的對等實(shí)體之間傳送的任何其他數(shù)據(jù)報都沒有關(guān)系西轩,這就意味著協(xié)議很可能是不可靠的。也就是說脑沿,網(wǎng)絡(luò)會盡最大努力傳送每一個數(shù)據(jù)報藕畔,但并不保證數(shù)據(jù)報不丟失、不延遲或者不錯序傳輸庄拇。
另一方面注服,面向連接的協(xié)議則維護(hù)了分組之間的狀態(tài),使用這種協(xié)議的應(yīng)用程序通常都會進(jìn)行長期的對話措近。記住這些狀態(tài)溶弟,協(xié)議就可以提供可靠的傳輸。比如瞭郑,發(fā)送端可以記住哪些數(shù)據(jù)已經(jīng)發(fā)送出去了但還未被確認(rèn)可很,以及數(shù)據(jù)是什么時候發(fā)送的。如果在某段時間間隔內(nèi)沒有收到確認(rèn)凰浮,發(fā)送端可以重傳數(shù)據(jù)我抠。接收端可以記住已經(jīng)收到了哪些數(shù)據(jù)苇本,并將重復(fù)的數(shù)據(jù)丟棄。如果分組不是按序到達(dá)的菜拓,接收端可以將其保存下來瓣窄,直到邏輯上先于它的分組到達(dá)為止。
典型的面向連接協(xié)議有三個階段纳鼎。第一階段俺夕,在對等實(shí)體間建立連接。接下來是數(shù)據(jù)傳輸階段贱鄙,在這個階段中劝贸,數(shù)據(jù)在對等實(shí)體間傳輸。最后逗宁,當(dāng)對等實(shí)體完成數(shù)據(jù)傳輸時映九,連接被拆除。
一種標(biāo)準(zhǔn)的類比是:使用無連接協(xié)議就像寄信瞎颗,而使用面向連接的協(xié)議就像打電話件甥。
二、UDP和TCP協(xié)議
既然無連接協(xié)議有這么多的缺點(diǎn)哼拔,大家可能會奇怪引有,為什么還要使用這種協(xié)議呢?我們會看到倦逐,在很多情況下譬正,使用無連接協(xié)議構(gòu)建應(yīng)用程序都是有意義的。比如檬姥,使用無連接協(xié)議可以很方便地支持一對多和多對一通信导帝,而面向連接協(xié)議通常都需要多個獨(dú)立的連接才能做到。但更重要的是穿铆,無連接協(xié)議是構(gòu)建面向連接協(xié)議的基礎(chǔ)您单。TCP/IP 是基于一個4層的協(xié)議棧,如下圖所示:
如圖所示荞雏,TCP 和 UDP 都是構(gòu)建在 IP 之上的虐秦。因此,IP 是構(gòu)建整個 TCP/IP 協(xié)議族的基礎(chǔ)凤优。但 IP 提供的是一種盡力而為的悦陋、不可靠的無連接服務(wù)。它接收來自其上層的分組筑辨,將它們封裝在一個 IP 分組中俺驶,根據(jù)路由為分組選擇正確的硬件接口,從這個接口將分組發(fā)送出去棍辕。一旦將分組發(fā)送出去了暮现,IP 就不再關(guān)心這個分組了还绘。和所有無連接協(xié)議一樣,它將分組發(fā)送出去之后就不再記得這個分組了栖袋。這種簡單性也是 IP 的主要優(yōu)點(diǎn)拍顷。
1、TCP—面向連接服務(wù)
它為 TCP 段中的數(shù)據(jù)提供了校驗(yàn)和塘幅。這樣有助于確保抵達(dá)目的地的數(shù)據(jù)在傳輸過程中不會被網(wǎng)絡(luò)損壞昔案;
它為每字節(jié)分配了一個序列號,這樣电媳,如果數(shù)據(jù)抵達(dá)目的地時真的錯序了踏揣,接收端也能夠按照恰當(dāng)?shù)捻樞驅(qū)⑵渲匮b起來。當(dāng)然匾乓,TCP 并沒有為每字節(jié)都附加一個序列號捞稿。實(shí)際上,每個 TCP 段的首部都包含了段中第一字節(jié)的序列號钝尸。這樣,就隱含地知道了段中其他字節(jié)的序列號搂根。
TCP 提供了一種確認(rèn)-重傳機(jī)制珍促,以確保最終每個段都會被傳送出去。
2剩愧、UDP—無連接服務(wù)
它提供了一個可選的校驗(yàn)和來檢測數(shù)據(jù)的損壞情況猪叙。盡管 IP 也有校驗(yàn)和,但它只對 IP 分組首部進(jìn)行計(jì)算仁卷,所以穴翩,TCP 和 UDP 也都提供了校驗(yàn)和來保護(hù)它們自己的首部和數(shù)據(jù);
UDP 向 IP添加的第二項(xiàng)特性就是端口的概念锦积。
回到與電話/寄信的類比中來芒帕,我們可以把 TCP 連接中的網(wǎng)絡(luò)地址當(dāng)作一個辦公室總機(jī)的電話號碼,把端口號當(dāng)作辦公室中某臺正被呼叫的特定電話的分機(jī)號丰介。同理背蟆,可以將UDP網(wǎng)絡(luò)地址當(dāng)作一座公寓樓的地址,并把端口號當(dāng)作公寓樓大廳中的個人郵箱哮幢。
轉(zhuǎn)自:https://blog.csdn.net/tennysonsky/article/details/44455565