tcp是直連還是udp?
TCP是基于鏈接的(在收發之前必須建立可靠了解),UDP是無連接的(源端和終端不需要建立鏈接,想發就發);
TCP連接需要經過三次握手,斷開連接需要經過四次握手,UDP不需要,直接連接發送,直接斷(不會管對方);
TCP是流模式(面向字節流),UDP是數據報模式(面向報文)(意思TCP必須有一個管道來支撐他連貫的持續的發,而UDP則像打飛機一樣,有子彈就突突,沒有就消停待著);
TCP的頭包大小為20~24字節(有四個備用字節)后便跟實際數據,UDP頭包大小為8字節后邊跟實際數據;
由于頭包大小的不同,UDP比TCP更高效一點;
TCP(可靠的)能夠保證數據的正確性和數據的順序,UDP(不可靠的)可能丟包且順序也不能保證;
TCP使用流量控制和擁塞控制,UDP都不使用;
TCP需要為每一個客戶端建立一個Socket,UPD只是用一個Socket進行通信;
TCP對數據包的大小沒有限制,不需要自己切分數據包,TCP底層程序已經幫我們做好了切分,UDP是基于數據報構建,有大小限制,需要自己切割,不切割又太大容易丟包;
TCP本身有校驗和重發機制,UDP沒有;
TCP僅支持單播傳輸,UDP支持單播多播和廣播;
TCP吞吐量由擁擠控制算法調節,UDP只受應用軟件生成數據的速率、傳輸帶寬、 源端和終端主機性能的限制。
TCP和UDP相同點:
都是長鏈接;
都需要連接和斷開事件支撐;
都需要做發送和接收隊列緩存;
都需要定義數據包格式(就是客戶端和服務端交流的語言,比如約定都用json);
都需要對數據進行加密和校驗(不然容易外掛);
頭包后的數據大小都為2^16(65535字節,60多kb);
每次傳輸50多kb就很容易丟包了,TCP自動切割,UDP需要自己手動切割;
包也不能太小,包太小意味著同一時間內需要發送很多包,容易丟包;
在OSI七層模型中,兩者都屬于傳輸層(傳輸層:負責對報文進行分組和重組,并以TCP或UDP協議格式封裝報文);