1. 程式人生 > >TCP/IP學習筆記(8) --TCP協議

TCP/IP學習筆記(8) --TCP協議

TCP協議,這是TCP/IP裡面最重要也是最精彩的部分,要花大力氣來學習。

簡要介紹

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

工作原理

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

  1. 應用資料被分割成TCP認為最適合傳送的資料塊。這和UDP完全不同,應用程式產生的 資料報長度將保持不變。由TCP傳遞給IP的資訊單位稱為報文段或段( segment)。

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

  3. 當TCP收到發自TCP連線另一端的資料,它將傳送一個確認。這個確認不是立即傳送,通常將推遲幾分之一秒。

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

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

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

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

tcp傳送過程

TCP的首部和UDP首部一樣,都有傳送埠號和接收埠號。但是顯然,TCP的首部資訊要比UDP的多,可以看到,TCP協議提供了傳送和確認所需要的所有必要的資訊。可以想象一個TCP資料的傳送應該是如下的一個過程。

  1. 雙方建立連線

  2. 傳送方給接受方TCP資料報,然後等待對方的確認TCP資料報,如果沒有,就重新發,如果有,就傳送下一個資料報。

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

  4. 中止連線

可以想像,為了建立一個TCP連線,系統可能會建立一個新的程序(最差也是一個執行緒),來進行資料的傳送。