1. 程式人生 > >網路知識,socket,黏包的解決方式

網路知識,socket,黏包的解決方式

 一.為什麼要學習socket?

你自己現在完全可以寫一些小程式了,但是前面的學習和練習,我們寫的程式碼都是在自己的電腦上執行的,雖然我們學過了模組引入,檔案引入import等等,我可以在程式中獲取到另一個檔案的內容,對吧,但是那麼突然有一天,你的朋友和你說:"把你電腦上的一個檔案通過你自己寫的程式傳送到我的電腦上",這時候怎麼辦?你是不是會想,what?這怎麼搞?就在此時,突然靈感來了,我可以通過qq、雲盤、微信等傳送給他啊,可是人家說了,讓你用自己寫的程式啊,嗯,這是個問題,此時又來一個靈感,我給他傳送檔案肯定是通過網路啊,這就產生了網路,對吧,那我怎麼讓我的程式能夠通過網路來聯絡到我的朋友呢,並且把檔案傳送給他呢,那麼查了一下,發現網路通訊通過socket可以搞,但是怎麼搞呢?首先,查詢結果是對的,socket就是網路通訊的工具,任何一門語言都有socket,他不是任何一個語言的專有名詞,而是大家通過自己的程式與其他電腦進行網路通訊的時候都用它。知道為什麼要學習socket了吧~~朋友們~~而你使用自己的電腦和別人的電腦進行聯絡併發送訊息或者檔案等操作就叫做網路通訊。

對於一個小白來講,看到這一節標題的你,此刻的你內心是拒絕的,不明白在說些什麼。我理解你的心情,不要驚慌、不要著急,且聽我娓娓道來。

大家通過上面的內容大致的瞭解了一下什麼是網路通訊,那麼在我們的日常生活中,哪裡用到了網路通訊呢,網路通訊的整個流程又是什麼樣子的呢?我們要學的socket是怎麼在網路中發揮作用的呢?讓我們懷揣著這 三個問題 來進行下面的學習。

二.客戶端\服務端架構(哪裡用到了網路通訊)

我們使用qq、微信和別人聊天,通過瀏覽器來瀏覽頁面、看京東的網站,通過優酷、快播(此處只是懷念一下)看片片啥的等等,通過無線印表機來列印一個word文件等,只要有無線、有網、有4G,我們就能好好的聊天,好好的看片片、好好的購物什麼的,對吧,那麼這些操作都叫做網路通訊,確切來說都需要使用網路通訊,前提是你要有網(大家記著這個'網',我下面會給大家詳解),原來生活中處處使用了網路通訊,我們通過網路通訊的不同形式:比如說qq是我們下載到電腦或者手機上的應用程式(qq應用程式就是人家騰訊開發的軟體,放到你的電腦或者手機上供你使用的,大概明白應用程式意思就行,不用深究~~),瀏覽器也是我們下載的應用程式,但是瀏覽器是通過頁面來訪問別人的網站的,而印表機我是通過我電腦上的word來操作使用的。根據這些不同的場景或者說不用的溝通方式,在業內劃分了下面兩個架構(架構:就是不同的組成結構)。在看下面的幾個架構之前,我們需要知道什麼是客戶端,什麼是服務端。客戶端:安裝在你電腦上的qq,瀏覽器(360瀏覽器、chrome瀏覽器、IE瀏覽器等),當我們使用qq傳送訊息的時候,訊息先發送到了騰訊,然後騰訊在轉發到你朋友的qq上,此時你的qq就是客戶端,騰訊就是服務端。當我們使用瀏覽器來看京東的網站的時候,我們電腦上的瀏覽器就叫做客戶端,京東就叫做服務端。

客戶端英文名稱:Client(使用服務端的服務),服務端英文名稱:Server(一直執行著,等待服務別人,不能有一天訪問百度,百度頁面打不開,不行吧。),下面所說的C\S架構就是說的Client\Server架構。

    a.硬體C\S架構:印表機。

    b.軟體C\S架構:QQ、微信、優酷、暴風影音、瀏覽器(IE、火狐,360瀏覽器等)。其中瀏覽器又比較特殊,很多網站是基於瀏覽器來進行訪問的,瀏覽器和各個網站服務端進行的通訊方式又常被成為B\S架構(瀏覽器英文名稱:Browser),web開發就是這個,後面大家知道有前端的課程對吧,前端就是瀏覽器上的知識,以後你會經常和瀏覽器打交道,學完前端就可以進行web開發全棧開發了。如果我把所有的東西都做成應用程式是不是很麻煩啊,要裝很多的軟體對吧,所有就開始有了B\S架構,只需要個瀏覽器就能使用很多的工具了,並且提供了一個統一入口,這也是為什麼B\S架構火了起來。但是手機端的還是用的應用程式多一些,但是手機端B\S架構也是一個趨勢,就像微信的小程式和公眾號,為什麼說是一個趨勢呢,不僅僅是因為方便因為省錢,而是提供了一個統一的入口,其實微信早就實現了。統一入口是什麼意思呢?就像我們公司經常用的一個公司內部管理系統,請假、打卡、報銷、查客戶等等,如果這些功能都需要開啟一個網頁或者app,是不是很難受啊,那麼公司就做了這麼一個系統,大家在這個系統上關於上班的一些你需要的功能就都能完成了,這就是統一入口。這也是一個開發思想,大程式分成幾個小程式,開發速度也快,開發一個小功能就能上線,而不需要等著所有的功能全部開發完成才上線,解耦分治思想,公司做開發時這種思想很流行,迭代開發。說多了。。

    不管哪個架構,他們都要進行網路通訊,基本都要用socket,我們學習socekt就是為了完成C\S架構專案的開發

三.網路通訊的整個流程

明白了上面的C\S架構之後,我們就以自己本地的電腦上的瀏覽器去訪問的京東網站的整個流程這種B\S架構來舉例,有同學可能會問:你怎麼不用qq或者微信來舉例啊,是這樣,因為qq和微信這種P2P的通訊方式還是比較特殊的,也比較繁瑣,具體為什麼說它繁瑣,我在部落格的最後給大家說一下,然後有興趣的同學可以去研究一番~~~

  網絡卡和mac地址

    你的電腦想要聯網,首先要有一個網絡卡,而且電腦要做好相關的網路配置(如何配置,在下面有介紹)

電腦插網線的地方就做網絡卡,網絡卡提供了網路的介面,這是硬體上面的,大家都是到網口是吧,我怎麼找到電腦的網絡卡呢,有人說用IP地址,IP地址並不是,而是全球唯一的mac地址,專門給網路裝置設定的,是出廠的時候就給定好的,一個裝置的mac地址號碼是全球唯一的。 head中包含的源和目標地址由來:ethernet規定接入internet的裝置都必須具備網絡卡,傳送端和接收端的地址便是指網絡卡的地址,即mac地址。   mac地址:每塊網絡卡出廠時都被燒製上一個世界唯一的mac地址,長度為48位2進位制,通常由12位16進位制數表示(前六位是廠商編號,後六位是流水線號)

      檢視mac地址的方法:windows下在cmd視窗輸入ipconfig -all指令:下面顯示的這個實體地址就是mac地址。

由於mac地址很難記憶,所以又出現了IP地址,在說IP地址之前,我們先說一下編碼,我們都是到一個位元組等於8位對吧,8個2進位制的數,那麼8位是不是可以表示256個位元組啊,由於全球有太多的機器需要聯網,那麼網路裝置的編號應該長一些,對不對,由4個點分十進位制組成,由點分割的四個十進位制的數,而十進位制的數是不是在計算機中也是由二進位制表示的啊,那麼就成了這個樣子:00000000.00000000.00000000.00000000 -- 11111111.11111111.11111111.11111111,0.0.0.0--255.255.255.255,也就是由4個8位的二進位制數表示,這個表示就是我們的IP地址的形式。

      如果你用網線連網的,檢視自己網路的屬性,並且可以將ipv4版本的ip地址可以設定成靜態的、也可以自動獲取(動態分配的),下面是網路配置的大致方法:

1、

2.

3.

 

      配置好自己電腦的網路資訊之後,我們就有了身份證(mac地址)和名字(IP地址),通過他們,我們就在網路中有了自己的身份,只要有網,我們就可以正大光明的和別人進行通訊了。

      

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

      下面是網路通訊流程圖:

流程描述:

第一步:開啟瀏覽器,想要請求訪問京東,在位址列輸入了網址:www.jd.com。(www.jd.com是域名就是一個IP地址的名稱,IP地址不好記,所有有了域名。)

第二步:先將請求資訊發給了交換機,然後交給了路由器,路由發給DNS伺服器,通過DNS協議去找我們要訪問的京東的IP地址:

第三步:查到的京東伺服器對應的IP地址之後,路由器通過路由協議找到一個路由轉發的最優路徑,將你的請求資訊還送給這個IP地址的京東的路由器

  第四步:京東的路由器發給了京東網站的伺服器上

  第五步:京東網站伺服器按照來的時候的路徑,在返回給你他自己的網站

  第六步:當你開啟瀏覽器的時候,你的電腦給你的瀏覽器這個執行起來的程式給了一個編號,叫做埠號,當你的電腦收到京東傳送過來的訊息的時候,你的電腦通過埠號找到你的瀏覽器,你的瀏覽器拿到了京東的網站資訊,然後將網站呈現在了自己的瀏覽器上

 

內網和外網:   

    所謂內網就是我們平常說的區域網。區域網就是在固定的一個地理區域內由2臺以上的電腦用網線和其他網路裝置搭建而成的一個封閉的計算機組。它可以是鄰居之間的2臺電腦,也可以是一幢100層大樓裡的1000臺電腦。區域網可以是獨立封閉執行的,也可以是和外網相連線的。
所謂外網,也就是廣域網。是一種地域跨度非常大的網路集合。它是由無數個區域網+獨立伺服器構成的。注意,此處所說的區域網既可以是小型的廣域網,也可以是區域網。
    實際上,從規模上來看我們很難分辨區域網與廣域網,因為大小都是相對的。所以。真正區域網與廣域網的分別是通過IP地址來實現的。
    任何一臺電腦要上網,都必須在網路上有一個唯一的IP地址。在區域網內,這個IP地址是唯一的。但是在另外一個區域網,這個IP地址仍然能夠使用。
    網路A裡有一臺IP地址為192.168.1.231的客戶端,網路B裡也可以有一臺同樣IP的電腦。那麼。我們就說這2臺機器分別在2個局域網裡。但是在廣域網內,所有的IP地址都是唯一的。山西電信的DNS伺服器IP地址是61.134.1.4.那麼,這個地址在全世界都是唯一的,不可重複的。這就是廣域網和區域網的區別。

    如果只有內網的ip地址你是不能上網的,你上網肯定要通過一個外網地址,這個外網地址又稱為公網地址,這個公網地址是全球唯一的,他在你的對外出口的路由器上,也就是你的外網閘道器地址。

四.DNS伺服器

當我們請求https:\\www.JD.com的時候,首先電腦會在本地的DNS快取中找是否有這個DNS快取(DNS(Domain Name Server,域名伺服器)是進行域名(domain name)和與之相對應的IP地址 (IP address)轉換的伺服器。DNS中儲存了一張域名(domain name)和與之相對應的IP地址 (IP address)的表,以解析訊息的域名。 域名是Internet上某一臺計算機或計算機組的名稱,用於在資料傳輸時標識計算機的電子方位(有時也指地理位置)。域名是由一串用點分隔的名字組成的,通常包含組織名,而且始終包括兩到三個字母的字尾,以指明組織的型別或該域所在的國家或地區。 DNS是計算機域名系統 (Domain Name System 或Domain Name Service) 的縮寫,它是由域名解析器和域名伺服器組成的。域名伺服器是指儲存有該網路中所有主機的域名和對應IP地址,並具有將域名轉換為IP地址功能的伺服器。其中域名必須對應一個IP地址,一個IP地址可以有多個域名,而IP地址不一定有域名。域名系統採用類似目錄樹的等級結構。域名伺服器通常為客戶機/伺服器模式中的伺服器方,它主要有兩種形式:主伺服器和轉發伺服器。將域名對映為IP地址的過程就稱為“域名解析”。)本地的DNS快取是在我們訪問過一個網站之後,例如京東,那麼本地會儲存一個京東域名和京東伺服器IP地址的對映關係,將來再次請求的時候,就不用再到外部的DNS上查詢這個域名對應的IP地址了,提高了效率,如果是第一次請求,請看上面的DNS查詢過程

步驟

  本地查詢順序

    瀏覽器快取: 瀏覽器會按照一定的頻率快取DNS記錄。chrome://net-internals/#dns 檢視chormeDNS快取。

    作業系統快取: 如果瀏覽器快取中找不到需要的DNS記錄,那就去作業系統中找。cmd命令ipconfig /displaydns 用於檢視作業系統dns快取。

    路由快取: 路由器也有DNS快取。 找本機的hosts檔案 Windows host檔案路徑: C:\WINDOWS\system32\drivers\etc\hosts (由於直接修改之後不能儲存,可以copy一份到桌面,修改之後,在替換掉原路徑下的檔案就可以了),hosts檔案以靜態對映的方式提供IP地址與主機名的對照表。

    ISP(網路服務提供商):如果還是沒有,那麼就去檢查ISP有沒有吧~,每一個ISP(網路服務提供商),或一個大學,甚至是一個大學裡的系都會有一個自己的本地域名伺服器,他會在url第一次訪問時快取該域名的指向。下次再訪問時,他會從快取裡把這個url曾經指向的IP調出來。

  

    遞迴查詢

      第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的IP地址

      第二步:上一步無法找到,去DNS本地伺服器(即域伺服器)查詢,其本質是去區域伺服器、伺服器快取中查詢

      第三步:本地DNS伺服器查不到就向ISP(ISP是網際網路服務提供商(Internet Service Provider))的簡稱,ISP有專門的DNS伺服器應對DNS查詢請求。再找不到就根據‘根提示檔案’向負責頂級域‘.com’的DNS伺服器查詢

      第四步:'根DNS伺服器'根據查詢域名中的'xyz.com',再向xyz.com的區域伺服器查詢

      第五步:www.xyz.abc.com的DNS伺服器直接解析該域名,將查詢到的ip再原路返回給請求查詢的主機

    迭代查詢:

      第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的IP地址

      第二步:上一步無法找到,在DNS本地伺服器(即域伺服器)查詢所有本層次的區域伺服器

      第三步:本地DNS伺服器查不到就向ISP是網際網路服務提供商(Internet Service Provider)的簡稱,ISP有專門的DNS伺服器應對DNS查詢請求。再找不到就查詢上一層次的所有區域伺服器,以此類推直至根域名DNS伺服器‘.’

      第四步:到達根域名伺服器後又向下查詢,直至查到結果為止。

    迭代查詢與遞迴查詢結合

    遞迴查詢需要經過逐層查詢才能獲得查詢結果,當查詢具有許多層次的DNS結構時效率很低,所以一般採用兩者相結合的查詢方式。

      第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的ip地址

      第二步:上一步無法找到,去DNS本地伺服器(即域伺服器)查詢,其本質是去區域伺服器、伺服器快取中查詢

      第三步:本地DNS伺服器查不到就向ISP是網際網路服務提供商(Internet Service Provider)的簡稱,ISP有專門的DNS伺服器應對DNS查詢請求。再找不到就根據‘根提示檔案’向負責頂級域‘.com’的根DNS伺服器查詢

      第四步:根DNS伺服器直接將其區域DNS伺服器的ip地址返回給本地伺服器,而不用再向xyz.com的區域伺服器查詢。

      第五步:(京東有自己DNS伺服器)本地DNS伺服器將結果返回給請求的主機

五.交換機、路由器和閘道器(含DHCP)

然後通過路由A轉發將訊息發出去,訊息中包含目標路由D的閘道器的IP地址,閘道器分很多的型別:傳輸閘道器、應用閘道器、協議閘道器等等,我們經常說的閘道器是指的傳輸閘道器,簡稱閘道器,我們主要就看它,閘道器在路由器這裡,當請求資訊傳送到了閘道器這裡的時候,我們先到路由表裡面看看有沒有這個請求的目標地址的IP,如果沒有說明不是我們自己網路內部的IP地址,需要路由轉發出去,到internet網路中,但是網路這麼大,怎麼辦,那麼通過閘道器計算出一個最佳的傳輸路徑去找到對應的目標閘道器地址,在路由轉發的過程中(當請求被路由B接收到了之後,路由B開啟之後發現不是找自己的,就會把請求資訊包繼續轉發)然後傳輸到這個閘道器地址的路由器上,目標閘道器路由器上設定了一些IP地址+埠和各個伺服器上的對映關係,即便是所有的交換機都接收到了這個請求,但是還是能夠找到對應的伺服器。在通過交換機發送到對應的伺服器上

那麼閘道器到底是什麼呢?閘道器實質上是一個網路通向其他網路的IP地址。比如有網路A和網路B,網路A的IP地址範圍為 “192.168.1.1~192. 168.1.254”,子網掩碼為255.255.255.0;網路B的IP地址範圍為“192.168.2.1~192.168.2.254”,子網掩碼為255.255.255.0。在沒有路由器的情況下,兩個網路之間是不能進行TCP/IP通訊的,即使是兩個網路連線在同一臺交換機(或集線器)上, TCP/IP協議也會根據子網掩碼(255.255.255.0)判定兩個網路中的主機處在不同的網路裡。而要實現這兩個網路之間的通訊,則必須通過閘道器。如果網路A中的主機發現資料包的目的主機不在本地網路中,就把資料包轉發給它自己的閘道器,再由閘道器轉發給網路B的閘道器,網路B的閘道器再轉發給網路B的某個主機。網路B向網路A轉發資料包的過程也是如此。

假設你的名字叫小不點,你住在一個大院子裡,你的鄰居有很多小夥伴,在門口傳達室還有個看大門的李大爺,李大爺就是你的閘道器。當你想跟院子裡的某個小夥伴玩,只要你在院子裡大喊一聲他的名字,他聽到了就會迴應你,並且跑出來跟你玩。

  但是你不被允許走出大門,你想與外界發生的一切聯絡,都必須由門口的李大爺(閘道器)用電話幫助你聯絡。假如你想找你的同學小明聊天,小明家住在很遠的另外一個院子裡,他家的院子裡也有一個看門的王大爺(小明的閘道器)。但是你不知道小明家的電話號碼,不過你的班主任老師有一份你們班全體同學的名單和電話號碼對照表,你的老師就是你的DNS伺服器。於是你在家裡撥通了門口李大爺的電話,有了下面的對話:

  小不點:李大爺,我想找班主任查一下小明的電話號碼行嗎?

  李大爺:好,你等著。(接著李大爺給你的班主任掛了一個電話,問清楚了小明的電話)問到了,他家的號碼是211.99.99.99

  小不點:太好了!李大爺,我想找小明,你再幫我聯絡一下小明吧。

  李大爺:沒問題。(接著李大爺向電話局發出了請求接通小明家電話的請求,最後一關當然是被轉接到了小明家那個院子的王大爺那裡,然後王大爺把電話給轉到小明家)

  就這樣你和小明取得了聯絡。

 

京東的路由器幹了什麼呢:京東的路由器拿到請求訊息之後,需要發給內網(區域網)中的對應的伺服器上,這裡在路由器上做了一個對映關係也就是說只要訪問我這個192.168.3.0:443埠的請求,都去找京東的伺服器A,就類似這麼個對映關係,具體情況看到時候路由器交換機怎麼設定

路由器對外部網路的通訊都是通過外網介面(wan口)去轉發出去的,也就是不管你是內網中的哪個電腦,你的請求都要通過路由的外網介面傳送出去,別人對你的請求都是通過外網介面接收進來的,至於路由器上對內的lan口是怎麼分配IP地址給內網的,要看路由器怎麼設定劃分vlan也就是子網(內部區域網),每個lan口的IP地址可以是靜態的,也可以是動態分配的(DHCP協議),而且可以劃分網段,例如:我的1號lan口對接的網段是192.168.1.0-192.168.1.255,那麼所有這個網段的電腦的資訊進出都走這個lan口到路由器上,對於連線路由器的交換機來講,主要的作用就是搭橋用的,搭橋的意思就是讓連線該交換機的所有電腦都能夠連線起來,只要是同一個網段的互相都可以進行通訊,當然這個也要看交換機怎麼配置,具體路由器和交換機的配置在這裡就不說了,內容很多,大家大概明白它的流程和意思就可以了,喜歡網路的同學,大家可以去深入研究一下,關於公司的網路配置,我會給大家來一個簡單的流程給大家參考一下。 DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個區域網的網路協議,使用UDP協議工作, 主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址,給使用者或者內部網路管理員作為對所有計算機作中央管理的手段 交換機又分二層交換機和三層交換機,二層交換機主要就是個搭橋的作用,三層交換機還兼有路由的作用,一般現在的交換機都有DHCP功能,也就是說交換機下面連線的這些電腦的子網IP或者說是區域網IP也可以由交換機來動態生成和分配,路由器和交換機所生成的子網IP都是自己在路由器和交換機上設定的,和路由器上的外網IP沒有關係,具體的劃分又分為24位的16位的等等,舉例:24位的就是10.11.1.0-10.11.1.255這256個IP地址,0表示後面的8bit是00000000,255表示後面的8bit是11111111

細說二層交換機、三層交換機、四層交換機。百科:

第二層交換機,是根據第二層資料鏈路層的MAC地址和通過站表選擇路由來完成端到端的資料交換的。
二層交換機具體的工作流程如下:
(1) 當交換機從某個埠收到一個數據包,它先讀取幀頭中的源MAC地址,並將MAC地址與源埠做對應儲存在站表中。
(2) 再去讀取幀頭中的目的MAC地址,並在地址表中查詢相應的埠;
(3) 如表中有與這目的MAC地址對應的埠,把資料包直接複製到這埠上;
(4) 如表中找不到相應的埠則把資料包廣播到同一VLAN下的所有埠,當目的機器對源機器迴應時,交換機又可以學習一目的MAC地址與哪個埠對應,在下次傳送資料時就不再需要對所有埠進行廣播了。
不斷的迴圈這個過程,對於全網的MAC地址資訊都可以學習到,二層交換機就是這樣建立和維護它自己的地址表。
    因為站表的建立與維護是由交換機自動完成,而路由器又是屬於第三層裝置,其定址過程是根據IP地址定址和通過路由表與路由協議產生的。所以,第二層交換機的最大好處是資料傳輸速度快,因為它只須識別資料幀中的MAC地址,而直接根據MAC地址產生選擇轉發埠的演算法又十分簡單,非常便於採用ASIC專用晶片實現。顯然,第二層交換機的解決方案,實際上是一個“處處交換”的廉價方案,雖然該方案也能劃分子網、限制廣播、建立VLAN,但它的控制能力較小、靈活性不夠,也無法控制各資訊點的流量,缺乏方便實用的路由功能。

第三層交換機,是直接根據第三層網路層IP地址來完成端到端的資料交換的。
三層交換機的工作原理:
    使用IP的裝置A------------------------三層交換機------------------------使用IP的裝置B
    比如A要給B傳送資料,已知目的IP,那麼A就用子網掩碼取得網路地址,判斷目的IP是否與自己在同一網段。
    如果在同一網段,但不知道轉發資料所需的MAC地址,A就傳送一個ARP請求,B返回其MAC地址,A用此MAC封裝資料包併發送給交換機,交換機起用二層交換模組,查詢MAC地址表,將資料包轉發到相應的埠。
    如果目的IP地址顯示不是同一網段的,那麼A要實現和B的通訊,在流快取條目中沒有對應MAC地址條目,就將第一個正常資料包傳送向一個預設閘道器,這個預設閘道器一般在作業系統中已經設好,對應第三層路由模組,所以可見對於不是同一子網的資料,最先在MAC表中放的是預設閘道器的MAC地址;然後就由三層模組接收到此資料包,查詢路由表以確定到達B的路由,將構造一個新的幀頭,其中以預設閘道器的MAC地址為源MAC地址,以主機B的MAC地址為目的MAC地址。通過一定的識別觸發機制,確立主機A與B的MAC地址及轉發埠的對應關係,並記錄進流快取條目表,以後的A到B的資料,就直接交由二層交換模組完成。這就通常所說的一次路由多次轉發。
表面上看,第三層交換機是第二層交換器與路由器的合二而一,然而這種結合並非簡單的物理結合,而是各取所長的邏輯結合。其重要表現是,當某一資訊源的第一個資料流進行第三層交換後,其中的路由系統將會產生一個MAC地址與IP地址的對映表,並將該表儲存起來,當同一資訊源的後續資料流再次進入交換環境時,交換機將根據第一次產生並儲存的地址對映表,直接從第二層由源地址傳輸到目的地址,不再經過第三路由系統處理,從而消除了路由選擇時造成的網路延遲,提高了資料包的轉發效率,解決了網間傳輸資訊時路由產生的速率瓶頸。所以說,第三層交換機既可完成第二層交換機的埠交換功能,又可完成部分路由器的路由功能。即第三層交換機的交換機方案,實際上是一個能夠支援多層次動態整合的解決方案,雖然這種多層次動態整合功能在某些程度上也能由傳統路由器和第二層交換機搭載完成,但這種搭載方案與採用三層交換機相比,不僅需要更多的裝置配置、佔用更大的空間、設計更多的佈線和花費更高的成本,而且資料傳輸效能也要差得多,因為在海量資料傳輸中,搭載方案中的路由器無法克服路由傳輸速率瓶頸。

第四層交換機
    顯然,第二層交換機和第三層交換機都是基於埠地址的端到端的交換過程,雖然這種基於MAC地址和IP地址的交換機技術,能夠極大地提高各節點之間的資料傳輸率,但卻無法根據埠主機的應用需求來自主確定或動態限制埠的交換過程和資料流量,即缺乏第四層智慧應用交換需求。第四層交換機不僅可以完成端到端交換,還能根據埠主機的應用特點,確定或限制它的交換流量。簡單地說,第四層交換機是基於傳輸層資料包的交換過程的,是一類基於TCP/IP協議應用層的使用者應用交換需求的新型區域網交換機。第四層交換機支援TCP/UDP第四層以下的所有協議,可識別至少80個位元組的資料包包頭長度,可根據TCP/UDP埠號來區分資料包的應用型別,從而實現應用層的訪問控制和服務質量保證。所以,與其說第四層交換機是硬體網路裝置,還不如說它是軟體網路管理系統。也就是說,第四層交換機是一類以軟體技術為主,以硬體技術為輔的網路管理交換裝置。
最後值得指出的是,某些人在不同程度上還存在一些模糊概念,認為所謂第四層交換機實際上就是在第三層交換機上增加了具有通過辨別第四層協議埠的能力,僅在第三層交換機上增加了一些增值軟體罷了,因而並非工作在傳輸層,而是仍然在第三層上進行交換操作,只不過是對第三層交換更加敏感而已,從根本上否定第四層交換的關鍵技術與作用。我們知道,資料包的第二層IEEE802.1P欄位或第三層IPToS欄位可以用於區分資料包本身的優先順序,我們說第四層交換機基於第四層資料包交換,這是說它可以根據第四層TCP/UDP埠號來分析資料包應用型別,即第四層交換機不僅完全具備第三層交換機的所有交換功能和效能,還能支援第三層交換機不可能擁有的網路流量和服務質量控制的智慧型功能。
重要技術
    如上所述,第二層交換裝置是依賴於MAC地址和802.1Q協議的VLAN標籤資訊來完成鏈路層交換過程的,第三層交換/路由裝置則是將IP地址資訊用於網路路徑選擇來完成交換過程的,第四層交換裝置則是用傳輸層資料包的包頭資訊來幫助資訊交換和傳輸處理的。也就是說,第四層交換機的交換資訊所描述的具體內容,實質上是一個包含在每個IP包中的所有協議或程序,如用於Web傳輸的HTTP,用於檔案傳輸的FTP,用於終端通訊的Telnet,用於安全通訊的SSL等協議。這樣,在一個IP網路裡,普遍使用的第四層交換協議,其實就是TCP(用於基於連線的對話,例如FTP)和UDP(用基於無連線的通訊,例如SNMP或SMTP)這兩個協議。
    由於TCP和UDP資料包的包頭不僅包括了“埠號”這個域,它還指明瞭正在傳輸的資料包是什麼型別的網路資料,使用這種與特定應用有關的資訊(埠號),就可以完成大量與網路資料及資訊傳輸和交換相關的質量服務,其中最值得說明的是如下五項重要應用技術,因為它們是第四層交換機普遍採用的主要技術。

 

 廣域網和路由器:(廣域網是個相對的概念,是相對於區域網來說的)

 

 為了避免廣播風暴(以前通過mac地址就可以通訊,mac地址通訊是廣播的形式,如果世界上所有的電腦都通過這種形式通訊,就會形成廣播風暴,堵塞網路不說,全部資訊都變得不安全了,因為所有人都可以收到你發的資訊):分了多個區域網,然後通過路由器連起來了。