TCP/IP詳解學習筆記(9)-TCP協議概述

終於看到了TCP協議,這是TCP/IP詳解裏面最重要也是最精彩的部分,要花大力氣來讀。前面的TFTP和BOOTP都是一些簡單的協議,就不寫筆記了,寫起來也沒啥東西。

TCP和UDP處在同一層---運輸層,但是TCP和UDP最不同的地方是,TCP提供了一種可靠的數據傳輸服務,TCP是面向連接的,也就是說,利用TCP通信的兩臺主機首先要經歷一個“撥打電話”的過程,等到通信準備結束纔開始傳輸數據,最後結束通話。所以TCP要比UDP可靠的多,UDP是把數據直接發出去,而不管對方是不是在收信,就算是UDP無法送達,也不會產生ICMP差錯報文,這一經時重申了很多遍了。

把TCP保證可靠性的簡單工作原理摘抄如下

  • 應用數據被分割成TCP認爲最適合發送的數據塊。這和UDP完全不同,應用程序產生的 數據報長度將保持不變。由TCP傳遞給IP的信息單位稱爲報文段或段( segment)(參見圖1 - 7)。在1 8.4節我們將看到TCP如何確定報文段的長度。

  • 當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能 及時收到一個確認,將重發這個報文段。在第21章我們將瞭解TCP協議中自適應的超時 及重傳策略。

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

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

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

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

從這段話中可以看到,TCP中保持可靠性的方式就是超時重發,這是有道理的,雖然TCP也可以用各種各樣的ICMP報文來處理這些,但是這也不是可靠的,最可靠的方式就是隻要不得到確認,就重新發送數據報,直到得到對方的確認爲止。

TCP的首部和UDP首部一樣,都有發送端口號和接收端口號。但是顯然,TCP的首部信息要比UDP的多,可以看到,TCP協議提供了發送和確認所需要的所有必要的信息。這在P171-173有詳細地介紹。可以想象一個TCP數據的發送應該是如下的一個過程。

  • 雙方建立連接

  • 發送方給接受方TCP數據報,然後等待對方的確認TCP數據報,如果沒有,就重新發,如果有,就發送下一個數據報。

  • 接受方等待發送方的數據報,如果得到數據報並檢驗無誤,就發送ACK(確認)數據報,並等待下一個TCP數據報的到來。直到接收到FIN(發送完成數據報)

  • 中止連接

可以想見,爲了建立一個TCP連接,系統可能會建立一個新的進程(最差也是一個線程),來進行數據的傳送


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