從TCP與UDP的差別講起
網絡資料經過路由器,如果資料很小,沒有超過路由器的封包大小,就會直接直接經過路由器到達下一個路由器,一層一層最終到達目的地
如果資料很大,這裡指一個發送,超過了路由器的封包大小,那麼路由器就會把這個資料包進行拆分,比如拆分成A B
C三個包,這三個包都沒有超過路由器的封包大小,到達下一個路由器的時候,TCP與UDP的差別就來了:
TCP收到A的時候,會resp通知源路由器,A到達,B C包依然如此,如果由于網絡的各種原因,目的路由收到了A
C,B沒有收到,TCP會要求源路由把B包重新發一次
,直到ABC包目的路由都接受到了,那麼目的路由把ABC包重新組成起始包,繼續往下一個路由發送
,這就是TCP安全連接配接的由來,隻要發送,我就能保證目的一定能收到(網絡斷開能檢測到)
UDP則不是這樣,如果ABC包拆分之後,目的路由隻收到AC
,經過檢測,B沒有被收到,那麼此包就會被當作不完整,直接被丢棄。由于UDP沒有resp的通知過程
,是以,UDP的傳輸效率要高一些,當然安全性也低一些
由上面的這些可以得出結論:UDP是絕對不會被粘包,因為路由器收到的隻會是完整資料才會繼續下發,什麼粘包處理完全沒有必要
一般網絡程式設計時候,也會定義資料標頭,包體 TCP接收資料的時候,可以先接收標頭進行安全驗證,通過繼續接受包體,不通過直接斷開連接配接
UDP接受則沒有辦法這樣做
,你再大的一個資料,一個RECV,也是直接接受,不能說我先接受多長,這樣是不可能的(不過一般大檔案資料,都不會用UDP這種不安全傳輸)
---------------------------------------------------------------