最近面試嵌入式軟件工程師,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的工作過程以及如何委托協議棧發送消息
轉載請注明作者、出處,謝謝
