做運維需要了解的網絡知識,TCP/IP協議棧
TCP/IP的分層:
圖中看的很清楚,在TCP/IP協議棧中,最重要的協議就是傳輸層的TCP協議與UDP協議,而網絡層最重要的是IP協議,下面就做一下簡單的介紹。
TCP協議:
TCP協議是一種工作在傳輸層,全雙工(雙向傳輸),半關閉,擁有錯誤檢查,確認機制,和數據恢復重傳的功能強大的協議。
在TCP的包頭中我們可以看到,首部信息除了源端口和目的端口外,還有序號確認號等
序列號:表示本報文段所發送數據的第一個字節的編號。在TCP連接中所傳送的字節流的每一個字節都會按順序編號。由於序列號由32位表示,所以每2^32個字節,就會出現序列號回繞,再次從 0 開始
確認號:表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送發:我希望你(指發送方)下次發送的數據的第一個字節數據的編號是這個確認號
URG:表示本報文段中發送的數據是否包含緊急數據。後面的緊急指針字段(urgent pointer)只有當URG=1時才有效
ACK:表示是否前面的確認號字段是否有效。ACK=1,表示有效。只有當ACK=1時,前面的確認號字段才有效。TCP規定,連接建立後,ACK必須為1,帶ACK標誌的TCP報文段稱為確認報文段
PSH:提示接收端應用程序應該立即從TCP接收緩沖區中讀走數據,為接收後續數據騰出空間。如果為1,則表示對方應當立即把數據提交給上層應用,而不是緩存起來,如果應用程序不將接收到的數據讀走,就會一直停留在TCP接收緩沖區中
RST:如果收到一個RST=1的報文,說明與主機的連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,然後再重新建立連接。或者說明上次發送給主機的數據有問題,主機拒絕響應,帶RST標誌的TCP報文段稱為復位報文段
SYN:在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1,帶SYN標誌的TCP報文段稱為同步報文段
FIN:表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1,即告訴對方:“我的數據已經發送完畢,你可以釋放連接了”,帶FIN標誌的TCP報文段稱為結束報文段
“三次握手”:當建立連接時,需要有三次握手,在建立連接的過程中會涉及到5種狀態變化。
當客戶端想與在監聽狀態(LISTEN)的服務器建立連接時,需要在首部信息中將SYN由0變為1,同時還將發送自己的數據包序號(seq),設為x,此時,客戶端的狀態就由關閉(CLOSED)變為同步發送狀態(SYN-SENT)
當監聽狀態的服務器收到客戶端的建議連接請求後,也將發送一個數據包同意連接,在這個數據包中,將SYN與ACK同時設為1,同時還將發送自己數據包的序號,設為y,以及收到數據包後的確認號(ack)x+1,證明自己已經接收到對方序號為x的數據包,此時,服務器的狀態將由監聽狀態變為同步接收狀態(SYN-RCVD)
當客戶端接收到來自服務器發送的同意簡介請求後,再向服務器發送一個數據包ACK=1,以及自己的包序號x+1,和確認號y+1,此時狀態就變為建立連接狀態(ESTAB-LISHED),在服務器收到此數據包後,也將變為建立連接狀態
“四次揮手”:當已建立連接的兩臺主機的一方想斷開連接的時,就會發生四次揮手,發起結束的可以是客戶端也可以是服務器,下面以客戶端發起結束為例簡單介紹
當客戶端發起主動關閉請求時,會發送一個數據包,設序號為u,以及發送FIN數據為1,此時客戶端狀態從建立連接狀態變為終止等待1狀態(FIN-WAIT-1)
服務器收到客戶端發來的終止信號後,會向客戶端發送一個數據包,設序號為v,以及確認號u+1,發送ACK數據為1,此時服務器的狀態從建立連接狀態變為關閉等待狀態(CLOSE-WAIT)
客戶端收到服務器的數據包後,進入終止等待2狀態(CLOSE-WAIT),此時服務器還會繼續進行最後的數據傳輸,並不會立即做出響應
當最後數據傳輸完成時,服務器會向客戶端發送一個數據包,設序號為w,確認號依舊為u+1,FIN為1,此時服務器的狀態就從關閉等待狀態變為最後確認狀態(LAST-ACK)
當客戶端收到請求後,就會發送一個最後確認數據包,包序號u+1,確認號w+1,以及ACK為1,傳輸完成後,將進入時間等待狀態(TIME-WAIT),等待兩個MSL時間(數據在網絡中傳輸的最大時間)後,關閉連接,而服務器在收到後,將關閉連接漸入關閉狀態或監聽狀態
UDP協議
UDP包頭
從UDP包頭可以看出其很簡單,並沒有TCP的詳細,但是傳輸效果好,適用於語音及視頻通話
IP協議
Internet 協議特征
運行於 OSI 網絡層
面向無連接的協議
獨立處理數據包
分層編址
盡力而為傳輸
無數據恢復功能
IP PDU 報頭
版本:占4位,指 IP 協議的版本目前的IP協議版本號為4
首部長度:占4位,可表示的最大數值是15個單位,一個單位為4字節,因此IP 的首部長度的最大值是60字節
區分服務:占8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.後改名為區分服務.只有在使用區分服務(DiffServ)時,這個字段才起作用.一般的情況下都不使用
總長度:占16位,指首部和數據之和的長度,單位為字節,因此數據報的最大長度為 65535 字節.總長度必須不超過最大傳送單元 MTU
標識:占16位,它是一個計數器,通常,每發送一個報文,該值會加1, 也用於數據包分片,在同一個包的若幹分片中,該值是相同的
標誌(flag):占3位,目前只有後兩位有意義
DF: Don‘t Fragment,中間的一位,只有當 DF=0 時才允許分片
MF: More Fragment,最高位,MF=1表示後面還有分片。MF=0 表示最後一個分片
片偏移:占12位,指較長的分組在分片後,該分片在原分組中的相對位置.片偏移以8個字節為偏移單位
生存時間:占8位,記為TTL (Time To Live) 數據報在網絡中可通過的路由器數的最大值,TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為 64.發送 ICMP 回顯應答時經常把 TTL 設為最大值 255
協議:占8位,指出此數據報攜帶的數據使用何種協議以便目的主機的IP層將數據部分上交給哪個處理過程, 1表示為 ICMP 協議, 2表示為 IGMP 協議, 6表示為 TCP 協議, 17表示為 UDP 協議
首部檢驗和:占16位,只檢驗數據報的首部不檢驗數據部分.這裏不采用 CRC 檢驗碼而采用簡單的計算方法
源地址和目的地址:都各占4字節,分別記錄源地址和目的地址
做運維需要了解的網絡知識,TCP/IP協議棧