IP協(xié)議不可靠無連接 為什么不把它設(shè)計(jì)為可靠的?
因特網(wǎng)使用的IP協(xié)議是無連接的,因此其傳輸是不可靠的。這樣容易使人們感到因特網(wǎng)很不可靠,那為什么當(dāng)初不直接把它設(shè)計(jì)為可靠的?
先打一個(gè)比方。郵局寄送的平信很像無連接的IP數(shù)據(jù)報(bào)。每封平信可能走不同的傳送路徑,同時(shí)平信也不保證不丟失。當(dāng)我們發(fā)現(xiàn)收信人沒有收到寄出的平信時(shí),去找郵局索賠是沒有用的。郵局會(huì)說:“平信不保證不丟失。怕丟失就請(qǐng)你寄掛號(hào)信”。但是大家并不會(huì)將所有的信件都用掛號(hào)方式郵寄,這是因?yàn)猷]局從來不會(huì)隨意地將平信丟棄,而丟失平信的概率并不大,況且寄掛號(hào)信要多花些錢,還要去郵局排隊(duì),太麻煩。總之,盡管寄平信有可能會(huì)丟失,但絕大多數(shù)的信件還是平信,因?yàn)榧钠叫欧奖恪⒈阋恕?/p>
我們知道,傳統(tǒng)的電信網(wǎng)的最主要的用途是進(jìn)行電話通信。普通的電話機(jī)很簡(jiǎn)單,沒有什么智能,因此電信公司就不得不把電信網(wǎng)設(shè)計(jì)得非常好,這種電信網(wǎng)可以保證用戶通話時(shí)的通信質(zhì)量。這點(diǎn)對(duì)使用非常簡(jiǎn)單的電話機(jī)的用戶則是非常方便的。但電信公司為了建設(shè)能夠確保傳輸質(zhì)量的電信網(wǎng)則付出了巨大的代價(jià)(使用昂貴的程控交換機(jī)和網(wǎng)管系統(tǒng))。
數(shù)據(jù)的傳送顯然必須是非??煽康?。當(dāng)初美國(guó)國(guó)防部在設(shè)計(jì) ARPANET 時(shí)有一個(gè)很重要的討論內(nèi)容就是:“誰應(yīng)當(dāng)負(fù)責(zé)數(shù)據(jù)傳輸?shù)目煽啃?”這時(shí)出現(xiàn)了兩種對(duì)立的意見。一種意見是主張應(yīng)當(dāng)像電信網(wǎng)那樣,由通信網(wǎng)絡(luò)負(fù)責(zé)數(shù)據(jù)傳輸?shù)目煽啃?因?yàn)殡娦啪W(wǎng)的發(fā)展歷史及其技術(shù)水平已經(jīng)證明了人們可以將網(wǎng)絡(luò)設(shè)計(jì)得相當(dāng)可靠)。但另一種意見則堅(jiān)決主張由用戶的主機(jī)負(fù)責(zé)數(shù)據(jù)傳輸?shù)目煽啃?。這里最重要的理由是:這樣可以使計(jì)算機(jī)網(wǎng)絡(luò)便宜、靈活,同時(shí)還可以滿足軍事上的各種特殊的需求。
下面用一個(gè)簡(jiǎn)單例子來說明這一問題。
設(shè)主機(jī) A 通過因特網(wǎng)向主機(jī) B 傳送文件(如下圖所示)。怎樣才能實(shí)現(xiàn)文件數(shù)據(jù)的可靠傳輸呢?
如按照電信網(wǎng)的思路,就是設(shè)法(這需要花費(fèi)相當(dāng)多的錢)將不可靠的因特網(wǎng)做成為可靠的因特網(wǎng)。
但設(shè)計(jì)計(jì)算機(jī)網(wǎng)絡(luò)的人采用另外一種思路,即設(shè)法實(shí)現(xiàn)端到端的可靠傳輸。
提出這種思路的人認(rèn)為,計(jì)算機(jī)網(wǎng)絡(luò)和電信網(wǎng)的一個(gè)重大區(qū)別就是終端設(shè)備的性能差別很大。電信網(wǎng)的終端是非常簡(jiǎn)單的、沒有什么智能的電話機(jī)。因此電信網(wǎng)的不可靠必然會(huì)嚴(yán)重地影響人們利用電話的通信。但計(jì)算機(jī)網(wǎng)絡(luò)的終端是有很多智能的主機(jī)。這樣就使得計(jì)算機(jī)網(wǎng)絡(luò)和電信網(wǎng)有兩個(gè)重要區(qū)別。***,即使傳送數(shù)據(jù)的因特網(wǎng)有一些缺陷(如造成比特差錯(cuò)或分組丟失),但具有很多智能的終端主機(jī)仍然有辦法實(shí)現(xiàn)可靠的數(shù)據(jù)傳輸(例如,能夠及時(shí)發(fā)現(xiàn)差錯(cuò)并通知發(fā)送方重傳剛才出錯(cuò)的數(shù)據(jù))。第二,即使網(wǎng)絡(luò)可以實(shí)現(xiàn) 100% 地?zé)o差錯(cuò)傳輸,端到端的數(shù)據(jù)傳輸仍然有可能出現(xiàn)差錯(cuò)。
為了說明這點(diǎn),我們可以用一個(gè)簡(jiǎn)單例子來說明這個(gè)問題。這就是主機(jī) A 向主機(jī) B 傳送一個(gè)文件的情況。
文件是通過一個(gè)文件系統(tǒng)存儲(chǔ)在主機(jī) A 的硬盤中。主機(jī) B 也有一個(gè)文件系統(tǒng),用來接收和存儲(chǔ)從 A 發(fā)送過來的文件。應(yīng)用層使用的應(yīng)用程序現(xiàn)在就是文件傳送程序,這個(gè)程序一部分在主機(jī) A 運(yùn)行,另一部分在主機(jī) B 運(yùn)行。
現(xiàn)在討論文件傳送的大致步驟:
(1)主機(jī) A 的文件傳送程序調(diào)用文件系統(tǒng)將文件從硬盤中讀出。然后文件系統(tǒng)將文件傳遞給文件傳送程序。
(2)主機(jī) A 請(qǐng)求數(shù)據(jù)通信系統(tǒng)將文件傳送到主機(jī) B。這里包括使用一些通信協(xié)議和將數(shù)據(jù)文件劃分為適當(dāng)大小的分組。
(3)通信網(wǎng)絡(luò)將這些數(shù)據(jù)分組逐個(gè)傳送給主機(jī) B。
(4)在主機(jī) B,數(shù)據(jù)通信協(xié)議將收到的數(shù)據(jù)傳遞給文件傳送應(yīng)用程序在主機(jī) B 運(yùn)行的那一部分。
(5)在主機(jī) B,文件傳送程序請(qǐng)求主機(jī) B 的文件系統(tǒng)將收到的數(shù)據(jù)寫到主機(jī) B 的硬盤中。
在以上的幾個(gè)步驟中,都存在使數(shù)據(jù)受到損傷的一些因素。例如:
(1)雖然文件原來是正確寫在主機(jī) A 的硬盤上,但在讀出后就可能出現(xiàn)差錯(cuò)(如在磁盤存儲(chǔ)系統(tǒng)中的硬件出現(xiàn)了故障)。
(2)文件系統(tǒng)、文件傳送程序或數(shù)據(jù)通信系統(tǒng)的軟件在對(duì)文件中的數(shù)據(jù)進(jìn)行緩存或復(fù)制的過程中都有可能出現(xiàn)故障。
(3)主機(jī) A 或 B 的硬件處理機(jī)或存儲(chǔ)器在主機(jī) A 或 B 進(jìn)行數(shù)據(jù)緩存或復(fù)制的過程中也有可能出現(xiàn)故障。
(4)通信系統(tǒng)在傳輸數(shù)據(jù)分組時(shí)有可能產(chǎn)生檢測(cè)不出來的比特差錯(cuò)或甚至丟失某些分組。
(5)主機(jī) A 或 B 都有可能在進(jìn)行數(shù)據(jù)處理的過程中突然崩潰。
由此可看出,即使對(duì)于這樣一個(gè)簡(jiǎn)單的文件傳送任務(wù),僅僅使通信網(wǎng)絡(luò)非??煽坎⒉荒鼙WC文件從主機(jī) A 硬盤到主機(jī) B 硬盤的傳送是可靠的。也就是說,花費(fèi)很多的錢將通信網(wǎng)絡(luò)做成為非??煽康?,對(duì)傳送計(jì)算機(jī)數(shù)據(jù)來說是得不償失的。既然現(xiàn)在的終端設(shè)備有智能,就應(yīng)當(dāng)把網(wǎng)絡(luò)設(shè)計(jì)得簡(jiǎn)單些,而讓具有智能的終端來完成“使傳輸變得可靠”的任務(wù)。
于是,計(jì)算機(jī)網(wǎng)絡(luò)的設(shè)計(jì)者采用了一種策略,這就是“端到端的可靠傳輸”。更具體些,就是在運(yùn)輸層使用面向連接的 TCP 協(xié)議,它可保證端到端的可靠傳輸。只要主機(jī) B 的 TCP 發(fā)現(xiàn)了數(shù)據(jù)的傳輸有差錯(cuò),就告訴主機(jī) A 將出現(xiàn)差錯(cuò)的那部分?jǐn)?shù)據(jù)重傳,直到這部分?jǐn)?shù)據(jù)正確傳送到主機(jī) B 為止。而 TCP 發(fā)現(xiàn)不了數(shù)據(jù)有差錯(cuò)的概率是很小的。采用這樣的建網(wǎng)策略,既可以使網(wǎng)絡(luò)部分價(jià)格便宜和靈活可靠,又能夠保證端到端的可靠傳輸。
這樣,我們可以這樣想像,將因特網(wǎng)的范圍稍微擴(kuò)大一些,即擴(kuò)大到主機(jī)中的運(yùn)輸層。由于運(yùn)輸層使用了 TCP 協(xié)議,使得端到端的數(shù)據(jù)傳輸成為可靠的,因此這樣擴(kuò)大了范圍的因特網(wǎng)就成為可靠的網(wǎng)絡(luò)。
因此,說“因特網(wǎng)提供的數(shù)據(jù)傳輸是不可靠的”或“因特網(wǎng)提供的數(shù)據(jù)傳輸是可靠的”這兩種說法都可以在文獻(xiàn)中找到,問題是是怎樣界定因特網(wǎng)的范圍。如果說因特網(wǎng)提供的數(shù)據(jù)傳輸是不可靠的,那么這里的因特網(wǎng)指的是不包括主機(jī)在內(nèi)的網(wǎng)絡(luò)(僅有下三層)。說因特網(wǎng)提供的數(shù)據(jù)傳輸是可靠的,就表明因特網(wǎng)的范圍已經(jīng)擴(kuò)大到主機(jī)的運(yùn)輸層。
再回到通過郵局寄平信的例子。當(dāng)我們寄出一封平信后,可以等待收信人的確認(rèn)(通過他的回信)。如果隔了一些日子還沒有收到回信,我們可以將該信件再寄一次。這就是將“端到端的可靠傳輸”的原理用于寄信的例子。





























