傳輸層、TCP協議的通俗解釋

 

如圖:TCP和UDP作用在運輸層,他們將應用層傳遞下來的數據按照TCP、UDP自己的協議格式封裝起來,再傳給網絡層,由網絡層的IP協議封裝成IP數據報的形式,然後通過網絡、路由器轉發等操作再傳輸到另一臺通信主機,主機收到數據後解封裝,並交給傳輸層處理,傳輸層再解封裝交給應用層處理。傳輸層只是對應用層的數據進行了一下處理,加一點東西,打包自己的格式的數據。就好像應用層給傳輸層一個蘋果,傳輸層把它包在了一個特定的盒子裏,盒子上寫着一些信息,然後再交給下層網絡層。

舉一個例子表達TCP和IP的關係:TCP就好像一家公司的經理,他想要和另一家公司的經理交流一下想法,於是他理了一下思路,給另一家公司的經理寫了一封信,不要問我爲什麼不直接打電話,因爲當時沒有電話。這封信就可以認爲是TCP協議封裝好的數據報。然後該經理將這封信放到公司郵箱,快遞員拿到信後根據上邊寫的IP地址(端口號+IP地址:端口號表明是哪個經理寫的信,一個公司可能有很多經理,對應到計算機中就是哪個程序進程; IP地址就是IP協議中的地址,告訴快遞員要送到哪)決定要送到哪個地方,至於怎麼送,就是IP協議的事了,肯定是查路由表,轉發到下一個路由器,再查該路由器的路由表,繼續轉發,最終到達另一個公司。該公司的前臺根據端口號決定要把這封信交給哪個經理,然後經理取完信後再處理他跟發信經理的愛恨情仇。

 

當然,這個例子還可以繼續舉下去,公司的老闆就相當於應用層,老闆會把他的指示告訴某一個專管某件事的經理,然後該經理再按照指示寫信,給另一家公司。然後那家公司對應的經理收到信後再向自己的老闆,也就是應用層彙報。比如QQ就處在應用層,你跟其他人聊天的時候,QQ就把聊天數據傳給下層一個專門負責通信的進程(可以理解爲已經到了傳輸層),該進程收到數據後再按照TCP或UDP的協議格式加一點東西包裝一下,繼續往下層網絡層交付,然後經過路由發送到對方主機,對方主機根據端口號再把它交給QQ通信的進程,該進程再拆掉一些包裝,然後交給QQ,這樣你發送的數據就顯示在了別人的手機上。

 

TCP最大的特點就是面向連接,穩定可靠,全雙工(全雙工就是A可以給B發消息,同時B也可以給A發,就像我們打電話一樣

 

●面向連接的話肯定就有兩個過程:建立連接(通過三次握手),拆除連接(無論多少次握手都無法確保正確拆除:兩軍對壘難題)。

 

●穩定可靠就是差錯控制,流量控制和擁塞控制。

●差錯控制:一般使用,超時重傳機制,加入發送方沒有收到接收方關於正確接收的回覆,在等了一個特定的時間段後就會認爲發送失敗了,然後重新發送。因爲IP協議只是提供了一種盡力而爲的傳輸,也就是說他並不保證數據一定正確傳輸過去,所以需要傳輸層來進行差錯控制。就好像快遞員也有可能把快遞弄丟一樣,如果這家公司的經理很久都沒有收到對方的回覆,那他肯定。。。

 

●流量控制:我們總希望數據發送的足夠快,但是發送方發的足夠快,接收方並不一定可以接收這麼快,因爲有很多別的主機,別的進程也給他發送數據,他不一定能夠一下子處理,有可能緩存空間不一定夠用了,這時候就需要用流量控制了。當接收方感覺緩存受不鳥的時候就給發送方傳輸一個數據,來告訴發送方,我的接受窗口是**(如200),然後發送方就把自己的發送窗口設置爲200。有可能他之前的發送窗口是1000,設置成200後,發送數據相對以前更慢了一些,接收方就來得及接收。(關於滑動窗口的概念可以參考go-back-nARQ協議,滑動窗口越大,可以認爲傳輸速度越快)。

 

●擁塞控制:擁塞控制是TCP非常非常重要的一個性質。擁塞的意思就是對某一網絡資源的佔用超過了了該資源的所能提供的能力,網絡的性能就會變壞。就好像街道上堵車一樣,來的車太多了,車道不夠用,大家就會擠在一起,數據發出去很慢。衡量擁塞的一個常用指標就是吞吐量。

 

●如圖,右(b)圖網絡中間產生了擁塞,這樣就很影響網絡吞吐量,解決擁塞通常的方法還是限制發送方發送速率。常用的方法是慢啓動和擁塞避免:

比如剛開始擁塞窗口設置爲32,發送窗口設置爲1,然後發送窗口指數增加:2,4,8,16…32,顯然,這時候發送速度也在增加,達到擁塞窗口32後,發送窗口開始線性增加——每次增加1,在達到40的時候,突然發生了擁塞,這時候發送窗口立即減爲1,擁塞窗口變爲40/2=20.然後發送窗口繼續指數增加1,2,4,8,16…在達到20的時候,又開始線性增加。。。,如此循環。通俗來說就是先給一個數據發送速率門限,然後發送方一直快速提高自己的發送速率,達到門限後,就感覺可能要發生擁塞了,所以開始緩慢增加發送速率。發生擁塞後,將門限設置爲現在窗口的一半,再繼續循環這個過程。


●總的來說,傳輸層就實現了端到端之間(應用進程到應用進程之間,經理到經歷之間)的數據傳輸控制。只要是數據傳輸,就有可能會出錯,會阻塞,會溢出(接收方的緩存就像是一個桶,倒的水太快,就會溢出,也就是數據會丟失),所以傳輸層的TCP協議要解決差錯控制,流量控制和擁塞控制,目的就是讓數據快速,正確的傳送到目的端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章