面向報文(UDP)和麵向位元組流(TCP)的區別
面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣傳送,即一次傳送一個報文。因此,應用程式必須選擇合適大小的報文。若報文太長,則IP層需要分片,降低效率。若太短,會是IP太小。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。這也就是說,應用層交給UDP多長的報文,UDP就照樣傳送,即一次傳送一個報文。
面向位元組流的話,雖然應用程式和TCP的互動是一次一個資料塊(大小不等),但TCP把應用程式看成是一連串的無結構的位元組流。TCP有一個緩衝,當應用程式傳送的資料塊太長,TCP就可以把它劃分短一些再傳送。如果應用程式一次只發送一個位元組,TCP也可以等待積累有足夠多的位元組後再構成報文段傳送出去。
下圖是TCP和UDP協議的一些應用。
下圖是TCP和UDP協議的比較。
這裡再詳細說一下面向連線和麵向無連線的區別:
- 面向連線舉例:兩個人之間通過電話進行通訊;
- 面向無連線舉例:郵政服務,使用者把信函放在郵件中期待郵政處理流程來傳遞郵政包裹。顯然,不可達代表不可靠。
從上圖也能清晰的看出,TCP通訊需要伺服器端偵聽listen、接收客戶端連線請求accept,等待客戶端connect建立連線後才能進行資料包的收發(recv/send)工作。而UDP則伺服器和客戶端的概念不明顯,伺服器端即接收端需要繫結埠,等待客戶端的資料的到來。後續便可以進行資料的收發(recvfrom/sendto)工作。
- 對於TCP協議,客戶端連續傳送資料,只要服務端的這個函式的緩衝區足夠大,會一次性接收過來,即客戶端是分好幾次發過來,是有邊界的,而服務端卻一次性接收過來,所以證明是無邊界的;
- 而對於UDP協議,客戶端連續傳送資料,即使服務端的這個函式的緩衝區足夠大,也只會一次一次的接收,傳送多少次接收多少次,即客戶端分幾次傳送過來,服務端就必須按幾次接收,從而證明,這種UDP的通訊模式是有邊界的。
- 1)不存在丟包,錯包,所以不會出現資料出錯 ;
- 2)如果包頭檢測錯誤,即為非法或者請求,直接重置即可。
一、對於傳送方引起的粘包現象,使用者可通過程式設計設定來避免,TCP提供了強制資料立即傳送的操作指令push,TCP軟體收到該操作指令後,就立即將本段資料傳送出去,而不必等待發送緩衝區滿;
二、對於接收方引起的粘包,則可通過優化程式設計、精簡接收程序工作量、提高接收程序優先順序等措施,使其及時接收資料,從而儘量避免出現粘包現象;
三、由接收方控制,將一包資料按結構欄位,人為控制分多次接收,然後合併,通過這種手段來避免粘包。
相關推薦
面向報文(UDP)和麵向位元組流(TCP)的區別
面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣傳送,即一次傳送一個報文。因此,應用程式必須選擇合適大小的報文。若報文太長,則IP層需要分片,降低效率。若太短,會是IP太小。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。這也就是說,應
Spring的控制反轉(IoC)和麵向切面程式設計(AOP)的概念淺析。
轉自:http://baike.baidu.com/link?url=BhIdxXwp9Xs7PjzebLL8sisJrgh0MiLUB2clkgpf-rpyexxlKTOXDDCxmX1MYe4qenJ9sfcLUw9gQWZJj9oMw_ 控制反轉——Spring通
軟體專案架構的演變(傳統架構和麵向服務架構的比較)
普通架構 專案部署特點: 1) 專案和資料庫都在同一個伺服器。 2) 專案使用技術:jsp/servlet,ssh,ssm框架。 缺點: 1) 併發量太小:1-10 2) 容錯性差。 思考: 1) 專案程式碼優化。(提高專案效能) 2) 擴充套件伺服器。(提高專案併發能力) 擴充套件架構 特
893C. Rumor#謠言傳播(賦權無向圖&搜索)
ble pan 要求 amp color nbsp style n) def 題目出處:http://codeforces.com/problemset/problem/893/C 題目大意:一個城中有一些關系圈,圈內會傳播謠言,求使每個人都知道謠言的最小花費 #incl
封裝位元組流(byte[])操作類 c#
在網路通訊中,資料在網路傳輸的格式必須以位元組流的形式進行,因此需要我們對位元組流進行寫入和讀出的操作,下面將會封裝兩個類,用來將各種型別的資料寫入位元組流,和從位元組流中讀取各種型別的資料。如下讀取類:NetBufferReaderusing System; using S
淺談JAVA位元組流(讀寫檔案)
InputStream 此抽象類是表示位元組輸入流的所有類的超類。需要定義 InputStream 的子類的應用程式必須始終提供返回下一個輸入位元組的方法。 int available() 返回此輸入流方法的下一個呼叫方可以不受阻塞地從此輸入流讀取(或跳過)的位
File型別、javaBean規範、IO流、位元組流(4種)、Serializable序列化介面、transient
*File型別: java.io.File型別,可以對硬碟上的檔案/目錄,進行操作。 如檢視檔案/目錄的屬性資訊, 建立,
JAVA輸入/輸出流程式例題(檔案和目錄、位元組流、字元流)
一.檔案和目錄 1.顯示檔案的基本資訊。 2.顯示目錄的基本資訊。 3.在指定目錄下建立單個檔案。 4.指定目錄下建立多個臨時檔案。 二、位元組流 1.生成ZIP壓縮檔案 2.解壓縮zip檔案 3.生成Excel檔案 4.讀取excel檔案 5.生成PDF檔案 6.讀取P
如何檢測或判斷一個檔案或位元組流(無BOM)是什麼編碼型別
前言: 不小心看到一條留言: 然後就去該地址看了一下,這一看,順帶折騰了一天。 今天,就和大夥分享下折騰的感覺。 在該開源地址中,程式碼有C++和C#兩個版本,編碼的整體風格傾向與於C++。 主要的時間,花了在對於檢測無BOM的部分,順帶重溫了各種編碼的基礎。 建議在看此文之前,先了解下編
字元流位元組流(部分圖無法貼上,詳見日記本2016.7.27)
字元流reader write 位元組流outputstream 在讀寫檔案需要對內容按行處理,比如比較特定字元,處理某一行資料的時候一般會選擇字元流。 只是讀寫檔案,和檔案內容無關的,一般選擇位元組流。 實際上位元組流在操作時本身不會用到緩衝區(記憶體),是檔案本身直接操
複製圖片的4種方式(copy圖片只能用位元組流物件)
package cn.itcast_01; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileI
C# 16進位制(hex)字串到位元組流的轉換 示例
在工程實踐中,經常會將一些位元組資訊轉換為16進位制字串,以便傳遞和分享,比如加密金鑰資訊。在這裡提供一段轉化示例, 以供交流學習。 將16進位制字串轉化為 位元組流 publi
Java 檔案流一:位元組流(FileInputStream 和 FileOutputStream)
Java檔案流操作是一個非常重要的內容。下圖列舉了關於Java基本的檔案流操作,當然目前還有NIO,這個後來會進行討論,先看基本的檔案流操作。我們主要使用的是訪問檔案的流和緩衝流。 檔案的流操作一般包含字元流和位元組流,兩者區別在於,字元流每次傳播16bit資
學習筆記之java.io包中的位元組流(上)—— 基本的InputStream和OutputStream
先看下類的宣告: 1 2 public abstract class InputStream implements Closeable public abstract class
C# 16進位制(hex)字串到位元組流的轉換 示例
在工程實踐中,經常會將一些位元組資訊轉換為16進位制字串,以便傳遞和分享,比如加密金鑰資訊。在這裡提供一段轉化示例, 以供交流學習。 將16進位制字串轉化為 位元組流 public static byte[] HexStringToBytes(string
springboot2.0 整合WebSocket(服務端實時向客戶端傳送資訊)
WebSocket為瀏覽器和服務端提供了雙工非同步通訊功能。即瀏覽器可以向服務端傳送訊息,服務端也可以向瀏覽器傳送訊息。 應用於web專案中,多數情況前端需要實時的資料獲取。即服務端向客戶端實時的傳送訊息。操作步驟如下:專案目錄如下:1、運用IDE新建一個sp
21 Java學習之位元組流(InputStream和OutPutStream)
一.流的分類 1、從功能上:輸入流、輸出流 2、從結構上:位元組流、字元流 3、從來源上:節點流、過濾流 其中InputStream/OutputStream是為位元組流而設計的,Reader/Writer是為字元流而設計的。處理位元組或者二進位制物件使用位元組
BZOJ1001:狼抓兔子(最小割最大流+vector模板)
cout 地形 ++ 能夠 can 圖片 jpg http img 1001: [BeiJing2006]狼抓兔子 Description 現在小朋友們最喜歡的"喜羊羊與灰太狼",話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在
網路流(最小割最大流(記錄路徑))【POJ1815】
【POJ1815】 出處:原帖 題意:就是求s點到t點,最少去掉幾個點使得他們不連通。如果無解輸出NO ANSWER! 解題思路 因為最小割只能求割掉幾條邊的解,我們要求的是割掉幾個點。那麼我們可以這樣考慮:把每個點拆成入點和出點。入點->出點權值為1。那麼
POJ2135 Farm Tour(最小費用最大流裸題)
Source Code #include<queue> #include<cstdio> #include<string> #include<cstring> #include<iostream> #include