前言:整體過程
**一句話過程:開啟瀏覽器,輸入url,連線伺服器,渲染伺服器返回的結果。
*本地主機與伺服器間的通訊是兩個程序間相互傳送報文,而程序是通過socket套接字傳送和接收報文的,想要收發socket,首先主機與伺服器需要通過tcp三次握手建立tcp連線,連線建立之後,把請求報文放入套接字,然後經過傳輸層、網路層、資料鏈路層,層層封裝,最終經過乙太網路由**給目的伺服器; 伺服器收到請求後,返回響應報文,本地主機接收到響應報文之後,經由瀏覽器渲染展示。 那在這個過程中首先我們需要建立連線,也就是tcp三次握手,先開始第一次握手,也就是主機向伺服器傳送請求報文段,這就需要知道源ip,目的ip。 一開始,我們沒有源ip,現在開始申請ip *
一、為主機申請ip:dhcp動態主機配置協議
我需要乙個ip位址,告訴網路我是誰。這就需要dhcp動態主機配置協議。
1)主機生成乙個dhcp請求報文(應用層)
2)放入udp報文段(傳輸層),udp報文段主要包含
源埠68(dhcp客戶端的固定埠)
目的埠67(dhcp伺服器的固定埠)
3)網路層新增頭部封裝成ip資料報,主要包含
源ip:0.0.0.0
目的ip:255.255.255.255(廣播ip)
4)資料鏈路層新增頭部封裝成乙太網幀,主要包含
源mac:自己的mac
目的mac:ff:ff:ff:ff:ff:ff(廣播幀)
5)乙太網幀被傳送到交換機*(他是怎麼找到交換機的呢?你的網線連著呢呀)*,交換機修改**表記錄我的mac (自學習:每接收到乙個幀都記錄該幀的mac和到達的介面),然後在他的所有出口廣播這個幀
6)與交換機相連的預設閘道器路由器接收到了這個廣播幀,進行解析,提取出ip資料報,發現目的ip是廣播ip,就交給傳輸層,傳輸層又提取出 dhcp 請求交給應用層, dhcp 伺服器就收到了該 dhcp 請求。
(路由器?伺服器?這裡路由器怎麼就成伺服器了呢?其實路由器的路由功能只是它眾多功能的一種,他還可以支援別的協議,比如這裡的dhcp協議)
7)dhcp 伺服器為此生成乙個 dhcp ack 報文,主要包含:
分配給dhcp請求的ip
dns伺服器的ip
預設閘道器路由器的ip
子網掩碼
這個報文再被傳輸層、網路層、資料鏈路層一路封裝成幀,該幀的目的 mac 是我的mac,源mac是接收 dhcp 請求幀的路由器埠的 mac
8)dhcp ack乙太網幀由預設閘道器路由器傳送給交換機,交換機根據**表**回給我的主機
9)主機收到該幀之後再從鏈路層到應用層,層層提取,最後得到自己的ip、dns伺服器ip、預設閘道器路由器ip,進行配置,我就有了ip。
現在我有了源 ip,要開始找目的 ip,現在我已知什麼呢?已知目的網域名稱,根據網域名稱找 ip,找 dns 網域名稱系統伺服器去查就好。在前面 dhcp 過程中我們已經得到了 dns 伺服器的 ip 位址,現在只要去訪問該ip就好,但是在這之前我們需要先走出我們所處的區域網,這就需要區域網預設閘道器路由器的mac位址,這是為什麼呢?又要怎麼找呢?繼續往下看。
先解釋一下預設閘道器路由器,每乙個主機都在乙個區域網裡,要訪問區域網以外的主機就需要先離開這個區域網,那我們要怎麼離開呢?我們把這個區域網比作乙個院子,閘道器路由器就是這個院子的門,我們要離開這個院子的話就要從門出去,那乙個院子可以有很多個門,我們從哪個門出去呢?我們自己也不知道啊,但一般都有乙個預設的,不知道該從哪出去的時候,就走預設的。
為什麼需要區域網的mac位址呢? 因為區域網內是通過 mac 進行識別的,為什麼要用 mac 位址識別呢?是這樣的,以前沒這麼多主機的時候,ip 是固定的,我們就不需要 mac,但現在主機越來越多,這就導致區域網裡 ip 不是十分充足,管理起來也不是很好管理,所以 ip 每隔一段時間就會被**,需要的時候才會被分配,這也就是為什麼前面提到的 dhcp 動態主機配置協議會存在,所以這個 ip 是會變的,對於主機來說,唯一不變的是 mac,所以,在區域網內部我們是用 mac 定位的。
那又要怎麼找mac位址呢?通過ip找mac,這就用到了arp位址轉換協議。
10)主機生成乙個 arp 查詢報文,目的 ip 是預設閘道器路由器,這個報文最終被封裝成乙太網幀,幀的目的mac是 ff:ff:ff:ff:ff:ff(廣播位址),然後把幀發給交換機,交換機看到是廣播位址就給廣播出去
11)預設閘道器路由器接收到了這個幀,經過層層提取得到 arp 報文,發現其中的目的 ip 跟他自己某個介面的 ip 匹配,就傳送回去乙個 arp 應答報文給主機,這裡包含他自己的 mac
三、查詢目的網域名稱的ip:dns網域名稱系統
現在我們拿到了預設閘道器路由器的mac,可以離開區域網去dns伺服器查目的網域名稱的ip了
12)主機生成dns查詢報文,包含
目的網域名稱
dns伺服器目的埠:53
層層封裝成乙太網幀,幀的目的 mac 是預設閘道器路由器的 mac
13)預設閘道器路由器接收到該幀之後,提取出ip資料報,並根據路由表進行**,因為路由器具有內部閘道器協議*(rip路由資訊協議、ospf開放最短路徑優先協議)和外部閘道器協議(bgp邊界閘道器協議)*,因此路由表中已經配置了可以從路由器到達 dns 伺服器的路由表項
14)dns 伺服器接收到幀後,層層提取出 dns 查詢報文,並在 dns 資料庫中查詢待解析網域名稱對應的 ip,找到之後傳送 dns 應答報文,封裝成 udp 報文段,再放入 ip 資料報,最後通過路由器轉回給源主機的預設閘道器路由器,再經由交換機**給源主機。
四、tcp三次握手
這樣我就拿到了目的網域名稱的ip,就可以進行tcp的三次握手了。
15)(第一次握手)主機向目的伺服器傳送連線請求報文段,syn=1,ack=0,選擇乙個初始的序號 x。
16)(第二次握手)目的伺服器收到連線請求報文段後,如果同意建立連線,則向主機傳送連線確認報文段,syn=1,ack=1,確認號為 x+1,同時也選擇乙個初始的序號 y。
17)(第三次握手)主機收到目的伺服器的連線確認報文段後,還要向目的伺服器發出確認,確認號為 y+1,序號為 x+1。
18)目的伺服器收到主機的確認後,連線就建立了。
為什麼要進行第三次握手呢?
第三次握手是為了防止失效的連線請求到達伺服器,讓伺服器錯誤開啟連線。
客戶端傳送的連線請求如果在網路中滯留,那麼就會隔很長一段時間才能收到伺服器端發回的連線確認。客戶端等待乙個超時重傳時間之後,就會重新請求連線。但是這個滯留的連線請求最後還是會到達伺服器,如果不進行三次握手,那麼伺服器就會開啟兩個連線。如果有第三次握手,客戶端會忽略伺服器之後傳送的對滯留連線請求的連線確認,不進行第三次握手,因此就不會再次開啟連線。
19)連線建立完成了,現在我們就可以繼續前言中連線建立之後的過程進行訪問了
web頁面的請求過程
關鍵路徑 開啟瀏覽器,輸入url,連線伺服器,渲染伺服器返回的結果。那在這個過程中首先我們需要建立連線,也就是tcp三次握手,先開始第一次握手,也就是主機向伺服器傳送請求報文段,這就需要知道源ip,目的ip。1 dhcp discover 客戶端以廣播形式傳送dhcp discover報文,該區域網...
頁面的請求過程
1 瀏覽器的url請求 2 遞迴尋找dns伺服器 3 連線目標ip並建立tcp連線 4 向目標伺服器傳送http請求 5 web伺服器接收請求後處理 6 web伺服器返回相應的結果 無效 重定向 正確頁面等 7 瀏覽器接收返回的http內容 前端解析分割線 8 開始解析html檔案,當然是自上而下,...
Web 頁面請求過程
客戶端作業系統生成乙個 dhcp 請求報文,將報文放入目的地埠67和源埠68的 udp 報文段。該 udp 報文段被放置在乙個具有廣播 ip 目的地位址 255.255.255.255 和源 ip 位址 0.0.0.0 的 ip 資料報中,因為此時客戶端還沒有 ip 位址。包含 dhcp 請求報文的...