1. 程式人生 > >一個完整的網路訪問過程的分析(從計算機網路的角度)

一個完整的網路訪問過程的分析(從計算機網路的角度)

首先,我們要明確上網需要的四個引數(本機),分別是:

1、本機的ip地址

2、子網掩碼

3、閘道器的ip地址

4、DNS的ip地址

這裡,我以自己的電腦為例(我的電腦用的是配置ip,當然大多數用的都是動態獲取也就是dhcp),截圖如下:


引數解釋:

a、閘道器本質上是一個網路通向其他網路的ip地址。預設閘道器必須是本網段的ip地址,一般是本網段的第一個ip。本機ip和子網掩碼相與就得到本網段【網路號】。
b、DNS【DomainName System域名系統】,域名和ip相互對應對映的分散式資料庫。DNS協議執行在UDP協議之上,使用53埠。

另外,我們需要明確,建立一個完整的socket連線需要的5個引數,分別是:

(本機ip,本機埠號,使用的網路協議,要訪問的機器的ip,要訪問機器的埠號)

下面我們開始進入本文的正題:

第一步:確定本機引數(其實上面已經有了),這裡我們通過命令列的方式來獲取,用ipconfig/all(注意:linux系統下使用的是ifconfig)


第二步:確定我們要訪問的內容,此處我們還是以訪問百度為例,假設我們輸入www.baidu.com,然後回車(其實更加具體的寫法應該是http://www.baidu.com:8080/index.php,這裡不過是瀏覽器幫我們補齊了而已)。

第三步:我們此時要確定的是百度的ip地址,此時就輪到我們的DNS伺服器出馬了,大致的解析過程可以參看前文,這裡從資料包的角度進行分析:

這裡我們使用dns協議,向dns伺服器傳送資料包,dns伺服器開啟的是53埠(此時5要素都明確了),資料包結構如下:


DNS伺服器告訴我們百度的ip地址是:115.239.211.112(這裡我們使用的是nslookup命令,dns這裡可能開啟了保護,所以我們看不到他的真實ip,當然也可以使用ping www.baidu.com的方式獲得)

第四步:利用子網掩碼判斷我們訪問的ip是否和我們是同一個網段(判斷方法上面已經給出了),經過判斷,我們要訪問的ip跟我們不是同一個網段,因此,我們向百度傳送資料包必須通過閘道器轉發。也就是說接收方的mac地址是閘道器的mac地址(如果是同一個網段的話mac地址就是我們要訪問的機器的mac地址)。【先ping閘道器,再用arp -a就可以得到閘道器mac地址】

第五步:應用層

瀏覽器訪問使用的是http協議,構造的資料包如下:


http請求的內容如下:假定其長度為4960個位元組,他會被嵌在tcp資料包之中。

第六步:傳輸層(TCP協議)

    Tcp資料包需要設定埠,接收方的預設埠是80,本機的埠是一個隨機生成的1024到65535之間的整數。假定為8888。
Tcp資料包的包頭長度為20位元組,加上http資料包,為4980位元組。

第七步:網路層(IP協議)

然後tcp資料包再嵌入ip資料包,ip資料包需設定雙方ip【已知】。Ip資料包的頭長度為20位元組,總共是5000位元組

第八步:網際介面層(乙太網協議)

Ip資料包嵌入乙太網資料包,乙太網資料包需設定雙方mac地址【已知】,接收方即閘道器mac地址【通過arp協議得到】。
乙太網資料包的資料部分最大為1500位元組,因此ip資料包必須分成4個包,因為每個包都有自己的ip標頭,因此四個包的ip資料包的長度分別是1500,1500,1500,560。


第九步:伺服器響應

經過多個閘道器轉發,具體的路由協議,可以參考計算機網路一書,百度伺服器收到這四個乙太網資料包,根據ip標頭的序號,將四個包拼起來,取出完整的tcp資料包,讀出”http請求”,做出“http響應”。再使用http協議發回來。完成通訊。

這就是從計算機網路角度分析的一個網路訪問的過程。具體的細節當然還有很多,這些也只能算是一個大致的過程。

相關推薦

一個完整網路訪問過程分析(計算機網路角度)

首先,我們要明確上網需要的四個引數(本機),分別是: 1、本機的ip地址 2、子網掩碼 3、閘道器的ip地址 4、DNS的ip地址 這裡,我以自己的電腦為例(我的電腦用的是配置ip,當然大多數用的都是動態獲取也就是dhcp),截圖如下: 引數解釋: a、閘道器本質上是一個

一個完整網路訪問過程分析(巨集觀角度分析)

我們以訪問百度為例,來一步步分析一個完整的網路訪問過程是怎樣的 當我們輸入http://www.baidu.com,然後按回車,發生的一系列事情如下: 在這裡我們通過使用ie的F12開發人員工具進行分析: 1、首先,會進行一次DNS域名解析(就是找到對應的IP地址),DNS

網路協議棧分析——裝置驅動到鏈路層

對應我們上面的網絡卡驅動分析。接收到的資料是存放在data至tail之間的區域。 Skb通常還有常用的幾個函式,一一列舉分析如下: struct sk_buff *alloc_skb(unsigned int size,int gfp_mask) 分配儲存空間為sixe的skb,記憶體分配級別為gf

移動手機APP開發、一個完整的APP是如何零開始做出來的?

第一步(構思部分):想和看   想什麼?呢,當然是想我們要創作出一個什麼樣的作品,可以是自己喜歡的產品,做個redesign什麼的。也可以是一個大雜燴功能整合,但是儘量不要做差異太大的兩種產品,比如佛學類和陌生人社交(yuepao)這兩類的結合就有點坑爹了:D 總不能和尚約和尚我們出來一起唸經對吧。

一個完整直播app功能分析

-Libswresample:可以對音訊進行重取樣,rematrixing 以及轉換取樣格式等操 作。-Libavcodec:提供了一個通用的編解碼框架,包含了許多視訊,音訊,字幕流 等編碼/解碼器。-Libavformat:用於對視訊進行封裝/解封裝。 -Libavutil:包含一些共用的函式,如隨機數生成

計算機網路之我見-通俗理解計算機網路(八)

本篇講解DNS域名解析服務 (DNS理解起來說難也難,說簡單其實也簡單,只要類比一下Linux的虛擬檔案系統還有掛載mount的概念就會很容易理解DNS了,DNS和分散式的檔案系統NFS理念上有些相似之處) 講DNS之前先講一下linux 虛擬檔案系統的概念(有助於理解DNS和域名組成結

計算機網路之我見-通俗理解計算機網路(七)

本篇主要講解廣播、組播和IGMP協議(寫的比較倉促,質量不好~) 一、廣播 1 廣播的分類 廣播分為本地受限廣播和子網廣播 本地受限廣播的IP地址為255.255.255.255,只能在傳送主機所在的同一網段內進行傳播 子網廣播的IP地址為“網路號+主機號位數全為1”的地址,

計算機網路之我見-通俗理解計算機網路(六)

本篇講解UDP協議 一、UDP協議的組成格式 # UDP協議格式比較簡單,主要由協議頭和協議體構成 # 協議頭由源埠號、目的埠號、校驗和、和包體長度欄位組成 # UDP協議資料包由IP資料包承載,IP資料包頭有兩位元組長度的包體欄位的限制,包體最大長度為65535位元組,所以理論

java網路程式設計:1、計算機網路網路通訊的組成?什麼是ip、協議、埠號?

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 計算機網路 網路ip 網路協議 網路埠號 計算機網路 計算機網路是相互連線的獨立自主的計算機的集合,最簡單的網路形式由兩臺計算機組成。如下圖: 一臺計算機

計算機網路基礎概念】1計算機網路概述與資料通訊基礎

一、計算機網路概述 1、什麼是計算機網路? 計算機網路是由計算機裝置、通訊裝置、終端裝置等網路硬體和軟體組成的大的計算機系統。網路中的各個計算機系統具有獨立的功能,它們在脫離網路時,仍可單機使用。 2、計算機網路定義 將地理位置分散的、功能獨立的多臺計算機系統通過線路和裝置互聯起

計算機角度理解volatile關鍵字

極簡計算機發展史 我們知道,計算機CPU和記憶體的互動是最頻繁的,記憶體是我們的快取記憶體區。而剛開始使用者磁碟和CPU進行互動,CPU運轉速度越來越快,磁碟遠遠跟不上CPU的讀寫速度,才設計了記憶體,但是隨著CPU的發展,記憶體的讀寫速度也遠遠跟不上CPU的讀寫速度,因此,為了解決

TensorFlow之下載和匯入mnists資料集的read_data_sets()錯誤分析(原始碼的角度)

在用TensorFlow的mnist資料集做手寫數字識別任務時,使用tensorflow自帶的模組(如下所示)下載和匯入資料集會報錯,原因是該模組爬取的資料集網站不能訪問。。因為該模組是用python內建urllib模組來下載資料的,需要提供有效的資料集網站地址

計算機網路之我見-通俗理解計算機網路(一)

寫在前面:計算機網路和“XX語言程式設計師”這個職業也許並不強相關,例如大部分java程式設計師只要懂得如何使用servlet規範API,採用某些MVC框架寫好程式打包部署到tomcat等容器中就能寫出功能強大的“XX管理系統”,然而如果需要編寫那些自己制定協議的基於tcp/

計算機網路原理】第二章 計算機網路體系結構

 計算機網路體系是現代計算機的核心,本章主要介紹了計算機體系結構和開放互連參考模型、TCP/IP協議以及比較。 一,總體概述 首先介紹了網路分層體系結構 第一,首先介紹了網路傳輸遵守的協議主要內容

淺談計算機網路(一)初識計算機網路

  大學期間,上過不少理論專業課,也讀過一些該專業領域的“名著”。但是最讓我驚歎的書,莫過於計算機網路(自頂向下的方法)。計算機網路,是最貼近我們生活的一門技術,同時它的體系也是極其龐大的,好比我們要了解一個國家從古至今的歷史,或是一個從基層到上層的管理制度。強烈推薦初學自

計算機視覺角度深入解讀了AR

1、從現實到增強現實 增強現實(Augmented Reality,簡稱AR)和虛擬現實(Virtual Reality,簡稱VR)概念的出現已經有幾十年的歷史了,然而VR/AR大量出現在科技媒體上吸引各方眼球也就是最近的事情。在本節中我們簡單介紹一下這兩個概念以及它們的歷史,同時澄清一下它們的區別

IOS10 應用安裝無網路訪問,提示是否允許使用網路

前言 由於大陸相關部門出臺的新規定指出,應用在未經使用者允許的前提下,系統不能授予其使用聯網、獲取定位的功能。Apple 在 iOS 10 作業系統中加入了關於應用使用資料的授權彈窗提示,使用者在 iOS 10 系統中第一次開啟應用時,會被要求對於是否授予應用聯網許可權進

第1章 1.5計算機網路概述--訪問網站資料傳輸過程

 15.0.0.2主機(A)中的瀏覽器ie向網站伺服器(B)13.0.0.2請求訪問url1網頁,B將生成的網頁資料放到網絡卡快取C中,C就緒後就開始向網絡卡快取D傳送資料,D收到資料後就告訴C我收到資料1了,我要資料2。C就會將資料1從快取中清除,傳送資料2給D,同時將還沒有放進C的、要傳送的資料

mqtt伺服器搭建成功,微信端可以通過websocket訪問計算機可以訪問,安卓可以訪問,stm32嵌入式可以訪問一個完整的物聯網系統!

mqtt伺服器搭建成功,微信端可以通過websocket訪問,計算機可以訪問,安卓可以訪問,stm32嵌入式可以訪問,一個完整的物聯網系統!伺服器採用activemq,啟動的時候要用./activemq start來看啟動資訊。另外可以用網頁來監控和除錯。

[計算機網路]一個完整的TCP連線

    當我們向伺服器傳送HTTP請求,獲取資料、修改資訊時,都要建立TCP連線,包括三次握手,四次揮手。 什麼是TCP連線?     為了實現可靠的資料傳輸,TCP要在應用程序之間建立傳輸連線。它是在兩個傳輸使用者之間建立一種邏輯聯絡,使得通訊雙方都確認對方為自己的傳輸