TCP/IP的簡介

關於協議

簡單來講,協議就是計算機與計算機以前經過網絡實現通訊事先達成的一種「約定」。這種約定,使不一樣設備,不一樣系統之間只有遵循相同的協議才能進行通訊。互聯網中經常使用的協議有:IP、TCP、UDP、HTTP,局域網:IPX/SPX等緩存

關於TCP/IP

TCP/IP是一種網絡體系結構,也能夠叫作「TCP/IP」協議族,它不僅是TCP和IP,是IP、TCP、HTTP、FTP等協議的集合(基於TCP/UDP、IP的協議)。服務器

image

TCP/IP的參考模型

和OSI參考模型聯繫:網絡

image

  • 物理層

物理層是負責數據傳輸的硬件層,例如:以太網、電話線等物理設備。主要功能是把電壓的高低轉化成0、1(比特流)。性能

  • 數據鏈路層

負責把比特流轉換成數據幀傳輸,例如驅動程序擔當是操做系統和硬件的橋樑做用。操作系統

  • 網絡層

負責網絡通訊中的尋址和路由的選擇,將目標數據傳送到目標地址。3d

  1. IP是跨越網絡傳送數據包,使整個互聯網都能收到數據的協議。使用IP地址做爲主機的標識;
  2. ICMP在IP數據包發送途中發生異常沒法到達對端的目標地址是,會向發送端發送一個異常的通知的協議。
  3. ARP是經過IP地址解析出物理地址(MAC地址)的協議。
  • 傳輸層

主要功能是實現程序以前的通訊,運用端口號來區分單個設備多個程序之間的通訊。期間用到的協議TCP、UDP。指針

  • 應用層

爲應用程序提供服務並規定應用程序中通訊相關細節。包括文件傳輸、電子郵件、遠程登陸等協議。cdn

傳輸層的協議

在網絡通訊過程當中,源IP地址和目標IP地址兩個因素是識別兩端主機。可是,傳輸層的做用是實現單個設備多個程序之間的通訊,所以加入了源端口號,協議號,目標端口號。經過這五個因素「源IP地址、目標IP地址、源端口號、目標端口號、協議號」來確認是否同一個通訊。視頻

  • UDP

UDP是一種面向無鏈接的傳輸層協議,不會關注數據是否到達對端。多用在數據少或多播、廣播通訊、視頻通訊等多媒體領域blog

  1. UDP的首部

image

  • 源端口號:表示發送的端口號,字段長16位。該字段是可選項,有時可能不會設置源端口號。沒有源端口號的時候該字段的值設置爲0,可用於不須要返回的通訊中。

  • 目標端口號:表示接收端口號,字段長16位。

  • 包長度: UDP 首部的長度和 UDP 數據長度之和(單位位字節 )

  • 檢驗和:用來判斷數據在傳輸過程當中是否損壞,除了檢驗UDP首部的源端口號、目標端口號,還包括源IP地址、目標IP地址、協議號(這三個也叫「UDP僞首部」)。緣由是識別一個通訊必須包括這5大因素,假如UDP僞首部出來問題,極有可能應該收包的應用收不到包。

  • TCP

TCP是一種面向鏈接的傳輸層協議,要鏈接和斷開通過「三次握手,四次揮手」,能夠保證數據傳輸的可達,具有可靠性。能處理丟包、傳輸數據順序亂的問題,還有經過流控制有效地利用寬度,緩解網絡擁堵的做用。

  1. TCP的首部

image

  • 源端口號:表示發送的端口號,字段長16位。

  • 目標端口號:表示接收端口號,字段長16位。

  • 序列號:指凡事數據的位置,字段長32位,每發送一次數據就累加一次該數據字節數的大小。序列號是在創建鏈接時由計算機隨機生成的隨機數做爲初始值,經過SYN包傳給接收端。

  • 確認應答號:它等於下一次應該接收到的數據的序列號。假設發送端的序列號爲 s,發送數據的長度爲 l,那麼接收端返回的確認應答號也是 s + l。發送端接收到這個確認應答後,能夠認爲這個位置之前全部的數據都已被正常接收。

  • 數據偏移:該字段表示TCP所傳輸的數據部分應該從TCP包的哪一個位開始計算,也就是TCP首部的長度。該字段的長度單位爲 4 字節,若是沒有可選字段,那麼這裏的值就是 5,表示 TCP 首部的長度爲 20 字節。

  • 保留:該字段主要爲了之後擴展是使用,其長度位4位。通常設置位0,但即便收到的包的在該字段不爲0,此包也不會被丟棄。

  • 控制位:改字段長度爲 8 比特,分別有 8 個控制標誌。依次是 CWR,ECE,URG,ACK,PSH,RST,SYN 和 FIN。

    • CWR(Congestion Window Reduced):CWR與ECE都用於IP地址首部的ECN字段。ECE標誌爲1是,則通知對方已將擁堵窗口縮小。
    • ECE(ECN-Echo):爲1時,通知對方,從對方到這邊有網絡擁塞的狀況。
    • URG(Urgent Flag):爲1時,表示包中有須要緊急處理的數據。
    • ACK(Acknowledgement Flag): 爲1時,確認應答的字段變爲有效。TCP規定處理最初創建鏈接是的SYN包以外該爲必須設置爲1。
    • PSH(Push Flag):爲1時,表示須要將收到的數據馬上傳給上層應用協議。PSH爲 0是則不用當即傳是先進行緩存。
    • RST(Reset Flag):爲1時,表示TCP鏈接中出現一次必須強制斷開鏈接。例如,一個沒有被使用的端口即便發來鏈接請求,也沒法進行通訊,這時能夠返回一個RET爲1的包,端口鏈接。
    • SYN(Synchronize Flag):用於創建鏈接。SYN爲1表示但願創建鏈接,並在其序列號的字段進行序列號初始值的設定,創建鏈接的 雙方,序列號和趣兒應答號要保持同步。
    • FIN(Fin Flag):爲1時,表示從此不會再有數據發送,但願斷開鏈接。通訊雙方的主機之間經過發送FIN位置爲1的TCP段,且每一個主機對對方的FIN包進行確認應答之後就能夠斷開鏈接。不過,不用立刻做出應答,而是等緩存區的全部數據發送完成後再發確認應答。
  • 窗口大小:該字段長16位,用於通知從相同TCP首部確認應答號所指位置開始可以接收的數據到小。有一種狀況,窗口大小爲0時,則表示發送窗口探測,以瞭解最新的窗口大小。但這個數據必須爲1字節。

  • 檢驗和:TCP的校驗和與UDP類似,區別在於TCP的校驗和沒法關閉。

  • 緊急指針:該字段爲16位,只有在URG控制位爲1是纔有效。

  • 選項:該字段用於提升TCP的傳輸性能。

  1. TCP三次握手

image

TCP握手通常由客戶端發起,步驟以下:

  1. 第一次握手: 客戶端發送一個TCP的SYN標誌位置1的包指明客戶打算鏈接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段裏,並進入SYN_SEND狀態,等待服務器確認.
  2. 第二次握手: 服務器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均爲1同時,將確認序號(Acknowledgement Number)設置爲X+1,服務器進入SYN_RECV狀態
  3. 第三次握手. 客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.而且把服務器發來ACK的序號字段+1,放在肯定字段中發送給對方

在三次握手過程當中,服務器發送SYN-ACK以後,收到客戶端的ACK以前的TCP鏈接稱爲半鏈接(half-open connect).此時服務器處於Syn_RECV狀態.當收到ACK後,服務器轉入ESTABLISHED狀態.

爲何是三次握手?

由於TCP的可靠的數據傳輸,且是全雙工通訊,在雙方進行數據傳輸前,必須確認雙方均可以接收數據。例如:若是是二次握手就創建,當服務端給客戶端發送數據時,因爲沒有第三次的ACK握手,服務端就不肯定客戶端可否接收到數據一樣給客戶端發送數據,就會形成資源的浪費。

  1. 四次揮手

image

  1. 客戶端主動關閉,向服務端發送FIN包,包首部FIN=1,seq(序列號) = u,進入FIN-WAIT狀態。
  2. 服務端收到客戶端的FIN包後,向客服端發送一個ACK包,包首部ACK=1,seq = v,ack = u+1,進入等待關閉狀態
  3. 等服務端的緩存數據所有發送完是向客服端發送一個FIN包,包首部FIN=1,ACK=1,seq=w,ack=u+1,進入Last-Ack狀態,等待客戶端的回覆再關閉。
  4. 客服端收到服務端的FIN包後,返回一個ACK包,包的首部ACK=1,seq=u+1,ack = w+1,服務端收到ACK後就關閉TCP鏈接,而客戶端進入等待關閉,等待2MSL的時間後沒有收到服務端的數據,再關閉鏈接
相關文章
相關標籤/搜索