一個網頁的漂洋過海之旅:傳輸
HTTP
瀏覽器和伺服器的相互通信使用的是HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)。毫不誇張的說,整個互聯網就是建立在HTTP協議基礎之上的。
網路上不同硬體,不同操作系統的設備之間想要進行通信,就必須遵守相同的規則,如怎樣發起通信、通信內容格式、如何結束通信等,這一系列事先約定的規則就是協議(protocol)。
HTTP是TCP/IP協議族的一個子集。TCP/IP協議族分為4層:應用層、傳輸層、網路層和數據鏈路層。
「計算機科學的任何問題都可以通過增加一個中間層來解決」
應用層
應用層為應用程序提供網路服務。例如:FTP為文件傳輸提供服務、DNS為域名解析提供服務、SMTP為郵件傳輸提供服務、HTTP為瀏覽器和伺服器通信提供服務。
傳輸層
傳輸層為應用層提供處於網路連接中的兩台計算機之間的數據傳輸。TCP(Transmission Control Protocol,傳輸控制協議)和 UDP(User Data Protocol,用戶數據報協議)位於傳輸層。
TCP是可靠的傳輸協議。可靠意味著使用TCP傳輸的數據會準確無誤的送達至目標。TCP通過三次握手來確保數據可靠送達:
- 請求端發送SYN(synchronize)包至接收端,並進入SYN_SEND狀態,等待響應端確認;
- 響應端收到後SYN包後回傳一個SYN/ACK(acknowledgement)包以示傳達確認信息,響應端進入SYN_RECV狀態;
- 請求端收到伺服器的SYN/ACK包,向接收端回傳ACK包,發送完畢後請求端和響應端進入ESTABLISHED狀態,完成三次握手。
- 若在握手過程中某個階段中斷,TCP會再次以相同的順序發送相同的數據包。
HTTP使用TCP。
UDP不提供數據包分組、組裝,也不能對數據包進行排序。所以相對TCP來說,UDP不確保傳輸的可靠。
我講了一個UDP的笑話,但是你可能沒聽到??
網路層
IP是網路層最重要的協議。在請求端和響應端中可能存在多種連接方式,網路層為數據包選擇合適的傳輸路徑,如果數據包較大那麼網路層會將其分為分為多個較小的數據包。
IP在進行中轉時MAC 地址是指網卡所屬的固n定地址。IP 地址可以和 MAC 地址進行配對。IP 地址可變換,但 MACn地址基本上不會更改。
IP間的通信依賴MAC地址(Media Access Control Address,網卡所屬的固定地址)。在進行數據包中轉時,會通過ARP協議(Address ResolutionnProtocol:根據通信方的IP地址就可以反查出對應的MAC地址)找到下一站的MAC地址,直至數據包成功送達。
IP和IP地址:
IP是把各種數據包傳送給對方的協議。IP地址是節點被分配到的地址。
鏈路層/物理層
鏈路層用來處理連接網路的硬體部分,如網卡驅動等。鏈路層之下是提供物理連接的物理層。
小結
HTTP可以簡單的理解為客戶端發出請求,伺服器端響應該請求並返回。用於HTTP協議交互的信息被稱為HTTP報文。如果你還不了解報文中有什麼,請點擊這裡。
那麼網頁的傳輸就是瀏覽器通過HTTP向伺服器發送一個獲取網頁的請求,伺服器收到請求後返回網頁這麼簡單嗎?
顯然不是。通過網路層協議我們可以得知,通常情況下瀏覽器的請求不會直達伺服器,它們之間可能需要許多「中間人」。下一篇文章,我們就來一起了解一下「中間人」。
參考資料:《圖解HTTP》
推薦閱讀:
※UC 內核對外合作 —— 新浪微博 PWA 版
※怎麼修改 HTML 中上傳選擇框(input file)的樣式,以達到同時解決 FireFox 下遮蓋其他元素問題,以及中英文等不同語言下右邊按鈕寬度不同導致影響布局問題?
※一天學會Chrome插件開發