1、有時候為了所謂的效能,我們傾向於使用udp,但是我們又期望資料的傳輸是可靠的,因此需要在應用層提供可靠性。
2、可靠、健壯的udp必須提供:
a、在合理的時間內沒有收到回覆,進行重傳
b、保證應答和請求的匹配
3、基於udp協議,在應用層提供可靠性,需要做很多事情,比如:滑動視窗,擁塞控制,對這些事情都進行研究,就相當於重寫tcp
4、因此,如果要可靠的網路傳輸,就直接使用tcp,而不是使用udp,在應用程式提供可靠性。原因有:
a、應用程式實現的tcp功能肯定比不上真正的tcp協議,tcp協議實現是大量實現和研究的結果,也在不斷改進。
b、tcp協議的實現在核心中執行,效能更高。
c、有時候在應用層超時重傳並不是使用者期望的,比如客戶端傳送一個轉賬請求,超時沒有收到回覆,然後重傳,
導致一次轉賬請求,在服務端處理了兩次,這不是我們所期望的。而tcp的超時重傳,在傳輸層會丟棄收到的重複請求,
在應用層只收到一次請求。
因此,使用udp,在應用層提供可靠性並沒有什麼意義。
5、因此,udp的使用場景是:對可靠性的要求不是很高,允許丟包,丟包不影響應用程式。
tcp的使用場景是:對可靠性的要求很高。
6、如果既想擁有tcp的可靠性,同時減少建立連線和拆除連線的開銷,可以使用T/TCP,T/TCP是對tcp的擴充套件,
避免了建立連線的三次握手,同時縮短拆除連線時的TIME_WAIT階段。
【T08】避免重新編寫TCP
相關文章
- Golang 編寫 Tcp 伺服器GolangTCP伺服器
- 初識Modbus TCP/IP-------------C#編寫Modbus TCP客戶端程式(二)TCPC#客戶端
- C++編寫自定義TCP包併傳送C++TCP
- 理解 TCP/IP 網路棧 & 編寫網路應用TCP
- 重新安裝系統避免病毒入侵
- 技術分享 | MySQL 編寫指令碼時避免煩人的警告MySql指令碼
- 字串轉數字atoi的重新編寫及注意事項字串
- 重新理解熵編碼熵
- 怎麼避免寫出爛程式碼
- Hadoop SRC重新編譯Hadoop編譯
- 重新手寫一個VueVue
- 寫 CSS 時要避免的幾個地方CSS
- TCP的校驗和與編號TCP
- Dockerfile編寫Docker
- 編寫DockerFileDocker
- MySQL面試題,如何書寫 update 避免表鎖?MySql面試題
- [從0到1編寫伺服器]TCP連線建立與斷開狀態變化伺服器TCP
- 通過TCP碼流識別編碼TCP
- 如何用tcp寫一個聊天室TCP
- CentOS 下重新編譯 nginx 新增模組CentOS編譯Nginx
- oracle 失效物件自動重新編譯Oracle物件編譯
- 重新編譯python(親證有效)編譯Python
- 寫最少的程式碼,避免給自己找麻煩
- 寫最少的程式碼 避免給自己找麻煩
- Java程式編寫Java
- shellcode編寫
- Bookmarklet編寫指南
- 如何編寫DockerfileDocker
- oracle 儲存過程重新編譯方法Oracle儲存過程編譯
- Sublime 編寫編譯 swift程式碼編譯Swift
- 重新認識flex縮寫屬性—[flex]Flex
- 識別和避免反彙編中遇到的花指令
- 重新整理彙編—————彙編的基礎理論前置篇
- HTML Email的編寫HTMLAI
- Webpack原理-編寫PluginWebPlugin
- 編寫node 外掛
- 編寫Node原生模組
- HTML編寫規範HTML