大話計算機網絡二 聊聊TCP

TCP服務

學習一個東西,先了解,再認識,最後總結。
面試題總是繞不開TCP/UDP,經常會問一些TCP/UDP的區別,TCP是什麼,TCP的滑動窗口這些問題,這個系列主要是我自己學習的總結。

TCP提供一種面向連接,可靠的字節流服務。

這裏拋出了三個問題:

  1. 什麼是連接
  2. 什麼是面向連接
  3. 什麼是可靠

什麼是連接

TCP就類似現實生活中的打電話,A打給B,當B接起電話的時候,A立馬知道B已經接起電話,這個時候A可以開始對B講話了,抽象到現實當中則就是A知道B已經接聽電話的這個狀態就是連接。到計算機網絡當中就是記錄再雙方的一個狀態信息。
數據必須基於一個連接來做,客戶端和服務端之間存在建立連接和沒建立連接的狀態,沒有連接就不能發數據。

什麼是面向連接

兩個TCP應用(通常是客戶端和服務端)在彼此交換數據之前必須先建立一個TCP連接

什麼是可靠

TCP爲了解決可靠性,提出了7種方案。

  1. 發送數據的時候數據會被切割成數據塊(提高IO吞吐量)
  2. 發送方發送數據成功確認機制
  3. 數據接收方接收成功確認機制
  4. 接收方會對數據進行校驗和(錯誤等待發送方超時發送)
  5. 接收方會對數據進行重新排序
  6. 接收方會對數據進行去重
  7. 流量控制

理解了上面的三個內容,大概就可以解決面試官簡單的問題,那麼如果更深入呢,帶着這個問題我們聊聊具體實現

發送數據的時候數據會被切割成數據塊(提高IO吞吐量)

應用數據被分割成TCP認爲最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據報長度將保持不變。由TCP傳遞給IP的信息單位稱爲報文段或段

發送方發送數據成功確認機制

當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。

數據接收方接收成功確認機制

當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒,

接收方會對數據進行校驗和

TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。

接收方會對數據進行重新排序、去重

既然TCP報文段作爲IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。既然IP數據報會發生重複,TCP的接收端必須丟棄重複的數據。

流量控制

TCP提供流量控制。TCP連接的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端發送接收端緩衝區所能接納的數據。這將防止較快主機致使較慢主機的緩衝區溢出。

字節流

兩個應用程序通過TCP連接交換8bit字節構成的字節流。TCP不在字節流中插入記錄標識符。我們將這稱爲字節流服務(byte stream service)。如果一方的應用程序先傳10字節,又傳20字節,再傳50字節,連接的另一方將無法瞭解發方每次發送了多少字節。收方可以分4次接收這80個字節,每次接收20字節。一端將字節流放到TCP連接上,同樣的字節流將出現在TCP連接的另一端。
另外,TCP對字節流的內容不作任何解釋。TCP不知道傳輸的數據字節流是二進制數據,還是ASCII字符、EBCDIC字符或者其他類型數據。對字節流的解釋由TCP連接雙方的應用層解釋。

小結

TCP提供了一種可靠的面向連接的字節流運輸層服務。我們簡單地介紹了TCP首部中的各個字段,並在隨後的幾章裏詳細討論它們。
TCP將用戶數據打包構成報文段;它發送數據後啓動一個定時器;另一端對收到的數據進行確認,對失序的數據重新排序,丟棄重複數據;TCP提供端到端的流量控制,並計算和驗證一個強制性的端到端檢驗和。
許多流行的應用程序如Telnet、Rlogin、FTP和SMTP都使用TCP。

下一章講講TCP的首部

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