1. 程式人生 > >三、 TCP(傳輸控制協議)

三、 TCP(傳輸控制協議)

我想 機器 ref ack 大小 機制 以及 請求 傳輸

  它建立在網際層協議(IP)提供的數據包傳輸技術之上,。TCP使應用程序可使用連續的數據進行通信。除非由於網絡故障導致連接中斷或凍結,TCP都能保證數據流完好地傳輸。而不會發生丟包 ,重包或是亂序的問題。

1 TCP工作原理

  如果使用udp提供的數據報機制,代碼還要考慮傳輸的可靠性問題,以及錯誤是的恢復方案。但如果用TCP,數據包就隱藏在協議層之下,應用只需要型目標機器發生數據流,TCP會自動將丟失的信息重發,保證信息能夠成功到達目標機器。

#每個TCP數據包都有一個序列號

#並不使用順序的整數作為數據包的序列號

#初始序列號是隨機的

#並不通過鎖步的方式通信,這種方式必須等待每個接收完才發下一個。相反,TCP可以無需等待一口氣發多個。某一刻對方希望同時傳輸的數據量叫做TCP窗口的大小。

#接收方的TCP實現可以通過控制發送方的窗口大小來減緩或暫停。這叫流量控制。

#如果TCP認為數據包被丟棄,他會認為網絡變擁擠,然後減少發送的數據量。

2 何時使用TCP

兩臺主機間建立TCP連接需要三個數據包:

SYN:“我想通信,這是數據包的初始序列號”

SYN-ACK:“好的,這是我向你發送數據包的初始序列號”

ACK::“好的”

通信結束時,要發送另外3個或4個數據包來關閉連接。

不需要使用TCP:

一。如果客戶端只需向服務器發送單個較小的請求,並且請求後無需後續通信。

二。客戶端與服務器之間不存在長時間的連接的情況下。

三。當丟包現象發生時,如果應用程序有比簡單地重傳數據聰明的多的方法的話。

3 TCP套接字的含義

  getsockname()函數用於獲取一個套接字的名字。它用於一個已捆綁或已連接套接字s,本地地址將被返回。本調用特別適用於如下情況:未調用bind()就調用了connect(),這時唯有getsockname()調用可以獲知系統內定的本地地址。在返回時,namelen參數包含了名字的實際字節數。

  跟UDP的情況一樣,TCP也使用端口號來區分同一IP地址上運行的不同應用程序。對於知名端口號和臨時端口號的劃分習慣於UDP是一致的。

三、 TCP(傳輸控制協議)