當前位置:編程學習大全網 - 編程語言 - TCP粘包是什麽?

TCP粘包是什麽?

如下:

TCP通信粘包問題分析和解決(全)

在socket網絡程序中,TCP和UDP分別是面向連接和非面向連接的。因此TCP的socket編程,收發兩端(客戶端和服務器端)都要有成對的socket,因此,發送端為了將多個發往接收端的包,更有效的發到對方,使用了優化方法(Nagle算法),將多次間隔較小、數據量小的數據,合並成壹個大的數據塊,然後進行封包。這樣,接收端,就難於分辨出來了,必須提供科學的拆包機制。

對於UDP,不會使用塊的合並優化算法,這樣,實際上目前認為,是由於UDP支持的是壹對多的模式,所以接收端的skbuff(套接字緩沖區)采用了鏈式結構來記錄每壹個到達的UDP包,在每個UDP包中就有了消息頭(消息來源地址,端口等信息),這樣,對於接收端來說,就容易進行區分處理了。所以UDP不會出現粘包問題。

====================================================================

在介紹TCP之前先普及下兩個相關的概念,長連接和短連接。

1.長連接

Client方與Server方先建立通訊連接,連接建立後 不斷開, 然後再進行報文發送和接收。

2.短連接

Client方與Server每進行壹次報文收發交易時才進行通訊連接,交易完畢後立即斷開連接。此種方式常用於壹點對多點通訊,比如多個Client連接壹個Server.

TCP協議簡介

TCP是壹個面向連接的傳輸層協議,雖然TCP不屬於ISO制定的協議集,但由於其在商業界和工業界的成功應用,它已成為事實上的網絡標準,廣泛應用於各種網絡主機間的通信。

作為壹個面向連接的傳輸層協議,TCP的目標是為用戶提供可靠的端到端連接,保證信息有序無誤的傳輸。它除了提供基本的數據傳輸功能外,還為保證可靠性采用了數據編號、校驗和計算、數據確認等壹系列措施。它對傳送的每個數據字節都進行編號,並請求接收方回傳確認信息(ACK)。發送方如果在規定的時間內沒有收到數據確認,就重傳該數據。

(1)?數據編號使接收方能夠處理數據的失序和重復問題。

(2)?數據誤碼問題通過在每個傳輸的數據段中增加校驗和予以解決,接收方在接收到數據後檢查校驗和,若校驗和有誤,則丟棄該有誤碼的數據段,並要求發送方重傳。

(3)?流量控制也是保證可靠性的壹個重要措施,若無流控,可能會因接收緩沖區溢出而丟失大量數據,導致許多重傳,造成網絡擁塞惡性循環。

(4)?TCP采用可變窗口進行流量控制,由接收方控制發送方發送的數據量。

TCP為用戶提供了高可靠性的網絡傳輸服務,但可靠性保障措施也影響了傳輸效率。因此,在實際工程應用中,只有關鍵數據的傳輸才采用TCP,而普通數據的傳輸壹般采用高效率的UDP。

保護消息邊界和流

那麽什麽是保護消息邊界和流呢?

保護消息邊界,就是指傳輸協議把數據當作壹條獨立的消息在網上傳輸,接收端只能接收獨立的消息。也就是說存在保護消息邊界,接收端壹次只能接收發送端發出的壹個數據包。而面向流則是指無保護消息保護邊界的,如果發送端連續發送數據,接收端有可能在壹次接收動作中,會接收兩個或者更多的數據包。

例如,我們連續發送三個數據包,大小分別是2k,4k ,8k,這三個數據包,都已經到達了接收端的網絡堆棧中,如果使用UDP協議,不管我們使用多大的接收緩沖區去接收數據,我們必須有三次接收動作,才能夠把所有的數據包接收完.而使用TCP協議,我們只要把接收的緩沖區大小設置在14k以上,我們就能夠壹次把所有的數據包接收下來,只需要有壹次接收動作。

  • 上一篇:我在地稅的壹個表格是XML格式的,用EXCEL打開是不規則文件。用網頁打開就是編程代碼。請問怎麽打開?
  • 下一篇:學c++要什麽條件,我數學 英語都不懂 能學嗎
  • copyright 2024編程學習大全網