TCP/IP協議學習(一)
一。網絡模型
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協議學習(一)