1. 程式人生 > 其它 >淺談通訊協議之 TCP與TCP/IP

淺談通訊協議之 TCP與TCP/IP

淺談通訊協議之 TCP與TCP/IP

通訊模型

起源

由於計算機網路的飛速發展,各大產商根據自己的協議生產不同的硬體和原件,為了保證各種網路技術能夠和諧共存和良好的配合,國際標準化組織(ISO)於1984年建立一套抽象的分層結構ISO/OSI(國際標準化組織的開放網路架構)。

七層參考模型

 

 

 

  1. 物理層
    物理層主要是在物理層面解決基礎的傳送通道,建立,維護和釋放物理鏈路所需要的機械的、電氣/光學的、功能的和規程的特性,如光纜的抗衰耗,無線裝置的發射功率如何提高等物理設施問題。

  2. 資料鏈路層
    資料鏈路層提供簡單的通訊鏈路,通訊實體所在的系統必須經過物理介質直接相連(如光纜,電纜,微波等)。將物理層提供的位元流組成“幀”,即將傳送方傳送的若干“位”的資料組成一組,加上“開始”“結束”標誌和檢錯相關程式碼,形成具有固定格式的資料幀
    本層要提供一定的差錯檢驗和糾正機制,以防訊號在傳輸過程中因機械和電氣以及外界干擾情況下出現錯誤。因此資料幀在傳送時會有相應資訊存放在糾錯位元組中,當到達目的地之後,會對自身進行計算,計算結果和糾錯位元組中的內容進行比對,如果一致,進行下一步操作,不一致則糾錯位元組可以將結果檢測出來,並要求重傳。

  3. 網路層
    網路層主要提供網路服務,一種是面向連線的有軌網路服務,一種是無連線的無軌網路服務。
    網路層肩負著如下四大任務:

    • 路由選擇:發現路由,選擇路徑,有時也負責地址轉換,管理來來往往的資料包。
    • 擁塞控制:採用擁塞控制機制,儘量避免擁塞的發生,或者在發生擁塞時,通過多種途徑緩解擁塞狀況(比如丟棄一些資料,或者進行快取)。
    • 區域網互聯:如統計哪些使用者需要的網路流量比較多,訪問哪些站點比較頻繁,或者禁止或控制使用者訪問某些站點;記賬功能一般也在網路層解決。
    • 統計和控制:如統計哪些使用者需要的網路流量比較多,訪問哪些站點比較頻繁,或者禁止或控制使用者訪問某些站點;記賬功能一般也在網路層解決。
      (IP協議就是網路層協議)
  4. 傳輸層
    傳輸層的任務是向用戶提供可靠的、透明的端到端的資料傳輸,以及差錯控制和流量控制機制。使得底層的網路硬體對高層不可見,即會話層、表示層、應用層的設計不用考慮底層細節。起到承上啟下的作用。
    傳輸層通過邏輯介面向高層提供服務。服務的型別是在連線建立時確定的,此時提供端到端的、可靠的、面向連線的位元組流服務。
    (TCP和UDP就屬於傳輸層協議)

  5. 會話層
    會話層在不同的機器之間提供會話程序的通訊,如建立、管理和拆除會話程序。同時也提供許多增值服務,如互動式對話,機器之間的同步控制等。

  6. 表示層 表示層處理通訊程序之間交換資料的表示方法,包括語法轉換、資料格式的轉換、加密與解密、壓縮與解壓縮等。

  7. 應用層 應用層負責管理應用程式之間的通訊

TCP與TCP/IP

OSI由於體系比較複雜,不太方便計算機軟體是實現,於是TCP/IP技術應運而生。TCP/IP同樣採用分層結構,在TCP/IP去除了OSI的表示層和會話層。

 

還有一種五層的說法,將網路介面層分為物理層和資料鏈路層兩層,這樣有利於資料通訊的分析。TCP/IP體系結構中最核心的部分是上面的三層:應用層、傳輸層和網際網路層(也稱網路層),網際網路層以下的層次沒有制定相關標準 TCP/IP是一個協議組,其中包含有TCP、IP,還包括HTTP、TELNET、FTP、RIP、OSPF、BGP、UDP、ARP、pop3等眾多協議。

各層主要功能:

  1. 網路介面層也稱為資料鏈路層,TCP/IP並沒有嚴格定義該層,它只是要求能夠提供給其上層——網路層一個訪問介面,以便在其上傳遞IP分組。由於這一層次未被定義,所以其具體的實現方法將隨著網路型別的不同而不同。乙太網是IP通訊中資料鏈路層最常見的形式,除此之外還有PPP、HDLC等。10Gbit/s以下的乙太網一般應用於區域網,而PPP、HDLC則應用於廣域網範圍內居多。

  2. 網路介面層也稱為資料鏈路層,TCP/IP並沒有嚴格定義該層,它只是要求能夠提供給其上層——網路層一個訪問介面,以便在其上傳遞IP分組。由於這一層次未被定義,所以其具體的實現方法將隨著網路型別的不同而不同。乙太網是IP通訊中資料鏈路層最常見的形式,除此之外還有PPP、HDLC等。10Gbit/s以下的乙太網一般應用於區域網,而PPP、HDLC則應用於廣域網範圍內居多。

  3. 傳輸層:傳輸控制協議(Transmission Control Protocol,TCP)和使用者資料報協議(User Datagram Protocol,UDP)是該層的重要協議。TCP是一個面向連線的、可靠的協議。它將一臺主機發出的位元組流無差錯地發往網際網路上的其他主機。在傳送端,它負責把上層傳送下來的位元組流分成報文段並傳遞給下層。在接收端,它負責把收到的報文進行重組後遞交給上層。TCP還要處理端到端的流量控制。UDP是一個不可靠的、無連線協議,主要適用於不需要對報文進行排序和流量控制的場合

TCP報文

 

  1. 源埠和目的埠欄位——各佔16bit。埠是傳輸層與應用層的服務介面

  2. 序號欄位——SEQ序號,佔32bit。TCP連線中傳送的資料流中的每一個位元組都編上一個序號。序號欄位的值則指的是本報文段所傳送的資料的第一個位元組的序號。

  3. 序號欄位——SEQ序號,佔32bit。TCP連線中傳送的資料流中的每一個位元組都編上一個序號。序號欄位的值則指的是本報文段所傳送的資料的第一個位元組的序號。

  4. 標誌位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下。

    緊急位元 URG——當 URG=1 時,表明緊急指標(urgent pointer)欄位有效。它告訴系統此報文段中有緊急資料,應儘快傳送(相當於高優先順序的資料)。

    確認位元ACK——只有當ACK=1時確認號欄位才有效。當 ACK=0時,確認號無效。推送位元PSH(PuSH)——接收TCP收到推送位元置1的報文段,就儘快地交付給接收應用程序,而不再等到整個快取都填滿了後再向上交付。

    復位位元 RST(ReSeT)——當RST=1時,表明TCP連線中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連線,然後再重新建立運輸連線。

    同步位元SYN——同步位元SYN置為1,就表示這是一個連線請求或連線接受報文。

    終止位元 FIN(FINal)——用來釋放一個連線。當FIN=1時,表明此報文段的傳送端的資料已傳送完畢,並要求釋放運輸連線
    需要注意的是:不要將確認序號ACK與標誌位中的ACK搞混了;確認方ACK=發起方SEQ+1,兩端配對。

  5. 資料偏移——佔4bit,它指出TCP報文段的資料起始處距離TCP報文段的起始處有多遠。

  6. 視窗欄位——佔16bit。視窗欄位用來控制對方傳送的資料量,單位為位元組。TCP連線的一端根據設定的快取空間大小確定自己的接收視窗大小,然後通知對方以確定對方的傳送視窗的上限

  7. 檢驗和——佔16bit。檢驗和欄位檢驗的範圍包括首部和資料這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12位元組的偽首部。

  8. 緊急指標欄位——佔16bit。緊急指標指出在本報文段中的緊急資料的最後一個位元組的序號。

  9. 選項欄位——長度可變。TCP只規定了一種選項,即最大報文段長度MSS(Maximum Segment Size)。MSS告訴對方TCP:“我的快取所能接收的報文段的資料欄位的最大長度是 MSS 個位元組

  10. 保留欄位——佔6bit,保留為今後使用,但目前應置為0。

TCP的三次握手和四次揮手

TCP的連線和建立都是採用客戶伺服器方式。主動發起連線建立的應用程序叫作客戶(Client)。被動等待連線建立的應用程序叫作伺服器(Server)

  • 三次握手
    在TCP/IP中,採用三次握手建立一個連線,連線過程就像打電話的過程

 

第一次握手:Client(主機A)向Server(主機B)傳送一個連線請求,在這個包中,標誌位SYN=1,傳送序號SEQ=x,上圖中x=200,Client進入SYNSEND狀態,等待Server確認。
第二次握手:Server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,確認序號ACK=x+1=201,隨機產生一個傳送序號SEQ=y,上圖中y=500,並將該資料包傳送給Client以確認連線請求,Server進入SYNRCVD狀態。

第三次握手:Client收到確認後,檢查確認序號ACK是否為x+1=201,標誌位ACK是否為1,如果正確,則將標誌位ACK置為1,確認序號ACK=y+1=501,並將該資料包傳送給Server,Server檢查確認序號ACK是否為y+1=501,標誌位ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態。
完成三次握手,客戶端與伺服器開始傳送資料。

  • 四次揮手

四次揮手(Four-Way Wavehand)即終止TCP連線,就是指斷開一個TCP連線時,需要客戶端和服務端總共傳送4個包以確認連線的斷開,

 

 第一次揮手:當客戶A要斷開TCP連線時,傳送一個包,其中標誌位fin=1,ACK=1,傳送序號SEQ=x,確認序號ACK=y,上圖中x=200,y=500。Client進入FINWAIT1狀態。
第二次揮手:客戶B知道A要斷開後,傳送一個確認包,其中標誌位ACK=1傳送序號,SEQ=y確認序號ACK=x+1=201,Server進入CLOSE_WAIT狀態。
第三次揮手:客戶B也斷開TCP連線,此時傳送一個包,其中,標誌位fin=1,傳送序號SEQ=y+1=501,Server進入LASTACK狀態。
第四次揮手:客戶A收到B的斷開請求後,Client進入TIMEWAIT狀態,接著傳送一個確認包,標誌位ACK=1,傳送序號SEQ=x+1=201,確認序號ACK=y+2=502;Server進入CLOSED狀態。