你可能需要理解這句話:tcp是流傳輸協議,udp是包傳輸協議。
1:什麼是流傳輸協議?
打個比方,傳送方一次或分多次send了「1234,567,890,abc....」這些資料,接收方每次recv時得到的資料可能是分成了以下這麼多片段:123,45,67890,ab,c....,也可能是這樣的片段12,345,678,90abc,...。所以在網路正常的情況下,tcp雖然能保證資料按序到達對方,但不保證每次到達的資料量跟傳送的時候是一致的,因此應用層必須要處理這樣的情況,而處理這種情況就只能在應用層的資料裡加額外資訊,tlv就是其中一種實現方式。
理解流傳輸協議的本質還可以想象一下家裡用的自來水管的情況,自來水廠源源不斷的供水,我們用的時候都是開一下水龍頭就放一點水,開一下放一點,水是先進先出,但一次進多少跟一次出多少是完全不對等的。
2:什麼是包傳輸協議?
打個比方,傳送方一次或分多次send了「1234,567,890,abc....」這些資料,接收方要麼收不到包(譬如567這個包,要丟就是整體都丟了,不可能收到了5,而丟了67),要是收到的話,也會是這樣乙個個完整的包(順序不保證):567,1234,890,abc....,所以每個包都是乙個整體,是最小傳輸單元,不可再被分解。
3:為何你本機傳輸沒問題,而兩台計算機間傳輸就出問題了?
因為本機傳輸時,tcp包一次最大可以傳送65535個位元組的資料,所以當你小於64k的時候,一次就傳完了(完全沒有分解的必要),但你可以試試傳輸多個大於64k的,看看會出現什麼情況。
當兩台機子的資料是通過乙太網甚至廣域網傳輸的時候,包從傳送端出去的時候最大也就1500個位元組,經過廣域網可能還會被分解成更小的,因此產生了問題1中的情況,你再通過原先簡單的recv**肯定出錯。
傳輸層協議 UDP協議 TCP協議
udp協議段格式 udp的特點 udp的緩衝區 udp的socket既能讀,也能寫,這個概念叫做全雙工。下圖是基於tcp協議的客戶端 伺服器程式的一般流程。建立連線 通常稱為三次握手。不能出現兩次握手 伺服器認為連線建立好了,客戶端認為美好,重新傳送連線 伺服器端會出現閒置連線,主動一方會進行第三次...
對問題 Http是TCP協議還是UDP協議的回答
1 tcp ip是個協議組,可分為三個層次 網路層 傳輸層和應用層。在網路層有ip協議 icmp協議 arp協議 rarp協議和bootp協議。在傳輸層中有tcp協議與udp協議。在應用層有ftp http telnet smtp dns等協議。因此,http本身就是乙個協議,是從web伺服器傳輸超...
DNS使用的是TCP協議還是UDP協議
原文 dns同時占用udp和tcp埠53是公認的,這種單個應用協議同時使用兩種傳輸協議的情況在tcp ip棧也算是個另類。但很少有人知道dns分別在什麼情況下使用這兩種協議。先簡單介紹下tcp與udp。tcp是一種面向連線的協議,提供可靠的資料傳輸,一般服務質量要求比較高的情況,使用這個協議。udp...