如何讓閱讀后進入腦中的知識點更加有體系,如何讓抽象的知識變的更加活靈活現,閱讀后的梳理可以讓我們更好地做到這一點,同時實踐能夠讓我們更加清楚地了解新知識的應用場景,這篇便是我學習網路的初章,
了解在地址輸入欄中簡單的按下一個回車背后復雜的故事
在了解本文主題之前我們不妨花上小幾分鐘簡單閱讀一下一下的內容,或許會有新的識訓
1.瀏覽器的各種訪問目標統稱為URI
2.盡管瀏覽器能夠決議網址并生成HTTP訊息,但它本身并不具備將訊息發送到網路中的功能,因此這一功能需要委托作業系統來實作
3.僅憑32位 的IP我們無法區分哪部分是網路號,哪部分是主機號,ip=網路號(xx小區)+主機號(xx室)
4 ! 主機號部分bit全為0,表示一個子網如192.168.1.0, 192.168.0.0
? ! 主機號部分bit全為1,表示一個子網內廣播地址如192.168.1.255, 192.168.0.255
5.子網掩碼為1的部分表示網路號,子網掩碼為0的部分表示主機號,
6.子網掩碼表示網路號與主機號之間的邊界
7.在域名中,越靠右的位置表示其層級越高,比如www.lab.glasscom.com這個域名如果按照公司里的組織結構來說,大概就是“com事業集團glasscom部lab科的www”這樣,
8.服務器一方先創建套接字,然后等待客戶端向該套接字連接管道
9.如果說描述符是用來在一臺計算機內部識別套接字的機制,那么埠號就是用來讓通信的另一方能夠識別出套接字的機制
10.客戶端在創建套接字時,協議堆疊會為這個套接字隨便分配一個埠號,接下來,當協議堆疊執行連接操作時,會將這個隨便分配的埠號通知給服務器,
正題開始
? 首先我們都知道url并不是網路通信中真正有效的資訊,在網路中我們通過ip來確認目的地服務器,當我們獲取到ip后,會將ip等用于網路資料傳輸的資訊一并交給作業系統的協議堆疊,
? 這里有一點基礎的概念:我們建立在作業系統之上的應用程式并不能之間進行與硬體的溝通,一切應用對于硬體的操作都要通過作業系統呼叫,不能想當然的認為是應用操作了硬體,顯然網路的通信是需要硬體支撐的,
? ok,那么我們怎么才能知道目的地的ip呢,答案就是決議你輸入的url,就好比電話號碼我們不可能記住身邊每一個人的電話號碼,因為它是并不存在具體的含義,而我們常用的電話簿就用簡單易記的名字或者綽號對應了電話號碼,比如我們可以輕松的點擊"二狗"的頭像并聯系他,
ip -> 電話號碼 , url -> 你對好友的備注, ? -> 電話簿
問:?處應填入什么? 答案:DNS服務器
當然,這樣形容并不是完全正確,因為在一方面電話簿是一個本地的記錄,而DNS不存在于本地,但是就理解來說已經非常易懂了,
好的那么我們開始講講瀏覽器是如何通過遠程訪問將ip這一資訊拿到手的吧,這里我們值得一說的是我們會忽略一些細節,比如去瀏覽器決議快取中存在的url->ip映射,dns 建立udp通信等并不主要的內容
圖解ip獲取的程序

我們主要將目光放在去向DNS服務器的這條路線上,
- 首先應用程式會使用系統提供的Socket庫創建套接字,在這里我們可以這樣思考:為什么我們發出請求到服務器服務器就能給我們回應呢,是因為服務早早就讓自己那端創建了一個套接字,當然套接字只是一個抽象的概念,只并不存在物體,然后服務端那邊的套接字就一直等著另一個套接字與之連接,就像是管道一樣能夠傳輸其中的資料流,

2.那客戶端應該如何去識別他要接入的套接字呢,這些都需要使用到庫中的決議器,他會根據輸入的url提取出有用的資訊比如: 埠號,平時我們的瀏覽器進行網頁訪問的時候都是直接輸入一串url,而不用去設定埠號這是因為瀏覽器訪問http請求默認使用80埠,
3.那服務器的套接字我們能夠分辨出來了,而客戶端可能會有多個應用同時對不同的服務端發出請求,怎么樣才能讓不同的應用找到自己創建的套接字呢?換句話說就是規避資料傳輸混亂的問題呢,這里就要使用到創建套接字時生成的描述符了,我們只需要知道這相當于是一個套接字的標識即可,
如果說描述符是用來在一臺計算機內部識別套接字的機制,那么埠號就是用來讓通信的另一方能夠識別出套接字的機制
此篇僅為閱讀《網路是怎樣連接的》一書第一章知識的簡單梳理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/298908.html
標籤:其他
上一篇:架構的目的
下一篇:資料包在網路中的傳輸程序詳解
