日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络编程释疑之:TCP协议的“流”特性

發(fā)布時間:2024/4/11 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程释疑之:TCP协议的“流”特性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

與網絡開發(fā)相關的招聘時最常被問起的問題是TCP和UDP的區(qū)別,現(xiàn)在幾乎是道上混的都能答出來幾點“比如TCP是面向連接的,UDP是無連接的;TCP是可靠的,UDP是不可靠的;”,其中還有一點是“TCP是面向數(shù)據(jù)流的協(xié)議,UDP是面向數(shù)據(jù)報的協(xié)議”,接下來我通常就會問這么一個問題,假設客戶端一次完全發(fā)送這么一串字符str = "hello world!"到服務端,在服務端一次read,并且read長度的參數(shù)大于strlen(str)的情況下,用TCP和UDP協(xié)議會有什么區(qū)別?


這個問題難倒了不少人,當然也許我的問題假設的不好或者比較極端。我期望得到的答案是:在網絡沒有出問題的情況下,用UDP協(xié)議發(fā)送的話在服務端很有可能什么也收不到,要么是全部收到了"hello world!"這個字符串,而不再有其他情況;用TCP協(xié)議發(fā)送的話,很有可能一次read只是得到了"hello world!"的部分字符,也許一次全部收到,甚至多次read累積緩沖區(qū)才能收到整個字符串。

其實上面這個問題在實際情況里系統(tǒng)內核的套接字緩沖區(qū)充足時對于TCP而言肯定會一次完整的收到整個字符串。我主要是為了說明TCP協(xié)議的“流”特性。舉這么一個例子類比一下,我們要把一個空碗接滿水,我們可以一次倒入也可以分多次倒入。但是我們要把一個饅頭完整的放進另一個碗中,你的選擇只有放一次。接水的過程就如TCP數(shù)據(jù)傳輸?shù)倪^程一般,放饅頭的過程就如UDP的傳輸過程一般(也可能中間你犯饞直接把饅頭吃了)。

對TCP的“流”的理解是進行TCP網絡編程的基礎,我們常說進行網絡編程中協(xié)議設計是關鍵,那么設計協(xié)議時就必須要考慮到TCP“流”的特性去得到一條完整的協(xié)議數(shù)據(jù)。write,read方法調用,IO多路復用的使用都與“流”有著很大的關系。包括我們經常聽說的TCP分包問題,粘包問題也是“流”造成的。

總結

以上是生活随笔為你收集整理的网络编程释疑之:TCP协议的“流”特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。