主機A需要給主機B傳輸一份10GB的數據,從應用層上可以做哪些傳輸優化?從TCP上可以做哪些傳輸優化?
請分別列舉優化措施
這題有難度哦。
如果傳數據無外乎TCP/UDP協議,或者自己寫。但是一般比較方便都是直接用socket調用。
如果小數據這個題目就不難了,但是10G的大數據,又要求優化,這就要對網路協議非常了解才行。
一般下載軟體 迅雷 /各種快車 為什麼都用UDP傳數據,但是他們發送命令,建連又會使用TCP,有沒有人想想為什麼?
了解了這個,在談TCP優化,其實就能找到點了。
我們先說UDP ,只管發,不管你是否收到,又接收方判斷接收是否完整,又上層協議控制是否需要重傳。
說TCP,TCP協議負責可靠的傳輸,那麼,每發送數據包的時候就要有應答,比如我發1個數據包,你應答了一個,我發了2個數據包,你應答了2個,我發四個數據包,你應答了4個,我發8個,你不應答8個,我就要減少發送了。這部分可以參考TCP的慢啟動和滑動窗口。
是不是可以做優化呢?
現在開始說這個題目的考點或者意圖。
首先,講TCP深入的書,都會講的長肥管道。不清楚的可以自行百度。如果不清楚這個,影響都這個題目的理解。
也就是這個通道的帶寬很大,是不是應該很快就傳完呢?不是,UDP可以,TCP不行,因為什麼,就因為這個應答機制。
我發送完我要等,等對方的應答,如果對方不應答,我就要等超時,如果這個通道的 RTT很長,那麼悲催了,本身慢啟動,再加等應答,你會發現,10G的通道,在RTT很大的時候,用TCP協議傳輸,很難將帶寬用滿。這個是最關鍵的優化點,如果能解決這個問題,必須改造協議,改造應答機制,這樣才是優化到點子上。
看起來這個題目像老師的作業,或者論述,要注意自己思考哈~
計算機網路 第四版 寫的很清楚,我就不多細說了,其他的你自己查書,補充。
相關參考長肥管道_百度百科
瀉藥。也沒說清楚應用狀況。
和用迅雷下一個10G的數據有什麼區別?
伺服器端搞個Web伺服器算了。客戶端做一個多線程下載,利用HTTP斷點續傳的協議,加一個Range頭就可以了。
TCP這麼底層的東西還需要怎麼優化,操作系統的API,最多改一改Socket的參數。如果用HTTP伺服器就不需要管了,不然還得自己搞應用層協議,自己寫一個伺服器。
另外,網路小菜鳥。應用層優化,數據壓縮後再傳輸算嗎?
10GB量級的數據傳輸,肯定不是LAN上傳輸,lan上不是問題。
在WAN上傳輸數據,TCP hold不住的,需要採用udp來替代tcp傳輸。用移動硬碟拷了,然後挪去別的機器拷進去
這個適合數據量大,不需要實時,且高度安全保密不需要擔心
甚至算上差旅費,有些情況還是值得,早在10-15年前只有56k貓的時候推薦閱讀:
※利用nginx fastcgi_cache及golang-lru解決介面瓶頸
※actor模型跟nginx中worker_process的相同和差異有哪些?
※Nginx源碼中值得學習的編程風格有哪些?
※[轉載]Nginx防蜘蛛爬蟲處理
※nginx static module vs redis,誰更快?