1. 程式人生 > >TCP/IP 概述

TCP/IP 概述

互聯 端到端 format 通信 收集 mage 轉換 發送 主機

我們現在處於一個互聯網時代,每時每刻都能接收到各地的新消息,這些都歸功於網絡Internet的產生。Internet最先起源於軍事領域,是美國國防部用來控制遍布美國各處的防空導彈的網絡,原名是ARPANET。計算機網絡就是一組物理上分隔的自治計算機的組合,和我們人一樣,許許多多的單個人組合成了國家、人類,每種人群或每種國家中人與人靠各種語言來交流溝通。計算機網路也類似,也有溝通各個計算機的語言,這種語言的就是協議。協議就是統一建立的一些規定,比如語言,就是我們人類建立的協議,有中文、英文等,他們都有語法、語義,描述了如何正確的與人溝通。TCP/IP就是兩種協議。下面來描述網絡中的一些觀點和名詞。

分層

我們的前輩很機智,為網絡建立了分層模型。曾經看到過一種對於網絡形象的描述,把網絡和郵遞過程相比較。我們都熟悉寄信的過程,寄件人首先添加信封,信封上有發件人、發件人地址、發件人郵編以及收件人、收件人地址、收件人郵編,再貼上郵票,信件就準備好了;再將信件投遞到當地的郵箱,等待郵遞員攬件;郵遞員會每天定時收集郵箱中的信件,並將信件投遞到上一級郵局,上一級根據郵寄地址或郵編,判斷是投遞到上一級的郵局,還是轉發到下一級的其他郵局。最後到達收件地址的對應郵局時,郵遞員將對應郵件投送到對應的收件人手中,收件人驗明信件後就能拆開信件讀信了。如下圖所示。

技術分享圖片

同樣,TCP/IP也采用了分層的方法對網絡結構進行劃分。下圖是TCP/IP協議族的分層模型。

技術分享圖片

從上圖可以看出TCP/IP協議族的大致結構,我們平常電腦中使用的聯網應用,例如瀏覽器、qq在os層面都是一個用戶進程,都使用某種應用層協議,如http、ftp等,這些應用層協議都要使用下層的傳輸層協議。常見的傳輸層協議有TCP和UDP,其中TCP協議是面向連接的、可靠的傳輸層協議,是端到端協議,端指的是端口,每個應用程序通信都會被分配一個端口;UDP是不可靠的連接,只負責發送數據,不管是否收到。但他們都共同使用下層網絡層的IP協議,IP協議建立的是點到點的連接,點指的是連接的兩個實體,即發送者和接受者,本質上是IP地址。ICMP是IP協議的附屬協議,IP用它來交換錯誤等重要信息。IGMP用來發送組播信息。ARP協議主要用來轉換網絡層的IP地址和鏈路層的物理Mac地址。RARP是ARP的逆操作。

封裝和分用

封裝和分用是一對逆操作,和上面我們描述的寄信的流程類似。封裝如下圖所示。

技術分享圖片

封裝描述的就是我們發送數據的過程。首先,用戶在應用程序中組裝數據,應用程序使用應用層協議在數據的頭部或尾部加上一些控制信息,隨後將組裝後的信息發送到下層的傳輸層,如TCP協議,TCP也會為應用層傳遞的信息加上TCP首部,其實也是一些控制信息,主要包括發送接收者的端口、上層應用層協議等信息,隨後將組裝的TCP段發送到下層的網絡層,網絡層主要是IP協議,同樣也會為接收到的數據加上IP首部,主要包含發送接收者的IP地址、上層傳輸層協議等信息。隨後組裝的IP數據報傳輸到下層的鏈路層,鏈路層也會封裝數據,加入以太網的首尾部。最後,封裝完的以太網幀會通過底層的網絡線路傳送到目的地。

下面是分用的過程。

技術分享圖片

分用是封裝的逆過程。描述的是我們接受發送的數據的過程。本地的計算機接鏈路層接收到以太網幀後,會對幀進行解析,根據以太網首部中的幀類型,選擇將數據發送那一個網絡層協議進行解析。數據如果使用的是IP協議,隨後數據將會交給IP協議解析,其根據IP首部中的協議值進行分用,選擇將數據交個哪一個傳輸層協議解析,不管是TCP還是UDP,都會根據傳輸層頭部信息中的端口號選擇將數據發送給哪一個應用程序。最後我們的應用程序就能處理數據了。

IP地址 端口號 DNS

互聯網上的每個接口都需要在網絡中有唯一的地址,這樣我們才能正常通信。所以產生了IP地址,目的就是唯一確定接口。IP地址發展迅猛,從早期的IPv4,現在正在過渡到IPv6。IPv4就是IP的version4,主要采用32位的二進制數來表示地址。我們人為將其分為了五類。如下圖所示。

技術分享圖片

這五類地址為A、B、C、D和E類地址。最大的區別是頭部標識。IP地址也包括兩個部分,構成是網路號+主機號。為了方便我們平常的表示,我們將IP地址表示為點分十進制數,即四個十進制數。下圖為五類地址對應的點分十進制數範圍。

技術分享圖片

一臺計算機可以有多個IP地址。IP地址的網路號分配主要由NIC(network information center)負責。隨著互聯網的發展,IPv4的剩余地址越來越少,為了解決這個問題,提出了IPv6,即使用64位的二進制數來表示IP地址。

端口號是標識應用程序的標誌。TCP中使用16位二進制數表示端口號,總共有65536個端口號。其中1-1023是常用端口號,由IANA分配。如我們常見的Http協議使用80端口,Https使用443端口,Ftp使用21端口;還有我們平常使用的tomcat默認首頁使用8080端口。

我們平常生活中比較難記住IP地址,隨後就產生了域名,即使用自然語言來標識IP地址,隨後就產生了域名。如百度首頁IP地址是180.97.33.107,域名是www.baidu.com,我們平常都是用域名訪問,瀏覽器中間幫助我們多做了一步操作,就是請求DNS服務器,獲取對應域名的IP地址,最後還是通過IP地址請求。

TCP/IP 概述