簡單來講,協議就是計算機與計算機以前經過網絡實現通訊事先達成的一種「約定」。這種約定,使不一樣設備,不一樣系統之間只有遵循相同的協議才能進行通訊。互聯網中經常使用的協議有:IP、TCP、UDP、HTTP,局域網:IPX/SPX等緩存
TCP/IP是一種網絡體系結構,也能夠叫作「TCP/IP」協議族,它不僅是TCP和IP,是IP、TCP、HTTP、FTP等協議的集合(基於TCP/UDP、IP的協議)。服務器
和OSI參考模型聯繫:網絡
物理層是負責數據傳輸的硬件層,例如:以太網、電話線等物理設備。主要功能是把電壓的高低轉化成0、1(比特流)。性能
負責把比特流轉換成數據幀傳輸,例如驅動程序擔當是操做系統和硬件的橋樑做用。操作系統
負責網絡通訊中的尋址和路由的選擇,將目標數據傳送到目標地址。3d
主要功能是實現程序以前的通訊,運用端口號來區分單個設備多個程序之間的通訊。期間用到的協議TCP、UDP。指針
爲應用程序提供服務並規定應用程序中通訊相關細節。包括文件傳輸、電子郵件、遠程登陸等協議。cdn
在網絡通訊過程當中,源IP地址和目標IP地址兩個因素是識別兩端主機。可是,傳輸層的做用是實現單個設備多個程序之間的通訊,所以加入了源端口號,協議號,目標端口號。經過這五個因素「源IP地址、目標IP地址、源端口號、目標端口號、協議號」來確認是否同一個通訊。視頻
UDP是一種面向無鏈接的傳輸層協議,不會關注數據是否到達對端。多用在數據少或多播、廣播通訊、視頻通訊等多媒體領域blog
源端口號:表示發送的端口號,字段長16位。該字段是可選項,有時可能不會設置源端口號。沒有源端口號的時候該字段的值設置爲0,可用於不須要返回的通訊中。
目標端口號:表示接收端口號,字段長16位。
包長度: UDP 首部的長度和 UDP 數據長度之和(單位位字節 )
檢驗和:用來判斷數據在傳輸過程當中是否損壞,除了檢驗UDP首部的源端口號、目標端口號,還包括源IP地址、目標IP地址、協議號(這三個也叫「UDP僞首部」)。緣由是識別一個通訊必須包括這5大因素,假如UDP僞首部出來問題,極有可能應該收包的應用收不到包。
TCP是一種面向鏈接的傳輸層協議,要鏈接和斷開通過「三次握手,四次揮手」,能夠保證數據傳輸的可達,具有可靠性。能處理丟包、傳輸數據順序亂的問題,還有經過流控制有效地利用寬度,緩解網絡擁堵的做用。
源端口號:表示發送的端口號,字段長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。
窗口大小:該字段長16位,用於通知從相同TCP首部確認應答號所指位置開始可以接收的數據到小。有一種狀況,窗口大小爲0時,則表示發送窗口探測,以瞭解最新的窗口大小。但這個數據必須爲1字節。
檢驗和:TCP的校驗和與UDP類似,區別在於TCP的校驗和沒法關閉。
緊急指針:該字段爲16位,只有在URG控制位爲1是纔有效。
選項:該字段用於提升TCP的傳輸性能。
TCP握手通常由客戶端發起,步驟以下:
在三次握手過程當中,服務器發送SYN-ACK以後,收到客戶端的ACK以前的TCP鏈接稱爲半鏈接(half-open connect).此時服務器處於Syn_RECV狀態.當收到ACK後,服務器轉入ESTABLISHED狀態.
爲何是三次握手?
由於TCP的可靠的數據傳輸,且是全雙工通訊,在雙方進行數據傳輸前,必須確認雙方均可以接收數據。例如:若是是二次握手就創建,當服務端給客戶端發送數據時,因爲沒有第三次的ACK握手,服務端就不肯定客戶端可否接收到數據一樣給客戶端發送數據,就會形成資源的浪費。