看回顧一下OSI 7層協定網絡模型
再回顧一下OSI每一層的作用
OSI 7層協定模型與TCP/IP 5層協定模型的對應關系
從上述圖檔中可以看出tcp與udp 是傳輸層的協定。
TCP與DUP比較:
1、TCP面向連接配接(如打電話要先撥号建立連接配接);UDP是無連接配接的,即發送資料之前不需要建立連接配接
2、TCP提供可靠的服務。也就是說,通過TCP連接配接傳送的資料,無差錯,不丢失,不重複,且按序到達;UDP盡最大努力傳遞,即不保證可靠傳遞
3、tcp通過校驗和,重傳控制,序号辨別,滑動視窗、确認應答實作可靠傳輸。如丢包時的重發控制,還可以對次序亂掉的分包進行順序控制(TCP粘包處理)。
3、UDP具有較好的實時性,工作效率比TCP高,适用于對高速傳輸和實時性有較高的通信或廣播通信。
4、TCP對系統資源要求較多,UDP對系統資源要求較少。
TCP可能存在的問題:
TCP通信特點
TCP 是流式協定沒有消息邊界,用戶端向伺服器端發送一次資料,可能會被伺服器端分成多次收到。用戶端向伺服器端發送多少資料。伺服器端可能一次全部收到。
2.保證傳輸的可靠性,順序。
3.TCP有擁塞控制,是以資料包可能會延後發送。
粘包問題
1什麼是 TCP 粘包?
TCP 粘包是指發送方發送的若幹包資料 到 接收方接收時粘成一包,從接收緩沖區看,後一包資料的頭緊接着前一包資料的尾。(多條資訊可能會合成一條消息)
2 TCP 出現粘包的原因?
發送方:發送方需要等緩沖區滿才發送出去,造成粘包
接收方:接收方不及時接收緩沖區的包,造成多個包接收
3.TCP粘包的處理
方式一:手動解決粘包,用戶端發送明文消息,在消息結尾加上特定的EOF标記。服務端接收到消息後,通過特定EOF将資料報分割多條,每條即是原始消息。
方式二:用戶端按照約定的封包類型對消息進行封包pack操作,服務端開啟消息的包格式校驗,符合條件後對消息進行解包操作。
TCP消息傳遞過程
2.緩沖區擁堵或溢出
每個 socket 被建立後,都會配置設定兩個緩沖區,輸入緩沖區和輸出緩沖區。
write()/send() 并不立即向網絡中傳輸資料,而是先将資料寫入緩沖區中,再由TCP協定将資料從緩沖區發送到目标機器。
一旦将資料寫入到緩沖區,函數就可以成功傳回,不管它們有沒有到達目标機器,也不管它們何時被發送到網絡,這些都是TCP協定負責的事情。
TCP協定獨立于 write()/send() 函數,資料有可能剛被寫入緩沖區就發送到網絡,
也可能在緩沖區中不斷積壓,多次寫入的資料被一次性發送到網絡,
這取決于當時的網絡情況、目前線程是否空閑等諸多因素,不由程式員控制。