tcp是一種流模式的協議,udp是一種資料報模式的協議
但是, 」流模式「與」資料報「模式在程式設計的時候有什麼區別呢?
打個比方比喻tcp,你家裡有個蓄水池,你可以裡面倒水,蓄水池上有個龍頭,你可以通過龍頭將水池裡的水放出來,然後用各種各樣的容器裝(杯子、礦泉水瓶、鍋碗瓢盆)接水。上面的例子中,往水池裡倒幾次水和接幾次水是沒有必然聯絡的,也就是說你可以只倒一次水,然後分10次接完。另外,水池裡的水接多少就會少多少;往裡面倒多少水,就會增加多少水,但是不能超過水池的容量,多出的水會溢位。
結合tcp的概念,水池就好比接收快取,倒水就相當於傳送資料,接水就相當於讀取資料。好比你通過tcp連線給另一端傳送資料,你只呼叫了一次 write,傳送了100個位元組,但是對方可以分10次收完,每次10個位元組;你也可以呼叫10次write,每次10個位元組,但是對方可以一次就收完。 (假設資料都能到達)但是,你傳送的資料量不能大於對方的接收快取(流量控制),如果你硬是要傳送過量資料,則對方的快取滿了就會把多出的資料丟棄。
udp和tcp不同,傳送端呼叫了幾次write,接收端必須用相同次數的read讀完。upd是基於報文的,在接收的時候,每次最多只能讀取乙個 報文,報文和報文是不會合併的,如果緩衝區小於報文長度,則多出的部分會被丟棄。也就說,如果不指定msg_peek標誌,每次讀取操作將消耗乙個報文。
其實,這種不同是由tcp和udp的特性決定的。tcp是面向連線的,也就是說,在連線持續的過程中,socket中收到的資料都是由同一臺主機發出的(劫持什麼的不考慮),因此,知道保證資料是有序的到達就行了,至於每次讀取多少資料自己看著辦。
而udp是無連線的協議,也就是說,只要知道接收端的ip和埠,且網路是可達的,任何主機都可以向接收端傳送資料。這時候,如果一次能讀取超過一 個報文的資料,則會亂套。比如,主機a向傳送了報文p1,主機b傳送了報文p2,如果能夠讀取超過乙個報文的資料,那麼就會將p1和p2的資料合併在了一 起,這樣的資料是沒有意義的。
TCP與UDP資料報結構
tcp transport control protocol 傳輸控制協議 a,源埠 標識源端應用程序。b,目的埠 標識目的端應用程序。c,序號 在syn標誌未置位時,該欄位指示了使用者資料區中第乙個位元組的序號 在syn標誌置位時,該欄位指示的是初始傳送的序列號。e,資料偏移 表示以32位字為單位...
TCP與UDP資料報的區別
size small b tcp與udp的區別 b color darkred 1 基於連線與無連線 2 對系統資源的要求 tcp較多,udp少 3 udp程式結構較簡單 4 流模式與資料報模式 5 tcp保證資料正確性,udp可能丟包,tcp保證資料順序,udp不保證另外結合gprs網路的情況具體...
關於「粘包」 位元組流與資料報的區別
問題引入?如何處理和解決 tcp粘包 問題?即客戶端呼叫兩次不同的send試圖傳送兩份不同的資料,但接收端呼叫recv時一次全部取出。無法分割出原先的兩部分資料。關於傳輸層的兩個協議其定義如下 udp 使用者資料報協議 tcp 面向連線的可靠位元組流傳輸協議 tcp粘包是乙個偽問題,需要明確的是 t...