TCP/IP:認識TCP

TCP和UDP都處在網絡模型的傳輸層,並且都使用相同的網絡層,TCP提供一種面向連接的、可靠的字節流服務。

TCP通過下列方式來提供可靠性:

  1. 應用數據被分割成TCP認爲最適合發送的數據塊,由TCP傳遞給IP的信息單位稱爲報文段或者段,對於段的長度,是由一些策略決定的,和應用層相關。
  2. 當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。TCP協議中有自適應的超時及重傳策略。
  3. 當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,而是推遲幾分之一秒。
  4. TCP將保持它首部和數據的檢驗和,如果出現差錯,就會期望發送方重新發送。
  5. 如果有必要,TCP將對收到的數據進行重新排序,確保收到的數據以正常的順序交給應用層。
  6. 可以丟棄被認爲重複的數據。
  7. TCP還提供流量控制。TCP連接的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端發送接收端緩衝區所能接納的數據。

在傳輸過程中,TCP對字節流的內容不作任何解釋。

一,TCP的首部佈局

TCP數據被封裝在一個IP數據報中,封裝如下所示 :

TCP首部的數據格式,如果不計任選字段,TCP首部大小爲20個字節,其佈局如下圖所示:


二,端口號

每個TCP段都包含源端和目的端的端口號,這可以用於尋找發送端和接收端的應用進程,我們在服務器上的網絡應用程序,往往都會指定一個監聽端口,其實在客戶端連接成功之後,客戶端操作系統會自動的爲TCP連接分配一個端口,用於和服務器端通訊。這兩個端口加上IP首部中的源端IP和目的端IP地址唯一確定一個TCP連接。其實一個端口和一個IP能夠唯一的標識一個socket。

三,序號

序號用來標識從TCP發送端向TCP接收端發送的數據字節流,TCP用序號對每個字節進行計數。

四,確認序號

確認序號包含發送確認的一端所期望收到的下一個序號,因此,確認序號是上次已經成功收到數據字節序號加1。

五,首部長度
4 位的首部長度給出首部中32bit字(4 個字節)的數目,需要這個值是因爲選項字段的長度是可變的,因爲這個字段佔4個位,所以TCP最多有15*4=60個字節,在沒有選項的時候,長度是20字節。

六,標誌比特

6個標誌比特:
  1. URG。此時16位的緊急指針有效。
  2. ACK。確認序號有效。
  3. PSH。接收方應該儘快將這個報文段交給應用層。
  4. RST。重建連接。
  5. SYN。同步序號用來發起一個連接。
  6. FIN。發送端完成發送任務。
七,檢驗和
檢驗和覆蓋了整個的TCP報文段:TCP首部和TCP數據。這個字段一定是由發送端計算和存儲,並由接收端進行驗證。

八,關於選項

最常見的可選字段是最長報文大小,也就是MSS,每個連接方通常都在通信的第一個報文段凡是SYN標誌發送的時候,將MSS通告對方。


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