TCP面向位元組流和UDP面向報文的區別

2021-10-04 02:55:08 字數 828 閱讀 5960

「tcp是一種流模式的協議,udp是一種資料報模式的協議」,這句話相信大家對這句話已經耳熟能詳~但是,「流模式」與「資料報模式」在程式設計的時候有什麼區別呢?以下是我的理解,僅供參考!

1、tcp

打個比方比喻tcp,你家裡有個蓄水池,你可以裡面倒水,蓄水池上有個龍頭,你可以通過龍頭將水池裡的水放出來,然後用各種各樣的容器裝(杯子、礦泉水瓶、鍋碗瓢盆)接水。

上面的例子中,往水池裡倒幾次水和接幾次水是沒有必然聯絡的,也就是說你可以只倒一次水,然後分10次接完。另外,水池裡的水接多少就會少多少;往裡面倒多少水,就會增加多少水,但是不能超過水池的容量,多出的水會溢位。

結合tcp的概念,水池就好比接收快取,倒水就相當於傳送資料,接水就相當於讀取資料。好比你通過tcp連線給另一端傳送資料,你只呼叫了一次write,傳送了100個位元組,但是對方可以分10次收完,每次10個位元組;你也可以呼叫10次write,每次10個位元組,但是對方可以一次就收完。(假設資料都能到達)但是,你傳送的資料量不能大於對方的接收快取(流量控制),如果你硬是要傳送過量資料,則對方的快取滿了就會把多出的資料丟棄。

2、udp

udp和tcp不同,傳送端呼叫了幾次write,接收端必須用相同次數的read讀完。upd是基於報文的,在接收的時候,每次最多只能讀取乙個報文,報文和報文是不會合併的,如果緩衝區小於報文長度,則多出的部分會被丟棄。也就說,如果不指定msg_peek標誌,每次讀取操作將消耗乙個報文。

3、為什麼

其實,這種不同是由tcp和udp的特性決定的。tcp是面向連線的,也就是說,在連線持續的過程中,socket中收到的資料都是由同一臺主機發出的(劫持什麼的不考慮),因此,知道保證資料是有序的到達就行了,至於每次讀取多少資料自己看著辦。

面向報文(UDP)和面向位元組流(TCP)的區別

面向報文 udp 和面向位元組流 tcp 的區別 面向報文的傳輸方式是應用層交給udp多長的報文,udp就照樣傳送,即一次傳送乙個報文。因此,應用程式必須選擇合適大小的報文。若報文太長,則ip層需要分片,降低效率。若太短,會是ip太小。udp對應用層交下來的報文,既不合併,也不拆分,而是保留這些報文...

面向報文(UDP)和面向位元組流(TCP)的區別

文章目錄 1,tcp是面向連線 connection oriented 的協議,udp是無連線 connection less 協議 2,tcp無界,udp有界 3,tcp可靠,udp不可靠 4,tcp有序,udp無序 5,tcp有流量控制 擁塞控制 udp沒有 6,tcp的頭部比udp大 1,tc...

面向報文(UDP)和面向位元組流(TCP)的區別

面向報文 udp 和面向位元組流 tcp 的區別 面向報文的傳輸方式是應用層交給udp多長的報文,udp就照樣傳送,即一次傳送乙個報文。因此,應用程式必須選擇合適大小的報文。若報文太長,則ip層需要分片,降低效率。若太短,會是ip太小。udp對應用層交下來的報文,既不合併,也不拆分,而是保留這些報文...