1. 程式人生 > >TCP/IP協議學習(一)

TCP/IP協議學習(一)

重傳 消息 時機 交換 strong 一對多 三次握手 數據鏈路層 七層

一。網絡模型

  OSI七層模型:自上至下依次是 應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層

    應用層:具體的應用協議如HTTP、SMTP、FTP、TELNET、DNS等

    表示層:針對數據格式,使應用程序不用關心各個主機中的數據格式

    會話層:管理會話,針對通信時機,確定何時建立或斷開連接

    傳輸層:針對數據的傳輸和具體的建立或斷開連接等,TCP、UDP協議

    網絡層:尋址和路由,實際上的數據傳輸任務由網絡層完成(發送數據包),單位為包。路由器屬於這一層

    數據鏈路層:物理層上互連的節點之間通信,如同一鏈路上的主機數據傳輸服務,單位為幀。交換機在這一層

    物理層:關註怎樣在傳輸媒體上傳輸數據比特流,單位為比特。集線器在這一層

  TCP/IP模型:自上至下依次是 應用層,傳輸層,網絡層,鏈路層(網絡接口層)

  五層協議模型:自上而下依次是 應用層,傳輸層,網絡層,數據鏈路層,物理層

二。TCP的三次握手

  基於TCP的通信中,在客戶端和服務端進行通信之前,需要進行三次握手以建立連接。

  三次握手流程

  (1)客戶端向服務端發送連接請求報文段(SYN包):SYN=1,seq=x

  (2)服務端收到消息後向客戶端發送確認應答和建立連接報文(SYN+ACK):SYN=1,ACK=1,seq=y,ack=x+1

  (3)客戶端收到消息後再向服務端發送確認應答報文段(ACK包):ACK=1,seq=x+1,ack=y+1

  三次握手的作用

  (1)確定客戶端和接收端雙方都已具有接收消息和發送消息的功能。

  (2)防止已過期的連接請求報文段(如因阻塞而未及時到達)突然發送到服務器,從而造成錯誤。

  這也是為什麽不是兩次握手的主要原因。

  ACK:1個字節,ACK=1時表示有效

  ack:確認號,4個字節,表示希望收到的下一個報文段中第一個字節的編號

  SYN:同步包,SYN=1,ACK=1時表示同意連接;SYN=1,ACK=0時表示連接請求

  seq:序列號,用來標記數據段順序,報文段中第一個字節的編號

三。TCP的四次揮手

  基於TCP的通信中,在客戶端和服務端結束通信之前,需要通過四次揮手來斷開連接。

  四次揮手流程

  (1)客戶端向服務端發送請求斷開連接(FIN包):FIN=1,seq=u

  (2)服務端收到請求後回復確認應答(ACK包):ACK=1,seq=v,ack=u+1

  (3)服務端向客戶端發送請求以斷開連接(FIN包):FIN=1,seq=w

  (4)客戶端收到請求後回復確認應答(ACK包):ACK=1,seq=u+1,ack=w+1

  四次揮手的作用

  因為一方收到另一方的斷開連接消息(FIN報文)後,必須先回復一個確認消息(ACK報文),然後才能發送FIN報文

  在收到FIN報文時,服務端的數據可能尚未完全發送完畢,並不需要立即關閉連接。因此,FIN報文和ACK報文通常分開發送?

  FIN:用來釋放連接誒,FIN=1表示希望斷開連接

四。TCP與UDP的區別

  TCP:面向連接的、可靠的、數據流協議(面向字節流,將數據看作一串無結構的字節流),

     且TCP協議擁有順序控制、超時重傳、擁塞控制等機制;

     只支持一對一通信

  UDP:無連接的、不可靠的(UDP只盡最大能力完成交付)、數據報協議(面向報文)

     支持一對一,一對多,多對多通信

TCP/IP協議學習(一)