1. 程式人生 > >網路程式設計之TCP/IP各層詳解

網路程式設計之TCP/IP各層詳解

網路程式設計之TCP/IP各層詳解

我們將應用層,表示層,會話層並作應用層,從TCP/IP五層協議的角度來闡述每層的由來與功能,搞清楚了每層的主要協議,就理解了整個物聯網通訊的原理。

首先,使用者感知到的只是最上面一層——應用層,自上而下每層都依賴於下一層,所以我們從最下層開始切入,比較好理解。

每層都執行特定的協議,越往上越靠近使用者,越往下越靠近硬體。

一、物理層

由來:孤立的計算機之間要一起“玩耍”,就必須接入Internet,即計算機之間必須完成組網。

物理層功能:主要是基於電器特性發送高低電壓(電訊號),高電壓對應數字1,低電壓對應數字0。

二、資料鏈路層

由來:單純的電訊號0和1沒有任何意義,必須規定電訊號多少位一組,每組什麼意思。

資料鏈路層功能:定義了電訊號的分組方式。

乙太網協議:

早期的時候各個公司都有自己的分組方式,後來形成了統一的標準,即乙太網協議Ethernet。

Ethernet規定:

  • 一組電訊號構成一個數據包,叫做“幀”
  • 每一資料幀分成:報頭head和資料data兩部分。

head包含:(固定18個位元組)

  • 傳送者/源地址,6個位元組
  • 接收者/目標地址,6個位元組
  • 資料型別,6個位元組

data包含:(最短46位元組,最長1500位元組)

  • 資料包的具體內容

head長度+data長度 = 最短64位元組或樁長1518位元組,超過最大限制就分片傳送。

MAC地址:

head中包含的源和目標地址由來:ethernet規定接入internet的裝置都必須具備網絡卡,傳送端和接收端的地址便是指網絡卡的地址,即mac地址。

mac地址:每塊網絡卡出廠時都被燒製上一個世界唯一的mac地址,長度為48位2進位制,通常由12位16進位制數表示(前六位是廠商編號,後六位是流水線號)。

廣播:

有了mac地址,同一網路內的兩臺主機就可以通訊了(一臺主機通過arp協議獲取另外一臺主機的mac地址)。

ethernet採用最原始的方式,廣播的方式進行通訊,即計算機通訊基本靠吼。

三、網路層

網路層由來:有了ethernet、mac地址、廣播的傳送方式,世界上的計算機就可以彼此通訊了,問題是世界範圍的網際網路是由一個個彼此隔離的小的區域網組成的,那麼如果所有的通訊都採用乙太網的廣播方式,那麼一臺機器傳送的包全世界都會收到,這就不僅僅是效率低的問題了,這會是一種災難。

上圖結論:必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是,如果是就採用廣播的方式傳送,如果不是,就採用路由的方式(向不同廣播域/子網分發資料包),mac地址是無法區分的,它只跟廠商有關。

網路層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網路地址。

1、IP協議:

  • 規定網路地址的協議叫ip協議,它定義的地址稱之為ip地址,廣泛採用的v4版本即ipv4,它規定網路地址由32位2進製表示。
  • 範圍0.0.0.0-255.255.255.255
  • 一個ip地址通常寫成四段十進位制數,例:172.16.10.1

2、子網掩碼:

所謂”子網掩碼”,就是表示子網路特徵的一個引數。它在形式上等同於IP地址,也是一個32位二進位制數字,它的網路部分全部為1,主機部分全部為0。比如,IP地址172.16.10.1,如果已知網路部分是前24位,主機部分是後8位,那麼子網路掩碼就是11111111.11111111.11111111.00000000,寫成十進位制就是255.255.255.0。

子網掩碼是用來標識一個IP地址的哪些位是代表網路位,以及哪些位是代表主機位。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼只有一個作用,就是將某個IP地址劃分成網路地址和主機地址兩部分。

為什麼要區分網路位和主機位?

這就像寄信,你給你的南方姑娘寄信,她肉身在廈門,詳細地址是廈門鼓浪嶼三街27號,那網路位就相當於城市,詳細地址就是主機位,網路位幫你定位到城市,主機位幫你找到你的南方姑娘。 路由器通過子網掩碼來確定哪些是網路位,哪些是主機位。

區分網路位和主機位是為了劃分子網,就是把一個大網路分成多個小網路,為什麼要分子網呢?

  • 廣播風暴:6萬臺主機在一個網段裡,通訊基本靠吼,任何一個人要吼一嗓子,6萬多個人必須被動聽著,一會你的網路就癱瘓啦。
  • 地址浪費:運營商在公網上有很多級聯的路由器,有時候2個路由器之間只會用掉幾個IP,如果不進行子網劃分,那同網段的其它主機也就都不能用了。舉例兩個級聯路由器的介面ip分別為222.34.24.12/24,222.34.24.13/24, 此可承載255個主機的網段只用了2個IP,那其它的就全浪費了,因為不能再分配給別人。

劃分子網本質上就是借主機位到給網路位,每借一位主機位,這個網段的可分配主機就會越少,比如192.168.1.0/24可用主機255個,借一位變成192.168.1.0/25,那可用主機就從255-128=127個了(從最大的值開始借),再借一位192.168.1.0/26,那可用主機數就變成了255-(128+64)=63個啦。

3、IP地址分類:

IP地址根據網路ID的不同分為5種類型,A類地址、B類地址、C類地址、D類地址和E類地址。

1、A類IP地址:一個A類IP地址由1位元組的網路地址和3位元組主機地址組成,網路地址的最高位必須是“0”, 地址範圍從1.0.0.0 到126.0.0.0。可用的A類網路有126個,每個網路能容納1億多個主機。

2、B類IP地址 :一個B類IP地址由2個位元組的網路地址和2個位元組的主機地址組成,網路地址的最高位必須是“10”,地址範圍從128.0.0.0到191.255.255.255。可用的B類網路有16382個,每個網路能容納6萬多個主機 。

3、C類IP地址:一個C類IP地址由3位元組的網路地址和1位元組的主機地址組成,網路地址的最高位必須是“110”。範圍從192.0.0.0到223.255.255.255。C類網路可達209萬餘個,每個網路能容納254個主機。

4、D類地址用於多點廣播(Multicast): D類IP地址第一個位元組以“lll0”開始,它是一個專門保留的地址。它並不指向特定的網路,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次定址一組計算機,它標識共享同一協議的一組計算機。

5、E類IP地址 以“llll0”開始,為將來使用保留。

全零(“0.0.0.0”)地址對應於當前主機。全“1”的IP地址(“255.255.255.255”)是當前子網的廣播地址。

迴環地址(127.0.0.1) 又稱為本機地址,那它跟0.0.0.0是什麼區別呢?那得先了解迴環介面

環回介面(loopback)。平時我們用127.0.0.1來嘗試自己的機器伺服器好使不好使。走的就是這個loopback介面。對於環回介面,有如下三點值得注意:

  • 傳給環回地址(一般是127.0.0.1)的任何資料均作為IP輸入。
  • 傳給廣播地址或多播地址的資料報復制一份傳給環回介面,然後送到乙太網上。這是因為廣播傳送和多播傳送的定義包含主機本身。
  • 任何傳給該主機IP地址的資料均送到環回介面。

4、IP報文:

IP協議是TCP/IP協議的核心,所有的TCP,UDP,IMCP,IGCP的資料都以IP資料格式傳輸,要注意的是,IP不是可靠的協議,這是說,IP協議沒有提供一種資料未傳達以後的處理機制--這被認為是上層協議--TCP或UDP要做的事情。所以這也就出現了TCP是一個可靠的協議,而UDP就沒有那麼可靠的區別。這是後話,暫且不提。

IP協議頭

挨個解釋它是教科書的活,我們感興趣的只是那八位的TTL欄位,還記得這個欄位是做什麼的麼?這個欄位規定該資料包在穿過多少個路由之後才會被拋棄(這裡就體現出來IP協議包的不可靠性,它不保證資料被送達),某個ip資料包每穿過一個路由器,該資料包的TTL數值就會減少1,當該資料包的TTL成為零,它就會被自動拋棄。這個欄位的最大值也就是255,也就是說一個協議包也就在路由器裡面穿行255次就會被拋棄了,根據系統的不同,這個數字也不一樣,一般是32或者是64。

5、ARP協議

ARP協議由來:計算機通訊基本靠吼,即廣播的方式,所有上層的包到最後都要封裝上乙太網頭,然後通過乙太網協議傳送,在談及乙太網協議時候,我門瞭解到通訊是基於mac的廣播方式實現,計算機在發包時,獲取自身的mac是容易的,如何獲取目標主機的mac,就需要通過arp協議。

ARP協議功能:播的方式傳送資料包,獲取目標主機的mac地址。

協議工作方式:每臺主機ip都是已知的。

例如:主機172.16.10.10/24訪問172.16.10.11/24。

1、首先,通過ip地址和子網掩碼區分出自己所處的子網。

場景 資料包地址
同一子網 目標主機mac,目標主機ip
不同子網 閘道器mac,目標主機ip

2、分析172.16.10.10/24與172.16.10.11/24處於同一網路(如果不是同一網路,那麼下表中目標ip為172.16.10.1,通過arp獲取的是閘道器的mac)。

源mac 目標mac 源ip 目標ip 資料部分
傳送端主機 傳送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 資料

3、這個包會以廣播的方式在傳送端所處的子網內傳輸,所有主機接收後拆開包,發現目標ip為自己的,就響應,返回自己的mac。

檢視本機arp表的命令(在終端視窗中輸入):arp -a

6、ICMP協議

前面講到了,IP協議並不是一個可靠的協議,它不保證資料被送達,那麼,自然的,保證資料送達的工作應該由其他的模組來完成。其中一個重要的模組就是ICMP(網路控制報文)協議。

當傳送IP資料包發生錯誤--比如主機不可達,路由不可達等等,ICMP協議將會把錯誤資訊封包,然後傳送回給主機。給主機一個處理錯誤的機會。

我們一般主要用ICMP協議檢測網路是否通暢,基於ICMP協議的工具主要有ping 和traceroute。

ping

ping這個單詞源自聲納定位,而這個程式的作用也確實如此,它利用ICMP協議包來偵測另一個主機是否可達。原理是用型別碼為0的ICMP發請 求,受到請求的主機則用型別碼為8的ICMP迴應。ping程式來計算間隔時間,並計算有多少個包被送達。使用者就可以判斷網路大致的情況。我們可以看到, ping給出來了傳送的時間和TTL的資料。

traceroute(Linux後者mac os)或者 tracert(windows系統)

用來檢視從當前主機到某地址一共經過多少條路由。

四、傳輸層

傳輸層的由來:網路層的ip幫我們區分子網,乙太網層的mac幫我們找到主機,然後大家使用的都是應用程式,你的電腦上可能同時開啟qq,暴風影音,迅雷等多個應用程式,那麼我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程式呢?答案就是埠,埠即應用程式與網絡卡關聯的編號。

傳輸層功能:建立埠到埠的通訊。

補充:埠範圍0-65535,0-1023為系統佔用埠。

傳輸層有兩種協議,TCP和UDP,見下圖。

1、TCP協議

可靠傳輸,TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網路的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確保單個TCP資料包不必再分割。

為什麼tcp是可靠的資料傳輸?

最可靠的方式就是隻要不得到確認,就重新發送資料報,直到得到對方的確認為止。

TCP報文

TCP的3次握手和4次揮手:

2、UDP協議

不可靠傳輸,”報頭”部分一共只有8個位元組,總長度不超過65,535位元組,正好放進一個IP資料包。

3、總結

TCP協議雖然安全性很高,但是網路開銷大,而UDP協議雖然沒有提供安全機制,但是網路開銷小,在現在這個網路安全已經相對較高的情況下,為了保證傳輸的速率,我們一般還是會優先考慮UDP協議!

五、應用層

1、應用層簡介

應用層直接和應用程式介面並提供常見的網路應用服務。它是開放系統的最高層,是直接位應用程式提供服務的。其作用是在實現多個系統應用程序相互通訊的同時,完成一系列業務處理所需的服務。其服務元素分為兩類:公共應用服務元素CASE和特定應用服務元素SASE。

位於計算機網路體系結構的最上層,前面四層做的所有事情就是為了他服務,他也是設計和建立計算機網路的最終目的,通俗的講,就是我們開發的應用軟體,就處於這一層,比如,QQ,瀏覽器訪問網頁,等等你看得到的應用軟體都是在這一層,但是這些軟體在執行的過程中,也需要依靠一些特定的協議才能完成相應的功能,比如瀏覽器通過網址訪問網頁,其中是如何做到的,這就是我們所要學習的東西。

2、應用層中的兩種應用軟體:客戶/伺服器和P2P體系結構

(1)客戶/伺服器

這種型別,就是我們很熟悉的客戶端,伺服器模型,客戶端請求伺服器,伺服器響應客戶端這樣的一種方式進行“交流”。

(2)P2P

也稱為對等體系結構。P2P相當於每個人的電腦度可以當伺服器,也可以當客戶端,不單單限制於只能客戶端訪問伺服器,你自己的計算機可以去訪問別人的計算機上的內容,別的同樣可以訪問你計算機上的內容,這樣達到一種共享的狀態。

3、DNS協議

(1)DNS概述

Domain Name System 域名系統。也可以叫做域名解析協議。在我們在瀏覽器訪問網頁的時候,通常度是用我們所熟悉的一連串有意義的英文字元標識,比如www.baidu.com、www.sohu.com等。

但是我們學了前面的知識,計算機並不是通過這些字串去找到對應的計算機,而是通過32位的二進位制,也就是我們的IP地址來找。所以就有了DNS協議。他的作用就是將域名解析成對應的IP地址。

因為讓我們人去記那些IP地址,很難記得住,所以就想辦法讓IP地址轉變為了現在的域名,在進行訪問的時候,只需要將域名解析為對應的IP地址就行了,這個域名也很有講究,其中分為好多層域名,是獨一無二的。這裡不細講這個,只要我們知道,域名通過DNS能找到對應的IP地址就行了。

(2)DNS協議工作過程

   1)通過域名訪問網頁

   2)計算機會先將域名傳送到一個解析域名的伺服器上

     2.1)在其伺服器上有很多伺服器,能解析各種各樣的域名,比如有專門解析.org的,解析.com的,解析.net的。等等,最主要的有一個根域名伺服器

     2.2)域名解析(在伺服器上查詢IP地址)的過程有兩種演算法,迭代查詢,遞迴查詢。一般是兩種查詢的結合

     2.3)本機計算機找到其中一臺解析域名的伺服器(可能是.com),如果沒有找到對應的IP地址,那麼就會去找根域名伺服器,根域名伺服器知道所有的子伺服器,所以他肯定知道該域名所對應的IP地址在那個子伺服器中,所以告訴第一次查詢的伺服器要他去另一臺伺服器上找,找到了,就將其返回給計算機,以後在有另一臺計算機也通過這個域名訪問,那麼第一臺伺服器會有原來的域名IP地址的快取,就不用去找根伺服器了。

   3)找到了,就能找到我們要訪問的伺服器了。

4、HTTP協議

(1)HTTP簡介

   1)超文字傳輸協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。所有的WWW檔案都必須遵守這個標準。

   2)HTTP是一個客戶端和伺服器端請求和應答的標準(TCP)。客戶端是終端使用者,伺服器端是網站。通過使用Web瀏覽器、網路爬蟲或者其它的工具,客戶端發起一個到伺服器上指定埠(預設埠為80)的HTTP請求。(我們稱這個客戶端)叫使用者代理(user agent)。應答的伺服器上儲存著(一些)資源,比如HTML檔案和影象。(我們稱)這個應答伺服器為源伺服器(origin server)。在使用者代理和源伺服器中間可能存在多箇中間層,比如代理,閘道器,或者隧道(tunnels)。儘管TCP/IP協議是網際網路上最流行的應用,HTTP協議並沒有規定必須使用它和(基於)它支援的層。 事實上,HTTP可以在任何其他網際網路協議上,或者在其他網路上實現。

   3)通常,由HTTP客戶端發起一個請求,建立一個到伺服器指定埠(預設是80埠)的TCP連線。HTTP伺服器則在那個埠監聽客戶端傳送過來的請求。一旦收到請求,伺服器(向客戶端)發回一個狀態行,比如"HTTP/1.1 200 OK",和(響應的)訊息,訊息的訊息體可能是請求的檔案、錯誤訊息、或者其它一些資訊。HTTP使用TCP而不是UDP的原因在於(開啟)一個網頁必須傳送很多資料,而TCP協議提供傳輸控制,按順序組織資料,和錯誤糾正。

   4)通過HTTP或者HTTPS協議請求的資源由統一資源標示符(Uniform Resource Identifiers)(或者,更準確一些,URLs)來標識。

(2)統一資源定位符URL

URL:統一資源定位符,通過下面格式,可以看出,就是用來定位我們所需要資源在伺服器上的位置。

格式:<協議>://<主機>:<埠>/<路徑>

協議:http

主機:域名/IP地址,原理度一樣,到頭來還是會轉換為IP地址,通過這個才能找到目標伺服器

埠: 在傳輸層需要使用的,訪問目的主機的哪個埠號。 

路徑:精準的定位我們所需要的資源位置、    

平常會省略協議和埠號,因為這些都是預設的,在訪問主頁時,路徑也會省略。比如www.baidu.com這個預設進入百度的主頁完整寫法 http://www.baidu.com:80/index.html 。

(3)超文字傳輸協議

作用:怎樣向伺服器請求文件、伺服器怎麼把文件傳送給瀏覽器,通俗點講,就是我們想伺服器訪問網頁資源時,伺服器如何把網頁上的東西傳給我們。

客戶端向伺服器:請求報文        伺服器向客戶端:響應報文

其實就是:在通過URL訪問你伺服器時,就會發送一個請求報文,告訴伺服器需要哪些東西,伺服器知道後,返回一個響應報文給客戶端,其中就會帶有一些網頁資訊。就是通過這個來達到傳送網頁資源的目的,現在來具體看看,請求報文和響應報文的格式。

(4)請求和響應報文的格式

可參見我的另一篇博文https://www.cnblogs.com/Kwan-C/p/11459247.html

(5)HTTP協議的功能

 HTTP協議(HyperText Transfer Protocol,超文字傳輸協議)是用於從WWW伺服器傳輸超文字到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網路傳輸減少。它不僅保證計算機正確快速地傳輸超文字文件,還確定傳輸文件中的哪一部分,以及哪部分內容首先顯示(如文字先於圖形)等。

 HTTP是客戶端瀏覽器或其他程式與Web伺服器之間的應用層通訊協議。在Internet上的Web伺服器上存放的都是超文字資訊,客戶機需要通過HTTP協議傳輸所要訪問的超文字資訊。HTTP包含命令和傳輸資訊,僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通訊,從而實現各類應用資源超媒體訪問的整合。

 我們在瀏覽器的位址列裡輸入的網站地址叫做URL (Uniform Resource Locator,統一資源定位符)。就像每家每戶都有一個門牌地址一樣,每個網頁也都有一個Internet地址。當你在瀏覽器的地址框中輸入一個URL或是單擊一個超級連結時,URL就確定了要瀏覽的地址。瀏覽器通過超文字傳輸協議(HTTP),將Web伺服器上站點的網頁程式碼提取出來,並翻譯成漂亮的網頁