標籤:
TCP發送的包有序號,對方收到包後要給一個反饋,如果超過一定時間還沒收到反饋就自動執行逾時重發,因此TCP最大的優點是可靠。一般網頁(http)、郵件(SMTP)、遠端連線(Telnet)、檔案(FTP)傳送就用TCP
UDP是面向訊息的協議,通訊時不需要建立串連,資料的傳輸自然是不可靠的,一般用於多點通訊和即時的資料業務,比如語音廣播、視頻、QQ、TFTP(簡單檔案傳送)、SNMP(簡易網路管理通訊協定)、RTP(即時傳送協議)RIP(路由資訊協議,如報告股票市場,航空資訊)、DNS(網域名稱解釋)。注重速度流暢。
/****************************************
首先說明:資料報的分段和分區確實發生,分段發生在傳輸層,分區發生在網路層。但是對於分段來說,這是經常發生在UDP傳輸層協議上的情況,對於傳輸層使用TCP協議的通道來說,這種事情很少發生。
1,MTU(Maximum Transmission Unit,MTU),傳輸單元最大值
(1)乙太網路和802.3對資料幀的長度都有一個限制,其最大 值分別是1500和1492個位元組。鏈路層的這個特性稱作MTU。不同類型的網路大多數都有一個上限。如果IP層有一個資料要傳,且資料的長度比鏈路層的 MTU還大,那麼IP層就要進行分區(fragmentation),把資料報分成若干片,這樣每一個分區都小於MTU。
(2)把一份IP資料報進行分區以後,由到達目的端的IP層來進行重新組裝,其目的是使分區和重新組裝過程對運輸層(TCP/UDP)是透明的。由於每一分區都是一個獨立的包,當這些資料報的片到達目的端時有可能會失序,但是在IP首部中有足夠的資訊讓接收端能正確組裝這些資料報片。
(3)儘管IP分區過程看起來透明的,但有一點讓人不想使用它:即使只丟失一片資料也要重新傳整個資料報。why?因為IP層本身沒有逾時重傳機制------由更高層(比如TCP)來負責逾時和重傳。當來自TCP報文段的某一片丟失後,TCP在逾時後會重發整個TCP報文段,該報文段對應於一份IP資料報(而不是一個分區),沒有辦法只重傳資料報中的一個資料分區。
(4)使用UDP很容易導致IP分區,TCP試圖避免IP分區。 那麼TCP是如何試圖避免IP分區的呢?其實說白了,採用TCP協議進行資料轉送是不會造成IP分區的,因為一旦TCP資料過大,超過了MSS,則在傳輸 層會對TCP包進行分段(如何分,見下文!),自然到了IP層的資料報肯定不會超過MTU,當然也就不用分區了。而對於UDP資料報,如果UDP組成的 IP資料報長度超過了1500,那麼IP資料報顯然就要進行分區,因為UDP不能像TCP一樣自己進行分段。總結:UDP不會分段,就由我IP來分。TCP會分段,當然也就不用我IP來分了!
2,MSS(Maxitum Segment Size)最大分段大小的縮寫,是TCP協議裡面的一個概念
(1)MSS就是TCP資料包每次能夠傳輸的最大資料分段。為了達到最佳的傳輸效能TCP協議在建立串連的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP資料包包頭的大小20Bytes和TCP資料區段的包頭20Bytes)所以往往MSS為1460。通訊雙方會根據雙方提供的MSS值得最小值確定為這次串連的最大MSS值。
(2)相信看到這裡,還有最後一個問題:TCP是如何?分段的呢?其實TCP無所謂分段,因為每個TCP資料報在組成前其大小就已經被MSS限制了,所以TCP資料報的長度是不可能大於MSS的,當然由它形成的IP包的長度也就不會大於MTU,自然也就不用IP分區了。
簡而言之:
1.IP分區產生的原因是網路層的MTU;TCP分段產生原因是MSS.
2.IP分區由網路層完成,也在網路層進行重組;TCP分段是在傳輸層完成,並在傳輸層進行重組. //透明性
3.對於乙太網路,MSS為1460位元組,而MUT往往會大於MSS.
故採用TCP協議進行資料轉送,是不會造成IP分區的。若資料過大,只會在傳輸層進行資料分段,到了IP層就不用分區。
所以可以看成是這種情況:傳輸層協議想發送一個超過了MTI的資料報,這個時候網路層就需要對其進行分區,一般UDP和ICMP會出現分區情況,但是TCP不會出現這種情況!因為TCP使用了MSS來避免分區!
IP分區只有第一個帶有傳輸層或ICMP首部,其餘的分區只有IP頭。至於怎麼重組就是到對端以後IP層的事情了。
若TCP報文非常長那麼在IP層傳輸時就有可能要分解成多個短資料報片。(電腦網路謝希仁)
TCP分段每個都有完整首部。
PS:所以我覺得是這樣的,TCP的分段是針對應用程式層的資料來說的,比如使用TCP發送70KB的資料,這個時候就需要將70KB分成若干個MSS,到了網路層就不需要分區了。MSS的存在就避免了網路層分區的發生,
IP層的分區是針對傳輸層中使用UDP協議來說的,如果使用UDP發送資料,UDP並不知道如何分段,那麼到了IP層就需要進行分區,分區的原則根據MTU,那麼分UDP最大的資料負載就是1500-8=1492
******************************TCP UDP分段***************************************************************************/
TCP和UDP協議的應用/參數查看