最近面試嵌入式軟件工程師,hr都會問到網絡編程這一塊,特別是對TCP/IP協議 、TCP三次握手、四次揮手、UDP和TCP的區別,HTTP的傳輸過程,HTTP中get和post的區別,HTTPS的加密方式,Linux下TCP的建立、接受等等,因爲網絡知識這一塊博主很薄弱,因此吃了大虧,這幾日決定好好惡補一下網絡知識,看看網絡編程的書,作下筆記。php
《網絡是怎樣鏈接的》讀書筆記一html
問:咱們平時是如何上網的呢?web
首先,咱們在瀏覽器上輸入網址,瀏覽器會根據網址的含義生成請求消息,在請求消息生成之後,瀏覽器會委託操做系統向web服務器發送請求面試
1.1網址編程
經常使用的有幾種URL(網址),http:訪問web服務器 、ftp:訪問ftp服務器瀏覽器
web瀏覽器解析完URL後,就知道訪問的目標在哪裏了,接下來,web瀏覽器會使用HTTP協議來訪問web服務器服務器
1.2HTTP協議網絡
HTTP協議定義了客戶端和服務器之間交互的消息內容和步驟併發
HTTP過程:客戶端向服務器發送請求消息,該消息包括URI和方法,URI表示存放網頁數據的文件名,方法表示讓web服務器完成怎樣的工做。web服務器收到請求消息後,經過URI和方法完成本身的工做,而後將結果存放在響應消息中併發送回客戶端,相應消息的開頭有一個狀態碼,表示操做的執行結果是成功仍是失敗。客戶端收到後,瀏覽器會從消息中讀出所需的數據並顯示在屏幕上socket
1.2.1 HTTP經常使用的兩種方法
表1-1列出的方法中,最經常使用的一個就是GET方法了。通常當咱們訪問web服務器獲取網頁數據時,使用的就是GET方法。所謂通常的訪問過程大概就是這樣的:首先,在請求消息中寫上GET方法,而後在URI中寫上存放網頁數據的文件名「dir/file.html」,這就表示咱們須要獲取dir/file.html文件中的數據。當web服務器收到消息後,會打開dir/file.html文件並讀取出裏面的數據,而後將讀出的數據存放到響應消息中,並返回給客戶端。最後,客戶端瀏覽器會收到這些數據並顯示在屏幕上。
還有一個常用的方法就是POST 。咱們在表單中填寫數據並將其發送給web服務器時就會使用這個方法。當咱們在網上商城填寫收貨地址和姓名,或者是在網上填寫問卷時,都會遇到帶有輸入框的網頁,而這些能夠輸入信息的部分就是表單。使用POST方法時,URI會指向web服務器中運行的一個應用程序2'的文件名,典型的例子包括"index.cgi"Indexphp等。而後,在請求消息中,除了方法和U心以外,還要加上傳遞給應用程序和腳本的數據。這裏的數據也就是用戶在輸人框裏填寫的信息。當服務器收到消息後,web服務器會將請求消息中的數據發送給URI指定的應用程序。最後,web服務器從應用程序接收輸出的結果,會將它存放到響應消息中並返回給客戶端。
1.3 生成HTTP請求消息
回到瀏覽器中來,對URL解析後,肯定了web服務器和文件名,接下來根據這些生成請求消息
1.4 發送請求後會收到響應
響應消息的格式和請求消息基本是相同的,差異只在於第一行上,在響應消息中,第一行的內容爲狀態碼和響應短語,用來表示請求執行的結果是成功仍是出錯,狀態碼和響應短語表示的內容相同,但他們的用途不一樣,狀態碼是一個數字,它主要用來向程序告知執行的結果,相對地,響應短語則是一段文字,用來向人們告知執行的結果。
返回響應消息後,瀏覽器會將數據提取出來顯示在屏幕上,若是網頁的內容有圖片的話,也將圖片的文件名寫進URI生成請求消息,因爲每條請求消息只能寫一個URI,因此每次只能獲取一個文件,若是有3張圖片,那麼獲取網頁加上獲取圖片,一共要向web服務器發送4個請求消息,總結起來就是:1 條請求消息中只能寫1個URI。若是須要獲取多個文件,必須對每一個文件單獨發送1條請求。
1.5 向DNS服務器查詢web服務器的IP地址
儘管瀏覽器可以解析URL生成請求消息,但它自己不具有將消息發送到網絡中的功能,因此,須要委託操做系統來實現。在委託以前,還須要先查詢web服務器的IP地址,這樣操做系統才知道要發送的地址在哪裏。
關於IP地址的劃分在此就再也不解釋。
注意:主機號部分的比特所有爲0 或者所有爲1 時表明兩種特殊的含義。主機號部分所有爲0 表明整個子網而不是子網中的某臺設備。此外,主機號部分所有爲1表明向子網上全部設備發送包,即廣播。
什麼是DNS呢?
咱們要發送請求消息前,必須知道web服務器的IP地址,有的小夥伴會說,爲何不直接用域名做爲它的地址呢,想一想,IP地址4個字節,域名至少也要幾十到幾百個字節,這增長了路由器的負擔,傳送數據也會花費更大的時間對吧。因此咱們如今使用的方案是人來使用域名,路由器使用IP地址,爲了填補二者之間的障礙,須要一個機制,能經過域名查詢IP地址或經過IP地址查詢域名,這個機制就叫作DNS域名解析服務。
咱們的計算機上必定有相應的DNS客戶端,簡稱DNS解析器,解析器其實是一段程序,它包含在操做系統的socket庫中。Socket 庫是用於調用網絡功能的程序組件集合。調用解析器後,解析器會向DNS 服務器發送查詢消息,而後DNS 服務器會返回響應消息。響應消息中包含查詢到的IP 地址,解析器會取出IP地址,並將其寫入瀏覽器指定的內存地址中接下來,瀏覽器在向Web 服務器發送消息時,只要從該內存地址取出IP 地址,並將它與HTTP 請求消息一塊兒交給操做系統就能夠了。總結:根據域名查詢IP 地址時,瀏覽器會使用Socket 庫中的解析器。
今天弄懂了HTTP協議的交互過程,以及DNS的基本原理,下節將繼續學習DNS的工做過程以及如何委託協議棧發送消息
轉載請註明做者、出處,謝謝