php接收dup,TCP与DUP简单对比
看回顧一下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() 函數,數據有可能剛被寫入緩沖區就發送到網絡,
也可能在緩沖區中不斷積壓,多次寫入的數據被一次性發送到網絡,
這取決于當時的網絡情況、當前線程是否空閑等諸多因素,不由程序員控制。
總結
以上是生活随笔為你收集整理的php接收dup,TCP与DUP简单对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php读取txt插入数据库,PHP读取T
- 下一篇: php网站通过什么联网,PHP通过Aja