Linux中的網(wǎng)絡(luò)協(xié)議

OSI七層模型和TCP/IP五層模型

OSI七層模型

OSI(Open System Interconnection Reference Model),開放系統(tǒng)互聯(lián)參考模型。
OSI是一個7層功能協(xié)議的結(jié)構(gòu),功能結(jié)構(gòu)如下圖所示。


image.png

從OSI模型來看,計算機發(fā)送數(shù)據(jù)時,數(shù)據(jù)會從高層向底層逐層傳遞,在傳遞過程中進行相應的封裝,并最終通過物理層裝換為光/電信號發(fā)送出去。計算機接受數(shù)據(jù)的時候,數(shù)據(jù)會從底層向高層逐層傳遞,并進行相應的解封裝。

TCP/IP協(xié)議簇

TCP/IP模型是一個五層結(jié)構(gòu),具體結(jié)構(gòu)如下圖所示。


image.png

在OSI模型中我們習慣把每一層的數(shù)據(jù)單元都稱為協(xié)議數(shù)據(jù)單元,例如第6層的數(shù)據(jù)單元叫做L6 pdu,第3層的數(shù)據(jù)單元稱為L3 pdu,其中L表示層。
在TCP IP模型中,物理層的數(shù)據(jù)單元稱為比特,把數(shù)據(jù)鏈路層的數(shù)據(jù)單元稱為幀,把網(wǎng)絡(luò)層的數(shù)據(jù)單元稱為分組或包,對于傳輸層,我們習慣了把通過TCP封裝而得到的數(shù)據(jù)單元稱之為段。把通過udp封裝而得到的數(shù)據(jù)單元稱之為報文,對于應用層把HTTP封裝而得到的數(shù)據(jù)單元稱之為HTTP報文,把通過FTP封裝而得到的數(shù)據(jù)單元稱之為FTP報文。
OSI模型和TCP/IP 模型的區(qū)別是在于兩者之間使用的協(xié)議不同。
在TCP/IP模型中最重要的兩個協(xié)議就是tcp協(xié)議和ip協(xié)議

TCP三次握手四次揮手

TCP三次握手

TCP是一種可靠的傳輸協(xié)議,為什么說是可靠的呢?在使用TCP協(xié)議傳輸數(shù)據(jù)之前,需要現(xiàn)在兩個通信端之間建立一條TCP連接,當TCP連接建立的時候就可以開始傳輸數(shù)據(jù)了。在數(shù)據(jù)傳輸完成之后,就會斷開連接。

TCP連接建議需要經(jīng)過三次握手。過程如下圖


image.png

先來看看TCP報文的結(jié)構(gòu),其中SYN,ACK都是位于標志位的,包括其他的一些標志,seq是存在報文的序號字段中,ack是存在于報文的確認號字段里面,


image.png
  • 源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口
    某個時刻只能被一個進程占用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通
    信。源端口、目標端口是用16位表示的,可推算計算機的端口個數(shù)為2^16個,即65536
  • 序列號:表示本報文段所發(fā)送數(shù)據(jù)的第一個字節(jié)的編號。在TCP連接中所傳送的字節(jié)流的每一個字
    節(jié)都會按順序編號。由于序列號由32位表示,所以每2^32個字節(jié),就會出現(xiàn)序列號回繞,再次從
    0 開始
  • 確認號:表示接收方期望收到發(fā)送方下一個報文段的第一個字節(jié)數(shù)據(jù)的編號。也就是告訴發(fā)送方:
    我希望你(指發(fā)送方)下次發(fā)送的數(shù)據(jù)的第一個字節(jié)數(shù)據(jù)的編號為此確認號
  • 數(shù)據(jù)偏移:表示TCP報文段的首部長度,共4位,由于TCP首部包含一個長度可變的選項部分,需
    要指定這個TCP報文段到底有多長。它指出 TCP 報文段的數(shù)據(jù)起始處距離 TCP 報文段的起始處有
    多遠。該字段的單位是32位(即4個字節(jié)為計算單位),4位二進制最大表示15,所以數(shù)據(jù)偏移也就
    是TCP首部最大60字節(jié)
  • URG:表示本報文段中發(fā)送的數(shù)據(jù)是否包含緊急數(shù)據(jù)。后面的緊急指針字段(urgent pointer)只
    有當URG=1時才有效
  • ACK:表示是否前面確認號字段是否有效。只有當ACK=1時,前面的確認號字段才有效。TCP規(guī)
    定,連接建立后,ACK必須為1,帶ACK標志的TCP報文段稱為確認報文段
  • PSH:提示接收端應用程序應該立即從TCP接收緩沖區(qū)中讀走數(shù)據(jù),為接收后續(xù)數(shù)據(jù)騰出空間。如
    果為1,則表示對方應當立即把數(shù)據(jù)提交給上層應用,而不是緩存起來,如果應用程序不將接收到
    的數(shù)據(jù)讀走,就會一直停留在TCP接收緩沖區(qū)中
  • RST:如果收到一個RST=1的報文,說明與主機的連接出現(xiàn)了嚴重錯誤(如主機崩潰),必須釋放
    連接,然后再重新建立連接?;蛘哒f明上次發(fā)送給主機的數(shù)據(jù)有問題,主機拒絕響應,帶RST標志
    的TCP報文段稱為復位報文段
  • SYN:在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報
    文段;當SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同
    意建立連接的報文。只有在前兩次握手中SYN才置為1,帶SYN標志的TCP報文段稱為同步報文段
  • FIN:表示通知對方本端要關(guān)閉連接了,標記數(shù)據(jù)是否發(fā)送完畢。如果FIN=1,即告訴對方:“我的
    數(shù)據(jù)已經(jīng)發(fā)送完畢,你可以釋放連接了”,帶FIN標志的TCP報文段稱為結(jié)束報文段
    窗口大小:表示現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量,也就是告訴對方,從本報文段的確認號開始允許對方
    發(fā)送的數(shù)據(jù)量,達到此值,需要ACK確認后才能再繼續(xù)傳送后面數(shù)據(jù),由Window size value *
  • Window size scaling factor(此值在三次握手階段TCP選項Window scale協(xié)商得到)得出此值
  • 校驗和:提供額外的可靠性
  • 緊急指針:標記緊急數(shù)據(jù)在數(shù)據(jù)字段中的位置
  • 選項部分:其最大長度可根據(jù)TCP首部長度進行推算。TCP首部長度用4位表示,選項部分最長
    為:(2^4-1)*4-20=40字節(jié)

下面來說說具體過程。

第1步:客戶端向服務器發(fā)送建立連接請求,并發(fā)送帶有SYN標志的數(shù)據(jù)報文,其中客戶端序列號隨機生成的seq為x。
第2步:服務器收到客戶端的請求之后會回應一個SYN+ACK的數(shù)據(jù)報文,其中seq=y,ack=x+1,其中服務器端序列號隨機生成的seq是y,并且回復一個ack=x+1的確認號,以表示自己收到了客戶端的請求消息,并且希望下一次發(fā)送的seq為x+1。
第3步:客戶端收到來自服務器的回應消息后,再發(fā)送一個標志位為ACK的確認報文,其中序列號為x+1,確認號為y+1。滿足上一步服務器要求發(fā)送的seq序列號,確認號ack則是希望下次收到來自服務器的消息的序列號是y+1.
通過上面的三個步驟,TCP連接便建立起來,這個方式也是被稱為TCP的三次握手。

TCP四次揮手

image.png

TCP四次揮手
第一步 客戶端發(fā)送FIN ACK控制段,表示傳輸已經(jīng)完成,確認可以斷開連接,其中序列號為seq=a
第二步 服務器端收到來自客戶端的請求消息后,回應一個ACK確認字段 序號為seq=b,確認序列號為ack=a+1。
第三步 在回應來自客戶端確認斷開連接消息的同時也會向客戶端發(fā)送一條自身也需要斷開連接的確認消息FIN ACK控制段,其中序號為seq=c 確認序號為ack=a+1
第四步 客戶端回應來自服務器端的斷開連接請求,控制段為ACK,確認斷開連接 其中seq=a+1 確認序號為ack=c+1。
至此,TCP四次揮手完畢,TCP連接斷開.

TCP和UDP的區(qū)別

TCP 是面向連接的,建立通信需要經(jīng)過三次握手,UDP 是面向無連接的,不許需要經(jīng)過三次握手。
UDP程序結(jié)構(gòu)較簡單;如下圖


image.png

TCP 是面向字節(jié)流的,UDP 是基于數(shù)據(jù)報的
TCP 保證數(shù)據(jù)正確性,UDP 可能丟包
TCP 保證數(shù)據(jù)順序,UDP 不保證

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容