PHP面試常考之網絡協議

你好,是我琉憶,歡迎您來到PHP面試專欄。
本週(2019.2-25至3-1)的一三五更新的文章如下:

週一:PHP面試常考之會話控制
週三:PHP面試常考之網絡協議
週五:PHP面試常考題之會話控制和網絡協議

送2本書:《PHP程序員面試筆試真題解析》

自己整理了一篇面試最愛問的一道題“從網址輸入到看到內容背後的流程是什麼樣的?”的文章,關注公衆號:“琉憶編程庫”,回覆:“http”,我發給你。

以下正文的內容來自《PHP程序員面試筆試寶典》書籍,如果轉載請保留出處:

一、協議和TCP/IP

在20世紀80年代,計算機網絡誕生,它能夠將一臺臺獨立的計算機互相連接,使得位於不同地理位置的計算機之間可以進行通信,實現信息傳遞和資源共享,形成一組規模大、功能強的計算機系統。不過,計算機要想在網絡中正常通信,必須遵守相關網絡協議的規則,常用的網絡協議有TCP、UDP、IP和HTTP等。

協議

協議可簡單理解爲計算機之間的一種約定,好比人與人之間對話所使用的語言。在國內,不同地區的人講的方言都不同,如果要溝通,就要約定一種大家都會的語言,例如全國通用的普通話,普通話就相當於協議,溝通相當於通信,說話內容相當於數據信息。協議需要具備通用的特徵,但在早期,每家計算機廠商都根據自己的標準來生產網絡產品,這使得不同廠商製造的計算機之間難以通信,嚴重影響了用戶的日常使用。爲了應對這些問題,ISO(國際標準化組織)制定了一套國際標準OSI(開放式系統互聯通信參考模型),將通信系統標準化。所謂標準化是指建立技術標準,企業按照這個標準來製造產品,這大大提升了產品的兼容性、互操作性以及易用性。

OSI參考模型將複雜的協議分成了7層(見下表),每一層各司其職,並且能獨立使用,這相當於軟件中的模塊化開發,有較強的擴展性和靈活性。分層是一種管理哲學,將同一類功能的網絡協議分到一層中,使協議變得靈活可控。

在7層OSI模型中,發送方從第7層的應用層到第1層的物理層,由上至下按順序傳輸數據,而接收方則從第1層到第7層,由下至上接收數據,如右圖所示。

clipboard.png

TCP/IP

TCP/IP是爲互聯網服務的協議族,它是網絡通信協議的統稱,由IP、TCP、HTTP和FTP等協議組成。TCP/IP將通信過程抽象爲4層,被視爲簡化的OSI參考模型(如右圖所示,左邊是OSI參考模型,右邊是TCP/IP的模型),但負責維護這套協議族的不是ISO而是IETF(互聯網工程任務組)。TCP/IP在標準化過程中注重開放性和實用性,需要標準化的協議會被放進RFC(Request For Comment)文檔中,RFC文檔詳細記錄了協議的實現、運用和實驗等各方面的內容,並且這些文檔可在線瀏覽。

clipboard.png

發送的數據會在分層模型內傳遞,並且每到一層,就會附加該層的包首部,包首部包含了該層協議的相關信息,例如MAC地址、IP地址和端口號。下圖描繪了從傳輸層到互聯網層,分別附加了TCP包首部和IP包首部。

clipboard.png

互聯網一詞現在已經家喻戶曉,它是由許多網絡互聯構成的一個巨型網絡。早期的網絡僅僅是連接計算機,而現代的互聯網連接的卻是全世界的人。互聯網已經不再是單純的以數據爲核心,而是以人爲中心,滲透到生活中的方方面面,顛覆了許多傳統模式,例如足不出戶就能購物、社交或娛樂。  


自己整理了一篇面試最愛問的一道題“從網址輸入到看到內容背後的流程是什麼樣的?”的文章,關注公衆號:“琉憶編程庫”,回覆:“http”,我發給你。

二、HTTP

HTTP(HyperText Transfer Protocol)即超文本傳輸協議,是一種獲取網絡資源(例如圖像、HTML文檔)的應用層協議,它是互聯網數據通信的基礎,由請求和響應構成(如右圖所示)。通常,客戶端發起HTTP請求(在請求報文中會指定資源的URL),然後用傳輸層的TCP協議建立連接,最後服務器響應請求,做出應答,回傳數據報文。HTTP自問世到現在,經歷了幾次版本迭代,目前主流的版本是HTTP/1.1,新一代HTTP/2.0是HTTP/1.1的升級版,各方面都超越了前者,但新技術要做到軟硬件兼容還需要假以時日。

clipboard.png
HTTP協議有三個特徵,分別是持久連接、管道化以及無狀態。

(1)持久連接
在HTTP的早期版本中,一次HTTP通信完成後就會斷開連接,下一次再重新連接,如右圖所示。在當時請求資源並不多的情況下,並不會造成大問題。但隨着HTTP的普及,請求的資源越來越龐大,例如一個HTML文檔中可能會包含多個CSS文件、JavaScript文件、圖像甚至視頻,如果還這麼操作,會造成巨大的通信開銷。

爲了解決上述問題,提出了持久連接,只要通信兩端的任意一端沒有明確提出斷開,就保持連接狀態,以便下一次通信複用該連接,這避免了重複建立和斷開連接所造成的開銷,加速了頁面呈現,如下圖所示。

(2)管道化
管道化是建立在持久連接上的進一步性能優化。過去,請求必須按照先進先出的隊列順序,也就是發送請求後,要等待並接收到響應,才能再繼續下一個請求。啓用管道化後,就會將隊列順序遷移到服務器,這樣就能同時發送多個請求,然後服務器再按順序一個接一個地響應,如下圖所示。 

clipboard.png

(3)狀態管理
HTTP是一種無狀態協議,請求和響應一一對應,不會出現兩個請求複用一個響應的情況(如下圖所示)。也就是說,每個請求都是獨立的,即使在同一條連接中,請求之間也沒有聯繫。  

clipboard.png

在有些業務場景中,需要請求有狀態,例如後臺登錄。成功登錄後就得保存登錄狀態,否則每次跳轉進入其他頁面都會要求重新登錄。爲了能管理狀態,引入了Cookie技術,Cookie技術能讓請求和響應的報文都附加Cookie信息,客戶端將Cookie值發送出去,服務器接收並處理這個值,最終就能得到客戶端的狀態信息。


預告:本週五更新PHP面試常考題之會話控制和網絡協議,敬請期待。

以上內容摘自《PHP程序員面試筆試寶典》書籍,該書已在天貓京東噹噹等電商平臺銷售。
圖片描述

更多PHP相關的面試知識、考題可以關注公衆號獲取:琉憶編程庫
圖片描述

對本文有什麼問題或建議都可以進行留言,我將不斷完善追求極致,感謝你們的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章