咱們現實網絡無處不在,咱們被龐大的虛擬網絡包圍,但咱們卻對它是怎樣把咱們的信息傳遞並實現通訊的,咱們並無瞭解過,那麼當咱們在瀏覽器中出入一段地址,按下回車這背後都會發生什麼? 好比說通常場景下,客戶機和服務器不在一個局域網,輸入的是一個域名而不是IP地址。那麼當按下回車後,首先瀏覽器會經過DNS解析找到咱們對應的IP地址,將http報文發送給目標IP地址對應的服務器,以後服務器作出響應,將請求的資源發送給瀏覽器。 TIP/IP在這當中扮演着重要的做用。瀏覽器
在計算機發展的早期階段,不少不一樣的廠商生產各類不一樣的計算型號,他們運行徹底不一樣的操做系統,爲了讓他們之間可以相互通訊,TCP/IP協議族誕生了。緩存
那麼爲何咱們叫它協議族呢? 由於實際上TCP/IP是一組不一樣層次上的多個協議的組合。 那麼協議組合是什麼?——TCP/IP模型服務器
TCP/IP模型是一個四層結構,從上往下依次是應用層,運輸層(傳輸層),網絡層,網絡接口層(數據鏈路層)。 經過開頭咱們輸入一個url的例子,自上而下進行介紹TIP/IP參考模型 微信
爲用戶提供各類服務,好比咱們瀏覽網頁時用到的HTTP,收發郵件時用的SMTP,登陸遠程主機用的SSH或者FTP協議,DNS等協議。 假設咱們對 www.xxx.com
發送請求網絡
傳輸層位於應用層下層,網絡藉口層的上層,主要有TCP和UDP兩種協議。 UDP是用戶數據報協議,不關心是否收到,不須要創建鏈接就能夠通訊,傳輸效率高,好比說微信。 而TCP是一種可靠的面向鏈接的協議,就是在交互數據前先創建一個TCP鏈接,如同打電話,首先要撥號,而後等待對方響應後才能彼此交流 TCP提供全雙工服務,即數據可在同一時間雙向傳播 TCP將若干個字節構成一個分組,此分組稱爲報文段(Segment) url
TCP鏈接的創建過程以下圖所示。操作系統
在這一層中主要是 IP 協議處理數據傳輸。用於把數據從源主機通過若干個中間節點傳送到目標主機,並向傳輸層提供最基礎的數據傳輸服務。3d
在網絡中,每臺計算機都有一個惟一的地址,方便別人找到它,這個地址稱爲IP地址。 IP協議處理過的數據擁有本身的名字:IP數據報,讓咱們從下圖來了解一下IP數據報的格式:代理
在這一層中,上層傳來的數據通過協議處理後的一份數據,咱們稱之爲一幀(Frame) 在鏈路層中的地址指的的是計算機中網卡的硬件地址,即mac地址。咱們知道,每個網卡在出廠時,其內部都存有一個全世界獨一無二的硬件標識,稱爲mac地址,它是的長度爲6個字節。在網絡中,兩個計算機之間的通訊實際上就是計算機中的兩張網卡之間的通訊。若是沒有mac地址,就沒法得知通訊的具體位置,所以獲取mac地址是計算機通訊的基礎保障。code
可是實際上,計算機程序在發送鏈接請求時,通常只知道目的主機的IP地址,那麼mac地址是如何獲取的呢?這就要靠ARP協議來實現。
ARP協議(地址解析協議)能夠看作是鏈路層的一個協議,它的做用是爲IP地址與對應的mac地址之間提供動態的映射,這個過程是自動完成的,所以無需用戶或管理員關心。ARP協議將IP映射爲mac地址的過程大體以下:
若是目的主機與源主機位於同一網段,那麼ARP協議會向本網段發送一個廣播,網段中的全部主機都會受到一條消息,這條消息詢問哪臺主機的IP地址與目的主機地址相同。當目的主機接受到這條消息,就作出應答,將本身的mac地址發送過去。其餘主機則將這條消息忽略。
若是目的主機與源主機位於不一樣網段,那麼ARP協議會將消息發送給本地的路由,路由通過IP尋址找到目的主機所在網段的路由,再由目的路由將消息廣播出去,得到目的主機響應後再返回給源主機。
通常來講, 每臺機器都維護的有一個ARP緩存表, 存儲了近期的IP地址和硬件地址的映射關係, 能夠用 arp -a 命令來查看緩存表中內容。
事實上當咱們http訪問一個地址的時候,從應用層開始向下傳遞,沒通過一層,該層的協議會把上層傳遞的數據在這個基礎上加一個首部,該首部包含了該層協議管理的信息,好比說網絡層會打包IP信息,數據鏈路層打包mac地址。 經過這種層層打包的方式,最後由物理層傳遞出去,再有路由器,代理服務器等設備,交給目標計算機。 目標計算機獲得傳遞過來的數據後,從物理層向上傳遞,每一層會將該層對應協議負責的首部摘除後再傳給上層。最後抵達應用層對應的某個應用程序。