1. 為什麼要學習網路協議?
1. 什麼是協議?
人與人之間通過語言進行溝通,計算機之間通過0和1進行溝通,程式設計師和計算機之間通過計算機語言溝通。
計算機語言是人類和計算機溝通的一種協議,通過這個協議,計算機可以知道我們想讓他幹什麼。
計算機語言還比較接近人類語言,計算機不能直接讀懂,還需要通過編譯計算機才能直接讀懂。
1.1 協議的三要素
語法:這一段內容要符合一定的格式;
語義:這一段內容要代表某種意義;
順序:就是先幹啥,後幹啥。
學會計算機語言就可以教給一臺計算機完成你想讓他做的事了,如果想教給一片機器做什麼,這時候就需要網路協議了。只有通網路協議,才能讓一大片機器相互協作,共同完成一件事。
2. 一個HTTP請求的前世今生
當你在瀏覽器位址列輸入 https:www.baidu.com會發生什麼呢?
a. https:www.baidu.com 只是一個URL,瀏覽器只知道名字,不知道具體的地點。這時他使用地址簿協議(常用的地址簿協議有DNS和HTTPDNS)查詢得到119.75.217.109這個IP地址。IP地址是網際網路世界的門牌號。
b. 得到目標地址後,瀏覽器開始打包他的請求。請求一般採用HTTP協議或者HTTPS協議。DNS,HTTP,HTTPSdou所在的層為應用層,經過應用層封裝後,瀏覽器將請求包交給下一層傳輸層去完成。
c. 傳輸層一般有面向連線的TCP協議和無連線的UDP協議。所謂面向連線就是TCP會保證這個包可以到達目的地,如果不能到達,就重新發送,直到到達
d. 網路層的協議是IP協議,IP協議裡面有源IP地址和目標IP地址。作業系統根據目標IP地址就能知道這個它是本地人還是外地人。如果是外地人的話就要去閘道器,作業系統啟動時會被DHCP協議配置IP地址和預設的閘道器地址192.168.1.1。作業系統提供ARP協議得到本地閘道器的MAC地址。於是作業系統將IP包交給下層,MAC層。
e. 到了MAC層之後,網絡卡將包發出去,因為這個包裡面有MAC地址,因此是可以到達本地
f. 路由器相當於一個區域網,區域網內可以直接通過MAC地址進行通訊,一旦跨越路由器,就需要根據路由協議(常用的有OSPF和BGP)確定到這個IP怎麼走。
g. 最後到了目標地址的路由器,路由器根據這個IP地址通過ARP就知道其MAC地址,根據MAC地址就可以找到目標伺服器了。
h. 目標伺服器確認MAC地址無誤後,去下MAC頭,傳送給作業系統的網路層;
i. 網路層確認IP無誤後,取下IP頭,根據IP頭中的傳輸層協議,傳送給傳輸層;
j 對於傳輸層,對於受到的每個包,都會回覆一個包表明包收到了(這個回覆包只是說明包收到了,並不是這個包的請求結果),這個回覆沿著來的方向走回去報個平安。如果一段時間後傳送端的TCP層未收到平安到達的回覆,TCP層就會一直悶頭重試,直到收到平安到達的回覆。如果TCP層除了問題,則應用層重新發送請求。報完平安之後,傳輸層根據埠號傳送給應用層指定的應用程式。
k. 應用程式通過解析HTTP請求即可獲知裡面的請求資訊。