天天看點

php接收dup,TCP與DUP簡單對比

看回顧一下OSI 7層協定網絡模型

php接收dup,TCP與DUP簡單對比

再回顧一下OSI每一層的作用

php接收dup,TCP與DUP簡單對比

OSI 7層協定模型與TCP/IP 5層協定模型的對應關系

php接收dup,TCP與DUP簡單對比

從上述圖檔中可以看出tcp與udp 是傳輸層的協定。

TCP與DUP比較:

1、TCP面向連接配接(如打電話要先撥号建立連接配接);UDP是無連接配接的,即發送資料之前不需要建立連接配接

2、TCP提供可靠的服務。也就是說,通過TCP連接配接傳送的資料,無差錯,不丢失,不重複,且按序到達;UDP盡最大努力傳遞,即不保證可靠傳遞

3、tcp通過校驗和,重傳控制,序号辨別,滑動視窗、确認應答實作可靠傳輸。如丢包時的重發控制,還可以對次序亂掉的分包進行順序控制(TCP粘包處理)。

3、UDP具有較好的實時性,工作效率比TCP高,适用于對高速傳輸和實時性有較高的通信或廣播通信。

4、TCP對系統資源要求較多,UDP對系統資源要求較少。

php接收dup,TCP與DUP簡單對比

TCP可能存在的問題:

TCP通信特點

TCP 是流式協定沒有消息邊界,用戶端向伺服器端發送一次資料,可能會被伺服器端分成多次收到。用戶端向伺服器端發送多少資料。伺服器端可能一次全部收到。

2.保證傳輸的可靠性,順序。

3.TCP有擁塞控制,是以資料包可能會延後發送。

粘包問題

1什麼是 TCP 粘包?

TCP 粘包是指發送方發送的若幹包資料 到 接收方接收時粘成一包,從接收緩沖區看,後一包資料的頭緊接着前一包資料的尾。(多條資訊可能會合成一條消息)

2 TCP 出現粘包的原因?

發送方:發送方需要等緩沖區滿才發送出去,造成粘包

接收方:接收方不及時接收緩沖區的包,造成多個包接收

3.TCP粘包的處理

方式一:手動解決粘包,用戶端發送明文消息,在消息結尾加上特定的EOF标記。服務端接收到消息後,通過特定EOF将資料報分割多條,每條即是原始消息。

方式二:用戶端按照約定的封包類型對消息進行封包pack操作,服務端開啟消息的包格式校驗,符合條件後對消息進行解包操作。

php接收dup,TCP與DUP簡單對比

TCP消息傳遞過程

2.緩沖區擁堵或溢出

每個 socket 被建立後,都會配置設定兩個緩沖區,輸入緩沖區和輸出緩沖區。

write()/send() 并不立即向網絡中傳輸資料,而是先将資料寫入緩沖區中,再由TCP協定将資料從緩沖區發送到目标機器。

一旦将資料寫入到緩沖區,函數就可以成功傳回,不管它們有沒有到達目标機器,也不管它們何時被發送到網絡,這些都是TCP協定負責的事情。

TCP協定獨立于 write()/send() 函數,資料有可能剛被寫入緩沖區就發送到網絡,

也可能在緩沖區中不斷積壓,多次寫入的資料被一次性發送到網絡,

這取決于當時的網絡情況、目前線程是否空閑等諸多因素,不由程式員控制。