廢話不說,直接上乾貨。
1.協議的概念和作用
為了能讓計算機之間能夠通訊,計算機需要定義通訊規則,這些規則就是協議。規則有多種,協議也有多種。協議就是資料封裝格式+傳輸。
2.OSI七層模型
應用層:提供網路服務和終端使用者軟體之間的介面服務。
表示層:資料的表示、安全、壓縮。
會話層:建立、管理、中止會話。
傳輸層:定義傳輸資料的協議埠號,以及流控和差錯校驗。
網路層:進行邏輯地址定址,實現不同網路之間的路徑選擇。
資料鏈路層:建立邏輯連線、進行硬體地址定址、差錯檢驗等功能。
物理層:網線、同軸電纜等。
3.TCP/IP參考模型
常用的協議:
TCP/IP協議被稱為傳輸控制協議/網際網路協議,又稱網路通訊協議,是由網路層的IP協議和傳輸層的TCP協議組成的,是一個很大的協議集合。
物理層和資料鏈路層沒有定義任何特定協議,支援所有的標準和專用的協議。
網路層定義了網路互連,也就是IP協議:
(1) 網際協議(IP):負責主機和網路之間定址和路由資料包。
(2) 地址解析協議(ARP):獲得同一物理網路中的硬體主機MAC地址。
(3) 網際控制訊息協議(ICMP):傳送訊息,並報告有關資料包的傳送錯誤。
(4) 網際網路管理協議(IGMP):IP主機向本地多路廣播路由器報告主機組成員。
傳輸層定義了TCP(傳輸控制協議)和UDP(使用者資料包協議)。
應用層定義了HTTP(超文字傳輸協議)、FTP(檔案傳輸協議)、DNS(域名系統)等協議。
下面詳細說明一下,以上層的用途:
(1) 物理層和資料鏈路層,這兩個層共同組成了網路介面層,它是TCP/IP的最底層,此層沒有特定的協議,它負責接收上一層交來的資料包,並將資料包通過底層的物理網路傳送出去。
(2) 網路層,位於傳輸層和資料鏈路層之間,用於把資料從源主機經過若干節點傳送到目標主機,並向傳輸層提供最基本的資料傳輸服務,它要提供路由和選址的工作。網路層只管傳遞資料,成功與否並不關心。
在能夠選擇的多條道路之間,選擇一條最短的路徑就是路由的工作。在網路中,每臺計算機都有一個唯一的地址,方便別人找到它,這個地址就是IP地址。
(3) 傳輸層,位於網路層和應用層之間,是面向連線的、可靠的程式到程式的通訊協議,TCP提供全雙工服務,即資料可在同一時間雙向傳播,TCP將若干個位元組構成一個分組,此分組稱為報文段。
TCP(傳輸控制協議),它是可靠的、面向連線的協議,但是傳輸效率低。
UDP(使用者資料包協議),它是不可靠的、無連線的服務,但是傳輸效率高。
TCP的功能是將資料進行分段打包傳輸,對每個資料包編號控制順序,運輸中丟失、重發和丟棄處理,流量控制避免擁塞。
TCP(傳輸控制協議),它是可靠的、面向連線的協議,但是傳輸效率低。
UDP(使用者資料包協議),它是不可靠的、無連線的服務,但是傳輸效率高。
TCP的功能是將資料進行分段打包傳輸,對每個資料包編號控制順序,運輸中丟失、重發和丟棄處理,流量控制避免擁塞。
TCP資料包封裝,示意圖:
源埠號和目標埠號,計算機通過埠號識別訪問哪個服務,比如http服務或ftp服務,傳送方埠號是進行隨機埠,目標埠決定了接收方哪個程式來接收。
32位序列號,TCP用序列號對資料包進行標記,以便在到達目的地之後重新組裝,假設當前的序列號為s,傳送資料長度是l,那麼下次傳送資料時的序列號是s+l。在建立連線時,通常由計算機生成一個隨機數作為序列號的初始值。
確認應答,它等於下一次應該接收到的資料的序列號。假設傳送端的序列號是s,傳送資料的長度是l,那麼接收端返回的確認應答號也是s+l。傳送端接收到這個確認應答後,可以認為這個位置以前所有的資料都已被正常接收。
首部長度,TCP首部長度,單位是4個位元組。
控制位,對TCP的連線、傳輸和斷開進行指揮:
PSH 快取區將滿,立刻傳輸速度
RST 連線斷了,重新連線
URG 緊急訊號
ACK 為1表示確認號
SYN TCP建立連線時,要將這個值設為1
FIN 傳送端完成位,提出斷開連線的一方把FIN置為1,表示要斷開連線
PSH 快取區將滿,立刻傳輸速度
RST 連線斷了,重新連線
URG 緊急訊號
ACK 為1表示確認號
SYN TCP建立連線時,要將這個值設為1
FIN 傳送端完成位,提出斷開連線的一方把FIN置為1,表示要斷開連線
緊急指標,僅在URG控制位為1時有效。表示緊急資料的末尾在TCP資料部分中的位置。通常在暫時中斷通訊時使用(例如:ctrl + c)
視窗值,說明本地可接收資料段的數目,這個值是可變的。當網路通常時,將這個視窗值變大加快傳輸速度;當網路不穩定時,減少這個值可以保證網路資料的可靠傳輸。它是在TCP傳輸中進行流量控制的。
視窗大小,用於表示從應答開始能夠接收多少個8位位元組。如果視窗大小為0,可以傳送視窗探測。
校驗和,TCP校驗和的計算包括TCP首部、資料和其它填充位元組。在傳送TCP資料段時,由傳送端計算校驗和,當到達目的地時,又計算一次檢驗和。如果兩次的校驗和一致,說明資料是正確的,否則將認為資料被破壞,接收端將丟棄該資料。
3.地球人都知道的TCP三次握手
TCP是面向連線的協議,它在源點和終點之間建立虛擬連線,而不是物理連線。在資料通訊之前,傳送端與接收端要先建立連線,等資料傳送結束後,雙方再斷開連線。TCP連線的每一方都是由一個IP地址和一個埠組成。
為了方便,我們將主動發起請求的172.16.50.72:65076主機稱為客戶端,將返回資料的主機172.16.17.94:8080稱為服務端。
第一次握手:建立連線。客戶端傳送連線請求,傳送SYN報文,將seq設定為0,然後,客戶端進入SYN_SEND狀態,等待伺服器的確認。
第二次握手:伺服器接收到客戶端的SYN報文段。需要對這個SYN報文段進行確認,傳送ACK報文,將ack設定為1。同時,自己還要傳送SYN請求資訊,將seq設定為0。伺服器端將上述所有資訊一併傳送給客戶端,此時伺服器進入SYN_RECV狀態。
第三次握手:客戶端收到伺服器的ACK和SYN報文後,進行確認,然後,將ack=1,seq設定為1,向伺服器傳送ACK報文段,這個報文段傳送完畢之後,客戶端和伺服器都進入了ESTABLISHED狀態,完成了TCP的三次握手。
4.地球人都不知道的TCP四次揮手
第一次揮手:客戶端向伺服器傳送一個FIN報文段,將seq設定為160,ack設定為112;此時,客戶端進入FIN_WAIT_1狀態,這表示客戶端沒有資料要傳送伺服器了,請求關閉連線。
第二次揮手:伺服器收到了客戶端傳送的FIN報文後,會向客戶端返回一個ACK報文段,ack設定為1,seq設定為112;伺服器進入了CLOSE_WAIT狀態,客戶端收到伺服器返回的ACK報文後,進入FIN_WAIT_2狀態。
第三次揮手:伺服器會觀察自己是否還有資料要傳送給客戶端,如果有,先把資料傳送給客戶端,再傳送FIN報文;如果沒有,那麼伺服器直接傳送FIN報文給客戶端。請求關閉連線,同時伺服器進入LAST_ACK狀態。
第四次揮手:客戶端收到伺服器傳送的FIN報文段,向伺服器傳送ACK報文段,將seq設定為161,ack設定為113,然後客戶端進入TIME_WAIT狀態;伺服器收到客戶端的ACK報文段以後,就關閉連線,此時,客戶端等待2MSL後,依然沒有收到回覆,則證明伺服器已正常關閉,客戶端也可以關閉連線了。
(1)為什麼需要三次握手?
為了確保雙發收發都是正常的。
(2)為什麼需要四次揮手?
雙方資料傳送完畢,都認為可以斷開。
(3)為什麼需要等待?
A向B發的FIN可能丟失。
(4)為什麼握手是3次,而揮手是4次吶?
當伺服器端收到FIN報文時,很可能並不會立即關閉SOCKET。
5.從輸入網址到網頁顯示內容,整個過程經歷了什麼?
(1) 在客戶端瀏覽器輸入網址URL;
(2) 傳送到DNS(域名伺服器)獲得域名對應的web伺服器的IP地址;
(3) 客戶端瀏覽器與web伺服器建立TCP(傳輸控制協議)連線;
(4) 客戶端瀏覽器向對應的IP地址的web伺服器傳送相應的HTTP或HTTPS請求;
(5) web伺服器響應請求,返回指定的URL資料或錯誤資訊,如果設定重定向,則重定向到新的URL地址;
(6) 客戶端瀏覽器下載資料,解析HTML原始檔,解析過程中實現對頁面的排版,解析完成後,在瀏覽器中顯示基礎的頁面。