這一個問題能檢驗一我的的計算機網絡基礎知識.html
1.得到IP地址
- 想要鏈接網絡須要得到一個IP地址, 因此首先要運行DHCP協議, 從本地DHCP服務器得到一個IP地址以及其餘信息.
- 經過操做系統生成一個DHCP請求報文, 並將這個報文放入具備目的端口67(DHCP服務器)和源端口68(本機)的UDP報文段中, 該UDP報文段會被放置在一個具備廣播地址(255.255.255.255)和源IP地址爲0.0.0.0的IP數據報中.
- 包含DHCP請求報文的IP數據報被放置在以太網幀中. 該以太網幀具備廣播目的地址FF:FF:FF:FF:FF:FF和本機的MAC地址00:61:3D:32:86:A8
- 該幀會發送給以太網交換機, 並在全部的輸出端口廣播該幀.
- 當被廣播到DHCP服務器時(運行在路由器中), DHCP服務器爲該主機分配IP地址, 並把DNS服務器地址, 默認網關路由器地址, 網絡掩碼等信息和分配的IP地址一塊兒封裝成一個DHCP提供報文發送給主機. 主機確認選擇好IP地址後將再次與DHCP服務器通訊確認.
- 至此, 咱們的主機得到了IP地址與其餘網絡配置信息, 能夠準備打開瀏覽器上網了.
2.訪問網頁前的準備
- 假設咱們如今要訪問博客園, 當咱們輸入URL:www.cnblogs.com後, 咱們的主機須要知道博客園的IP地址才能與博客園的服務器創建TCP鏈接併發送HTTP請求. 因此下面將描述根據DNS協議完成名字到IP轉換的過程.
- 先把URL放入DNS報文中, 再根據DNS服務器端口和地址依次封裝爲報文段和數據報, 最後放入到以太網幀中, 並將該幀發送到學校(或家庭)的網關路由器.
- 雖然在第4步中已經得到了網關路由器的IP地址, 但不知道其MAC地址. 爲了得到網關路由器的MAC地址, 須要使用ARP查詢報文. 接着把ARP封裝進以太網幀中, 並在以太網中廣播, 最終得到網關的MAC地址.
- 有了網關MAC地址後, 承載DNS報文的數據報就能到達DNS服務器了.
- 咱們簡單假設DNS服務器緩存有www.cnblogs.com的IP地址, DNS服務器會造成一個主機名到IP地址映射的DNS回答報文, 放入到UDP報文段中, 進而封裝成尋址到咱們能主機的IP數據報, 並經過網絡反向傳輸回咱們的主機.
- 這時咱們的主機獲得了服務器www.cnblogs.com的IP地址, 準備訪問www.cnblogs.com服務器.
3.與網站服務器交互
- 有了www.cnblogs.com的IP地址, 下面便生成TCP套接字並經過該套接字向www.cnblogs.com發送HTTP GET報文以獲取網站內容. 在生成套接字的同時, 咱們主機中的TCP須要和www.cnblogs.com的TCP進行三次握手, 下面開始描述三次握手的過程.
- 主機首先生成一個具備目的端口80的TCP SYN報文段, 將該TCP報文段放到具備目的IP地址的IP數據報中, 繼而將數據報放入具備網關路由器MAC地址的幀中, 並向交換機交換該幀.
- 當包含TCP SYN的數據報到達www.cnblogs.com, 服務器從數據報抽取出TCP SYN報文段, 並分解到與端口80相聯繫的歡迎套接字. 服務器的TCP會與主機生成一個專屬套接字, 併產生一個TCP SYNACK報文段, 響應給客戶端主機.
- 收到TCP SYNACK後, 咱們的主機進入鏈接狀態, 此時來到三次握手的第三階段, 我方主機須要向服務器發送ACK報文段, 且能夠在ACK報文段中放入數據了. 咱們把GET報文放入報文段的數據載荷字段, 併發送給服務器.
- 博客園的服務器接收到HTTP GET報文後, 生成一個HTTP響應報文, 並把Web頁面的內容放入到報文中, 響應給咱們的主機.
- 最後咱們的主機讀取HTTP響應報文, 抽取出html數據, 並將網頁顯示在瀏覽器上.
小結
- 不要小看連網和瀏覽網頁這一能在數秒能完成的操做, 它涵蓋了足夠多的網絡知識, 上面的敘述已經高度簡化, 裏面的每一個操做背後都對應着豐富的知識.
- 想要了解這些動做背後都發生了什麼, 最好的方法是系統地看一本講述網絡知識的書. 以上的內容是《計算機網絡 自頂向下方法》第六章協議棧結束後所描述的場景. 也是看了這本書後, 才知道平時經常使用的網絡背後蘊含這麼多知識.