網絡傳輸之TCP/IP協議族

咱們現實網絡無處不在,咱們被龐大的虛擬網絡包圍,但咱們卻對它是怎樣把咱們的信息傳遞並實現通訊的,咱們並無瞭解過,那麼當咱們在瀏覽器中出入一段地址,按下回車這背後都會發生什麼? 好比說通常場景下,客戶機和服務器不在一個局域網,輸入的是一個域名而不是IP地址。那麼當按下回車後,首先瀏覽器會經過DNS解析找到咱們對應的IP地址,將http報文發送給目標IP地址對應的服務器,以後服務器作出響應,將請求的資源發送給瀏覽器。 TIP/IP在這當中扮演着重要的做用。瀏覽器

TCP/IP歷史

在計算機發展的早期階段,不少不一樣的廠商生產各類不一樣的計算型號,他們運行徹底不一樣的操做系統,爲了讓他們之間可以相互通訊,TCP/IP協議族誕生了。緩存

那麼爲何咱們叫它協議族呢? 由於實際上TCP/IP是一組不一樣層次上的多個協議的組合。 那麼協議組合是什麼?——TCP/IP模型服務器

TCP/IP模型

TCP/IP模型是一個四層結構,從上往下依次是應用層,運輸層(傳輸層),網絡層,網絡接口層(數據鏈路層)。 經過開頭咱們輸入一個url的例子,自上而下進行介紹TIP/IP參考模型 微信

應用層

爲用戶提供各類服務,好比咱們瀏覽網頁時用到的HTTP,收發郵件時用的SMTP,登陸遠程主機用的SSH或者FTP協議,DNS等協議。 假設咱們對 www.xxx.com發送請求網絡

  • 瀏覽器看到這個域名的時候,就好像去一家從沒去過的餐廳吃飯,只知道餐廳名字,殊不知道具體地址,域名就像是一個餐廳的名字,而IP地址至關於一個具體的地址。 瀏覽器必須知道要請求服務器的IP地址,發出的請求才有目的地。DNS能夠將IP轉換成地址。
  • http 會生成報文 ,這個請求裏面包含了請求的方法,請求的路徑「/」,請求的主機名,客戶機的類型以及一些其餘的信息。

傳輸層

傳輸層位於應用層下層,網絡藉口層的上層,主要有TCP和UDP兩種協議。 UDP是用戶數據報協議,不關心是否收到,不須要創建鏈接就能夠通訊,傳輸效率高,好比說微信。 而TCP是一種可靠的面向鏈接的協議,就是在交互數據前先創建一個TCP鏈接,如同打電話,首先要撥號,而後等待對方響應後才能彼此交流 TCP提供全雙工服務,即數據可在同一時間雙向傳播 TCP將若干個字節構成一個分組,此分組稱爲報文段(Segment) url

TCP鏈接的創建過程以下圖所示。操作系統

  • 三次握手
    • 主機A經過一個標識爲SYN標識位的數據段發送給主機B請求鏈接,告訴主機B「我想和你建立一條TCP鏈接」。
    • 當主機B收到SYN請求後,若是其所請求的端口號正在等待鏈接,則會爲這一條TCP鏈接分配資源,並主機A發送確認應答ACK和同步序列號SYNC標誌位的數據段來響應主機。
    • 主機A確認收到了主機B的數據段並能夠開始傳輸實際數據。
  • 四次揮手
    • 主機A發送FIN控制位發出斷開鏈接的請求 。
    • 主機B進行響應,確認收到斷開鏈接請求。
    • 主機B發送FIN控制,隨後關閉了鏈接。
    • 主機A收到以後,又向主機B回覆一個ACK應答。過了一段計時等待,主機A也關閉了鏈接,釋放資源。這一段計時等待的時間是爲了主機B重傳最後的ACK防止其丟失。

網絡層

在這一層中主要是 IP 協議處理數據傳輸。用於把數據從源主機通過若干個中間節點傳送到目標主機,並向傳輸層提供最基礎的數據傳輸服務。3d

在網絡中,每臺計算機都有一個惟一的地址,方便別人找到它,這個地址稱爲IP地址。 IP協議處理過的數據擁有本身的名字:IP數據報,讓咱們從下圖來了解一下IP數據報的格式:代理

  • 版本
    • 一個4位二進制數的標識,用來標識IP協議的版本,目前大部分的協議版本號爲4,所以IP有時也稱爲IPv4。
  • 首部長部
  • 優先級與服務類型
  • 總長度
    • 該字段用以指示整個IP數據包的長度,最長爲65535字節,包括頭和數據 標識符
    • 惟一標識主機發送的每一份數據報
  • 標誌
    • 分爲3個字段,依次爲保留位、不分片位和更多片位,保留位:通常被置爲0 不分片位:表示該數據報是否被分片,若是被置爲1,則不能對數據報進行分片,若是要對其進行分片處理,就應將其置爲0 更多片位:除了最後一個分片,其餘每一個組成數據報的片都要將該位置設置爲1.
  • 段偏移量
    • 該分片相對於原始數據報開始處位置的偏移量
  • TTL(Time to Live生存時間)
    • 該字段用於表示IP數據包的生命週期,能夠防止一個數據包在網絡中無限循環地發下去。TTL的意思是一個數據包在被丟棄以前在網絡中的最大週轉時間。該數據包通過的每個路由器都會檢查該字段中的值,當TTL的值爲0時此數據包會被丟棄。TTL對應於一個數據包經過路由器的數目,一個數據包每通過一個路由器,TTL將減去1。
  • 協議號
    • 用以指示IP數據包中封裝的是哪一個協議
  • 首部校驗和
    • 檢驗和是16位的錯誤檢測字段。目的主機和網絡中的每一個網關都要從新計算報頭的校驗和,同樣表示沒有改動過。
  • 源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地址。 經過這種層層打包的方式,最後由物理層傳遞出去,再有路由器,代理服務器等設備,交給目標計算機。 目標計算機獲得傳遞過來的數據後,從物理層向上傳遞,每一層會將該層對應協議負責的首部摘除後再傳給上層。最後抵達應用層對應的某個應用程序。

相關文章
相關標籤/搜索