TCP/IP協議棧:緩存
TCP/IP的分層:服務器
圖中看的很清楚,在TCP/IP協議棧中,最重要的協議就是傳輸層的TCP協議與UDP協議,而網絡層最重要的是IP協議,下面就作一下簡單的介紹。網絡
TCP協議:
ide
TCP協議是一種工做在傳輸層,全雙工(雙向傳輸),半關閉,擁有錯誤檢查,確認機制,和數據恢復重傳的功能強大的協議。
指針
在TCP的包頭中咱們能夠看到,首部信息除了源端口和目的端口外,還有序號確認號等視頻
序列號:表示本報文段所發送數據的第一個字節的編號。在TCP鏈接中所傳送的字節流的每個字節都會按順序編號。因爲序列號由32位表示,因此每2^32個字節,就會出現序列號迴繞,再次從 0 開始blog
確認號:表示接收方指望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送發:我但願你(指發送方)下次發送的數據的第一個字節數據的編號是這個確認號路由
URG:表示本報文段中發送的數據是否包含緊急數據。後面的緊急指針字段(urgent pointer)只有當URG=1時纔有效同步
ACK:表示是否前面的確認號字段是否有效。ACK=1,表示有效。只有當ACK=1時,前面的確認號字段纔有效。TCP規定,鏈接創建後,ACK必須爲1,帶ACK標誌的TCP報文段稱爲確認報文段it
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字節,分別記錄源地址和目的地址