最近面試嵌入式軟體工程師,hr都會問到網路程式設計這一塊,特別是對TCP/IP協議 、TCP三次握手、四次揮手、UDP和TCP的區別,HTTP的傳輸過程,HTTP中get和post的區別,HTTPS的加密方式,Linux下TCP的建立、接受等等,由於網路知識這一塊博主很薄弱,所以吃了大虧,這幾日決定好好惡補一下網路知識,看看網路程式設計的書,做下筆記。
《網路是怎樣連線的》讀書筆記一
問:我們平時是如何上網的呢?
首先,我們在瀏覽器上輸入網址,瀏覽器會根據網址的含義生成請求訊息,在請求訊息生成以後,瀏覽器會委託作業系統向web伺服器傳送請求
1.1網址
常用的有幾種URL(網址),http:訪問web伺服器 、ftp:訪問ftp伺服器
web瀏覽器解析完URL後,就知道訪問的目標在哪裡了,接下來,web瀏覽器會使用HTTP協議來訪問web伺服器
1.2HTTP協議
HTTP協議定義了客戶端和伺服器之間互動的訊息內容和步驟
HTTP過程:客戶端向伺服器傳送請求訊息,該訊息包括URI和方法,URI表示存放網頁資料的檔名,方法表示讓web伺服器完成怎樣的工作。web伺服器收到請求訊息後,通過URI和方法完成自己的工作,然後將結果存放在響應訊息中併傳送回客戶端,相應訊息的開頭有一個狀態碼,表示操作的執行結果是成功還是失敗。客戶端收到後,瀏覽器會從訊息中讀出所需的資料並顯示在螢幕上
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的工作過程以及如何委託協議棧傳送訊息
轉載請註明作者、出處,謝謝