如果當(dāng)網(wǎng)絡(luò)下載速度大于硬盤(pán)的寫(xiě)盤(pán)速度會(huì)出現(xiàn)什么情況?
我用VS寫(xiě)過(guò)網(wǎng)絡(luò)傳輸程序,包括分別采用TCP/IP、UDP協(xié)議,講一下我的看法:1,對(duì)于采用TCP/IP協(xié)議的網(wǎng)絡(luò)傳輸,當(dāng)下載速度大于硬盤(pán)的寫(xiě)盤(pán)速度時(shí),會(huì)使客戶端接收速度降低,但不會(huì)影響數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。2,對(duì)于采用UDP協(xié)議的網(wǎng)絡(luò)傳輸,有丟失數(shù)據(jù)或者傳錯(cuò)數(shù)據(jù)的可能。
我們平時(shí)通過(guò)手機(jī)、電腦從互聯(lián)網(wǎng)上進(jìn)行數(shù)據(jù)的下載與上傳,實(shí)際上都遵守IPv4/IPv6的網(wǎng)絡(luò)協(xié)議,遵守TCP/IP協(xié)議進(jìn)行傳輸。UDP通常在快速的數(shù)據(jù)傳輸。以下就TCP/IP、UDP、讀寫(xiě)緩沖區(qū)等進(jìn)行說(shuō)明。
一般的網(wǎng)絡(luò)傳輸使用TCP/IP協(xié)議。每一個(gè)數(shù)據(jù)包都有回傳確認(rèn),確保傳輸?shù)臏?zhǔn)確性。通俗地講,數(shù)據(jù)傳輸是以數(shù)據(jù)包的形式傳輸,接收端接收的數(shù)據(jù)是先要存放到內(nèi)存中。
對(duì)于TCP/IP傳輸協(xié)議來(lái)說(shuō),還要回傳消息,讓服務(wù)器端確認(rèn)。服務(wù)器端只有接收到客戶端的回傳確認(rèn)信息,才會(huì)進(jìn)行下一個(gè)數(shù)據(jù)包的傳輸。在每一個(gè)數(shù)據(jù)包,還有CRC校驗(yàn),以保萬(wàn)無(wú)一失。
或者用如下圖示:
傳輸?shù)乃俣瘸伺c網(wǎng)速有關(guān)外,更重要的,與客戶端的回傳確認(rèn)也有很大關(guān)系,只有寫(xiě)到硬盤(pán)上,才回傳確認(rèn)。
UDP傳輸不用回傳,傳輸速率快,但容易出錯(cuò)。UDP協(xié)議沒(méi)有自動(dòng)回傳,需要雙方自定義確認(rèn)信息。UDP一般在控制通訊中用,可以自定義協(xié)議。
UDP傳輸,對(duì)服務(wù)器、客戶端的通訊都比軟熟悉,傳輸速率快,兩端使用相同的發(fā)送、接收頻率。一旦接收出現(xiàn)問(wèn)題,必須再次握手,重新傳輸。
客戶端接收來(lái)自服務(wù)器端的數(shù)據(jù)包,先放到內(nèi)存緩沖區(qū)中,再寫(xiě)到硬盤(pán)上。這樣,對(duì)硬盤(pán)要求就不是很高了。VS編程時(shí),發(fā)送、接收分別用如下兩個(gè)函數(shù):
nums=send(destSocket, Sendb,
strlen(Sendb) + 1, NO_FLAGS_SET);
numr=recv(clientSocket, Recb,
MAXBUFLEN, NO_FLAGS_SET);
注意,Sendb是發(fā)送緩沖區(qū),Recb是接收緩沖區(qū),根據(jù)需要,這兩個(gè)內(nèi)存緩沖區(qū)可以設(shè)的很大,幾KB、或者幾MB
由于內(nèi)存的讀、寫(xiě)速度快于硬盤(pán)成百倍,也快于網(wǎng)絡(luò)傳輸速率。所以,從實(shí)時(shí)性方面講,接收的數(shù)據(jù)先放到內(nèi)存緩沖區(qū)中,對(duì)網(wǎng)絡(luò)傳輸沒(méi)有影響。
我們的PC機(jī)一般用DDR3、DDR4內(nèi)存條,DDR3內(nèi)存讀寫(xiě)速度大概10GB/秒,DDR4內(nèi)存讀寫(xiě)速度大概50GB/秒,硬盤(pán)、固態(tài)硬盤(pán)的速度是100MB~500MB每秒,是內(nèi)存的100~500分之一。如下圖:
而網(wǎng)絡(luò)傳輸,時(shí)下最快的5G傳輸速率為3Gb/秒,注意,這塊是3Gbits,換算成字節(jié),大致300多MB,與固態(tài)硬盤(pán)相當(dāng),還是遠(yuǎn)低于PC機(jī)對(duì)內(nèi)存的讀寫(xiě)速率。
所以,時(shí)下最快的5G傳輸方式,也只是內(nèi)存讀寫(xiě)的100~500分之一。內(nèi)存條總是快于網(wǎng)絡(luò)。
總結(jié):TCP/IP能保證傳輸?shù)臏?zhǔn)確性,但傳輸速率要低于不用回傳的UDP協(xié)議。采用TCP/IP協(xié)議傳輸數(shù)據(jù),即使用時(shí)下最快的5G、6G傳輸方式進(jìn)行數(shù)據(jù)的傳輸,不論硬盤(pán)讀寫(xiě)數(shù)據(jù)的速率是快或者慢,都不會(huì)影響網(wǎng)絡(luò)傳輸數(shù)據(jù)的準(zhǔn)確性,但會(huì)影響傳輸?shù)乃俾剩退俚挠脖P(pán),會(huì)大大降低傳輸速率。(作者注:本文引用的圖片來(lái)自網(wǎng)絡(luò)。文字部分均為作者原創(chuàng))